Reimplement compose and add tiling windows

This commit is contained in:
2026-03-12 22:03:30 +00:00
parent 79766d279d
commit 6ceff63b71
126 changed files with 5111 additions and 10796 deletions

View File

@@ -0,0 +1,157 @@
# 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.