Skip to content

refactor: extract shared StenoCore, add iOS app (monorepo)#5

Merged
m5d215 merged 3 commits into
mainfrom
feat/monorepo-core
Jul 5, 2026
Merged

refactor: extract shared StenoCore, add iOS app (monorepo)#5
m5d215 merged 3 commits into
mainfrom
feat/monorepo-core

Conversation

@m5d215

@m5d215 m5d215 commented Jul 5, 2026

Copy link
Copy Markdown
Owner

Restructure the repo into a monorepo so the macOS and a new iOS app can share one engine, ahead of bringing speaker-turn segmentation to iOS.

Layout

dir what
mac/ existing macOS app, moved wholesale
mobile/ new iOS app (ambient on-device transcription → local jsonl → POST to a configurable endpoint over Tailscale)
Core/ StenoCore, a shared SwiftPM library

What moved into Core

Only the platform-agnostic engine — Transcriber (SpeechAnalyzer), SpeakerSegmenter (Sortformer/FluidAudio), BufferConverter — made public with an injectable log sink so the macOS app keeps routing engine logs to steno.log. Capture, writer, UI, and transport stay per-app to avoid #if os spaghetti. Sharing SpeakerSegmenter is the main driver: it's the piece we don't want two drifting copies of once iOS gets diarization too.

Both apps depend on Core via a local package (SwiftPM path dep for mac, xcodegen local package for mobile).

iOS app

Mic (AVAudioEngine) → SpeechAnalyzer (ja_JP) → local jsonl (SSOT, append-only) → cursor-based shipper that POSTs each record with at-least-once delivery and a persisted cursor. Capture and network are decoupled, so an unreachable endpoint never drops data and drains on recovery. Background audio mode for continuous capture; ATS scoped to *.ts.net. Includes a zero-dep reference /ingest receiver under mobile/example-server/.

Verification

  • mac/ swift build succeeds (links Core + FluidAudio)
  • mobile/ simulator build succeeds
  • CI updated to build both

DEVELOPMENT_TEAM is blanked in the tracked project.yml; set it locally for device signing.

🤖 Generated with Claude Code

m5d215 and others added 3 commits July 5, 2026 21:00
Restructure into mac/ (existing macOS app), mobile/ (new iOS app), and Core/
(StenoCore, a shared SwiftPM library). Core holds the platform-agnostic engine
— Transcriber (SpeechAnalyzer), SpeakerSegmenter (Sortformer/FluidAudio), and
BufferConverter — made public with an injectable log sink so the macOS app
keeps routing engine logs to steno.log. Capture, writer, UI, and transport stay
per-app to avoid #if os spaghetti.

Both apps depend on Core via a local package (SwiftPM path dep for mac,
xcodegen local package for mobile). Verified: mac `swift build` and mobile
simulator build both succeed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
CI now builds mac (swift build, covering Core) and mobile (xcodegen + simulator
build) separately. DEVELOPMENT_TEAM is blanked in the tracked project.yml so a
personal, account-linked team id doesn't live in a public repo; set it locally
for device signing.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Retitle to steno (iOS), reference the shared StenoCore (../Core) and macOS app
(../mac) instead of framing mobile as a separate sibling repo, and fix the
LICENSE link to point at the repo-root license (../LICENSE).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@m5d215
m5d215 merged commit c6357b4 into main Jul 5, 2026
2 checks passed
@m5d215
m5d215 deleted the feat/monorepo-core branch July 5, 2026 12:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant