Skip to content

SedaUI: ship an optional SwiftUI settings and push-to-talk panel #8

Description

@pnegahdar

Outcome

A macOS app can add a polished Seda settings surface and a working push-to-talk reference panel without rebuilding model management UI.

Public API

import SedaKit
import SedaUI

@State private var shortcut = SedaShortcut.shift

Settings {
    SedaSettingsView(runtime: seda, shortcut: $shortcut)
}

For a menu-bar or overlay experience:

SedaPushToTalkPanel(
    runtime: seda,
    shortcut: shortcut,
    onRevision: editor.replaceTranscript
)

Surface

  • model profile, language, installed state, size, install progress, retry, and remove
  • microphone permission and selected input device
  • configurable hold shortcut, including the requested Shift-to-talk behavior
  • compact recording state, live revision text, elapsed time, cancel, and commit
  • actionable offline, permission, storage, and model errors
  • accessible keyboard navigation, VoiceOver labels, reduced motion, light/dark mode

Architecture

  • Keep SedaUI an optional target; SedaKit must have no SwiftUI dependency.
  • Use a @MainActor observable controller over the SedaKit actor.
  • The panel consumes revision events; it does not duplicate recognition logic.
  • Provide shortcut and insertion protocols so host apps can use their own global-hotkey and editor integrations.
  • Include a signed-off reference menu-bar app in the repository, but keep app policy out of the core library.

Acceptance criteria

  • settings scene and embeddable view both work
  • press, hold, partial revisions, release, final transcript path is integration-tested
  • model install and removal path is integration-tested
  • permission denied and model failure states have snapshot/UI tests
  • sample app demonstrates editor insertion without Seda requiring Accessibility permission
  • API docs show a complete app entry point, not disconnected snippets
  • GitHub Actions builds and tests SedaKit, SedaUI, and the sample app on macOS

Dependency

Blocked by #7 for the in-process Swift runtime and microphone session API.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions