vibeaudio 0.14.0 → 0.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -32,6 +32,7 @@ It is built as **calm technology**, in the sense of Mark Weiser and John Seely B
32
32
  **How it behaves:**
33
33
 
34
34
  * 🧮 **Pure synthesis, zero MP3s.** Every note, chord and pad is generated in code — no audio assets, no npm dependencies, no `node-gyp`.
35
+ * 🍃 **Light on battery.** Each loop is rendered once and cached. While music plays, your OS's own audio player does the work. With hooks, nothing of VibeAudio's keeps running between turns.
35
36
  * 🎼 **A different arrangement per project.** Your working directory seeds the progression, bass line and melody, so each repo has its own sound and keeps it.
36
37
  * 📈 **Escalating layers.** Tier 1 (0–15s) gentle intro → Tier 2 (15–45s) main groove → Tier 3 (45s+) deep focus. You can hear how deep into the task the agent is.
37
38
  * 🔁 **A phrase, not a loop.** Each piece is three bars that rotate through your project's own progressions, so a long turn moves through a ~21-second phrase instead of replaying one 7-second bar for half an hour.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vibeaudio",
3
- "version": "0.14.0",
3
+ "version": "0.14.1",
4
4
  "description": "Procedural focus music while your AI coding tools (Claude Code, Codex, Cursor, Grok, Gemini, Copilot) think — a different arrangement per project.",
5
5
  "bin": {
6
6
  "vibeaudio": "bin/vibeaudio.js",
package/src/hooks.js CHANGED
@@ -889,6 +889,12 @@ function runDaemon(genre, volume, { reactive = false, volumeSource = null } = {}
889
889
  setTimeout(shutdown, MAX_DAEMON_MS);
890
890
 
891
891
  setInterval(() => {
892
+ // The pid file names the one daemon that owns the speakers. Two prompts
893
+ // at once can each find none running and spawn one; the last to write the
894
+ // file wins, and the other must not play over it (#42).
895
+ // ponytail: up to one poll of doubled audio; claim the pid file with an
896
+ // exclusive create before spawning if that ever matters.
897
+ if (readPid() !== process.pid) return shutdown();
892
898
  // A volume saved while this plays reaches it now, not at the next prompt.
893
899
  if (volumeSource) player.setVolume(volumeSource());
894
900
  if (sweep()) return;