# GIA Workspace Interface Plan ## Goals - Replace page-by-page navigation with a workspace shell that can open any major surface as a widget. - Keep transport quirks behind shared adapters so UI code deals in people, sessions, messages, PS, MS, PSC, and MSC. - Make widget loading, live updates, and history browsing shared primitives instead of page-specific implementations. ## Interface Map ### 1. Workspace Shell - One grid workspace shell owns widget layout, persistence, focus, close, restore, and launch. - A launcher surface replaces the current nav-as-destination approach. - Every major area can render as: - page - widget - embeddable fragment ### 2. Core Widgets - Compose widget: - simple thread viewer - simple outbound composer - reply target - attachment strip - live MS/PS chips - Contact launcher widget: - search - recent contacts - open thread widget - create/match contact - Message history browser: - long-range session browsing - filters by service, person, session, direction, attachments, date - open selected history in a compose/thread widget - Person intelligence widget: - current PS summary - current MS summary - PSC/MSC highlights - links into evidence and history - Session evidence widget: - timeline of events - annotated durations - state transitions - Insight workbench widget: - hypothesis cards - mitigation planning - evidence drill-down - Help/reference widget: - PS/MS glossary - PSC/MSC explanations - research basis ### 3. Behavioral Surfaces - PS lane: - unavailable -> available -> typing -> typing_stopped - duration chips and transition stats - MS lane: - sent -> delivered -> read -> responded - duration chips and transition stats - PSC surface: - correlation patterns within PS sequences - return-window priority, abandoned typing, repeated hesitation - MSC surface: - correlation patterns within MS sequences - reply delay shifts, asymmetry, reciprocity, timing escalation - Combined inference surface: - PSC + MSC combinations with evidence, confidence, and caveats ## Shared Technical Primitives ### Widget Contract Every widget-capable surface should declare: - title - icon - source URL - refresh URL - websocket topic or polling policy - default grid dimensions - optional launch context ### Shared Client Modules - `workspace-shell` - open widget from URL - replace/update widget - compact grid - persist layout - `widget-loader` - HTMX/bootstrap helper for hidden widget loads - one primitive reused by page bootstraps and launch actions - `live-channel` - shared websocket subscription lifecycle - reconnect and backoff - channel-to-widget routing - `history-browser` - filters, pagination, range selection, transcript fetch - `compose-client` - message list render/update - outbound send - attachment handling - reply targeting ### Shared Server Patterns - Each surface provides `page`, `widget`, and `fragment` modes from one context builder where possible. - Widget launch URLs are generated centrally, not manually concatenated in templates. - Behavioral computations read shared PS/MS event abstractions, not transport names. - Live updates publish transport-neutral event payloads. ## Implementation Phases ### Phase 1. Workspace Foundation - Extract workspace shell logic from inline page scripts into shared assets. - Standardize the hidden widget loader include. - Slim launcher widgets so they do not dump entire datasets into one partial. - Add a reusable message history browser endpoint and widget shell. ### Phase 2. Compose Rewrite - Keep compose to: - thread - send - reply - attachment preview - live state indicators - Move history/export/receipt/debug extras out into dedicated widgets. - Keep page mode and widget mode on the same client code. ### Phase 3. Behavioral Workspace - Add PS/MS event browser widgets. - Add PSC/MSC evidence widgets with drill-down into raw events. - Add person/session dashboards that combine evidence instead of hiding it behind static pages. ### Phase 4. Live Update Layer - Replace page-local polling with a shared websocket abstraction. - Route updates by widget topic: - compose thread - message state - presence state - analysis refresh - Keep HTMX for request/response actions and server-rendered fragments. ## Immediate Debt Kill List - Large launcher partials that dump whole universes of contacts or objects. - Inline workspace shell JS in templates. - Page-specific widget bootstraps that repeat the same hidden HTMX loader block. - Mixed transport-specific UI conditionals in templates. - Heavy detail views that combine history, inference, controls, and diagnostics in one render.