Remove AGENTS.md from repository
This commit is contained in:
108
AGENTS.md
108
AGENTS.md
@@ -1,108 +0,0 @@
|
|||||||
# AGENTS.md
|
|
||||||
|
|
||||||
This repository is the native macOS SwiftUI port of BearWave, originally a
|
|
||||||
Linux/KDE internet radio app.
|
|
||||||
|
|
||||||
Do not treat it as a Qt compatibility port. The current repo is a native macOS
|
|
||||||
desktop app focused on internet radio.
|
|
||||||
|
|
||||||
## What This Repo Is
|
|
||||||
|
|
||||||
- SwiftPM macOS app targeting `macOS 26`
|
|
||||||
- SwiftUI desktop UI
|
|
||||||
- `AVPlayer`-based playback for radio streams
|
|
||||||
- Radio Browser as the station source
|
|
||||||
- Local persistence for favorites, recents, manual stations, station folders, and resume state
|
|
||||||
|
|
||||||
## Architecture Overview
|
|
||||||
|
|
||||||
- `Sources/BearWaveApp/BearWaveApp.swift`
|
|
||||||
App scene entrypoint, window sizing, commands, menu bar extra, settings scene
|
|
||||||
- `Sources/BearWaveCore/App/AppModel.swift`
|
|
||||||
Top-level app coordinator; owns `StationLibrary`, `PlaybackController`, and artwork services
|
|
||||||
- `Sources/BearWaveCore/Stores/StationLibrary.swift`
|
|
||||||
Source of truth for station pages, search results, favorites, recents, manual entries, and station folders
|
|
||||||
- `Sources/BearWaveCore/Stores/PersistenceStore.swift`
|
|
||||||
JSON-based persistence for radio state
|
|
||||||
- `Sources/BearWaveCore/Services/RadioBrowserClient.swift`
|
|
||||||
Radio Browser API wrapper plus local search normalization and ranking
|
|
||||||
- `Sources/BearWaveCore/Services/PlaybackController.swift`
|
|
||||||
Shared `AVPlayer` wrapper with explicit playback states, retries, stream metadata via `AVPlayerItemMetadataOutput`, and Now Playing updates
|
|
||||||
- `Sources/BearWaveCore/Services/StationArtworkLoader.swift`
|
|
||||||
Favicon and artwork fetch with disk cache
|
|
||||||
- `Sources/BearWaveCore/Services/NowPlayingArtworkResolver.swift`
|
|
||||||
Artwork resolution for current playback state
|
|
||||||
- `Sources/BearWaveCore/Views/`
|
|
||||||
Sidebar, station list, station detail, player bar, settings, menu bar, mini player
|
|
||||||
|
|
||||||
## Current Product Behavior
|
|
||||||
|
|
||||||
- Dedicated pages:
|
|
||||||
`Top`, `Germany`, `Netherlands`, `World`, `Search Results`, `Favorites`, `Recent`, `Manual`
|
|
||||||
- Search is global and stays independent from the current browse page
|
|
||||||
- Search ranking intentionally filters naive mid-word matches such as `slam` matching `Islamabad`
|
|
||||||
- Playback UI exposes explicit states: connecting, buffering, playing, paused, stopped, failed
|
|
||||||
- A right-side detail panel shows station metadata and current stream metadata when available
|
|
||||||
- Player controls remain radio-focused: play/pause, stop, volume
|
|
||||||
- Mini Player is available via `Cmd+M`
|
|
||||||
- Mini Player target size is `555x110`
|
|
||||||
- Station folders support create, rename, delete, and station assignment
|
|
||||||
- Menu bar extra remains active while playback continues
|
|
||||||
|
|
||||||
## Build and Run Conventions
|
|
||||||
|
|
||||||
Use these commands unless there is a strong reason not to:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
swift build --disable-index-store
|
|
||||||
CLANG_MODULE_CACHE_PATH=/private/tmp/bearwave-clang-cache swift run --disable-index-store BearWaveChecks
|
|
||||||
./script/build_and_run.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
The run script:
|
|
||||||
|
|
||||||
- kills the previous process
|
|
||||||
- builds via SwiftPM
|
|
||||||
- stages a local `.app` into `dist/`
|
|
||||||
- copies SwiftPM resource bundles manually
|
|
||||||
- copies `.lproj` localization directories into the bundle
|
|
||||||
- launches the app bundle
|
|
||||||
|
|
||||||
Do not remove the manual resource-bundle copy step from `script/build_and_run.sh`
|
|
||||||
unless the bundle pipeline is replaced deliberately.
|
|
||||||
|
|
||||||
## Important Constraints
|
|
||||||
|
|
||||||
- Prefer the internal SSD workspace:
|
|
||||||
`/Users/sebastian/Development/radioappmac`
|
|
||||||
- Do not assume the mounted share copy is current.
|
|
||||||
- The staged app bundle uses ATS exceptions so that `http://` radio streams can play.
|
|
||||||
- Debug signing and sandbox behavior are intentionally pragmatic and not yet release-ready.
|
|
||||||
- `PlaybackController` uses `AVPlayerItemMetadataOutput` for stream metadata.
|
|
||||||
- `MediaPlayer` is imported with `@preconcurrency`.
|
|
||||||
- `MPMediaItemArtwork` is built from a `CGImage`-backed request handler.
|
|
||||||
- Main window launch width is dynamic: `1255` on smaller displays, `1600` on wide displays.
|
|
||||||
- Mini Player target size is `555x110`.
|
|
||||||
|
|
||||||
## What To Preserve
|
|
||||||
|
|
||||||
- Keep the project native-first for macOS.
|
|
||||||
- Keep search global and ranking strict.
|
|
||||||
- Keep explicit playback states; do not regress to a plain boolean model.
|
|
||||||
- Keep the current split between `BearWaveApp` and `BearWaveCore`.
|
|
||||||
- Keep the build/run script compatible with local staged app execution.
|
|
||||||
|
|
||||||
## Good Next Steps
|
|
||||||
|
|
||||||
- Improve release packaging, signing, and notarization
|
|
||||||
- Add more playback diagnostics per stream failure mode
|
|
||||||
- Expand tests around playback-state transitions and search ranking
|
|
||||||
- Add cache eviction for memory and disk caches
|
|
||||||
- Keep folders clearly positioned as lightweight saved-station organization
|
|
||||||
|
|
||||||
## Bad Changes
|
|
||||||
|
|
||||||
- Reintroducing page-coupled search behavior
|
|
||||||
- Replacing explicit playback states with only `isPlaying`
|
|
||||||
- Moving back toward Qt/KDE abstractions in this repo
|
|
||||||
- Assuming every stream will provide usable metadata or artwork
|
|
||||||
Reference in New Issue
Block a user