claude-code-sounds 1.6.0 → 1.7.0

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.
Files changed (321) hide show
  1. package/README.md +4 -2
  2. package/bin/cli.js +4 -8
  3. package/bin/lib.js +49 -14
  4. package/hooks/play-sound.sh +4 -0
  5. package/package.json +2 -1
  6. package/themes/aoe2/sounds/attack-enemy-now.mp3 +0 -0
  7. package/themes/aoe2/sounds/being-rushed.mp3 +0 -0
  8. package/themes/aoe2/sounds/confirm.mp3 +0 -0
  9. package/themes/aoe2/sounds/conversion-warning.mp3 +0 -0
  10. package/themes/aoe2/sounds/death.mp3 +0 -0
  11. package/themes/aoe2/sounds/dont-point-that-thing.mp3 +0 -0
  12. package/themes/aoe2/sounds/drum-roll.mp3 +0 -0
  13. package/themes/aoe2/sounds/enemy-sighted.mp3 +0 -0
  14. package/themes/aoe2/sounds/farm-exhausted.mp3 +0 -0
  15. package/themes/aoe2/sounds/horn.mp3 +0 -0
  16. package/themes/aoe2/sounds/i-need-a-monk.mp3 +0 -0
  17. package/themes/aoe2/sounds/it-is-good.mp3 +0 -0
  18. package/themes/aoe2/sounds/nice-town-ill-take-it.mp3 +0 -0
  19. package/themes/aoe2/sounds/roggan.mp3 +0 -0
  20. package/themes/aoe2/sounds/schwarzenegger.mp3 +0 -0
  21. package/themes/aoe2/sounds/smite-me.mp3 +0 -0
  22. package/themes/aoe2/sounds/stable.mp3 +0 -0
  23. package/themes/aoe2/sounds/start-the-game-already.mp3 +0 -0
  24. package/themes/aoe2/sounds/taunt-ahh.mp3 +0 -0
  25. package/themes/aoe2/sounds/taunt-all-hail.mp3 +0 -0
  26. package/themes/aoe2/sounds/taunt-back-to-age-1.mp3 +0 -0
  27. package/themes/aoe2/sounds/taunt-food-please.mp3 +0 -0
  28. package/themes/aoe2/sounds/taunt-gold-please.mp3 +0 -0
  29. package/themes/aoe2/sounds/taunt-herb-laugh.mp3 +0 -0
  30. package/themes/aoe2/sounds/taunt-no.mp3 +0 -0
  31. package/themes/aoe2/sounds/taunt-oooh.mp3 +0 -0
  32. package/themes/aoe2/sounds/taunt-quit-touchin-me.mp3 +0 -0
  33. package/themes/aoe2/sounds/taunt-stone-please.mp3 +0 -0
  34. package/themes/aoe2/sounds/taunt-wood-please.mp3 +0 -0
  35. package/themes/aoe2/sounds/taunt-yes.mp3 +0 -0
  36. package/themes/aoe2/sounds/unit-created.mp3 +0 -0
  37. package/themes/aoe2/sounds/viking-horn.mp3 +0 -0
  38. package/themes/aoe2/sounds/villager-killed.mp3 +0 -0
  39. package/themes/aoe2/sounds/villager-prrrroh.mp3 +0 -0
  40. package/themes/aoe2/sounds/villager-spawn.mp3 +0 -0
  41. package/themes/aoe2/sounds/villager-sssh-ho.mp3 +0 -0
  42. package/themes/aoe2/sounds/wololo-long.mp3 +0 -0
  43. package/themes/aoe2/sounds/wololo.mp3 +0 -0
  44. package/themes/aoe2/theme.json +2 -1
  45. package/themes/cnc/sounds/alarm.mp3 +0 -0
  46. package/themes/cnc/sounds/allies-acknowledged.mp3 +0 -0
  47. package/themes/cnc/sounds/allies-affirmative.mp3 +0 -0
  48. package/themes/cnc/sounds/allies-agreed.mp3 +0 -0
  49. package/themes/cnc/sounds/allies-at-once.mp3 +0 -0
  50. package/themes/cnc/sounds/allies-of-course.mp3 +0 -0
  51. package/themes/cnc/sounds/allies-ready-and-waiting.mp3 +0 -0
  52. package/themes/cnc/sounds/allies-reporting.mp3 +0 -0
  53. package/themes/cnc/sounds/allies-very-well.mp3 +0 -0
  54. package/themes/cnc/sounds/allies-waiting-orders.mp3 +0 -0
  55. package/themes/cnc/sounds/allies-yes-sir.mp3 +0 -0
  56. package/themes/cnc/sounds/base-under-attack.mp3 +0 -0
  57. package/themes/cnc/sounds/building-destroyed.mp3 +0 -0
  58. package/themes/cnc/sounds/building-placed.mp3 +0 -0
  59. package/themes/cnc/sounds/building.mp3 +0 -0
  60. package/themes/cnc/sounds/cha-ching.mp3 +0 -0
  61. package/themes/cnc/sounds/construction-complete.mp3 +0 -0
  62. package/themes/cnc/sounds/credit-in.mp3 +0 -0
  63. package/themes/cnc/sounds/explosion.mp3 +0 -0
  64. package/themes/cnc/sounds/gdi-incoming-transmission.mp3 +0 -0
  65. package/themes/cnc/sounds/gdi-on-hold.mp3 +0 -0
  66. package/themes/cnc/sounds/gdi-recycle.mp3 +0 -0
  67. package/themes/cnc/sounds/gdi-success.mp3 +0 -0
  68. package/themes/cnc/sounds/gdi-unable-to-comply.mp3 +0 -0
  69. package/themes/cnc/sounds/gdi-warning.mp3 +0 -0
  70. package/themes/cnc/sounds/got-a-present-for-ya.mp3 +0 -0
  71. package/themes/cnc/sounds/incoming-transmission.mp3 +0 -0
  72. package/themes/cnc/sounds/insufficient-funds.mp3 +0 -0
  73. package/themes/cnc/sounds/man-die.mp3 +0 -0
  74. package/themes/cnc/sounds/no-money.mp3 +0 -0
  75. package/themes/cnc/sounds/nod-incoming-transmission.mp3 +0 -0
  76. package/themes/cnc/sounds/nod-low-power.mp3 +0 -0
  77. package/themes/cnc/sounds/nod-on-hold.mp3 +0 -0
  78. package/themes/cnc/sounds/nod-unable-to-comply.mp3 +0 -0
  79. package/themes/cnc/sounds/nuke-launch.mp3 +0 -0
  80. package/themes/cnc/sounds/nuke-ready.mp3 +0 -0
  81. package/themes/cnc/sounds/power-down.mp3 +0 -0
  82. package/themes/cnc/sounds/power-up.mp3 +0 -0
  83. package/themes/cnc/sounds/radar-alert.mp3 +0 -0
  84. package/themes/cnc/sounds/radar-power-on.mp3 +0 -0
  85. package/themes/cnc/sounds/reinforcements-ready.mp3 +0 -0
  86. package/themes/cnc/sounds/repairing.mp3 +0 -0
  87. package/themes/cnc/sounds/selling.mp3 +0 -0
  88. package/themes/cnc/sounds/soviet-acknowledged.mp3 +0 -0
  89. package/themes/cnc/sounds/soviet-affirmative.mp3 +0 -0
  90. package/themes/cnc/sounds/soviet-at-once.mp3 +0 -0
  91. package/themes/cnc/sounds/soviet-comrade.mp3 +0 -0
  92. package/themes/cnc/sounds/soviet-reporting.mp3 +0 -0
  93. package/themes/cnc/sounds/soviet-yes-sir.mp3 +0 -0
  94. package/themes/cnc/sounds/spy-commander.mp3 +0 -0
  95. package/themes/cnc/sounds/spy-for-king-and-country.mp3 +0 -0
  96. package/themes/cnc/sounds/spy-indeed.mp3 +0 -0
  97. package/themes/cnc/sounds/spy-on-my-way.mp3 +0 -0
  98. package/themes/cnc/sounds/tanya-chew-on-this.mp3 +0 -0
  99. package/themes/cnc/sounds/tanya-death.mp3 +0 -0
  100. package/themes/cnc/sounds/tanya-im-there.mp3 +0 -0
  101. package/themes/cnc/sounds/tanya-kiss-it-bye-bye.mp3 +0 -0
  102. package/themes/cnc/sounds/tanya-laugh.mp3 +0 -0
  103. package/themes/cnc/sounds/tanya-lets-rock.mp3 +0 -0
  104. package/themes/cnc/sounds/tanya-shake-it-baby.mp3 +0 -0
  105. package/themes/cnc/sounds/tanya-thats-all-you-got.mp3 +0 -0
  106. package/themes/cnc/sounds/tanya-yeah.mp3 +0 -0
  107. package/themes/cnc/sounds/tanya-yes-sir.mp3 +0 -0
  108. package/themes/cnc/sounds/tesla-shot.mp3 +0 -0
  109. package/themes/cnc/sounds/ts-auth.mp3 +0 -0
  110. package/themes/cnc/sounds/ts-notify.mp3 +0 -0
  111. package/themes/cnc/sounds/ts-reminder.mp3 +0 -0
  112. package/themes/cnc/sounds/ts-startup.mp3 +0 -0
  113. package/themes/cnc/sounds/ts-system.mp3 +0 -0
  114. package/themes/cnc/sounds/unit-lost.mp3 +0 -0
  115. package/themes/cnc/sounds/unit-promoted.mp3 +0 -0
  116. package/themes/cnc/sounds/unit-ready.mp3 +0 -0
  117. package/themes/cnc/theme.json +32 -11
  118. package/themes/diablo2/sounds/amulet-drop.mp3 +0 -0
  119. package/themes/diablo2/sounds/andariel.mp3 +0 -0
  120. package/themes/diablo2/sounds/arrow-block.mp3 +0 -0
  121. package/themes/diablo2/sounds/barb-gift-for-you.mp3 +0 -0
  122. package/themes/diablo2/sounds/barb-leap.mp3 +0 -0
  123. package/themes/diablo2/sounds/barb-select.mp3 +0 -0
  124. package/themes/diablo2/sounds/barb-shout.mp3 +0 -0
  125. package/themes/diablo2/sounds/barb-soon-perhaps.mp3 +0 -0
  126. package/themes/diablo2/sounds/barb-time-to-die.mp3 +0 -0
  127. package/themes/diablo2/sounds/blade-block.mp3 +0 -0
  128. package/themes/diablo2/sounds/bloodraven.mp3 +0 -0
  129. package/themes/diablo2/sounds/bow-shot.mp3 +0 -0
  130. package/themes/diablo2/sounds/chain-armor.mp3 +0 -0
  131. package/themes/diablo2/sounds/charm-drop.mp3 +0 -0
  132. package/themes/diablo2/sounds/countess-bloodbath.mp3 +0 -0
  133. package/themes/diablo2/sounds/drink-potion.mp3 +0 -0
  134. package/themes/diablo2/sounds/gem-drop.mp3 +0 -0
  135. package/themes/diablo2/sounds/gold-drop.mp3 +0 -0
  136. package/themes/diablo2/sounds/gold-pickup.mp3 +0 -0
  137. package/themes/diablo2/sounds/helm-drop.mp3 +0 -0
  138. package/themes/diablo2/sounds/item-drop.mp3 +0 -0
  139. package/themes/diablo2/sounds/javelin.mp3 +0 -0
  140. package/themes/diablo2/sounds/key-drop.mp3 +0 -0
  141. package/themes/diablo2/sounds/level-up.mp3 +0 -0
  142. package/themes/diablo2/sounds/necro-help-me.mp3 +0 -0
  143. package/themes/diablo2/sounds/not-enough-mana.mp3 +0 -0
  144. package/themes/diablo2/sounds/not-even-death.mp3 +0 -0
  145. package/themes/diablo2/sounds/not-in-town.mp3 +0 -0
  146. package/themes/diablo2/sounds/poison-trap.mp3 +0 -0
  147. package/themes/diablo2/sounds/potion.mp3 +0 -0
  148. package/themes/diablo2/sounds/prime-evils-death.mp3 +0 -0
  149. package/themes/diablo2/sounds/prime-evils-laugh.mp3 +0 -0
  150. package/themes/diablo2/sounds/prime-evils-scream.mp3 +0 -0
  151. package/themes/diablo2/sounds/ring-drop.mp3 +0 -0
  152. package/themes/diablo2/sounds/scroll.mp3 +0 -0
  153. package/themes/diablo2/sounds/skull-drop.mp3 +0 -0
  154. package/themes/diablo2/sounds/sorceress-dead.mp3 +0 -0
  155. package/themes/diablo2/sounds/sorceress-monster.mp3 +0 -0
  156. package/themes/diablo2/sounds/sorceress-time-to-die.mp3 +0 -0
  157. package/themes/diablo2/sounds/stay-awhile-and-listen.mp3 +0 -0
  158. package/themes/diablo2/sounds/town-portal.mp3 +0 -0
  159. package/themes/diablo2/theme.json +2 -1
  160. package/themes/starcraft/sounds/additional-pylons.mp3 +0 -0
  161. package/themes/starcraft/sounds/arbiter-we-are-vigilant.mp3 +0 -0
  162. package/themes/starcraft/sounds/archon-obliterate.mp3 +0 -0
  163. package/themes/starcraft/sounds/archon-power-overwhelming.mp3 +0 -0
  164. package/themes/starcraft/sounds/archon-the-merging-is-complete.mp3 +0 -0
  165. package/themes/starcraft/sounds/base-under-attack.mp3 +0 -0
  166. package/themes/starcraft/sounds/battlecruiser-all-crews-reporting.mp3 +0 -0
  167. package/themes/starcraft/sounds/battlecruiser-engage.mp3 +0 -0
  168. package/themes/starcraft/sounds/battlecruiser-good-day-commander.mp3 +0 -0
  169. package/themes/starcraft/sounds/battlecruiser-make-it-happen.mp3 +0 -0
  170. package/themes/starcraft/sounds/battlecruiser-operational.mp3 +0 -0
  171. package/themes/starcraft/sounds/battlecruiser-receiving-transmission.mp3 +0 -0
  172. package/themes/starcraft/sounds/bug-guy-for-the-overmind.mp3 +0 -0
  173. package/themes/starcraft/sounds/bug-guy-gladly.mp3 +0 -0
  174. package/themes/starcraft/sounds/bug-guy-live-for-the-swarm.mp3 +0 -0
  175. package/themes/starcraft/sounds/bug-guy-prepare-to-die.mp3 +0 -0
  176. package/themes/starcraft/sounds/bug-guy-sacrifice-me.mp3 +0 -0
  177. package/themes/starcraft/sounds/carrier-has-arrived.mp3 +0 -0
  178. package/themes/starcraft/sounds/corsair-excellent.mp3 +0 -0
  179. package/themes/starcraft/sounds/corsair-it-is-a-good-day-to-die.mp3 +0 -0
  180. package/themes/starcraft/sounds/dragoon-commencing.mp3 +0 -0
  181. package/themes/starcraft/sounds/dragoon-i-have-returned.mp3 +0 -0
  182. package/themes/starcraft/sounds/dropship-can-i-take-your-order.mp3 +0 -0
  183. package/themes/starcraft/sounds/dropship-in-the-pipe-five-by-five.mp3 +0 -0
  184. package/themes/starcraft/sounds/duke-alright-then.mp3 +0 -0
  185. package/themes/starcraft/sounds/duran-how-can-i-be-of-service.mp3 +0 -0
  186. package/themes/starcraft/sounds/fenix-dragoon-nach-nagalas.mp3 +0 -0
  187. package/themes/starcraft/sounds/fenix-zealot-for-aiur.mp3 +0 -0
  188. package/themes/starcraft/sounds/fenix-zealot-i-hunger-for-battle.mp3 +0 -0
  189. package/themes/starcraft/sounds/firebat-wanna-turn-up-the-heat.mp3 +0 -0
  190. package/themes/starcraft/sounds/firebat-you-got-my-attention.mp3 +0 -0
  191. package/themes/starcraft/sounds/ghost-call-for-an-exterminator.mp3 +0 -0
  192. package/themes/starcraft/sounds/ghost-never-know-what-hit-em.mp3 +0 -0
  193. package/themes/starcraft/sounds/ghost-reporting.mp3 +0 -0
  194. package/themes/starcraft/sounds/insufficient-vespene-gas.mp3 +0 -0
  195. package/themes/starcraft/sounds/kerrigan-a-bold-move.mp3 +0 -0
  196. package/themes/starcraft/sounds/kerrigan-alright.mp3 +0 -0
  197. package/themes/starcraft/sounds/kerrigan-im-listening.mp3 +0 -0
  198. package/themes/starcraft/sounds/kerrigan-on-my-way.mp3 +0 -0
  199. package/themes/starcraft/sounds/kerrigan-what-now.mp3 +0 -0
  200. package/themes/starcraft/sounds/marine-ah-thats-the-stuff.mp3 +0 -0
  201. package/themes/starcraft/sounds/marine-go-go-go.mp3 +0 -0
  202. package/themes/starcraft/sounds/marine-jacked-up-and-good-to-go.mp3 +0 -0
  203. package/themes/starcraft/sounds/marine-lets-move.mp3 +0 -0
  204. package/themes/starcraft/sounds/marine-rock-and-roll.mp3 +0 -0
  205. package/themes/starcraft/sounds/marine-you-wanna-piece-of-me.mp3 +0 -0
  206. package/themes/starcraft/sounds/mutalisk.mp3 +0 -0
  207. package/themes/starcraft/sounds/not-enough-minerals.mp3 +0 -0
  208. package/themes/starcraft/sounds/nuclear-launch-detected.mp3 +0 -0
  209. package/themes/starcraft/sounds/protoss-electric.mp3 +0 -0
  210. package/themes/starcraft/sounds/protoss-fighting.mp3 +0 -0
  211. package/themes/starcraft/sounds/protoss-upgrade.mp3 +0 -0
  212. package/themes/starcraft/sounds/protoss-waiting.mp3 +0 -0
  213. package/themes/starcraft/sounds/ready-to-roll-out.mp3 +0 -0
  214. package/themes/starcraft/sounds/scv-affirmative.mp3 +0 -0
  215. package/themes/starcraft/sounds/scv-good-to-go-sir.mp3 +0 -0
  216. package/themes/starcraft/sounds/scv-i-read-you.mp3 +0 -0
  217. package/themes/starcraft/sounds/scv-orders-received.mp3 +0 -0
  218. package/themes/starcraft/sounds/scv-reportin-for-duty.mp3 +0 -0
  219. package/themes/starcraft/sounds/scv-roger-that.mp3 +0 -0
  220. package/themes/starcraft/sounds/starcraft-confirm.mp3 +0 -0
  221. package/themes/starcraft/sounds/templar-i-heed-thy-call.mp3 +0 -0
  222. package/themes/starcraft/sounds/templar-it-shall-be-done.mp3 +0 -0
  223. package/themes/starcraft/sounds/wraith-reporting-in.mp3 +0 -0
  224. package/themes/starcraft/sounds/wraith-standing-by.mp3 +0 -0
  225. package/themes/starcraft/sounds/zealot-i-long-for-combat.mp3 +0 -0
  226. package/themes/starcraft/sounds/zealot-my-life-for-aiur.mp3 +0 -0
  227. package/themes/starcraft/theme.json +26 -9
  228. package/themes/wh40k/sounds/abhor-the-daemon.mp3 +0 -0
  229. package/themes/wh40k/sounds/area-secured.mp3 +0 -0
  230. package/themes/wh40k/sounds/as-ordered.mp3 +0 -0
  231. package/themes/wh40k/sounds/as-you-command.mp3 +0 -0
  232. package/themes/wh40k/sounds/as-you-wish.mp3 +0 -0
  233. package/themes/wh40k/sounds/at-your-command.mp3 +0 -0
  234. package/themes/wh40k/sounds/awaiting-orders.mp3 +0 -0
  235. package/themes/wh40k/sounds/by-the-emperor-a-daemon.mp3 +0 -0
  236. package/themes/wh40k/sounds/chaos-death-1.mp3 +0 -0
  237. package/themes/wh40k/sounds/chaos-death-2.mp3 +0 -0
  238. package/themes/wh40k/sounds/chaos-sighted.mp3 +0 -0
  239. package/themes/wh40k/sounds/claim-it-in-the-name-of-the-emperor.mp3 +0 -0
  240. package/themes/wh40k/sounds/cleanse-purge-kill.mp3 +0 -0
  241. package/themes/wh40k/sounds/commencing-attack.mp3 +0 -0
  242. package/themes/wh40k/sounds/crush-them.mp3 +0 -0
  243. package/themes/wh40k/sounds/curse-the-monster.mp3 +0 -0
  244. package/themes/wh40k/sounds/damnation.mp3 +0 -0
  245. package/themes/wh40k/sounds/death-to-the-alien.mp3 +0 -0
  246. package/themes/wh40k/sounds/death-to-the-false-emperor.mp3 +0 -0
  247. package/themes/wh40k/sounds/defending-objective.mp3 +0 -0
  248. package/themes/wh40k/sounds/despair-for-your-end-is-near.mp3 +0 -0
  249. package/themes/wh40k/sounds/direct-us-to-the-enemy.mp3 +0 -0
  250. package/themes/wh40k/sounds/engaging-the-enemy.mp3 +0 -0
  251. package/themes/wh40k/sounds/ever-vigilant.mp3 +0 -0
  252. package/themes/wh40k/sounds/faith-holds-us.mp3 +0 -0
  253. package/themes/wh40k/sounds/faith-is-our-shield.mp3 +0 -0
  254. package/themes/wh40k/sounds/fall-back-and-regroup.mp3 +0 -0
  255. package/themes/wh40k/sounds/fall-back.mp3 +0 -0
  256. package/themes/wh40k/sounds/fear-denies-faith.mp3 +0 -0
  257. package/themes/wh40k/sounds/fear-not-brothers.mp3 +0 -0
  258. package/themes/wh40k/sounds/fear-our-wrath.mp3 +0 -0
  259. package/themes/wh40k/sounds/for-the-dark-gods.mp3 +0 -0
  260. package/themes/wh40k/sounds/for-the-emperor-2.mp3 +0 -0
  261. package/themes/wh40k/sounds/for-the-emperor.mp3 +0 -0
  262. package/themes/wh40k/sounds/heresy-grows-from-idleness.mp3 +0 -0
  263. package/themes/wh40k/sounds/it-is-done.mp3 +0 -0
  264. package/themes/wh40k/sounds/maim-kill-burn.mp3 +0 -0
  265. package/themes/wh40k/sounds/marine-death.mp3 +0 -0
  266. package/themes/wh40k/sounds/marine-squad-deployed.mp3 +0 -0
  267. package/themes/wh40k/sounds/mission-accomplished.mp3 +0 -0
  268. package/themes/wh40k/sounds/nuffink-can-stand-in-my-way.mp3 +0 -0
  269. package/themes/wh40k/sounds/orks-iz-da-biggest.mp3 +0 -0
  270. package/themes/wh40k/sounds/orks-meant-fa-fightin.mp3 +0 -0
  271. package/themes/wh40k/sounds/purge-the-witches.mp3 +0 -0
  272. package/themes/wh40k/sounds/quit-hidin-like-a-grot.mp3 +0 -0
  273. package/themes/wh40k/sounds/ready-fa-stompin.mp3 +0 -0
  274. package/themes/wh40k/sounds/send-me-to-da-fight.mp3 +0 -0
  275. package/themes/wh40k/sounds/waaagh-boyz.mp3 +0 -0
  276. package/themes/wh40k/sounds/waaagh-warboss.mp3 +0 -0
  277. package/themes/wh40k/sounds/we-is-da-orks.mp3 +0 -0
  278. package/themes/wh40k/sounds/you-boyz-is-no-good.mp3 +0 -0
  279. package/themes/wh40k/theme.json +2 -1
  280. package/themes/zelda-botw/sounds/big-item-get.mp3 +0 -0
  281. package/themes/zelda-botw/sounds/blood-moon-omen.mp3 +0 -0
  282. package/themes/zelda-botw/sounds/botw-bird-chirping.mp3 +0 -0
  283. package/themes/zelda-botw/sounds/botw-construction.mp3 +0 -0
  284. package/themes/zelda-botw/sounds/botw-game-over.mp3 +0 -0
  285. package/themes/zelda-botw/sounds/botw-interact.mp3 +0 -0
  286. package/themes/zelda-botw/sounds/botw-opening.mp3 +0 -0
  287. package/themes/zelda-botw/sounds/botw-owl-hoot.mp3 +0 -0
  288. package/themes/zelda-botw/sounds/botw-raven-call.mp3 +0 -0
  289. package/themes/zelda-botw/sounds/chest-item-get.mp3 +0 -0
  290. package/themes/zelda-botw/sounds/chest-opening.mp3 +0 -0
  291. package/themes/zelda-botw/sounds/cooking-fail.mp3 +0 -0
  292. package/themes/zelda-botw/sounds/cooking-great-success.mp3 +0 -0
  293. package/themes/zelda-botw/sounds/cooking-normal.mp3 +0 -0
  294. package/themes/zelda-botw/sounds/dubious-food.mp3 +0 -0
  295. package/themes/zelda-botw/sounds/fairy-fountain.mp3 +0 -0
  296. package/themes/zelda-botw/sounds/finding-korok.mp3 +0 -0
  297. package/themes/zelda-botw/sounds/food-item-get.mp3 +0 -0
  298. package/themes/zelda-botw/sounds/guardian-alert.mp3 +0 -0
  299. package/themes/zelda-botw/sounds/heart-container-fanfare.mp3 +0 -0
  300. package/themes/zelda-botw/sounds/item-get-extended.mp3 +0 -0
  301. package/themes/zelda-botw/sounds/korok-appears.mp3 +0 -0
  302. package/themes/zelda-botw/sounds/korok-found.mp3 +0 -0
  303. package/themes/zelda-botw/sounds/korok-question.mp3 +0 -0
  304. package/themes/zelda-botw/sounds/korok-riddle-solved.mp3 +0 -0
  305. package/themes/zelda-botw/sounds/korok-yahaha.mp3 +0 -0
  306. package/themes/zelda-botw/sounds/legendary-item-get.mp3 +0 -0
  307. package/themes/zelda-botw/sounds/puzzle-solved.mp3 +0 -0
  308. package/themes/zelda-botw/sounds/sheikah-module-extreme.mp3 +0 -0
  309. package/themes/zelda-botw/sounds/sheikah-slate.mp3 +0 -0
  310. package/themes/zelda-botw/sounds/shrine-spirit-orb.mp3 +0 -0
  311. package/themes/zelda-botw/sounds/spirit-orb-fanfare.mp3 +0 -0
  312. package/themes/zelda-botw/sounds/zelda-blood-moon-rises.mp3 +0 -0
  313. package/themes/zelda-botw/sounds/zelda-do-it-link.mp3 +0 -0
  314. package/themes/zelda-botw/sounds/zelda-finish-him-link.mp3 +0 -0
  315. package/themes/zelda-botw/sounds/zelda-hurry-link.mp3 +0 -0
  316. package/themes/zelda-botw/sounds/zelda-item-catch.mp3 +0 -0
  317. package/themes/zelda-botw/sounds/zelda-its-working.mp3 +0 -0
  318. package/themes/zelda-botw/sounds/zelda-link-now.mp3 +0 -0
  319. package/themes/zelda-botw/sounds/zelda-may-you-be-victorious.mp3 +0 -0
  320. package/themes/zelda-botw/sounds/zelda-prepare-yourself-link.mp3 +0 -0
  321. package/themes/zelda-botw/theme.json +110 -0
package/README.md CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  Plays sound effects when sessions start, prompts are submitted, responses finish, errors occur, and more.
12
12
 
13
- Ships with 15 themes. Bring your own sounds or create new ones.
13
+ Ships with 17 themes. Bring your own sounds or create new ones.
14
14
 
15
15
  *"Something need doing?"*
16
16
 
@@ -48,6 +48,7 @@ The bash installer requires `jq` (`brew install jq`).
48
48
  | **Command & Conquer** (`cnc`) | 52 | *"Construction complete"* — EVA announcements, unit voices, and Red Alert |
49
49
  | **Diablo 2** (`diablo2`) | 46 | *"Stay awhile and listen"* — Deckard Cain, item drops, and the Prime Evils |
50
50
  | **Halo** (`halo`) | 52 | *"Wake me when you need me"* — Master Chief, Cortana, and the multiplayer announcer |
51
+ | **League of Legends** (`league-of-legends`) | 43 | *"Welcome to Summoner's Rift"* — Champion voice lines, announcer calls, and ping sounds |
51
52
  | **Metal Gear Solid** (`mgs`) | 40 | *"Kept you waiting, huh?"* — Codec calls, alert sounds, and Snake |
52
53
  | **Pokemon Gen 3** (`pokemon-gen3`) | 51 | *"A wild TREECKO appeared!"* — GBA battle cries, Hoenn fanfares, and RSE bleeps |
53
54
  | **Portal** (`portal`) | 42 | *"Are you still there?"* — Turrets, portal guns, and Aperture Science |
@@ -57,6 +58,7 @@ The bash installer requires `jq` (`brew install jq`).
57
58
  | **Super Mario Bros** (`mario`) | 47 | *"Let's-a go!"* — Coins, power-ups, and Mario's voice from NES to N64 |
58
59
  | **Warhammer 40k** (`wh40k`) | 50 | *"For the Emperor!"* — Space Marines, Chaos war cries, and Ork shouts |
59
60
  | **WC3 Orc Peon** (`wc3-peon`) | 57 | *"Something need doing?"* — Peons, Grunts, Shamans, and Grom Hellscream |
61
+ | **Zelda: Breath of the Wild** (`zelda-botw`) | 42 | *"It's dangerous to go alone"* — Sheikah Slate sounds, Korok discoveries, and Guardian alerts |
60
62
  | **Zelda: Ocarina of Time** (`zelda-oot`) | 47 | *"Hey! Listen!"* — Navi, Link, and iconic OOT jingles |
61
63
 
62
64
  Each theme maps sounds across all 11 Claude Code lifecycle events.
@@ -184,6 +186,6 @@ Place audio files (`.wav` or `.mp3`) in `themes/<name>/sounds/` with filenames m
184
186
 
185
187
  This project is an unofficial fan project provided free of charge for personal, non-commercial use. It is not affiliated with, endorsed by, or sponsored by any game publisher or rights holder.
186
188
 
187
- All game audio is the property of its respective owners: Blizzard Entertainment (Warcraft, StarCraft, Diablo), Nintendo/Game Freak (Zelda, Mario, Pokemon), Lucasfilm/Disney (Star Wars), Konami (Metal Gear Solid), Valve (Portal), Electronic Arts/Westwood Studios (Command & Conquer), Xbox Game Studios/Ensemble Studios (Age of Empires), Games Workshop/Relic Entertainment (Warhammer 40,000), Xbox Game Studios/Bungie/343 Industries (Halo), Activision/Infinity Ward (Call of Duty), TriStar Pictures (Short Circuit). All trademarks and registered trademarks are the property of their respective owners.
189
+ All game audio is the property of its respective owners: Blizzard Entertainment (Warcraft, StarCraft, Diablo), Nintendo/Game Freak (Zelda, Mario, Pokemon), Lucasfilm/Disney (Star Wars), Konami (Metal Gear Solid), Valve (Portal), Electronic Arts/Westwood Studios (Command & Conquer), Xbox Game Studios/Ensemble Studios (Age of Empires), Games Workshop/Relic Entertainment (Warhammer 40,000), Xbox Game Studios/Bungie/343 Industries (Halo), Activision/Infinity Ward (Call of Duty), Riot Games (League of Legends), TriStar Pictures (Short Circuit). All trademarks and registered trademarks are the property of their respective owners.
188
190
 
189
191
  If you are a rights holder and would like content removed, please [open an issue](https://github.com/ryparker/claude-code-sounds/issues) and it will be taken down promptly.
package/bin/cli.js CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  const fs = require("fs");
4
4
  const path = require("path");
5
- const { execSync, spawn } = require("child_process");
5
+ const { execFileSync, spawn } = require("child_process");
6
6
  const p = require("@clack/prompts");
7
7
  const { Prompt } = require("@clack/core");
8
8
  const color = require("picocolors");
@@ -25,13 +25,9 @@ const installHooksConfig = () => lib.installHooksConfig(paths);
25
25
 
26
26
  // ─── Helpers ─────────────────────────────────────────────────────────────────
27
27
 
28
- function exec(cmd, opts = {}) {
29
- return execSync(cmd, { encoding: "utf-8", stdio: "pipe", ...opts });
30
- }
31
-
32
28
  function hasCommand(name) {
33
29
  try {
34
- exec(`which ${name}`);
30
+ execFileSync("which", [name], { stdio: "pipe" });
35
31
  return true;
36
32
  } catch {
37
33
  return false;
@@ -179,8 +175,8 @@ class SoundGrid extends Prompt {
179
175
 
180
176
  if (currentRowIdx < scrollTop) {
181
177
  scrollTop = Math.max(0, currentRowIdx - 1);
182
- } else if (currentRowIdx >= scrollTop + maxVisible) {
183
- scrollTop = currentRowIdx - maxVisible + 1;
178
+ } else if (currentRowIdx >= scrollTop + maxVisible - 2) {
179
+ scrollTop = currentRowIdx - maxVisible + 3;
184
180
  }
185
181
  if (scrollTop > 0 && myRows[scrollTop]?.type === 'sound') {
186
182
  for (let i = scrollTop - 1; i >= Math.max(0, scrollTop - 2); i--) {
package/bin/lib.js CHANGED
@@ -1,6 +1,7 @@
1
1
  const fs = require("fs");
2
2
  const path = require("path");
3
3
  const os = require("os");
4
+ const { execFileSync } = require("child_process");
4
5
 
5
6
  // ─── Path Factory ────────────────────────────────────────────────────────────
6
7
 
@@ -67,7 +68,12 @@ function listThemes(paths) {
67
68
  for (const name of fs.readdirSync(paths.THEMES_DIR)) {
68
69
  const themeJson = path.join(paths.THEMES_DIR, name, "theme.json");
69
70
  if (!fs.existsSync(themeJson)) continue;
70
- const meta = JSON.parse(fs.readFileSync(themeJson, "utf-8"));
71
+ let meta;
72
+ try {
73
+ meta = JSON.parse(fs.readFileSync(themeJson, "utf-8"));
74
+ } catch {
75
+ continue;
76
+ }
71
77
  let soundCount = 0;
72
78
  if (meta.sounds) {
73
79
  for (const cat of Object.values(meta.sounds)) {
@@ -97,26 +103,34 @@ function resolveThemeSoundPath(themeName, fileName, paths) {
97
103
 
98
104
  function readSettings(paths) {
99
105
  if (fs.existsSync(paths.SETTINGS_PATH)) {
100
- return JSON.parse(fs.readFileSync(paths.SETTINGS_PATH, "utf-8"));
106
+ try {
107
+ return JSON.parse(fs.readFileSync(paths.SETTINGS_PATH, "utf-8"));
108
+ } catch {}
101
109
  }
102
110
  return {};
103
111
  }
104
112
 
105
113
  function writeSettings(settings, paths) {
106
114
  mkdirp(paths.CLAUDE_DIR);
107
- fs.writeFileSync(paths.SETTINGS_PATH, JSON.stringify(settings, null, 2) + "\n");
115
+ const tmp = paths.SETTINGS_PATH + ".tmp";
116
+ fs.writeFileSync(tmp, JSON.stringify(settings, null, 2) + "\n");
117
+ fs.renameSync(tmp, paths.SETTINGS_PATH);
108
118
  }
109
119
 
110
120
  function readInstalled(paths) {
111
121
  if (fs.existsSync(paths.INSTALLED_PATH)) {
112
- return JSON.parse(fs.readFileSync(paths.INSTALLED_PATH, "utf-8"));
122
+ try {
123
+ return JSON.parse(fs.readFileSync(paths.INSTALLED_PATH, "utf-8"));
124
+ } catch {}
113
125
  }
114
126
  return null;
115
127
  }
116
128
 
117
129
  function writeInstalled(data, paths) {
118
130
  mkdirp(paths.SOUNDS_DIR);
119
- fs.writeFileSync(paths.INSTALLED_PATH, JSON.stringify(data, null, 2) + "\n");
131
+ const tmp = paths.INSTALLED_PATH + ".tmp";
132
+ fs.writeFileSync(tmp, JSON.stringify(data, null, 2) + "\n");
133
+ fs.renameSync(tmp, paths.INSTALLED_PATH);
120
134
  }
121
135
 
122
136
  function isMuted(paths) {
@@ -168,6 +182,20 @@ function _updateHookScript(paths) {
168
182
  }
169
183
  }
170
184
 
185
+ function compileMicHelper(paths) {
186
+ const src = path.join(paths.PKG_DIR, "helpers", "mic-active.swift");
187
+ const dest = path.join(paths.SOUNDS_DIR, ".mic-active");
188
+ if (!fs.existsSync(src)) return false;
189
+ try {
190
+ mkdirp(paths.SOUNDS_DIR);
191
+ execFileSync("swiftc", ["-O", src, "-o", dest], { stdio: "pipe" });
192
+ fs.chmodSync(dest, 0o755);
193
+ return true;
194
+ } catch {
195
+ return false;
196
+ }
197
+ }
198
+
171
199
  // ─── Detect Existing Install ─────────────────────────────────────────────────
172
200
 
173
201
  function detectExistingInstall(paths) {
@@ -221,23 +249,26 @@ function installSounds(selections, paths) {
221
249
  const catDir = path.join(paths.SOUNDS_DIR, cat);
222
250
  mkdirp(catDir);
223
251
 
224
- try {
225
- for (const f of fs.readdirSync(catDir)) {
226
- if (f.endsWith(".wav") || f.endsWith(".mp3")) {
227
- fs.unlinkSync(path.join(catDir, f));
228
- }
229
- }
230
- } catch {}
231
-
252
+ // Copy new files first
253
+ const newFiles = new Set();
232
254
  for (const item of items) {
233
255
  const srcPath = resolveThemeSoundPath(item.themeName, item.fileName, paths);
234
256
  const destPath = path.join(catDir, item.fileName);
235
-
236
257
  if (fs.existsSync(srcPath)) {
237
258
  fs.copyFileSync(srcPath, destPath);
238
259
  total++;
239
260
  }
261
+ newFiles.add(item.fileName);
240
262
  }
263
+
264
+ // Then remove old files not in the new set
265
+ try {
266
+ for (const f of fs.readdirSync(catDir)) {
267
+ if ((f.endsWith(".wav") || f.endsWith(".mp3")) && !newFiles.has(f)) {
268
+ fs.unlinkSync(path.join(catDir, f));
269
+ }
270
+ }
271
+ } catch {}
241
272
  }
242
273
 
243
274
  return total;
@@ -270,6 +301,9 @@ function installHooksConfig(paths) {
270
301
  if (!isDnd(paths)) {
271
302
  setDnd(true, paths);
272
303
  }
304
+
305
+ // Compile mic-active helper (auto-mute when microphone is in use)
306
+ compileMicHelper(paths);
273
307
  }
274
308
 
275
309
  function uninstallAll(paths) {
@@ -346,6 +380,7 @@ module.exports = {
346
380
  detectExistingInstall,
347
381
  installSounds,
348
382
  installHooksConfig,
383
+ compileMicHelper,
349
384
  uninstallAll,
350
385
  quickInstall,
351
386
  };
@@ -15,6 +15,10 @@ if [[ -f "$SOUNDS_DIR/.dnd" ]]; then
15
15
  done < "$SOUNDS_DIR/.dnd"
16
16
  fi
17
17
 
18
+ # Auto-mute: skip when microphone is in use (e.g. Superwhisper, dictation)
19
+ MIC_CHECK="$SOUNDS_DIR/.mic-active"
20
+ [[ -x "$MIC_CHECK" ]] && "$MIC_CHECK" > /dev/null 2>&1 && exit 0
21
+
18
22
  [[ -z "$CATEGORY" ]] && exit 0
19
23
  DIR="$SOUNDS_DIR/$CATEGORY"
20
24
  [[ ! -d "$DIR" ]] && exit 0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-code-sounds",
3
- "version": "1.6.0",
3
+ "version": "1.7.0",
4
4
  "description": "Sound themes for Claude Code lifecycle hooks",
5
5
  "bin": {
6
6
  "claude-code-sounds": "bin/cli.js"
@@ -23,6 +23,7 @@
23
23
  "files": [
24
24
  "bin/",
25
25
  "commands/",
26
+ "helpers/",
26
27
  "hooks/",
27
28
  "themes/",
28
29
  "images/"
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -71,7 +71,8 @@
71
71
  { "name": "unit-created.mp3" },
72
72
  { "name": "attack-enemy-now.mp3" },
73
73
  { "name": "taunt-wood-please.mp3" },
74
- { "name": "taunt-stone-please.mp3" }
74
+ { "name": "taunt-stone-please.mp3" },
75
+ { "name": "stable.mp3" }
75
76
  ]
76
77
  },
77
78
  "error": {
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file