agentvibes 5.1.1 → 5.1.2

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
@@ -11,7 +11,7 @@
11
11
  [![Publish](https://github.com/paulpreibisch/AgentVibes/actions/workflows/publish.yml/badge.svg)](https://github.com/paulpreibisch/AgentVibes/actions/workflows/publish.yml)
12
12
  [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
13
13
 
14
- **Author**: Paul Preibisch ([@997Fire](https://x.com/997Fire)) | **Version**: v5.1.1
14
+ **Author**: Paul Preibisch ([@997Fire](https://x.com/997Fire)) | **Version**: v5.1.2
15
15
 
16
16
  ---
17
17
 
@@ -43,6 +43,16 @@ Whether you're using Claude Code, GitHub Copilot, OpenAI Codex, Claude Desktop,
43
43
 
44
44
  ---
45
45
 
46
+ ## 🔀 v5.1.2 — MCP Per-LLM Routing Hotfix
47
+
48
+ - **MCP server now reads `AGENTVIBES_LLM` env var** instead of hardcoding `copilot` — Codex / Copilot / Claude Code each get routed to their own per-LLM voice / pretext / music / effects config from `audio-effects.cfg`.
49
+ - **MCP launcher templates set the env var** automatically — `.codex/config.toml`, `.vscode/mcp.json`, and `.mcp.json` all include `AGENTVIBES_LLM` for the right provider.
50
+ - **24 new regression tests** prevent this class of bug from shipping again, including a `npm pack` content guard that fails the test suite if the working tree has uncommitted changes (the v5.1.0 disaster guard).
51
+
52
+ If you already have AgentVibes installed, re-run the per-provider configure step or add `"env": { "AGENTVIBES_LLM": "<your-llm>" }` manually to your MCP config.
53
+
54
+ ---
55
+
46
56
  ## 🩹 v5.1.1 — Windows TTS Hook Hotfix
47
57
 
48
58
  - **`play-tts.ps1 -llm` parameter restored** — npm-published v5.1.0 shipped a regressed copy without `-llm` support, breaking the Setup tab Preview button and the agentvibes MCP `text_to_speech` tool on Windows. Fixed in v5.1.1. If you hit the error, clear your npx cache: `npm cache clean --force` then reinstall.
package/RELEASE_NOTES.md CHANGED
@@ -1,5 +1,42 @@
1
1
  # AgentVibes Release Notes
2
2
 
3
+ ## 🔀 v5.1.2 — MCP Per-LLM Routing Hotfix
4
+
5
+ **Release Date:** April 2026
6
+
7
+ ### Bug Fixes
8
+
9
+ - **MCP server no longer hardcodes `-llm copilot`** — `mcp-server/server.py` was passing `-llm copilot` for every caller, regardless of whether the actual client was Codex, Copilot, or Claude Code. This meant per-LLM voice/pretext/music routing in `audio-effects.cfg` was effectively broken: all three providers fell through to the same `llm:copilot` lookup (or worse, the global default config). The server now reads `AGENTVIBES_LLM` from the environment and forwards that as the `-llm` value, falling back to no `-llm` flag if unset.
10
+
11
+ - **MCP launcher templates set `AGENTVIBES_LLM`** — Each provider's MCP config now sets the env var so the server knows which LLM is calling:
12
+ - Codex: `.codex/config.toml` → `env = { AGENTVIBES_LLM = "codex" }`
13
+ - Copilot: `.vscode/mcp.json` → `"env": { "AGENTVIBES_LLM": "copilot" }`
14
+ - Claude Code: `.mcp.json` → `"env": { "AGENTVIBES_LLM": "claude-code" }`
15
+
16
+ Both freshly-installed configs and the manual-instruction snippets shown by the installer include the env var.
17
+
18
+ ### Testing & Hardening
19
+
20
+ - **24 new regression tests** in `test/unit/llm-provider-mcp-routing.test.js` and `test/unit/npm-pack-contents.test.js` enforce the contract end-to-end:
21
+ - Each MCP launcher template MUST set `AGENTVIBES_LLM` to the correct value
22
+ - `mcp-server/server.py` MUST read `AGENTVIBES_LLM` from env and MUST NOT hardcode `-llm copilot`
23
+ - `play-tts.ps1` MUST declare its `$llm` parameter, contain per-LLM lookup logic, export `AGENTVIBES_LLM_KEY`, and be at least 400 lines (catches the v5.1.0 mass-deletion regression)
24
+ - `play-tts.sh` MUST parse `--llm` and do per-LLM lookup against `audio-effects.cfg`
25
+ - **Working tree must be clean** before publishing (the v5.1.0 disaster guard — `npm publish` packs the working tree, not the git tag, so any uncommitted local edits get shipped)
26
+
27
+ - The contract tests are **mutation-tested**: temporarily replacing `play-tts.ps1` with a broken stub fires 4 assertions with clear messages, proving the exact v5.1.0 regression would now block publish.
28
+
29
+ ### How to Update
30
+
31
+ ```
32
+ npm cache clean --force
33
+ npx --yes agentvibes@5.1.2
34
+ ```
35
+
36
+ If you already have AgentVibes installed for one or more providers, re-run the installer's per-provider configure step (or manually add `"env": { "AGENTVIBES_LLM": "<your-llm>" }` to your `.mcp.json` / `.vscode/mcp.json` / `.codex/config.toml`).
37
+
38
+ ---
39
+
3
40
  ## 🩹 v5.1.1 — Windows TTS Hook Hotfix
4
41
 
5
42
  **Release Date:** April 2026
@@ -194,18 +194,33 @@ class AgentVibesServer:
194
194
  original_language = await self._get_language()
195
195
  await self._run_script(self.LANGUAGE_MANAGER_SCRIPT, ["set", language])
196
196
 
197
- # Call the TTS script via appropriate shell
197
+ # Call the TTS script via appropriate shell.
198
+ #
199
+ # The LLM key is read from the AGENTVIBES_LLM env var so each
200
+ # caller (Claude Code, GitHub Copilot, OpenAI Codex) gets routed
201
+ # to its own per-LLM voice / pretext / music / effects config.
202
+ # The MCP launcher in each provider's config file should set
203
+ # this env var (e.g. .codex/config.toml [mcp_servers.agentvibes]
204
+ # env = { AGENTVIBES_LLM = "codex" }).
205
+ #
206
+ # If unset, no -llm flag is passed and play-tts falls back to
207
+ # the project / global default config — which is the correct
208
+ # behavior for ad-hoc / unconfigured callers.
209
+ llm_key = os.environ.get("AGENTVIBES_LLM", "").strip()
198
210
  tts_script = "play-tts.ps1" if self.is_windows else "play-tts.sh"
199
211
  play_tts = self.hooks_dir / tts_script
200
212
  if self.is_windows:
201
- args = ["powershell", "-NoProfile", "-ExecutionPolicy", "Bypass", "-File", str(play_tts), text, "-llm", "copilot"]
213
+ args = ["powershell", "-NoProfile", "-ExecutionPolicy", "Bypass", "-File", str(play_tts), text]
202
214
  if voice:
203
215
  args.extend(["-VoiceOverride", voice])
216
+ if llm_key:
217
+ args.extend(["-llm", llm_key])
204
218
  else:
205
219
  args = ["bash", str(play_tts), text]
206
220
  if voice:
207
221
  args.append(voice)
208
- args.extend(["--llm", "copilot"])
222
+ if llm_key:
223
+ args.extend(["--llm", llm_key])
209
224
 
210
225
  env = self._build_script_env()
211
226
  # Set agent name for audio effects lookup (audio-effects.cfg, background music config)
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "agentvibes",
4
- "version": "5.1.1",
4
+ "version": "5.1.2",
5
5
  "description": "Now your AI Agents can finally talk back! Professional TTS voice for Claude Code, Claude Desktop (via MCP), and Clawdbot with multi-provider support.",
6
6
  "homepage": "https://agentvibes.org",
7
7
  "keywords": [
package/src/installer.js CHANGED
@@ -4297,12 +4297,15 @@ function isPathSafe(targetPath, basePath) {
4297
4297
  async function handleMcpConfiguration(targetDir, options) {
4298
4298
  const mcpConfigPath = path.join(targetDir, '.mcp.json');
4299
4299
 
4300
- // MCP server configuration for AgentVibes
4300
+ // MCP server configuration for AgentVibes.
4301
+ // The AGENTVIBES_LLM env var tells the MCP server which LLM is calling
4302
+ // so per-LLM voice / pretext / music / effects routing works correctly.
4301
4303
  const mcpConfig = {
4302
4304
  mcpServers: {
4303
4305
  agentvibes: {
4304
4306
  command: 'npx',
4305
- args: ['-y', '--package=agentvibes', 'agentvibes-mcp-server']
4307
+ args: ['-y', '--package=agentvibes', 'agentvibes-mcp-server'],
4308
+ env: { AGENTVIBES_LLM: 'claude-code' }
4306
4309
  }
4307
4310
  }
4308
4311
  };
@@ -4337,7 +4340,8 @@ async function handleMcpConfiguration(targetDir, options) {
4337
4340
  console.log(
4338
4341
  '\n"agentvibes": {\n' +
4339
4342
  ' "command": "npx",\n' +
4340
- ' "args": ["-y", "--package=agentvibes", "agentvibes-mcp-server"]\n' +
4343
+ ' "args": ["-y", "--package=agentvibes", "agentvibes-mcp-server"],\n' +
4344
+ ' "env": { "AGENTVIBES_LLM": "claude-code" }\n' +
4341
4345
  '}\n'
4342
4346
  );
4343
4347
 
@@ -4442,7 +4446,8 @@ async function handleMcpConfiguration(targetDir, options) {
4442
4446
  ' "mcpServers": {\n' +
4443
4447
  ' "agentvibes": {\n' +
4444
4448
  ' "command": "npx",\n' +
4445
- ' "args": ["-y", "--package=agentvibes", "agentvibes-mcp-server"]\n' +
4449
+ ' "args": ["-y", "--package=agentvibes", "agentvibes-mcp-server"],\n' +
4450
+ ' "env": { "AGENTVIBES_LLM": "claude-code" }\n' +
4446
4451
  ' }\n' +
4447
4452
  ' }\n' +
4448
4453
  '}\n'
@@ -228,6 +228,9 @@ export async function installCopilotMcp(targetDir) {
228
228
  type: 'stdio',
229
229
  command: 'npx',
230
230
  args: ['-y', '--package=agentvibes', 'agentvibes-mcp-server'],
231
+ // Tells the MCP server which LLM is calling so per-LLM voice / pretext
232
+ // / music / effects routing in audio-effects.cfg works correctly.
233
+ env: { AGENTVIBES_LLM: 'copilot' },
231
234
  };
232
235
 
233
236
  try {
@@ -337,6 +340,9 @@ export function buildCodexToml(existingContent = '') {
337
340
  '[mcp_servers.agentvibes]',
338
341
  'command = "npx"',
339
342
  'args = ["-y", "--package=agentvibes", "agentvibes-mcp-server"]',
343
+ // Tells the MCP server which LLM is calling so per-LLM voice / pretext
344
+ // / music / effects routing in audio-effects.cfg works correctly.
345
+ 'env = { AGENTVIBES_LLM = "codex" }',
340
346
  ].join('\n');
341
347
 
342
348
  if (!existingContent.trim()) return serverBlock + '\n';