Skip to content

murmur 0.3.0

Choose a tag to compare

@wine-fall wine-fall released this 17 Sep 07:52
· 45 commits to main since this release
6febd44

Sixty-two commits since v0.2.1 — the taste sources the radio can finally
read (NetEase, Spotify, Bilibili and QQ Music, each signed into by scanning
a code or by lending Chrome's own profile), /sources as a list to tick with
every result landing in the card, real-world topics the host can bring up
unprompted, a memory that recalls and forgets on a stated contract, a coda
that knows the song happened and a prefetch that runs two picks deep, a
first run that is one step table you can walk back through, and MIT on the
licence line.

One thing to know on the way in: the first launch folds an older profile
back to faded, so a returning listener's taste starts over.

What's Changed

  • fix(engine): music decodes at the device's real sample rate, not a fixed 48 kHz [spec 03-02] by @wine-fall in #194
  • chore(test): a real ~/.murmur on the developer's machine never decides a test by @wine-fall in #195
  • feat(music): the way into a track, not a label on it [spec 03-02] by @wine-fall in #199
  • feat(director): a coda — the beat that knows the song happened [spec 04] by @wine-fall in #200
  • feat(memory): recall & forgetting — memory v1.5 [spec 05-01] by @wine-fall in #196
  • fix(prompts): the clock is bearings, not a line [spec 04] by @wine-fall in #201
  • docs(roadmap): the login the catalogue asks for, and an order to read the lines by by @wine-fall in #204
  • feat(talk): real-world topics — an off-loop pool the host can mention [spec 13] by @wine-fall in #203
  • docs(roadmap): line 2 is delivered, so it leaves the roadmap by @wine-fall in #205
  • docs(license): MIT — the model's terms were never murmur's to carry by @wine-fall in #206
  • feat(rwt): real-world topics ride memory — profile taste, ledger footprint, no policy file [spec 13] by @wine-fall in #209
  • test(director): the boot stretch hands the keyboard over by @wine-fall in #208
  • chore(src): one folder per part, and the prompts one module per Brain task by @wine-fall in #211
  • chore(skills): let Codex choose the review model by @wine-fall in #215
  • chore(skills): pin Astra for Codex review by @wine-fall in #216
  • feat(taste): listening-taste — five sources, the digest, named search, typed auth, invitations [spec 14] by @wine-fall in #214
  • chore(skills): prefer the latest Codex reviewer by @wine-fall in #217
  • docs(readme): the demo plays at the top, with sound by @wine-fall in #207
  • fix(memory): fold at startup, keep bootstrapped identity, forget the topic keys [spec 05-01] by @wine-fall in #218
  • feat(sources): NetEase over the plaintext API, Spotify without a developer app [spec 14] by @wine-fall in #220
  • chore(status): three debts the card was keeping to itself by @wine-fall in #168
  • feat(memory): the fold's output contract — cited facts, code-owned dates, refused folds [spec 05-01] by @wine-fall in #219
  • docs(spec14): the taste sources as they shipped — plaintext NetEase, a bundled Spotify id by @wine-fall in #222
  • feat(sources): one browser, opened and read — Chrome, and failures that say which [spec 14] by @wine-fall in #223
  • docs(blog): no dead air, the latency budget of an always-on voice agent by @wine-fall in #226
  • docs(gtm): the storefront says what ships — no local-first, an OG card, npm keywords by @wine-fall in #227
  • fix(first-run): /back on the seed questions, and the slice-B consent before the persona wait [spec 06] by @wine-fall in #229
  • fix(sources): the menu card carries its own status and names — nothing left under the overlay [spec 14] by @wine-fall in #232
  • fix(setup): the guide sets the language it speaks, and the look-ahead follows [spec 03-03] by @wine-fall in #233
  • feat(first-run): the taste sources are offered as one consent card, and a yes runs /sources there [spec 14] by @wine-fall in #234
  • fix(first-run): /quit reaches the latch as it arrives, and the persona call can be cut or time out [spec 06] by @wine-fall in #235
  • fix(first-run): the first run is one step table, and /back walks all of it [spec 06] by @wine-fall in #236
  • refactor(music): the pick task drops the borrowed play data [spec 03-01] by @wine-fall in #230
  • fix(sources): a profile Chrome has never opened is told apart from an absent Chrome [spec 14] by @wine-fall in #237
  • feat(sources): the /sources menu is a list to tick, and every result lands in the card [spec 14] by @wine-fall in #238
  • fix(cards): the way back is named on the card, and every /sources result says what happened [spec 06] by @wine-fall in #239
  • fix(sources): a Chrome profile that does not exist yet is a sign-in, not an obstacle [spec 14] by @wine-fall in #240
  • fix(sources): murmur names the Chrome profile it reads, and pins it to the mount [spec 14] by @wine-fall in #241
  • feat(sources): NetEase and Bilibili sign in by scanning a code [spec 14] by @wine-fall in #242
  • fix(cards): the way back catches the eye, and a consent's two keys read as peers [spec 10] by @wine-fall in #243
  • fix(sources): a typed /quit leaves while a code is still on screen [spec 14] by @wine-fall in #244
  • fix(first-run): only a host that left skips the consent cards [spec 06] by @wine-fall in #245
  • feat(tui): the mouse wheel reads back through the program log [spec 10] by @wine-fall in #246
  • fix(cards): a sign-in code is a card to read, not a line in the log [spec 10] by @wine-fall in #247
  • feat(sources): a sign-in card picks the road and the Chrome profile [spec 14] by @wine-fall in #248
  • fix(cards): the engine numbers the question, not the client [spec 10] by @wine-fall in #249
  • fix(music): YouTube plays anonymously, Bilibili searches anonymously [spec 14] by @wine-fall in #250
  • fix(music): a resolved stream carries the headers its CDN demands [spec 03-01] by @wine-fall in #251
  • feat(music): a curated list of channels is one more place to look for a song [spec 14] by @wine-fall in #254
  • fix(taste): the digest reads what they watched, not what they collected [spec 14] by @wine-fall in #252
  • feat(sources): QQ Music joins the taste sources, read-only [spec 14] by @wine-fall in #253
  • feat(sources): QQ Music signs in by WeChat scan [spec 14] by @wine-fall in #257
  • feat(sources): QQ Music searches and plays [spec 14] by @wine-fall in #258
  • chore(channels): add JLRS-LeoFM to the curated Bilibili channels [spec 14 §2.9] by @wine-fall in #259
  • feat(channels): a chapter is a song [spec 14] by @wine-fall in #260
  • fix(sources): end the /sources hang — a yt-dlp ceiling and an Esc that lands [spec 14] by @wine-fall in #262
  • fix(sources): the sign-in card carries the results so far [spec 14] by @wine-fall in #261
  • fix(sources): the list card tells state from action [spec 10] by @wine-fall in #263
  • fix(director): prime the next pick at air time, and name a due switch [spec 04] by @wine-fall in #265
  • fix(tui): the spotlight card is fitted to the screen before it is drawn [spec 10] by @wine-fall in #267
  • feat(director): the music prefetch runs two picks deep [spec 04] by @wine-fall in #266
  • chore(deps): the repo is pinned to pnpm 12.4.2 by @wine-fall in #274
  • chore(release): 0.3.0 by @wine-fall in #275

Full Changelog: v0.2.1...v0.3.0