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 +1 -0
- package/package.json +1 -1
- package/src/hooks.js +6 -0
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.
|
|
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;
|