summaryrefslogtreecommitdiff
path: root/frontend/src/components/BottomBar.tsx
diff options
context:
space:
mode:
authorsoryu-co <bot@soryu.co>2026-04-24 16:45:51 +0000
committersoryu-co <bot@soryu.co>2026-04-24 16:45:51 +0000
commit105730ceaa292b1e3589c23d5aad8f35ccf04b8e (patch)
tree6cf0c05e911cf62e3cd102377a4e24876b2cb064 /frontend/src/components/BottomBar.tsx
parent8f8e3b54cbecf51ce6a87e9e028caaad428879be (diff)
downloadsoryu-105730ceaa292b1e3589c23d5aad8f35ccf04b8e.tar.gz
soryu-105730ceaa292b1e3589c23d5aad8f35ccf04b8e.zip
Makima iOS M3-M8 — Home, Tasks, WebSocket, notifications, polish
Extends the M2 auth scaffold with the rest of the v1 surface area. All milestones from docs/ios-v1-plan.md land here. M3 — Composite Home dashboard - HomeStore (@Observable): parallel fetch of contracts, daemons, directives, tasks, latest listen session. Each card degrades independently on error. - HomeView: NavigationStack routing to Contracts, Tasks, Daemons, Directives, Listen, and per-item detail views. Pull-to-refresh. - HomeCards: SectionCard chrome + Contracts/Daemons/Directives/Listen/ RecentTasks cards with StatusDot, CountPill, relative-time helpers. M4 — Contracts + Tasks - ContractsListView: filter (active/completed/archived/all), sorted by updatedAt. - ContractDetailView: phase card + per-contract tasks. - TasksListView: status filter pills. - TaskDetailView: metadata card, completion-gate card (rendered only when <COMPLETION_GATE> present in output), output card that merges polled body with live WS events. Polls every 8s as a fallback when WS is offline. M5 — WebSocket + markdown/code rendering - TaskWebSocket: URLSessionWebSocketTask wrapper for /api/v1/mesh/tasks/subscribe. Wire messages match mesh_ws.rs (subscribeAll / subscribe / subscribeOutput / taskUpdated / taskOutput / error). Exponential-backoff reconnect (1s -> 30s cap), status callback feeds the masthead WS pill. - CompletionGate: parses <COMPLETION_GATE>…</COMPLETION_GATE> into {ready, reason, progress, blockers}. CompletionGateView renders it as a status card with dashed accent border (ok/warn tint). - MarkdownBlocks: hand-rolled split-on-fences renderer. Prose blocks via AttributedString(markdown:), code blocks via a monospaced, horizontally- scrollable CodeBlockView with optional language chip. - TaskOutputRenderer: merges polled body + streamed LIVE// events with per-kind colour (assistant / tool_use / tool_result / error). M6 — Directives, Daemons, Listen (read-only) - DirectivesListView: status dot (pending -> warn), goal preview. Notes that answering questions is web-only in v1. - DaemonsListView: online/total, heartbeat relative time, task concurrency. - ListenHistoryView: session preview list; tolerates 404 if the endpoint isn't deployed on the user's instance. Notes that live listen is web-only in v1. - ScreenShell: shared chrome (back chevron, title, WS pill, grid bg) for all detail screens. M7 — Notifications + deep links - NotificationCenterBridge: requests .alert/.badge/.sound auth on first launch; fires local notifications on task-done/failed/blocked and directive-question events with a makima:// deepLink in userInfo. - DeepLink enum: parses makima://task/<uuid>, makima://contract/<uuid>, makima://directive/<uuid>. Wired in MakimaApp via .onOpenURL; AppState holds a pendingDeepLink for consumers. - URL scheme registered in project.yml's CFBundleURLTypes. M8 — Polish - RELEASING.md: pre-flight checklist, xcodebuild archive/export flow, ExportOptions.plist template, App Store submission checklist. - README: full 'what's implemented' matrix, architecture overview, deep-link reference, privacy statement. M2 bug fixes rolled in - ListEnvelope<Item>: generic decoder for the daemons/tasks/contracts/ directives/orders wrapper endpoints ({items:[...], total:N}). Falls back to a bare array for resilience. - AuthStore: now uses ListEnvelope<Daemon> for the probe (was bare array). - rotateKey: accepts both apiKey and api_key casings in the response. - Logo: adds missing import UIKit. Tests added - CompletionGateTests: parse ready=true, blockers list, nil on missing. - MarkdownBlocksTests: prose/code splitting, pure prose. - DeepLinkTests: task/directive parsing, wrong-scheme rejection, unknown host rejection. - ListEnvelopeTests: daemons wrapper, tasks wrapper, bare-array fallback. - APIClientTests: updated stub to return the envelope shape. Not wired (deferred to v1.1 per plan) - Supabase OAuth (Authorization: Bearer path) - APNs push via services/push-proxy/ - Answer directive questions in-app - Live Listen with mic + transcription - Speak (TTS) - Files editor, mesh merge UI, worktree diff viewer, daemon reauth flow File count: 34 new/modified, ~2670 LOC.
Diffstat (limited to 'frontend/src/components/BottomBar.tsx')
0 files changed, 0 insertions, 0 deletions