diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..6eb28f1 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,92 @@ +# Changelog + +## 1.0.0 (2026-07-02) + + +### Features + +* add electron-log with daily rotation and wire closeDb on quit ([fd7b4fb](https://github.com/StreamlineRadio/Streamline/commit/fd7b4fbda121e7b39e32ca0db25286472035195c)) +* add MessageChannelMain audio port and PCM receiver ([36ac148](https://github.com/StreamlineRadio/Streamline/commit/36ac148d5d910137638637fdded95fb769e84b8c)) +* add project skeleton and configurations ([51dbb5b](https://github.com/StreamlineRadio/Streamline/commit/51dbb5b942f077bc13f0a3c54023c17ed036234b)) +* **app:** wire up status bar, hotkeys, first-run, and default F1-F5/Space bindings ([2a5a2d8](https://github.com/StreamlineRadio/Streamline/commit/2a5a2d85ffd6080f777b5d57edb499162a28591d)) +* **audio:** implement AudioWorklet tap processor with ping-pong ring buffer ([bf95be1](https://github.com/StreamlineRadio/Streamline/commit/bf95be13399defb914189b8964c52f019460d667)) +* **build:** add postinstall script and externals for better-sqlite3 ([f129233](https://github.com/StreamlineRadio/Streamline/commit/f1292331f784a100ff58670806bea13eaa498a8b)) +* **db:** add Drizzle schema, migrations, and DB connection ([8056291](https://github.com/StreamlineRadio/Streamline/commit/8056291418ac89180123dca5da1a3b0fa7b0a2f5)) +* **deck,queue:** add deck settings panel and queue folder-picker button ([76d3d52](https://github.com/StreamlineRadio/Streamline/commit/76d3d522773c08533c048d7afa0114ed59c57dd5)) +* **deck,queue:** cover art, queue columns, stable ETA, autoplay, file metadata ([067e179](https://github.com/StreamlineRadio/Streamline/commit/067e17939ca411da3a8d35a3393b238cca67602d)) +* **deck:** add audio playback, waveform display, dB meter, and fade-out ([dd81352](https://github.com/StreamlineRadio/Streamline/commit/dd813525a18e00cfbef2169b4195ab7a7be637d3)) +* **deck:** deck & queue module redesign ([cc285bb](https://github.com/StreamlineRadio/Streamline/commit/cc285bb4017885ce484102b6c0029fd63c197e4c)) +* **deck:** fade 3s, unload on end, fix waveforms, song drag-drop ([e8aaaa7](https://github.com/StreamlineRadio/Streamline/commit/e8aaaa75c0af5e7af59cdafb95f6f787299b1077)) +* **encoders:** add encoder management UI with start/stop and status tracking ([7f30776](https://github.com/StreamlineRadio/Streamline/commit/7f30776804b7fdff76bdde014a09b27f5615132f)) +* **encoders:** add FFmpeg encoder process manager with backoff and IPC handlers ([6a6e9b6](https://github.com/StreamlineRadio/Streamline/commit/6a6e9b6c9b14470f029e46e3d4a7e50fa26b5ec6)) +* **encoders:** redesign module + extract reusable component library ([3ad8218](https://github.com/StreamlineRadio/Streamline/commit/3ad821825f1e33c89dd4e858d87688089832cddf)) +* **first-run:** add default layout builder and first-run setup ([e0ce0a1](https://github.com/StreamlineRadio/Streamline/commit/e0ce0a1e2c013bdd3624f3680bc18b0098258def)) +* **hotkeys:** add per-instance hotkey store and keyboard binder ([7914d6b](https://github.com/StreamlineRadio/Streamline/commit/7914d6b2110499feabc88fe1198cc91d187b3e8d)) +* **ipc:** add global handler cleanup to prevent duplicate registrations ([ee903cd](https://github.com/StreamlineRadio/Streamline/commit/ee903cdfc50432f6005a6132805da4fdb1a853bf)) +* **library:** add worker_threads scanner with music-metadata and IPC handlers ([ad86ae2](https://github.com/StreamlineRadio/Streamline/commit/ad86ae20ce407c62fe54c85b26ace214d20950e6)) +* **local-output:** add output device selector and volume control ([3e528e9](https://github.com/StreamlineRadio/Streamline/commit/3e528e9c9622a73bbeff184974d33f23013fcdcf)) +* **main:** confirm quit while on air ([#79](https://github.com/StreamlineRadio/Streamline/issues/79)) ([4465f66](https://github.com/StreamlineRadio/Streamline/commit/4465f66fa0d3e820dbd374edaf32810191f82396)) +* **metadata:** add deck metadata selection with z-index tiebreaker ([519e8e2](https://github.com/StreamlineRadio/Streamline/commit/519e8e2f21e3ddb0b89758dda59a1cee77b52e97)) +* **microphone:** add mic capture with push-to-talk, lock, and gain ramp ([75b1944](https://github.com/StreamlineRadio/Streamline/commit/75b19441e21ce1cb4f382071e4786e62a510d31a)) +* **microphone:** redesigned microphone module, added DbMeter ([aa6ca8b](https://github.com/StreamlineRadio/Streamline/commit/aa6ca8bd8872157eee1e0901d402f12a55376863)) +* **mixer:** add master bus with soft-clip and tap worklet connection ([08698fd](https://github.com/StreamlineRadio/Streamline/commit/08698fd0a34f458c09e4b93d8d6bafacc2164dd1)) +* **modules:** add instance store and debounced layout persistence ([12a786b](https://github.com/StreamlineRadio/Streamline/commit/12a786b3457666f67f5f1816efcef23ab955b15a)) +* **modules:** add module manifest, registry, event bus, and context factory ([82838b6](https://github.com/StreamlineRadio/Streamline/commit/82838b66afd6e988c4e766bf6ba0dd5822fac226)) +* nightly releases + channel-aware updater ([#21](https://github.com/StreamlineRadio/Streamline/issues/21)) ([b360912](https://github.com/StreamlineRadio/Streamline/commit/b360912ea8429b4670a784ae38edd1335de30481)) +* queue-driven deck autoplay ([#19](https://github.com/StreamlineRadio/Streamline/issues/19)) ([3fed40d](https://github.com/StreamlineRadio/Streamline/commit/3fed40d4d117e9734210fc452bfc2cacd1a07399)) +* **queue:** add OS file drag-drop and + Song button ([7918a4f](https://github.com/StreamlineRadio/Streamline/commit/7918a4f07e525bbba68721c71bfb3e7699c023d0)) +* **queue:** add queue module with drag-to-reorder and pure rotation algorithm ([21364b6](https://github.com/StreamlineRadio/Streamline/commit/21364b677fb710d5ab78bee9bfc463834f59b275)) +* **queue:** multi-queue preload cache, preload-N setting, manual preload ([#76](https://github.com/StreamlineRadio/Streamline/issues/76)) ([160bd22](https://github.com/StreamlineRadio/Streamline/commit/160bd22ba74fcbb15d16d9dac3245d0ccc861e44)) +* **renderer:** add AudioContext singleton and MessagePort receiver ([c944e98](https://github.com/StreamlineRadio/Streamline/commit/c944e986f30281ac579cd71e9fa74ede4fe34243)) +* **shared:** add module contract, IPC API, PCM message, and IPC channel types ([4af1929](https://github.com/StreamlineRadio/Streamline/commit/4af19293ad2cb01bd6f8a6ae07e98b8e56593c9a)) +* **shared:** add Song, EncoderConfig, Layout, Hotkey, and Library types ([8503720](https://github.com/StreamlineRadio/Streamline/commit/850372015bb9cb0738b014f3953b98c5cd4abec4)) +* **ui:** add interact.js window manager with drag, resize, z-index, and title rename ([d4f33bb](https://github.com/StreamlineRadio/Streamline/commit/d4f33bbbee69a5af9855d779c1d4f7c911a1dfdd)) +* **ui:** add status bar, on-air indicator, and toast notification system ([e6be92c](https://github.com/StreamlineRadio/Streamline/commit/e6be92c604fabfd6f837e7d0c51d9b87665afd23)) +* **ui:** disable text selection globally, re-enable for form fields ([22c7e59](https://github.com/StreamlineRadio/Streamline/commit/22c7e59cf7f6cc2d9f3486efd6519c3bdf2c5ec9)) +* **ui:** revamp toasts - semantic colors, success type, icons, animations & countdown ([#44](https://github.com/StreamlineRadio/Streamline/issues/44)) ([#78](https://github.com/StreamlineRadio/Streamline/issues/78)) ([2966695](https://github.com/StreamlineRadio/Streamline/commit/2966695788e253a893f6285ee92d097a77d0067f)) +* wire full IPC control plane with typed handlers for all subsystems ([366e167](https://github.com/StreamlineRadio/Streamline/commit/366e167c9a669105608aa5ba123bf714a0d034b3)) + + +### Bug Fixes + +* add hash validation to LIBRARY_LOAD_WAVEFORM handler ([39a41f3](https://github.com/StreamlineRadio/Streamline/commit/39a41f33cd6a3f8ca5c5ce16138fea9ed6555440)) +* **audio-port:** recreate MessageChannel on each renderer reload ([7f5f9c9](https://github.com/StreamlineRadio/Streamline/commit/7f5f9c97b9d6266a7d986961f83f9edb16205cb6)) +* **audio:** bypass contextBridge for MessagePort transfer via DOM event ([7fd3e65](https://github.com/StreamlineRadio/Streamline/commit/7fd3e65f4318f67400a76971cecca6fb1fea92eb)) +* **audio:** use sampleRate global and add PcmMessage sync comment in tap-processor ([b22e12c](https://github.com/StreamlineRadio/Streamline/commit/b22e12cf2b672545b7625f10c4ea8269dc6534d1)) +* **build:** load audio worklet via Vite ?url import instead of hardcoded path ([f86607b](https://github.com/StreamlineRadio/Streamline/commit/f86607bf0ea0a23b6fe826859ab726be8ee3f2c0)) +* **build:** replace ESM-only vite-plugin-static-copy with inline plugin ([101c6da](https://github.com/StreamlineRadio/Streamline/commit/101c6da9f1c351a93b84ec2331b62376412630a6)) +* change dropoutCount to let and increment on missing encoder consumer ([68b3720](https://github.com/StreamlineRadio/Streamline/commit/68b37205284fb027765a8d9eb6487fe2159acb7e)) +* **crossfader:** cleanup rAF, wire setVolume, fix duration units and direction ([7327378](https://github.com/StreamlineRadio/Streamline/commit/732737803e494ff452696a85914df0ac76e492d5)) +* **db:** add closeDb, fix nullable booleans, add cascade delete, copy migrations via Vite ([9a74c65](https://github.com/StreamlineRadio/Streamline/commit/9a74c659db52ef1cb3da768c5666ce74638e04aa)) +* **DbMeter:** changed DbMeter color to be static with red on top only if the sound is really loud ([bc23dd5](https://github.com/StreamlineRadio/Streamline/commit/bc23dd51324362e81c9f55832bacefacf3fab0f4)) +* **deck-audio:** prevent stale onended from unloading after seek ([6ebe70d](https://github.com/StreamlineRadio/Streamline/commit/6ebe70d02d87037022561c1bd27c4a4763a207c5)) +* **deck:** fix buffer detach, stale stop, fade reset, frame-rate decay, stereo peaks ([79befb9](https://github.com/StreamlineRadio/Streamline/commit/79befb95e4531dd9f3f501a070176a27f83f8ccf)) +* **deck:** set song on file drop, disable controls when empty, show logo ([712942f](https://github.com/StreamlineRadio/Streamline/commit/712942f725a09fcf62e265ab0fa2b573fba16ef9)) +* **electron:** copy hoisted native modules and force ABI rebuild when packaging ([#23](https://github.com/StreamlineRadio/Streamline/issues/23)) ([7cb1947](https://github.com/StreamlineRadio/Streamline/commit/7cb1947e4a47ca3ecf79952f27d5ed35d69e777b)) +* **encoders:** reject Hz-typed input in the sample-rate combo ([7382bc3](https://github.com/StreamlineRadio/Streamline/commit/7382bc3b53811bfe840b1a00f6892a88aac36aa0)) +* **encoders:** strip Svelte reactive Proxy before IPC transfer ([8f7cb0a](https://github.com/StreamlineRadio/Streamline/commit/8f7cb0a5c24b50f6aabe17fffb2c3a53ce56988a)) +* **hotkeys:** skip hotkey processing when focus is in an editable element ([2611ffe](https://github.com/StreamlineRadio/Streamline/commit/2611ffe9eb4f7722d8cfe144926edb88c3c2a043)) +* **layout:** load full layout with instances on startup and snapshot before IPC save ([399629c](https://github.com/StreamlineRadio/Streamline/commit/399629cfa1ec5cf4df11a145489d3fcf0be61d04)) +* **library:** mark songs missing in db when file is deleted ([644a549](https://github.com/StreamlineRadio/Streamline/commit/644a549718f296f6dc0b402316eb2fcb9a18b583)) +* **local-output:** targeted disconnect, safe play(), changeDevice error handling ([8b72872](https://github.com/StreamlineRadio/Streamline/commit/8b72872f255f5401ecf4e3384ddf631932676ec4)) +* **local-output:** try AudioContext.setSinkId before audioEl fallback ([83a616a](https://github.com/StreamlineRadio/Streamline/commit/83a616ad00f6b57cf1873607ee05c5432168dc84)) +* merge encoder, queue, deck, and local-output fixes ([96b30a6](https://github.com/StreamlineRadio/Streamline/commit/96b30a67552bf02e100c2c639ef1d3bda1679af1)) +* **microphone:** fix race condition, unhandled rejections, and gain ramp ([08c6b72](https://github.com/StreamlineRadio/Streamline/commit/08c6b721052234fbcb5d37c17508f7a2dc4c6ea2)) +* **microphone:** make hear-yourself toggle actually control self-monitoring ([#32](https://github.com/StreamlineRadio/Streamline/issues/32)) ([5644094](https://github.com/StreamlineRadio/Streamline/commit/56440945af65a3dcc3d9b0f88f620f16766a2ce6)) +* **microphone:** stop hold-to-talk ping ring from stealing clicks ([#80](https://github.com/StreamlineRadio/Streamline/issues/80)) ([b1e1510](https://github.com/StreamlineRadio/Streamline/commit/b1e1510eceb4de04016126555da5a925f536e7a5)) +* **mic:** route self-monitor through monitor bus ([#67](https://github.com/StreamlineRadio/Streamline/issues/67)) ([#77](https://github.com/StreamlineRadio/Streamline/issues/77)) ([10d8bee](https://github.com/StreamlineRadio/Streamline/commit/10d8bee97bc3ba51e88e3fc1e65e4cb01c3f8bf7)) +* **mixer:** remove unused softClipEnabled variable and getter ([2dd5961](https://github.com/StreamlineRadio/Streamline/commit/2dd59615bc21a2d726e862ebd3e598c4977c047c)) +* **modules:** remove dead off() from event bus, fix non-null assertion, add test reset ([0ab05a8](https://github.com/StreamlineRadio/Streamline/commit/0ab05a8228f231de65e6f891e4f345bad288add9)) +* **modules:** use SvelteMap for reactive instances, fix effect timer cleanup ([86b52de](https://github.com/StreamlineRadio/Streamline/commit/86b52dec3a1d5e43ad8c1189489dfcd615444349)) +* preload next track to eliminate playout gaps ([#69](https://github.com/StreamlineRadio/Streamline/issues/69)) ([2293099](https://github.com/StreamlineRadio/Streamline/commit/2293099657c90a33124df4df02921178ab17d600)) +* **preload:** read transferred MessagePort from event.ports, not callback arg ([1849d68](https://github.com/StreamlineRadio/Streamline/commit/1849d683f0811c54294ada8b44fd6eebc99f8971)) +* prune log files to keep last 14 on startup ([5b2a5a0](https://github.com/StreamlineRadio/Streamline/commit/5b2a5a04db0153480bc1fcdbc5b18f0f2d668c12)) +* **queue:** clearItems function, immutable sort, reset dragIndex on outer drop ([e8cd1db](https://github.com/StreamlineRadio/Streamline/commit/e8cd1dba8a72ff00753936bc11a3af02039d9ac8)) +* remove spurious space in package:linux targets list ([e7ec5cc](https://github.com/StreamlineRadio/Streamline/commit/e7ec5cc32024191ab82abf73fed9739637a1f76d)) +* **renderer:** resolve Svelte reactivity and a11y compiler warnings ([e31f8f0](https://github.com/StreamlineRadio/Streamline/commit/e31f8f018da158f6adf030ebb66a43543180a080)) +* **renderer:** type sendPcm payload as PcmMessage and close previous port before reassign ([92ed77c](https://github.com/StreamlineRadio/Streamline/commit/92ed77c832d97824b6390cb13abef36c6ee65fda)) +* **shared:** remove duplicate system channels, add hotkey channels, improve exhaustiveness test ([40aa3d4](https://github.com/StreamlineRadio/Streamline/commit/40aa3d47e5a0e0e886a1e98b515e7015833deaf8)) +* **ui:** prevent window resizing from modal interactions ([aa5192e](https://github.com/StreamlineRadio/Streamline/commit/aa5192ec31bfeccbb83c5529d44c690c1dbdd2fc)) +* **ui:** remove redundant Layout cast in WindowManager ([4d47a17](https://github.com/StreamlineRadio/Streamline/commit/4d47a17165e17c545fafc1b89108e2a2cd3d184f)) +* validate openExternal URLs, guard waveform hash, fix macOS quit behavior ([3a92008](https://github.com/StreamlineRadio/Streamline/commit/3a92008c75baf148180a0fa235e8ad7bd9c0a9dd)) +* **windows:** enforce min-width/min-height to prevent scrollbars ([4449f36](https://github.com/StreamlineRadio/Streamline/commit/4449f36ab0b4f1d05b3515680fc721f37d27dd77)) diff --git a/package.json b/package.json index 1cde77e..eb53f3b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "streamline", - "version": "0.0.1", + "version": "1.0.0", "private": true, "scripts": { "rebuild:native": "pnpm --filter streamline exec electron-rebuild -f -w better-sqlite3",