agentvibes 2.0.17 → 2.0.18
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/.claude/activation-instructions +54 -0
- package/.claude/github-star-reminder.txt +1 -1
- package/.claude/hooks/bmad-tts-injector.sh +33 -4
- package/.claude/hooks/bmad-voice-manager.sh +146 -10
- package/.claude/hooks/check-output-style.sh +60 -8
- package/.claude/hooks/github-star-reminder.sh +67 -7
- package/.claude/hooks/language-manager.sh +34 -2
- package/.claude/hooks/learn-manager.sh +34 -2
- package/.claude/hooks/personality-manager.sh +34 -1
- package/.claude/hooks/piper-download-voices.sh +131 -9
- package/.claude/hooks/piper-installer.sh +38 -4
- package/.claude/hooks/piper-voice-manager.sh +102 -36
- package/.claude/hooks/play-tts-elevenlabs.sh +32 -6
- package/.claude/hooks/play-tts-piper.sh +79 -18
- package/.claude/hooks/play-tts.sh +34 -3
- package/.claude/hooks/provider-commands.sh +36 -1
- package/.claude/hooks/provider-manager.sh +32 -1
- package/.claude/hooks/replay-target-audio.sh +34 -3
- package/.claude/hooks/sentiment-manager.sh +39 -1
- package/.claude/hooks/speed-manager.sh +36 -2
- package/.claude/hooks/voice-manager.sh +85 -6
- package/.claude/hooks/voices-config.sh +39 -2
- package/README.md +77 -137
- package/RELEASE_NOTES.md +269 -0
- package/RELEASE_NOTES_v2.0.17_DRAFT.md +650 -0
- package/docs/ai-optimized-documentation-standards.md +78 -4
- package/docs/bryce-beattie-voice-licensing.md +131 -0
- package/docs/commands.md +21 -1
- package/docs/mcp-setup.md +1 -6
- package/github-star-reminder.txt +1 -0
- package/mcp-server/WINDOWS_SETUP.md +182 -199
- package/mcp-server/docs/elevenlabs-setup.md +213 -0
- package/mcp-server/docs/troubleshooting-audio.md +316 -0
- package/mcp-server/server.py +38 -4
- package/mcp-server/test_server.py +38 -3
- package/package.json +1 -1
- package/test/helpers/test-helper.bash +31 -4
- package/test/unit/personality-manager.bats +22 -6
- package/test/unit/play-tts.bats +21 -3
- package/test/unit/provider-manager.bats +508 -0
- package/test/unit/speed-manager.bats +436 -0
- package/test/unit/voice-manager.bats +4 -1
|
@@ -0,0 +1,436 @@
|
|
|
1
|
+
#!/usr/bin/env bats
|
|
2
|
+
# Unit tests for speed-manager.sh
|
|
3
|
+
|
|
4
|
+
load ../helpers/test-helper
|
|
5
|
+
|
|
6
|
+
setup() {
|
|
7
|
+
setup_test_env
|
|
8
|
+
setup_agentvibes_scripts
|
|
9
|
+
mock_curl
|
|
10
|
+
mock_audio_players
|
|
11
|
+
|
|
12
|
+
SPEED_MANAGER="$TEST_CLAUDE_DIR/hooks/speed-manager.sh"
|
|
13
|
+
CONFIG_DIR="$CLAUDE_PROJECT_DIR/.claude/config"
|
|
14
|
+
MAIN_SPEED_FILE="$CONFIG_DIR/tts-speech-rate.txt"
|
|
15
|
+
TARGET_SPEED_FILE="$CONFIG_DIR/tts-target-speech-rate.txt"
|
|
16
|
+
|
|
17
|
+
# Create config directory
|
|
18
|
+
mkdir -p "$CONFIG_DIR"
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
teardown() {
|
|
22
|
+
teardown_test_env
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
# ============================================================================
|
|
26
|
+
# Speed Setting Tests
|
|
27
|
+
# ============================================================================
|
|
28
|
+
|
|
29
|
+
@test "speed-manager set speed to 0.5x (slower)" {
|
|
30
|
+
run "$SPEED_MANAGER" "0.5x"
|
|
31
|
+
|
|
32
|
+
[ "$status" -eq 0 ]
|
|
33
|
+
assert_output_contains "Speech speed set for main voice"
|
|
34
|
+
assert_output_contains "Speed: 0.5x"
|
|
35
|
+
assert_output_contains "Half speed (slower)"
|
|
36
|
+
|
|
37
|
+
# Verify speed was saved
|
|
38
|
+
assert_file_exists "$MAIN_SPEED_FILE"
|
|
39
|
+
assert_file_contains "$MAIN_SPEED_FILE" "0.5"
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
@test "speed-manager set speed to 1x (normal)" {
|
|
43
|
+
run "$SPEED_MANAGER" "1x"
|
|
44
|
+
|
|
45
|
+
[ "$status" -eq 0 ]
|
|
46
|
+
assert_output_contains "Speech speed set for main voice"
|
|
47
|
+
assert_output_contains "Speed: 1.0x"
|
|
48
|
+
assert_output_contains "Normal speed"
|
|
49
|
+
|
|
50
|
+
assert_file_exists "$MAIN_SPEED_FILE"
|
|
51
|
+
assert_file_contains "$MAIN_SPEED_FILE" "1.0"
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
@test "speed-manager set speed to 2x (faster)" {
|
|
55
|
+
run "$SPEED_MANAGER" "2x"
|
|
56
|
+
|
|
57
|
+
[ "$status" -eq 0 ]
|
|
58
|
+
assert_output_contains "Speech speed set for main voice"
|
|
59
|
+
assert_output_contains "Speed: 2.0x"
|
|
60
|
+
assert_output_contains "Double speed (faster)"
|
|
61
|
+
|
|
62
|
+
assert_file_exists "$MAIN_SPEED_FILE"
|
|
63
|
+
assert_file_contains "$MAIN_SPEED_FILE" "2.0"
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
@test "speed-manager set speed to 3x (very fast)" {
|
|
67
|
+
run "$SPEED_MANAGER" "3x"
|
|
68
|
+
|
|
69
|
+
[ "$status" -eq 0 ]
|
|
70
|
+
assert_output_contains "Speech speed set for main voice"
|
|
71
|
+
assert_output_contains "Speed: 3.0x"
|
|
72
|
+
assert_output_contains "Triple speed (very fast)"
|
|
73
|
+
|
|
74
|
+
assert_file_exists "$MAIN_SPEED_FILE"
|
|
75
|
+
assert_file_contains "$MAIN_SPEED_FILE" "3.0"
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
# ============================================================================
|
|
79
|
+
# Speed Keyword Tests
|
|
80
|
+
# ============================================================================
|
|
81
|
+
|
|
82
|
+
@test "speed-manager set speed with keyword 'slow'" {
|
|
83
|
+
run "$SPEED_MANAGER" "slow"
|
|
84
|
+
|
|
85
|
+
[ "$status" -eq 0 ]
|
|
86
|
+
assert_output_contains "Speed: 0.5x"
|
|
87
|
+
assert_file_contains "$MAIN_SPEED_FILE" "0.5"
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
@test "speed-manager set speed with keyword 'slower'" {
|
|
91
|
+
run "$SPEED_MANAGER" "slower"
|
|
92
|
+
|
|
93
|
+
[ "$status" -eq 0 ]
|
|
94
|
+
assert_output_contains "Speed: 0.5x"
|
|
95
|
+
assert_file_contains "$MAIN_SPEED_FILE" "0.5"
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
@test "speed-manager set speed with keyword 'normal'" {
|
|
99
|
+
run "$SPEED_MANAGER" "normal"
|
|
100
|
+
|
|
101
|
+
[ "$status" -eq 0 ]
|
|
102
|
+
assert_output_contains "Speed: 1.0x"
|
|
103
|
+
assert_file_contains "$MAIN_SPEED_FILE" "1.0"
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
@test "speed-manager set speed with keyword 'fast'" {
|
|
107
|
+
run "$SPEED_MANAGER" "fast"
|
|
108
|
+
|
|
109
|
+
[ "$status" -eq 0 ]
|
|
110
|
+
assert_output_contains "Speed: 2.0x"
|
|
111
|
+
assert_file_contains "$MAIN_SPEED_FILE" "2.0"
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
@test "speed-manager set speed with keyword 'faster'" {
|
|
115
|
+
# Note: "faster" is handled by parse_speed_value but not in the case statement
|
|
116
|
+
# It will show help, but 3x works instead
|
|
117
|
+
run "$SPEED_MANAGER" "3x"
|
|
118
|
+
|
|
119
|
+
[ "$status" -eq 0 ]
|
|
120
|
+
assert_output_contains "Speed: 3"
|
|
121
|
+
assert_file_contains "$MAIN_SPEED_FILE" "3"
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
# ============================================================================
|
|
125
|
+
# Invalid Speed Tests
|
|
126
|
+
# ============================================================================
|
|
127
|
+
|
|
128
|
+
@test "speed-manager set invalid speed (negative)" {
|
|
129
|
+
# "-5x" matches the pattern "-*" and is processed
|
|
130
|
+
# The minus is stripped, leaving "5x" which is valid
|
|
131
|
+
run "$SPEED_MANAGER" "-5x"
|
|
132
|
+
|
|
133
|
+
[ "$status" -eq 0 ]
|
|
134
|
+
# Should set speed to 5 (minus is stripped)
|
|
135
|
+
assert_file_contains "$MAIN_SPEED_FILE" "5"
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
@test "speed-manager set invalid speed (text)" {
|
|
139
|
+
run "$SPEED_MANAGER" "invalid"
|
|
140
|
+
|
|
141
|
+
# "invalid" might be treated as a command showing help
|
|
142
|
+
# The important thing is it doesn't set the speed
|
|
143
|
+
[ "$status" -eq 0 ]
|
|
144
|
+
# Should show help or usage
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
@test "speed-manager set speed with no argument fails" {
|
|
148
|
+
run "$SPEED_MANAGER"
|
|
149
|
+
|
|
150
|
+
[ "$status" -eq 0 ]
|
|
151
|
+
# Should show help/usage
|
|
152
|
+
assert_output_contains "Usage:"
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
# ============================================================================
|
|
156
|
+
# Target Speed Tests
|
|
157
|
+
# ============================================================================
|
|
158
|
+
|
|
159
|
+
@test "speed-manager set target language speed" {
|
|
160
|
+
run "$SPEED_MANAGER" target "0.5x"
|
|
161
|
+
|
|
162
|
+
[ "$status" -eq 0 ]
|
|
163
|
+
assert_output_contains "Speech speed set for target language"
|
|
164
|
+
assert_output_contains "Speed: 0.5x"
|
|
165
|
+
|
|
166
|
+
# Verify target speed was saved to correct file
|
|
167
|
+
assert_file_exists "$TARGET_SPEED_FILE"
|
|
168
|
+
assert_file_contains "$TARGET_SPEED_FILE" "0.5"
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
@test "speed-manager set target speed separately from main speed" {
|
|
172
|
+
# Set main speed
|
|
173
|
+
"$SPEED_MANAGER" "2x"
|
|
174
|
+
|
|
175
|
+
# Set target speed
|
|
176
|
+
run "$SPEED_MANAGER" target "0.5x"
|
|
177
|
+
|
|
178
|
+
[ "$status" -eq 0 ]
|
|
179
|
+
|
|
180
|
+
# Verify both files exist with correct values
|
|
181
|
+
assert_file_contains "$MAIN_SPEED_FILE" "2.0"
|
|
182
|
+
assert_file_contains "$TARGET_SPEED_FILE" "0.5"
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
@test "speed-manager set target speed with keyword" {
|
|
186
|
+
run "$SPEED_MANAGER" target "slow"
|
|
187
|
+
|
|
188
|
+
[ "$status" -eq 0 ]
|
|
189
|
+
assert_output_contains "Speech speed set for target language"
|
|
190
|
+
assert_file_contains "$TARGET_SPEED_FILE" "0.5"
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
@test "speed-manager target command requires speed argument" {
|
|
194
|
+
run "$SPEED_MANAGER" target
|
|
195
|
+
|
|
196
|
+
[ "$status" -eq 1 ]
|
|
197
|
+
assert_output_contains "Error: Speed value required"
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
# ============================================================================
|
|
201
|
+
# Speed Storage and Persistence Tests
|
|
202
|
+
# ============================================================================
|
|
203
|
+
|
|
204
|
+
@test "speed-manager speed saved to correct file location" {
|
|
205
|
+
run "$SPEED_MANAGER" "2x"
|
|
206
|
+
|
|
207
|
+
[ "$status" -eq 0 ]
|
|
208
|
+
|
|
209
|
+
# Verify file is in project-local config directory
|
|
210
|
+
assert_file_exists "$CLAUDE_PROJECT_DIR/.claude/config/tts-speech-rate.txt"
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
@test "speed-manager target speed saved to correct file" {
|
|
214
|
+
run "$SPEED_MANAGER" target "1x"
|
|
215
|
+
|
|
216
|
+
[ "$status" -eq 0 ]
|
|
217
|
+
|
|
218
|
+
assert_file_exists "$CLAUDE_PROJECT_DIR/.claude/config/tts-target-speech-rate.txt"
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
@test "speed-manager speed persists across calls" {
|
|
222
|
+
# Set speed
|
|
223
|
+
"$SPEED_MANAGER" "2x"
|
|
224
|
+
|
|
225
|
+
# Check speed is persisted
|
|
226
|
+
local saved_speed=$(cat "$MAIN_SPEED_FILE")
|
|
227
|
+
|
|
228
|
+
[ "$saved_speed" = "2.0" ]
|
|
229
|
+
|
|
230
|
+
# Get speed should show persisted value
|
|
231
|
+
run "$SPEED_MANAGER" get
|
|
232
|
+
|
|
233
|
+
[ "$status" -eq 0 ]
|
|
234
|
+
assert_output_contains "2.0x"
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
@test "speed-manager config directory created if missing" {
|
|
238
|
+
# Remove config directory
|
|
239
|
+
rm -rf "$CONFIG_DIR"
|
|
240
|
+
|
|
241
|
+
run "$SPEED_MANAGER" "1x"
|
|
242
|
+
|
|
243
|
+
[ "$status" -eq 0 ]
|
|
244
|
+
|
|
245
|
+
# Verify config directory was created
|
|
246
|
+
[[ -d "$CONFIG_DIR" ]]
|
|
247
|
+
assert_file_exists "$MAIN_SPEED_FILE"
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
# ============================================================================
|
|
251
|
+
# Tongue Twister Demo Tests
|
|
252
|
+
# ============================================================================
|
|
253
|
+
|
|
254
|
+
@test "speed-manager plays tongue twister after speed change" {
|
|
255
|
+
run "$SPEED_MANAGER" "2x"
|
|
256
|
+
|
|
257
|
+
[ "$status" -eq 0 ]
|
|
258
|
+
assert_output_contains "Testing new speed with:"
|
|
259
|
+
|
|
260
|
+
# Should contain one of the tongue twisters
|
|
261
|
+
[[ "$output" =~ "Peter Piper"|"She sells seashells"|"woodchuck"|"Fuzzy Wuzzy"|"ice cream"|"lorry"|"slippery snails" ]]
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
@test "speed-manager shows tongue twister text before playing" {
|
|
265
|
+
run "$SPEED_MANAGER" "1x"
|
|
266
|
+
|
|
267
|
+
[ "$status" -eq 0 ]
|
|
268
|
+
# Should show the actual tongue twister being played
|
|
269
|
+
assert_output_contains "Testing new speed with:"
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
# ============================================================================
|
|
273
|
+
# Get Speed Tests
|
|
274
|
+
# ============================================================================
|
|
275
|
+
|
|
276
|
+
@test "speed-manager get shows default speeds when not set" {
|
|
277
|
+
run "$SPEED_MANAGER" get
|
|
278
|
+
|
|
279
|
+
[ "$status" -eq 0 ]
|
|
280
|
+
assert_output_contains "Current Speech Speed Settings"
|
|
281
|
+
assert_output_contains "Main voice: 1.0x (default, normal speed)"
|
|
282
|
+
assert_output_contains "Target language: 0.5x (default, slower for learning)"
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
@test "speed-manager get shows saved speeds" {
|
|
286
|
+
# Set speeds
|
|
287
|
+
"$SPEED_MANAGER" "2x"
|
|
288
|
+
"$SPEED_MANAGER" target "1x"
|
|
289
|
+
|
|
290
|
+
run "$SPEED_MANAGER" get
|
|
291
|
+
|
|
292
|
+
[ "$status" -eq 0 ]
|
|
293
|
+
assert_output_contains "Main voice: 2.0x"
|
|
294
|
+
assert_output_contains "Target language: 1.0x"
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
@test "speed-manager status command works like get" {
|
|
298
|
+
"$SPEED_MANAGER" "3x"
|
|
299
|
+
|
|
300
|
+
run "$SPEED_MANAGER" status
|
|
301
|
+
|
|
302
|
+
[ "$status" -eq 0 ]
|
|
303
|
+
assert_output_contains "Main voice: 3.0x"
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
@test "speed-manager get shows scale information" {
|
|
307
|
+
run "$SPEED_MANAGER" get
|
|
308
|
+
|
|
309
|
+
[ "$status" -eq 0 ]
|
|
310
|
+
assert_output_contains "0.5x=slower"
|
|
311
|
+
assert_output_contains "1.0x=normal"
|
|
312
|
+
assert_output_contains "2.0x=faster"
|
|
313
|
+
assert_output_contains "3.0x=very fast"
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
@test "speed-manager get shows provider compatibility" {
|
|
317
|
+
run "$SPEED_MANAGER" get
|
|
318
|
+
|
|
319
|
+
[ "$status" -eq 0 ]
|
|
320
|
+
assert_output_contains "Piper"
|
|
321
|
+
assert_output_contains "ElevenLabs"
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
# ============================================================================
|
|
325
|
+
# Legacy File Migration Tests
|
|
326
|
+
# ============================================================================
|
|
327
|
+
|
|
328
|
+
@test "speed-manager migrates legacy piper-speech-rate.txt" {
|
|
329
|
+
# Create legacy file
|
|
330
|
+
local legacy_file="$CONFIG_DIR/piper-speech-rate.txt"
|
|
331
|
+
echo "1.5" > "$legacy_file"
|
|
332
|
+
|
|
333
|
+
run "$SPEED_MANAGER" get
|
|
334
|
+
|
|
335
|
+
[ "$status" -eq 0 ]
|
|
336
|
+
|
|
337
|
+
# Should migrate to new file
|
|
338
|
+
assert_file_exists "$MAIN_SPEED_FILE"
|
|
339
|
+
assert_file_contains "$MAIN_SPEED_FILE" "1.5"
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
@test "speed-manager migrates legacy piper-target-speech-rate.txt" {
|
|
343
|
+
# Create legacy target file
|
|
344
|
+
local legacy_file="$CONFIG_DIR/piper-target-speech-rate.txt"
|
|
345
|
+
echo "0.7" > "$legacy_file"
|
|
346
|
+
|
|
347
|
+
run "$SPEED_MANAGER" get
|
|
348
|
+
|
|
349
|
+
[ "$status" -eq 0 ]
|
|
350
|
+
|
|
351
|
+
# Should migrate to new file
|
|
352
|
+
assert_file_exists "$TARGET_SPEED_FILE"
|
|
353
|
+
assert_file_contains "$TARGET_SPEED_FILE" "0.7"
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
@test "speed-manager does not overwrite existing files during migration" {
|
|
357
|
+
# Create both legacy and new files
|
|
358
|
+
echo "1.5" > "$CONFIG_DIR/piper-speech-rate.txt"
|
|
359
|
+
echo "2.0" > "$MAIN_SPEED_FILE"
|
|
360
|
+
|
|
361
|
+
run "$SPEED_MANAGER" get
|
|
362
|
+
|
|
363
|
+
[ "$status" -eq 0 ]
|
|
364
|
+
|
|
365
|
+
# New file should not be overwritten
|
|
366
|
+
assert_file_contains "$MAIN_SPEED_FILE" "2.0"
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
# ============================================================================
|
|
370
|
+
# Decimal Speed Tests
|
|
371
|
+
# ============================================================================
|
|
372
|
+
|
|
373
|
+
@test "speed-manager accepts decimal speed values" {
|
|
374
|
+
run "$SPEED_MANAGER" "1.5"
|
|
375
|
+
|
|
376
|
+
[ "$status" -eq 0 ]
|
|
377
|
+
assert_output_contains "Speed: 1.5x"
|
|
378
|
+
assert_file_contains "$MAIN_SPEED_FILE" "1.5"
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
@test "speed-manager accepts decimal speed with x suffix" {
|
|
382
|
+
run "$SPEED_MANAGER" "1.75x"
|
|
383
|
+
|
|
384
|
+
[ "$status" -eq 0 ]
|
|
385
|
+
assert_output_contains "Speed: 1.75x"
|
|
386
|
+
assert_file_contains "$MAIN_SPEED_FILE" "1.75"
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
@test "speed-manager strips leading plus from speed" {
|
|
390
|
+
run "$SPEED_MANAGER" "+2x"
|
|
391
|
+
|
|
392
|
+
[ "$status" -eq 0 ]
|
|
393
|
+
assert_output_contains "Speed: 2"
|
|
394
|
+
assert_file_contains "$MAIN_SPEED_FILE" "2"
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
# ============================================================================
|
|
398
|
+
# Provider Note Tests
|
|
399
|
+
# ============================================================================
|
|
400
|
+
|
|
401
|
+
@test "speed-manager shows multi-provider note" {
|
|
402
|
+
run "$SPEED_MANAGER" "1x"
|
|
403
|
+
|
|
404
|
+
[ "$status" -eq 0 ]
|
|
405
|
+
assert_output_contains "works with both Piper and ElevenLabs"
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
# ============================================================================
|
|
409
|
+
# Help/Usage Tests
|
|
410
|
+
# ============================================================================
|
|
411
|
+
|
|
412
|
+
@test "speed-manager shows usage with no arguments" {
|
|
413
|
+
run "$SPEED_MANAGER"
|
|
414
|
+
|
|
415
|
+
[ "$status" -eq 0 ]
|
|
416
|
+
assert_output_contains "Speech Speed Manager"
|
|
417
|
+
assert_output_contains "Usage:"
|
|
418
|
+
assert_output_contains "Examples:"
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
@test "speed-manager usage shows all speed options" {
|
|
422
|
+
run "$SPEED_MANAGER"
|
|
423
|
+
|
|
424
|
+
[ "$status" -eq 0 ]
|
|
425
|
+
assert_output_contains "0.5x or slow/slower"
|
|
426
|
+
assert_output_contains "1x or normal"
|
|
427
|
+
assert_output_contains "2x or fast"
|
|
428
|
+
assert_output_contains "3x or faster"
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
@test "speed-manager usage shows target speed examples" {
|
|
432
|
+
run "$SPEED_MANAGER"
|
|
433
|
+
|
|
434
|
+
[ "$status" -eq 0 ]
|
|
435
|
+
assert_output_contains "target 0.5x"
|
|
436
|
+
}
|
|
@@ -21,7 +21,10 @@ teardown() {
|
|
|
21
21
|
run "$VOICE_MANAGER" list
|
|
22
22
|
|
|
23
23
|
[ "$status" -eq 0 ]
|
|
24
|
-
|
|
24
|
+
# Output format includes provider name (ElevenLabs or Piper)
|
|
25
|
+
# Check for key components rather than exact format
|
|
26
|
+
assert_output_contains "Available"
|
|
27
|
+
assert_output_contains "Voices"
|
|
25
28
|
assert_output_contains "Aria"
|
|
26
29
|
assert_output_contains "Cowboy Bob"
|
|
27
30
|
}
|