agentvibes 5.11.2 → 5.12.0-alpha.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.
- package/.agentvibes/config.json +1 -15
- package/.claude/activation-instructions +54 -54
- package/.claude/commands/agent-vibes-bmad-voices.md +117 -117
- package/.claude/commands/agent-vibes-rdp.md +24 -24
- package/.claude/config/audio-effects.cfg +5 -5
- package/.claude/config/background-music-enabled.txt +1 -1
- package/.claude/docs/TERMUX_SETUP.md +408 -408
- package/.claude/github-star-reminder.txt +1 -1
- package/.claude/hooks/audio-processor.sh +1 -1
- package/.claude/hooks/background-music-manager.sh +2 -1
- package/.claude/hooks/bmad-speak-enhanced.sh +37 -22
- package/.claude/hooks/bmad-speak.sh +26 -8
- package/.claude/hooks/play-tts-agentvibes-receiver-for-voiceless-connections.sh +1 -1
- package/.claude/hooks/play-tts-kokoro.sh +9 -0
- package/.claude/hooks/play-tts-piper.sh +13 -1
- package/.claude/hooks/play-tts-ssh-remote.sh +78 -5
- package/.claude/hooks/play-tts-termux-ssh.sh +1 -1
- package/.claude/hooks/play-tts.sh +85 -4
- package/.claude/hooks-windows/background-music-manager.ps1 +2 -1
- package/.claude/hooks-windows/play-tts-kokoro.ps1 +14 -0
- package/.claude/hooks-windows/play-tts.ps1 +163 -30
- package/.claude/hooks-windows/voice-manager-windows.ps1 +101 -1
- package/.clawdbot/README.md +105 -105
- package/LICENSE +190 -190
- package/RELEASE_NOTES.md +29 -0
- package/WINDOWS-SETUP.md +208 -208
- package/bin/agent-vibes +39 -39
- package/bin/mcp-server.js +121 -121
- package/bin/mcp-server.sh +6 -19
- package/bin/resolve-utterance.js +137 -0
- package/bin/test-bmad-pr +78 -78
- package/mcp-server/QUICK_START.md +203 -203
- package/mcp-server/README.md +345 -345
- package/mcp-server/examples/claude_desktop_config.json +11 -11
- package/mcp-server/examples/claude_desktop_config_piper.json +9 -9
- package/mcp-server/examples/custom_instructions.md +169 -169
- package/mcp-server/pyproject.toml +52 -52
- package/mcp-server/requirements.txt +2 -2
- package/mcp-server/server.py +280 -99
- package/mcp-server/test_mcp_correctness.py +486 -0
- package/mcp-server/test_server.py +395 -395
- package/mcp-server/test_windows_script_parity.py +341 -336
- package/package.json +3 -2
- package/setup-windows.ps1 +867 -815
- package/src/cli/list-personalities.js +110 -110
- package/src/cli/list-voices.js +114 -114
- package/src/commands/bmad-voices.js +394 -394
- package/src/console/app.js +13 -2
- package/src/console/brand-colors.js +13 -13
- package/src/console/constants/personalities.js +44 -44
- package/src/console/tabs/agents-tab.js +82 -9
- package/src/console/tabs/help-tab.js +314 -314
- package/src/console/tabs/music-tab.js +7 -1
- package/src/console/tabs/readme-tab.js +272 -272
- package/src/console/tabs/settings-tab.js +29 -1
- package/src/console/tabs/setup-tab.js +4 -4
- package/src/console/widgets/destroy-list.js +25 -25
- package/src/console/widgets/notice.js +55 -55
- package/src/console/widgets/track-picker.js +3 -3
- package/src/i18n/de.js +0 -1
- package/src/i18n/en.js +0 -1
- package/src/i18n/es.js +0 -1
- package/src/i18n/fr.js +0 -1
- package/src/i18n/hi.js +0 -1
- package/src/i18n/ja.js +0 -1
- package/src/i18n/ko.js +0 -1
- package/src/i18n/pt.js +0 -1
- package/src/i18n/zh-CN.js +0 -1
- package/src/installer/language-screen.js +31 -31
- package/src/installer/music-file-input.js +304 -304
- package/src/installer.js +205 -15
- package/src/services/config-service.js +264 -264
- package/src/services/language-service.js +47 -47
- package/src/services/llm-provider-service.js +7 -7
- package/src/services/utterance-loader.js +280 -0
- package/src/services/utterance-resolver.js +526 -0
- package/src/utils/audio-format-validator.js +277 -277
- package/src/utils/dependency-checker.js +469 -469
- package/src/utils/file-ownership-verifier.js +358 -358
- package/src/utils/music-file-validator.js +285 -285
- package/src/utils/preview-list-prompt.js +144 -144
- package/src/utils/secure-music-storage.js +412 -412
- package/templates/agentvibes-receiver.sh +74 -12
- package/voice-assignments.json +8245 -0
- package/.agentvibes/install-manifest.json +0 -342
- package/.claude/config/background-music-position.txt +0 -27
- package/.claude/config/background-music-volume.txt +0 -1
- package/.claude/config/background-music.cfg +0 -1
- package/.claude/config/background-music.txt +0 -1
- package/.claude/config/language.txt +0 -1
- package/.claude/config/personality.txt +0 -1
- package/.claude/config/tts-speech-rate.txt +0 -1
- package/.claude/config/tts-verbosity.txt +0 -1
- package/.claude/hooks-windows/audio-cache-utils.ps1.user.bak +0 -119
- package/.claude/hooks-windows/soprano-gradio-synth.py.user.bak +0 -153
- package/.claude/piper-voices-dir.txt +0 -1
- package/.mcp.json +0 -22
|
@@ -78,7 +78,7 @@ _PARSE_OUT=$(python3 - "$DECODED" 2>&1 <<'PYEOF'
|
|
|
78
78
|
import json, sys
|
|
79
79
|
try:
|
|
80
80
|
d = json.loads(sys.argv[1])
|
|
81
|
-
for field in ("text","voice","music","volume","effects","pretext","speed","provider","llm"):
|
|
81
|
+
for field in ("text","voice","music","volume","effects","pretext","speed","provider","llm","mute","language"):
|
|
82
82
|
print(d.get(field, ""))
|
|
83
83
|
except json.JSONDecodeError as e:
|
|
84
84
|
print(f"JSON_PARSE_ERROR: {e}", file=sys.stderr)
|
|
@@ -96,10 +96,13 @@ PRETEXT=$( sed -n '6p' <<< "$_PARSE_OUT")
|
|
|
96
96
|
SPEED=$( sed -n '7p' <<< "$_PARSE_OUT")
|
|
97
97
|
PROVIDER=$(sed -n '8p' <<< "$_PARSE_OUT")
|
|
98
98
|
LLM=$( sed -n '9p' <<< "$_PARSE_OUT")
|
|
99
|
+
MUTE=$( sed -n '10p' <<< "$_PARSE_OUT")
|
|
100
|
+
LANGUAGE=$(sed -n '11p' <<< "$_PARSE_OUT")
|
|
99
101
|
|
|
100
102
|
# Fall back to defaults
|
|
103
|
+
# TODO(AVI-S8.6): generate the volume constant from the shared JSON source of truth.
|
|
101
104
|
[[ -z "$VOICE" ]] && VOICE="en_US-lessac-medium"
|
|
102
|
-
[[ -z "$VOLUME" ]] && VOLUME="0.
|
|
105
|
+
[[ -z "$VOLUME" ]] && VOLUME="0.20"
|
|
103
106
|
[[ -z "$PROVIDER" ]] && PROVIDER="piper"
|
|
104
107
|
|
|
105
108
|
# Validate text
|
|
@@ -114,7 +117,7 @@ fi
|
|
|
114
117
|
|
|
115
118
|
# Validate volume is numeric
|
|
116
119
|
if [[ ! "$VOLUME" =~ ^[0-9]+\.?[0-9]*$ ]]; then
|
|
117
|
-
VOLUME="0.
|
|
120
|
+
VOLUME="0.20"
|
|
118
121
|
fi
|
|
119
122
|
|
|
120
123
|
# Validate provider
|
|
@@ -128,6 +131,50 @@ if [[ -n "$PRETEXT" ]]; then
|
|
|
128
131
|
TEXT="${PRETEXT}. ${TEXT}"
|
|
129
132
|
fi
|
|
130
133
|
|
|
134
|
+
# ---------------------------------------------------------------------------
|
|
135
|
+
# RECEIVER-AUTHORITATIVE: mute safety-OR (map §C, R17)
|
|
136
|
+
# ---------------------------------------------------------------------------
|
|
137
|
+
# effective_mute = receiver_local_mute OR forwarded_mute.
|
|
138
|
+
# If EITHER the sender (forwarded MUTE=="true") or THIS receiver host is muted,
|
|
139
|
+
# we stay silent. A receiver-local mute can always veto; the forwarded mute is a
|
|
140
|
+
# subordinate DEFAULT that can also veto — we NEVER force-unmute a muted receiver.
|
|
141
|
+
# The receiver's own 3-level mute (project-unmute > project-mute > global-mute)
|
|
142
|
+
# is additionally enforced downstream by play-tts.sh; here we OR in its global
|
|
143
|
+
# mute file so the OR decision is visible/testable at this layer too.
|
|
144
|
+
receiver_local_muted() {
|
|
145
|
+
[[ -f "$HOME/.agentvibes-muted" ]] && return 0
|
|
146
|
+
return 1
|
|
147
|
+
}
|
|
148
|
+
EFFECTIVE_MUTE="false"
|
|
149
|
+
if [[ "$MUTE" == "true" ]] || receiver_local_muted; then
|
|
150
|
+
EFFECTIVE_MUTE="true"
|
|
151
|
+
fi
|
|
152
|
+
|
|
153
|
+
# ---------------------------------------------------------------------------
|
|
154
|
+
# RECEIVER-AUTHORITATIVE: language fallback (map §D, R18)
|
|
155
|
+
# ---------------------------------------------------------------------------
|
|
156
|
+
# The receiver's OWN language config wins; otherwise the forwarded language is
|
|
157
|
+
# used as the default. Only forward-as-default is applied here (we never
|
|
158
|
+
# overwrite the receiver's own config). tts-language.txt lives at the .claude/
|
|
159
|
+
# root (language-manager.sh) or the config/ subdir; check both, project-scope is
|
|
160
|
+
# irrelevant on the receiver so we use the receiver host's ~/.claude.
|
|
161
|
+
receiver_local_language() {
|
|
162
|
+
local f
|
|
163
|
+
for f in "$HOME/.claude/tts-language.txt" "$HOME/.claude/config/tts-language.txt"; do
|
|
164
|
+
if [[ -f "$f" ]]; then
|
|
165
|
+
local v
|
|
166
|
+
v=$(cat "$f" 2>/dev/null || true)
|
|
167
|
+
if [[ -n "$v" ]]; then echo "$v"; return 0; fi
|
|
168
|
+
fi
|
|
169
|
+
done
|
|
170
|
+
return 1
|
|
171
|
+
}
|
|
172
|
+
EFFECTIVE_LANGUAGE="$LANGUAGE"
|
|
173
|
+
_RECV_LANG=$(receiver_local_language || true)
|
|
174
|
+
if [[ -n "$_RECV_LANG" ]]; then
|
|
175
|
+
EFFECTIVE_LANGUAGE="$_RECV_LANG" # receiver's own language config wins
|
|
176
|
+
fi
|
|
177
|
+
|
|
131
178
|
# ---------------------------------------------------------------------------
|
|
132
179
|
# Test mode: dump what would be played without calling play-tts
|
|
133
180
|
# ---------------------------------------------------------------------------
|
|
@@ -136,16 +183,25 @@ if [[ "${AGENTVIBES_TEST_MODE:-false}" == "true" ]]; then
|
|
|
136
183
|
python3 -c "
|
|
137
184
|
import json, sys
|
|
138
185
|
print(json.dumps({
|
|
139
|
-
'text':
|
|
140
|
-
'voice':
|
|
141
|
-
'music':
|
|
142
|
-
'volume':
|
|
143
|
-
'effects':
|
|
144
|
-
'pretext':
|
|
145
|
-
'provider':
|
|
146
|
-
'llm':
|
|
186
|
+
'text': sys.argv[1],
|
|
187
|
+
'voice': sys.argv[2],
|
|
188
|
+
'music': sys.argv[3],
|
|
189
|
+
'volume': sys.argv[4],
|
|
190
|
+
'effects': sys.argv[5],
|
|
191
|
+
'pretext': sys.argv[6],
|
|
192
|
+
'provider': sys.argv[7],
|
|
193
|
+
'llm': sys.argv[8],
|
|
194
|
+
'mute': sys.argv[9],
|
|
195
|
+
'effective_mute': sys.argv[10],
|
|
196
|
+
'language': sys.argv[11],
|
|
147
197
|
}, ensure_ascii=False))
|
|
148
|
-
" "$TEXT" "$VOICE" "$MUSIC" "$VOLUME" "$EFFECTS" "$PRETEXT" "$PROVIDER" "$LLM"
|
|
198
|
+
" "$TEXT" "$VOICE" "$MUSIC" "$VOLUME" "$EFFECTS" "$PRETEXT" "$PROVIDER" "$LLM" "$MUTE" "$EFFECTIVE_MUTE" "$EFFECTIVE_LANGUAGE"
|
|
199
|
+
exit 0
|
|
200
|
+
fi
|
|
201
|
+
|
|
202
|
+
# RECEIVER-AUTHORITATIVE mute veto: if either side muted, do not play.
|
|
203
|
+
if [[ "$EFFECTIVE_MUTE" == "true" ]]; then
|
|
204
|
+
echo "🔇 TTS muted (forwarded=$MUTE, receiver-local honored) — not playing" >&2
|
|
149
205
|
exit 0
|
|
150
206
|
fi
|
|
151
207
|
|
|
@@ -215,6 +271,10 @@ fi
|
|
|
215
271
|
[[ -n "$VOLUME" ]] && export AGENTVIBES_OVERRIDE_VOLUME="$VOLUME"
|
|
216
272
|
[[ -n "$EFFECTS" ]] && export AGENTVIBES_OVERRIDE_EFFECTS="$EFFECTS"
|
|
217
273
|
[[ -n "$SPEED" ]] && export AGENTVIBES_OVERRIDE_SPEED="$SPEED"
|
|
274
|
+
# RECEIVER-AUTHORITATIVE language default: the receiver's own language config (if
|
|
275
|
+
# any) already won above; forward the effective language downstream so play-tts.sh
|
|
276
|
+
# uses it only when the receiver has no local opinion. Subordinate to receiver config.
|
|
277
|
+
[[ -n "$EFFECTIVE_LANGUAGE" ]] && export AGENTVIBES_OVERRIDE_LANGUAGE="$EFFECTIVE_LANGUAGE"
|
|
218
278
|
|
|
219
279
|
if [[ "${AGENTVIBES_DEBUG:-0}" == "1" ]]; then
|
|
220
280
|
echo "[DEBUG] Voice: $VOICE" >&2
|
|
@@ -223,6 +283,8 @@ if [[ "${AGENTVIBES_DEBUG:-0}" == "1" ]]; then
|
|
|
223
283
|
echo "[DEBUG] Effects: ${EFFECTS:-none}" >&2
|
|
224
284
|
echo "[DEBUG] Pretext: ${PRETEXT:-none}" >&2
|
|
225
285
|
echo "[DEBUG] Provider: $PROVIDER" >&2
|
|
286
|
+
echo "[DEBUG] Mute: forwarded=$MUTE effective=$EFFECTIVE_MUTE" >&2
|
|
287
|
+
echo "[DEBUG] Language: forwarded=${LANGUAGE:-none} effective=${EFFECTIVE_LANGUAGE:-none}" >&2
|
|
226
288
|
fi
|
|
227
289
|
|
|
228
290
|
echo "🎵 Playing via AgentVibes: ${TEXT:0:50}..." >&2
|