agentvibes 2.0.17-beta.2 → 2.0.17-beta.21
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/.bmad-core/agent-teams/team-all.yaml +15 -0
- package/.bmad-core/agent-teams/team-fullstack.yaml +19 -0
- package/.bmad-core/agent-teams/team-ide-minimal.yaml +11 -0
- package/.bmad-core/agent-teams/team-no-ui.yaml +14 -0
- package/.bmad-core/agents/analyst.md +84 -0
- package/.bmad-core/agents/architect.md +85 -0
- package/.bmad-core/agents/bmad-master.md +110 -0
- package/.bmad-core/agents/bmad-orchestrator.md +147 -0
- package/.bmad-core/agents/dev.md +81 -0
- package/.bmad-core/agents/pm.md +84 -0
- package/.bmad-core/agents/po.md +79 -0
- package/.bmad-core/agents/qa.md +87 -0
- package/.bmad-core/agents/sm.md +65 -0
- package/.bmad-core/agents/ux-expert.md +69 -0
- package/.bmad-core/checklists/architect-checklist.md +440 -0
- package/.bmad-core/checklists/change-checklist.md +184 -0
- package/.bmad-core/checklists/pm-checklist.md +372 -0
- package/.bmad-core/checklists/po-master-checklist.md +434 -0
- package/.bmad-core/checklists/story-dod-checklist.md +96 -0
- package/.bmad-core/checklists/story-draft-checklist.md +155 -0
- package/.bmad-core/core-config.yaml +22 -0
- package/.bmad-core/data/bmad-kb.md +809 -0
- package/.bmad-core/data/brainstorming-techniques.md +38 -0
- package/.bmad-core/data/elicitation-methods.md +156 -0
- package/.bmad-core/data/technical-preferences.md +5 -0
- package/.bmad-core/data/test-levels-framework.md +148 -0
- package/.bmad-core/data/test-priorities-matrix.md +174 -0
- package/.bmad-core/enhanced-ide-development-workflow.md +248 -0
- package/.bmad-core/install-manifest.yaml +230 -0
- package/.bmad-core/tasks/advanced-elicitation.md +119 -0
- package/.bmad-core/tasks/apply-qa-fixes.md +150 -0
- package/.bmad-core/tasks/brownfield-create-epic.md +162 -0
- package/.bmad-core/tasks/brownfield-create-story.md +149 -0
- package/.bmad-core/tasks/correct-course.md +72 -0
- package/.bmad-core/tasks/create-brownfield-story.md +314 -0
- package/.bmad-core/tasks/create-deep-research-prompt.md +280 -0
- package/.bmad-core/tasks/create-doc.md +103 -0
- package/.bmad-core/tasks/create-next-story.md +114 -0
- package/.bmad-core/tasks/document-project.md +345 -0
- package/.bmad-core/tasks/execute-checklist.md +88 -0
- package/.bmad-core/tasks/facilitate-brainstorming-session.md +138 -0
- package/.bmad-core/tasks/generate-ai-frontend-prompt.md +53 -0
- package/.bmad-core/tasks/index-docs.md +175 -0
- package/.bmad-core/tasks/kb-mode-interaction.md +77 -0
- package/.bmad-core/tasks/nfr-assess.md +345 -0
- package/.bmad-core/tasks/qa-gate.md +163 -0
- package/.bmad-core/tasks/review-story.md +316 -0
- package/.bmad-core/tasks/risk-profile.md +355 -0
- package/.bmad-core/tasks/shard-doc.md +187 -0
- package/.bmad-core/tasks/test-design.md +176 -0
- package/.bmad-core/tasks/trace-requirements.md +266 -0
- package/.bmad-core/tasks/validate-next-story.md +136 -0
- package/.bmad-core/templates/architecture-tmpl.yaml +651 -0
- package/.bmad-core/templates/brainstorming-output-tmpl.yaml +156 -0
- package/.bmad-core/templates/brownfield-architecture-tmpl.yaml +477 -0
- package/.bmad-core/templates/brownfield-prd-tmpl.yaml +281 -0
- package/.bmad-core/templates/competitor-analysis-tmpl.yaml +307 -0
- package/.bmad-core/templates/front-end-architecture-tmpl.yaml +219 -0
- package/.bmad-core/templates/front-end-spec-tmpl.yaml +350 -0
- package/.bmad-core/templates/fullstack-architecture-tmpl.yaml +824 -0
- package/.bmad-core/templates/market-research-tmpl.yaml +253 -0
- package/.bmad-core/templates/prd-tmpl.yaml +203 -0
- package/.bmad-core/templates/project-brief-tmpl.yaml +222 -0
- package/.bmad-core/templates/qa-gate-tmpl.yaml +103 -0
- package/.bmad-core/templates/story-tmpl.yaml +138 -0
- package/.bmad-core/user-guide.md +577 -0
- package/.bmad-core/utils/bmad-doc-template.md +327 -0
- package/.bmad-core/utils/workflow-management.md +71 -0
- package/.bmad-core/workflows/brownfield-fullstack.yaml +298 -0
- package/.bmad-core/workflows/brownfield-service.yaml +188 -0
- package/.bmad-core/workflows/brownfield-ui.yaml +198 -0
- package/.bmad-core/workflows/greenfield-fullstack.yaml +241 -0
- package/.bmad-core/workflows/greenfield-service.yaml +207 -0
- package/.bmad-core/workflows/greenfield-ui.yaml +236 -0
- package/.bmad-core/working-in-the-brownfield.md +606 -0
- package/.claude/commands/BMad/agents/analyst.md +88 -0
- package/.claude/commands/BMad/agents/architect.md +89 -0
- package/.claude/commands/BMad/agents/bmad-master.md +114 -0
- package/.claude/commands/BMad/agents/bmad-orchestrator.md +151 -0
- package/.claude/commands/BMad/agents/dev.md +85 -0
- package/.claude/commands/BMad/agents/pm.md +88 -0
- package/.claude/commands/BMad/agents/po.md +83 -0
- package/.claude/commands/BMad/agents/qa.md +91 -0
- package/.claude/commands/BMad/agents/sm.md +69 -0
- package/.claude/commands/BMad/agents/ux-expert.md +73 -0
- package/.claude/commands/BMad/tasks/advanced-elicitation.md +123 -0
- package/.claude/commands/BMad/tasks/apply-qa-fixes.md +154 -0
- package/.claude/commands/BMad/tasks/brownfield-create-epic.md +166 -0
- package/.claude/commands/BMad/tasks/brownfield-create-story.md +153 -0
- package/.claude/commands/BMad/tasks/correct-course.md +76 -0
- package/.claude/commands/BMad/tasks/create-brownfield-story.md +318 -0
- package/.claude/commands/BMad/tasks/create-deep-research-prompt.md +284 -0
- package/.claude/commands/BMad/tasks/create-doc.md +107 -0
- package/.claude/commands/BMad/tasks/create-next-story.md +118 -0
- package/.claude/commands/BMad/tasks/document-project.md +349 -0
- package/.claude/commands/BMad/tasks/execute-checklist.md +92 -0
- package/.claude/commands/BMad/tasks/facilitate-brainstorming-session.md +142 -0
- package/.claude/commands/BMad/tasks/generate-ai-frontend-prompt.md +57 -0
- package/.claude/commands/BMad/tasks/index-docs.md +179 -0
- package/.claude/commands/BMad/tasks/kb-mode-interaction.md +81 -0
- package/.claude/commands/BMad/tasks/nfr-assess.md +349 -0
- package/.claude/commands/BMad/tasks/qa-gate.md +167 -0
- package/.claude/commands/BMad/tasks/review-story.md +320 -0
- package/.claude/commands/BMad/tasks/risk-profile.md +359 -0
- package/.claude/commands/BMad/tasks/shard-doc.md +191 -0
- package/.claude/commands/BMad/tasks/test-design.md +180 -0
- package/.claude/commands/BMad/tasks/trace-requirements.md +270 -0
- package/.claude/commands/BMad/tasks/validate-next-story.md +140 -0
- package/.claude/commands/agent-vibes/add.md +0 -0
- package/.claude/commands/agent-vibes/agent-vibes.md +0 -0
- package/.claude/commands/agent-vibes/bmad.md +0 -0
- package/.claude/commands/agent-vibes/commands.json +24 -0
- package/.claude/commands/agent-vibes/get.md +0 -0
- package/.claude/commands/agent-vibes/language.md +23 -0
- package/.claude/commands/agent-vibes/learn.md +67 -0
- package/.claude/commands/agent-vibes/list.md +0 -0
- package/.claude/commands/agent-vibes/personality.md +0 -0
- package/.claude/commands/agent-vibes/preview.md +0 -0
- package/.claude/commands/agent-vibes/replay-target.md +14 -0
- package/.claude/commands/agent-vibes/replay.md +0 -0
- package/.claude/commands/agent-vibes/sample.md +0 -0
- package/.claude/commands/agent-vibes/sentiment.md +0 -0
- package/.claude/commands/agent-vibes/set-language.md +0 -0
- package/.claude/commands/agent-vibes/set-pretext.md +0 -0
- package/.claude/commands/agent-vibes/set-speed.md +41 -0
- package/.claude/commands/agent-vibes/switch.md +0 -0
- package/.claude/commands/agent-vibes/target-voice.md +26 -0
- package/.claude/commands/agent-vibes/target.md +30 -0
- package/.claude/commands/agent-vibes/update.md +0 -0
- package/.claude/commands/agent-vibes/version.md +0 -0
- package/.claude/commands/agent-vibes/whoami.md +0 -0
- package/.claude/github-star-reminder.txt +1 -1
- package/.claude/hooks/language-manager.sh +167 -13
- package/.claude/hooks/learn-manager.sh +443 -0
- package/.claude/hooks/play-tts-elevenlabs.sh +52 -8
- package/.claude/hooks/play-tts-piper.sh +82 -8
- package/.claude/hooks/play-tts.sh +30 -4
- package/.claude/hooks/provider-commands.sh +46 -3
- package/.claude/hooks/provider-manager.sh +56 -4
- package/.claude/hooks/replay-target-audio.sh +64 -0
- package/.claude/hooks/speed-manager.sh +226 -0
- package/.claude/language-voices.yaml +0 -0
- package/.claude/output-styles/agent-vibes.md +0 -0
- package/.claude/personalities/angry.md +0 -0
- package/.claude/personalities/annoying.md +0 -0
- package/.claude/personalities/crass.md +0 -0
- package/.claude/personalities/dramatic.md +0 -0
- package/.claude/personalities/dry-humor.md +0 -0
- package/.claude/personalities/flirty.md +0 -0
- package/.claude/personalities/funny.md +0 -0
- package/.claude/personalities/grandpa.md +0 -0
- package/.claude/personalities/millennial.md +0 -0
- package/.claude/personalities/moody.md +0 -0
- package/.claude/personalities/normal.md +0 -0
- package/.claude/personalities/pirate.md +0 -0
- package/.claude/personalities/poetic.md +0 -0
- package/.claude/personalities/professional.md +0 -0
- package/.claude/personalities/robot.md +0 -0
- package/.claude/personalities/sarcastic.md +0 -0
- package/.claude/personalities/sassy.md +0 -0
- package/.claude/personalities/surfer-dude.md +0 -0
- package/.claude/personalities/zen.md +0 -0
- package/.claude/piper-voices/en_US-lessac-medium.onnx +0 -0
- package/.claude/piper-voices/en_US-lessac-medium.onnx.json +0 -0
- package/.claude/piper-voices-dir.txt +0 -0
- package/.claude/plugins/bmad-voices-enabled.flag +0 -0
- package/.claude/plugins/bmad-voices.md +0 -0
- package/.mcp-minimal.json +6 -8
- package/AUDIO_TUNNEL_FIX_SUMMARY.md +0 -0
- package/INSTALL_MCP_WINDOWS.md +120 -42
- package/LICENSE +0 -0
- package/NPM_PUBLISH_GUIDE.md +0 -0
- package/README.md +19 -6
- package/RELEASE_NOTES.md +97 -0
- package/RELEASE_NOTES_V2.md +136 -5
- package/agentvibes.org/.claude/commands/agent-vibes/add.md +21 -0
- package/agentvibes.org/.claude/commands/agent-vibes/agent-vibes.md +68 -0
- package/agentvibes.org/.claude/commands/agent-vibes/commands.json +53 -0
- package/agentvibes.org/.claude/commands/agent-vibes/get.md +9 -0
- package/agentvibes.org/.claude/commands/agent-vibes/list.md +13 -0
- package/agentvibes.org/.claude/commands/agent-vibes/personality.md +79 -0
- package/agentvibes.org/.claude/commands/agent-vibes/preview.md +16 -0
- package/agentvibes.org/.claude/commands/agent-vibes/provider.md +54 -0
- package/agentvibes.org/.claude/commands/agent-vibes/replay.md +19 -0
- package/agentvibes.org/.claude/commands/agent-vibes/sample.md +12 -0
- package/agentvibes.org/.claude/commands/agent-vibes/sentiment.md +52 -0
- package/agentvibes.org/.claude/commands/agent-vibes/set-language.md +47 -0
- package/agentvibes.org/.claude/commands/agent-vibes/set-pretext.md +65 -0
- package/agentvibes.org/.claude/commands/agent-vibes/switch.md +53 -0
- package/agentvibes.org/.claude/commands/agent-vibes/update.md +20 -0
- package/agentvibes.org/.claude/commands/agent-vibes/version.md +10 -0
- package/agentvibes.org/.claude/commands/agent-vibes/whoami.md +7 -0
- package/agentvibes.org/.claude/hooks/bmad-voice-manager.sh +278 -0
- package/agentvibes.org/.claude/hooks/language-manager.sh +190 -0
- package/agentvibes.org/.claude/hooks/personality-manager.sh +279 -0
- package/agentvibes.org/.claude/hooks/piper-download-voices.sh +133 -0
- package/agentvibes.org/.claude/hooks/piper-voice-manager.sh +227 -0
- package/agentvibes.org/.claude/hooks/play-tts-elevenlabs.sh +201 -0
- package/agentvibes.org/.claude/hooks/play-tts-piper.sh +175 -0
- package/agentvibes.org/.claude/hooks/play-tts.sh +138 -0
- package/agentvibes.org/.claude/hooks/provider-commands.sh +374 -0
- package/agentvibes.org/.claude/hooks/provider-manager.sh +196 -0
- package/agentvibes.org/.claude/hooks/sentiment-manager.sh +163 -0
- package/agentvibes.org/.claude/hooks/voice-manager.sh +349 -0
- package/agentvibes.org/.claude/hooks/voices-config.sh +33 -0
- package/agentvibes.org/.claude/journal/2025-10-07.html +373 -0
- package/agentvibes.org/.claude/journal/index.html +91 -0
- package/agentvibes.org/.claude/output-styles/agent-vibes.md +203 -0
- package/agentvibes.org/.claude/personalities/angry.md +16 -0
- package/agentvibes.org/.claude/personalities/annoying.md +16 -0
- package/agentvibes.org/.claude/personalities/crass.md +16 -0
- package/agentvibes.org/.claude/personalities/dramatic.md +16 -0
- package/agentvibes.org/.claude/personalities/dry-humor.md +52 -0
- package/agentvibes.org/.claude/personalities/flirty.md +22 -0
- package/agentvibes.org/.claude/personalities/funny.md +16 -0
- package/agentvibes.org/.claude/personalities/grandpa.md +34 -0
- package/agentvibes.org/.claude/personalities/millennial.md +16 -0
- package/agentvibes.org/.claude/personalities/moody.md +16 -0
- package/agentvibes.org/.claude/personalities/normal.md +18 -0
- package/agentvibes.org/.claude/personalities/pirate.md +16 -0
- package/agentvibes.org/.claude/personalities/poetic.md +16 -0
- package/agentvibes.org/.claude/personalities/professional.md +16 -0
- package/agentvibes.org/.claude/personalities/robot.md +16 -0
- package/agentvibes.org/.claude/personalities/sarcastic.md +40 -0
- package/agentvibes.org/.claude/personalities/sassy.md +16 -0
- package/agentvibes.org/.claude/personalities/surfer-dude.md +16 -0
- package/agentvibes.org/.claude/personalities/zen.md +16 -0
- package/agentvibes.org/.mcp-minimal.json +60 -0
- package/agentvibes.org/CHANGELOG.md +56 -0
- package/agentvibes.org/README.md +93 -0
- package/agentvibes.org/app/(auth)/layout.tsx +15 -0
- package/agentvibes.org/app/(auth)/reset-password/page.tsx +45 -0
- package/agentvibes.org/app/(auth)/signin/page.tsx +82 -0
- package/agentvibes.org/app/(auth)/signup/page.tsx +104 -0
- package/agentvibes.org/app/(default)/layout.tsx +31 -0
- package/agentvibes.org/app/(default)/page.tsx +20 -0
- package/agentvibes.org/app/api/hello/route.ts +3 -0
- package/agentvibes.org/app/css/additional-styles/theme.css +82 -0
- package/agentvibes.org/app/css/additional-styles/utility-patterns.css +55 -0
- package/agentvibes.org/app/css/style.css +100 -0
- package/agentvibes.org/app/layout.tsx +63 -0
- package/agentvibes.org/components/cta.tsx +58 -0
- package/agentvibes.org/components/features.tsx +256 -0
- package/agentvibes.org/components/hero-home.tsx +133 -0
- package/agentvibes.org/components/modal-video.tsx +137 -0
- package/agentvibes.org/components/page-illustration.tsx +55 -0
- package/agentvibes.org/components/spotlight.tsx +77 -0
- package/agentvibes.org/components/testimonials.tsx +282 -0
- package/agentvibes.org/components/ui/footer.tsx +82 -0
- package/agentvibes.org/components/ui/header.tsx +53 -0
- package/agentvibes.org/components/ui/logo.tsx +10 -0
- package/agentvibes.org/components/workflows.tsx +176 -0
- package/agentvibes.org/next.config.js +4 -0
- package/agentvibes.org/package-lock.json +1974 -0
- package/agentvibes.org/package.json +30 -0
- package/agentvibes.org/pnpm-lock.yaml +1141 -0
- package/agentvibes.org/postcss.config.js +5 -0
- package/agentvibes.org/public/audio/02-sarcastic.mp3 +0 -0
- package/agentvibes.org/public/audio/03-angry.mp3 +0 -0
- package/agentvibes.org/public/audio/04-grandpa.mp3 +0 -0
- package/agentvibes.org/public/audio/05-sarcastic-example2.mp3 +0 -0
- package/agentvibes.org/public/audio/french-rachel.mp3 +0 -0
- package/agentvibes.org/public/audio/spanish-antoni.mp3 +0 -0
- package/agentvibes.org/public/favicon.ico +0 -0
- package/agentvibes.org/public/fonts/nacelle-italic.woff2 +0 -0
- package/agentvibes.org/public/fonts/nacelle-regular.woff2 +0 -0
- package/agentvibes.org/public/fonts/nacelle-semibold.woff2 +0 -0
- package/agentvibes.org/public/fonts/nacelle-semibolditalic.woff2 +0 -0
- package/agentvibes.org/public/images/blurred-shape-gray.svg +1 -0
- package/agentvibes.org/public/images/blurred-shape.svg +1 -0
- package/agentvibes.org/public/images/client-logo-01.svg +1 -0
- package/agentvibes.org/public/images/client-logo-02.svg +1 -0
- package/agentvibes.org/public/images/client-logo-03.svg +1 -0
- package/agentvibes.org/public/images/client-logo-04.svg +1 -0
- package/agentvibes.org/public/images/client-logo-05.svg +1 -0
- package/agentvibes.org/public/images/client-logo-06.svg +1 -0
- package/agentvibes.org/public/images/client-logo-07.svg +1 -0
- package/agentvibes.org/public/images/client-logo-08.svg +1 -0
- package/agentvibes.org/public/images/client-logo-09.svg +1 -0
- package/agentvibes.org/public/images/features.png +0 -0
- package/agentvibes.org/public/images/footer-illustration.svg +1 -0
- package/agentvibes.org/public/images/hero-image-01.jpg +0 -0
- package/agentvibes.org/public/images/logo.svg +1 -0
- package/agentvibes.org/public/images/page-illustration.svg +1 -0
- package/agentvibes.org/public/images/secondary-illustration.svg +1 -0
- package/agentvibes.org/public/images/testimonial-01.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-02.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-03.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-04.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-05.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-06.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-07.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-08.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-09.jpg +0 -0
- package/agentvibes.org/public/images/workflow-01.png +0 -0
- package/agentvibes.org/public/images/workflow-02.png +0 -0
- package/agentvibes.org/public/images/workflow-03.png +0 -0
- package/agentvibes.org/public/videos/video.mp4 +0 -0
- package/agentvibes.org/tsconfig.json +28 -0
- package/agentvibes.org/utils/useMasonry.tsx +67 -0
- package/agentvibes.org/utils/useMousePosition.tsx +27 -0
- package/bin/mcp-server.js +122 -0
- package/docs/ai-optimized-documentation-standards.md +0 -0
- package/docs/architecture/provider-system.md +0 -0
- package/docs/remote-audio-setup.md +0 -0
- package/docs/voice-mapping-format.md +0 -0
- package/linkedin/vibe-coding-and-pulseaudio.md +121 -0
- package/mcp-server/QUICK_START.md +0 -0
- package/mcp-server/README.md +0 -0
- package/mcp-server/examples/claude_desktop_config.json +0 -0
- package/mcp-server/examples/claude_desktop_config_piper.json +0 -0
- package/mcp-server/examples/custom_instructions.md +0 -0
- package/mcp-server/pyproject.toml +0 -0
- package/mcp-server/requirements.txt +0 -0
- package/mcp-server/server.py +87 -25
- package/package.json +2 -2
- package/scripts/AUTO-MONITOR-SETUP.md +233 -0
- package/scripts/CHANGELOG-2025-10-16.md +268 -0
- package/scripts/README.md +114 -0
- package/scripts/TROUBLESHOOTING.md +258 -0
- package/scripts/audio-tunnel.config +17 -0
- package/scripts/audio-tunnel.config.example +18 -0
- package/scripts/fix-audio-tunnel-complete.sh +255 -0
- package/scripts/fix-audio-tunnel.sh +244 -54
- package/scripts/health-check-tunnel.sh +93 -0
- package/scripts/piper-voice/README.md +0 -0
- package/scripts/setup-auto-monitor.sh +86 -0
- package/scripts/setup-windows-audio.ps1 +0 -0
- package/src/commands/install-mcp.js +0 -0
- package/src/installer.js +18 -0
- package/templates/activation-instructions-bmad.md +0 -0
- package/templates/output-styles/agent-vibes.md +0 -0
- package/test/README.md +0 -0
- package/test/helpers/test-helper.bash +0 -0
- package/test/test-framework.md +0 -0
- package/test/unit/personality-manager.bats +0 -0
- package/test/unit/play-tts.bats +0 -0
- package/test/unit/voice-manager.bats +0 -0
- /package/bin/{mcp-server → mcp-server.sh} +0 -0
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
# Audio Tunnel Fix - October 16, 2025
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Fixed critical audio tunnel issues where AgentVibes TTS stopped working between ubuntu-rdp and Windows WSL. The root cause was stale SSH processes holding port 14713, combined with a stopped socat bridge.
|
|
6
|
+
|
|
7
|
+
## What Happened
|
|
8
|
+
|
|
9
|
+
### User Report
|
|
10
|
+
> "Audio on this computer is not even working for Agent Vibes"
|
|
11
|
+
> "speaker-test -t sine -f 1000 -l 1" fails with "Connection refused"
|
|
12
|
+
> "This was working just yesterday"
|
|
13
|
+
|
|
14
|
+
### Investigation
|
|
15
|
+
|
|
16
|
+
**Initial Symptoms:**
|
|
17
|
+
```bash
|
|
18
|
+
$ speaker-test -t sine -f 1000 -l 1
|
|
19
|
+
ALSA lib pulse.c:242:(pulse_connect) PulseAudio: Unable to connect: Connection terminated
|
|
20
|
+
Playback open error: -111,Connection refused
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**SSH Tunnel Warnings:**
|
|
24
|
+
```
|
|
25
|
+
Warning: remote port forwarding failed for listen port 14713
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Root Cause Analysis
|
|
29
|
+
|
|
30
|
+
**Primary Issue:** Multiple stale SSH processes on ubuntu-rdp were holding port 14713
|
|
31
|
+
```bash
|
|
32
|
+
$ sudo lsof -i :14713
|
|
33
|
+
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
|
|
34
|
+
sshd 2845015 administrator 7u IPv6 70604344 0t0 TCP ip6-localhost:14713 (LISTEN)
|
|
35
|
+
sshd 2845015 administrator 9u IPv4 70604345 0t0 TCP localhost:14713 (LISTEN)
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Secondary Issue:** socat bridge on WSL had stopped running
|
|
39
|
+
```bash
|
|
40
|
+
$ wsl ss -tlnp | grep 14713
|
|
41
|
+
# No output - socat not running!
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Why This Happened
|
|
45
|
+
|
|
46
|
+
1. **Zombie SSH Sessions**: Previous SSH connections didn't terminate cleanly, leaving processes bound to port 14713
|
|
47
|
+
2. **Background Job Termination**: The socat bridge PowerShell background job had ended
|
|
48
|
+
3. **No Automatic Recovery**: No healthcheck or recovery mechanism existed
|
|
49
|
+
|
|
50
|
+
## The Fix
|
|
51
|
+
|
|
52
|
+
### Steps Performed
|
|
53
|
+
|
|
54
|
+
1. **Identified stale processes:**
|
|
55
|
+
```bash
|
|
56
|
+
ssh ubuntu-rdp 'sudo lsof -i :14713'
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
2. **Forcefully killed them:**
|
|
60
|
+
```bash
|
|
61
|
+
ssh ubuntu-rdp 'sudo fuser -k 14713/tcp'
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
3. **Restarted socat bridge:**
|
|
65
|
+
```powershell
|
|
66
|
+
wsl pkill socat
|
|
67
|
+
Start-Job -ScriptBlock {
|
|
68
|
+
wsl socat 'TCP-LISTEN:14713,fork,reuseaddr' 'UNIX-CONNECT:/mnt/wslg/PulseServer'
|
|
69
|
+
} -Name "SocatAudioBridge"
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
4. **Created fresh SSH tunnel:**
|
|
73
|
+
```bash
|
|
74
|
+
wsl bash -c "ssh -f -N -R 14713:localhost:14713 ubuntu-rdp"
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
5. **Verified connection:**
|
|
78
|
+
```bash
|
|
79
|
+
ssh ubuntu-rdp 'netstat -tlnp | grep 14713'
|
|
80
|
+
# Output showed tunnel was listening
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Result
|
|
84
|
+
✅ Audio tunnel restored
|
|
85
|
+
✅ AgentVibes TTS working through Windows speakers
|
|
86
|
+
✅ speaker-test playing sound successfully
|
|
87
|
+
|
|
88
|
+
## Improvements Made
|
|
89
|
+
|
|
90
|
+
### 1. Updated fix-audio-tunnel.sh Script
|
|
91
|
+
|
|
92
|
+
**New Features:**
|
|
93
|
+
- ✅ Auto-detects environment (WSL vs ubuntu-rdp)
|
|
94
|
+
- ✅ Kills stale SSH processes on remote server automatically
|
|
95
|
+
- ✅ Restarts socat bridge if stopped
|
|
96
|
+
- ✅ Kills local stale SSH tunnels
|
|
97
|
+
- ✅ Creates fresh tunnel with verification
|
|
98
|
+
- ✅ Tests audio connection
|
|
99
|
+
- ✅ Provides clear status messages and instructions
|
|
100
|
+
|
|
101
|
+
**Script Locations:**
|
|
102
|
+
- `scripts/fix-audio-tunnel.sh` (main script)
|
|
103
|
+
- `scripts/fix-audio-tunnel-complete.sh` (backup)
|
|
104
|
+
|
|
105
|
+
### 2. Created TROUBLESHOOTING.md
|
|
106
|
+
|
|
107
|
+
Comprehensive troubleshooting guide documenting:
|
|
108
|
+
- Root cause analysis of today's issue
|
|
109
|
+
- Audio tunnel architecture diagram
|
|
110
|
+
- Common symptoms and solutions
|
|
111
|
+
- Diagnostic command reference
|
|
112
|
+
- Prevention best practices
|
|
113
|
+
- Success indicators
|
|
114
|
+
|
|
115
|
+
### 3. Updated scripts/README.md
|
|
116
|
+
|
|
117
|
+
Added documentation for:
|
|
118
|
+
- `fix-audio-tunnel.sh` usage and features
|
|
119
|
+
- Quick fix guide
|
|
120
|
+
- Common issues and their fixes
|
|
121
|
+
- Manual diagnostic commands
|
|
122
|
+
- Reference to TROUBLESHOOTING.md
|
|
123
|
+
|
|
124
|
+
## Technical Details
|
|
125
|
+
|
|
126
|
+
### Audio Tunnel Architecture
|
|
127
|
+
|
|
128
|
+
```
|
|
129
|
+
ubuntu-rdp (Remote) WSL (Windows) Windows
|
|
130
|
+
│ │ │
|
|
131
|
+
│ Speaker-test/TTS │ │
|
|
132
|
+
│ ↓ │ │
|
|
133
|
+
│ PULSE_SERVER= │ │
|
|
134
|
+
│ tcp:localhost:14713 │ │
|
|
135
|
+
│ ↓ │ │
|
|
136
|
+
│ [SSH Tunnel Port 14713] ←──┴──→ [socat Bridge] │
|
|
137
|
+
│ │ ↓ │
|
|
138
|
+
│ │ TCP:14713 → │
|
|
139
|
+
│ │ UNIX:/mnt/wslg/ │
|
|
140
|
+
│ │ PulseServer │
|
|
141
|
+
│ │ ↓ │
|
|
142
|
+
│ │ [WSL PulseAudio] ───→ Speakers
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Key Commands
|
|
146
|
+
|
|
147
|
+
**Diagnostic:**
|
|
148
|
+
```bash
|
|
149
|
+
# Check socat bridge
|
|
150
|
+
wsl ss -tlnp | grep 14713
|
|
151
|
+
|
|
152
|
+
# Check SSH tunnel
|
|
153
|
+
ssh ubuntu-rdp 'netstat -tlnp | grep 14713'
|
|
154
|
+
|
|
155
|
+
# Find stale processes
|
|
156
|
+
ssh ubuntu-rdp 'sudo lsof -i :14713'
|
|
157
|
+
|
|
158
|
+
# Test PulseAudio
|
|
159
|
+
ssh ubuntu-rdp 'export PULSE_SERVER=tcp:localhost:14713 && pactl info'
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
**Fix:**
|
|
163
|
+
```bash
|
|
164
|
+
# Automated fix (recommended)
|
|
165
|
+
./scripts/fix-audio-tunnel.sh
|
|
166
|
+
|
|
167
|
+
# Manual fix
|
|
168
|
+
ssh ubuntu-rdp 'sudo fuser -k 14713/tcp'
|
|
169
|
+
wsl pkill socat
|
|
170
|
+
wsl bash -c "ssh -f -N -R 14713:localhost:14713 ubuntu-rdp"
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## Prevention
|
|
174
|
+
|
|
175
|
+
### Recommendations Implemented
|
|
176
|
+
|
|
177
|
+
1. **Automated recovery script**: `fix-audio-tunnel.sh` handles all common failure modes
|
|
178
|
+
2. **Environment detection**: Script adapts to whether it's run from WSL or ubuntu-rdp
|
|
179
|
+
3. **Comprehensive diagnostics**: Script reports status at each step
|
|
180
|
+
4. **Documentation**: TROUBLESHOOTING.md provides detailed incident analysis
|
|
181
|
+
|
|
182
|
+
### Future Improvements
|
|
183
|
+
|
|
184
|
+
1. **Healthcheck cron job**: Periodically verify tunnel status
|
|
185
|
+
2. **Auto-restart on failure**: systemd service or scheduled task
|
|
186
|
+
3. **Monitoring alert**: Notify when tunnel goes down
|
|
187
|
+
4. **Persistent socat**: Run as systemd service instead of background job
|
|
188
|
+
|
|
189
|
+
## Lessons Learned
|
|
190
|
+
|
|
191
|
+
1. **Always check for stale processes first** - `sudo lsof -i :14713` should be the first diagnostic
|
|
192
|
+
2. **Force kill is sometimes necessary** - Regular termination may not release port bindings
|
|
193
|
+
3. **socat bridge is critical** - Even with a working tunnel, audio fails if socat isn't running
|
|
194
|
+
4. **Background jobs don't persist** - Need better solution for long-running processes
|
|
195
|
+
5. **Document immediately** - Capture troubleshooting steps while fresh
|
|
196
|
+
|
|
197
|
+
## Testing Performed
|
|
198
|
+
|
|
199
|
+
### Before Fix
|
|
200
|
+
```bash
|
|
201
|
+
$ speaker-test -t sine -f 1000 -l 1
|
|
202
|
+
Playback open error: -111,Connection refused
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### After Fix
|
|
206
|
+
```bash
|
|
207
|
+
$ speaker-test -t sine -f 1000 -l 1
|
|
208
|
+
# Audio played through Windows speakers successfully
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### Verification
|
|
212
|
+
```bash
|
|
213
|
+
$ ssh ubuntu-rdp 'export PULSE_SERVER=tcp:localhost:14713 && pactl info | head -3'
|
|
214
|
+
Server String: tcp:localhost:14713
|
|
215
|
+
Library Protocol Version: 35
|
|
216
|
+
Server Protocol Version: 35
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
## Files Modified
|
|
220
|
+
|
|
221
|
+
- `scripts/fix-audio-tunnel.sh` - Completely rewritten with comprehensive fixes
|
|
222
|
+
- `scripts/fix-audio-tunnel-complete.sh` - New backup copy
|
|
223
|
+
- `scripts/TROUBLESHOOTING.md` - New detailed troubleshooting guide
|
|
224
|
+
- `scripts/README.md` - Updated with new script documentation
|
|
225
|
+
- `scripts/CHANGELOG-2025-10-16.md` - This file
|
|
226
|
+
|
|
227
|
+
## Impact
|
|
228
|
+
|
|
229
|
+
✅ **Audio tunnel restored** to working state
|
|
230
|
+
✅ **Automated fix** now available for future issues
|
|
231
|
+
✅ **Documentation** created for troubleshooting
|
|
232
|
+
✅ **Prevention guidance** added to avoid recurrence
|
|
233
|
+
|
|
234
|
+
## Timeline
|
|
235
|
+
|
|
236
|
+
- **10:00 AM** - User reported audio not working
|
|
237
|
+
- **10:05 AM** - Initial investigation, found connection refused errors
|
|
238
|
+
- **10:15 AM** - Discovered stale SSH processes via `lsof`
|
|
239
|
+
- **10:20 AM** - Killed stale processes, restarted socat bridge
|
|
240
|
+
- **10:25 AM** - Created fresh tunnel, verified connection
|
|
241
|
+
- **10:30 AM** - Audio working, user confirmed success
|
|
242
|
+
- **10:40 AM** - Rewrote fix-audio-tunnel.sh script
|
|
243
|
+
- **10:50 AM** - Created TROUBLESHOOTING.md documentation
|
|
244
|
+
- **11:00 AM** - Updated README.md with new information
|
|
245
|
+
|
|
246
|
+
## User Feedback
|
|
247
|
+
|
|
248
|
+
> "its working now, what did u fix?"
|
|
249
|
+
|
|
250
|
+
User confirmed audio tunnel restored successfully.
|
|
251
|
+
|
|
252
|
+
## Related Issues
|
|
253
|
+
|
|
254
|
+
- Previous tunnel outages (not documented)
|
|
255
|
+
- X2Go PulseAudio conflicts (documented in guide)
|
|
256
|
+
- VS Code Remote SSH tunnel issues (documented in guide)
|
|
257
|
+
|
|
258
|
+
## References
|
|
259
|
+
|
|
260
|
+
- [TROUBLESHOOTING.md](./TROUBLESHOOTING.md) - Detailed troubleshooting guide
|
|
261
|
+
- [README.md](./README.md) - Scripts documentation
|
|
262
|
+
- [Remote Audio Setup Guide](../docs/remote-audio-setup.md) - Original setup guide
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
**Incident resolved:** October 16, 2025
|
|
267
|
+
**Resolution time:** ~30 minutes
|
|
268
|
+
**Automated fix:** Available via `./scripts/fix-audio-tunnel.sh`
|
package/scripts/README.md
CHANGED
|
@@ -82,10 +82,124 @@ Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
|
|
|
82
82
|
For detailed information about the remote audio setup, see:
|
|
83
83
|
- [Remote Audio Setup Guide](../docs/remote-audio-setup.md)
|
|
84
84
|
|
|
85
|
+
#### `fix-audio-tunnel.sh` (NEW - WSL or Remote Server)
|
|
86
|
+
|
|
87
|
+
**The easiest way to fix audio tunnel issues!**
|
|
88
|
+
|
|
89
|
+
Auto-detects environment and runs appropriate fixes for stale SSH processes, stopped socat bridges, and connection issues.
|
|
90
|
+
|
|
91
|
+
**Requirements:**
|
|
92
|
+
- Run from WSL (for complete fix) OR ubuntu-rdp (for local fix)
|
|
93
|
+
- SSH access configured
|
|
94
|
+
- sudo privileges for killing processes
|
|
95
|
+
|
|
96
|
+
**Usage:**
|
|
97
|
+
```bash
|
|
98
|
+
# From WSL - runs complete fix
|
|
99
|
+
./scripts/fix-audio-tunnel.sh
|
|
100
|
+
|
|
101
|
+
# From ubuntu-rdp - runs local fix
|
|
102
|
+
./scripts/fix-audio-tunnel.sh
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
**What it does (when run from WSL):**
|
|
106
|
+
1. ✅ Kills stale SSH processes on ubuntu-rdp holding port 14713
|
|
107
|
+
2. ✅ Restarts socat bridge on WSL if needed
|
|
108
|
+
3. ✅ Kills local stale SSH tunnels
|
|
109
|
+
4. ✅ Creates fresh SSH tunnel to ubuntu-rdp
|
|
110
|
+
5. ✅ Tests audio connection
|
|
111
|
+
6. ✅ Provides clear status and usage instructions
|
|
112
|
+
|
|
113
|
+
**What it does (when run from ubuntu-rdp):**
|
|
114
|
+
1. ✅ Kills local processes using port 14713
|
|
115
|
+
2. ✅ Waits for tunnel to be re-established
|
|
116
|
+
3. ✅ Tests audio connection
|
|
117
|
+
4. ✅ Plays test tone through Windows speakers
|
|
118
|
+
|
|
119
|
+
**When to use:**
|
|
120
|
+
- Audio stopped working suddenly
|
|
121
|
+
- Getting "Connection refused" errors
|
|
122
|
+
- SSH shows "Warning: remote port forwarding failed"
|
|
123
|
+
- speaker-test fails
|
|
124
|
+
- AgentVibes TTS not playing through Windows speakers
|
|
125
|
+
|
|
126
|
+
#### `check-audio-tunnel.sh` (Diagnostic)
|
|
127
|
+
|
|
128
|
+
Checks audio tunnel status without making changes. Useful for verifying setup or diagnosing issues.
|
|
129
|
+
|
|
130
|
+
**Usage:**
|
|
131
|
+
```bash
|
|
132
|
+
./scripts/check-audio-tunnel.sh
|
|
133
|
+
```
|
|
134
|
+
|
|
85
135
|
## Troubleshooting
|
|
86
136
|
|
|
137
|
+
### Quick Fix
|
|
138
|
+
|
|
139
|
+
**If audio stopped working**, run this first:
|
|
140
|
+
```bash
|
|
141
|
+
# From WSL
|
|
142
|
+
./scripts/fix-audio-tunnel.sh
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
This will automatically fix the most common issues:
|
|
146
|
+
- Stale SSH processes blocking port 14713
|
|
147
|
+
- Stopped socat bridge
|
|
148
|
+
- Conflicting SSH tunnels
|
|
149
|
+
|
|
87
150
|
### Common Issues
|
|
88
151
|
|
|
152
|
+
**Issue 1: "Warning: remote port forwarding failed for listen port 14713"**
|
|
153
|
+
|
|
154
|
+
**Symptom:** SSH tunnel fails to establish
|
|
155
|
+
**Cause:** Old SSH sessions left zombie processes holding port 14713
|
|
156
|
+
**Fix:** `./scripts/fix-audio-tunnel.sh` (kills stale processes automatically)
|
|
157
|
+
|
|
158
|
+
**Issue 2: "Connection refused" / "ALSA lib pulse.c: Unable to connect"**
|
|
159
|
+
|
|
160
|
+
**Symptom:** Audio playback fails
|
|
161
|
+
**Cause:** socat bridge on WSL stopped running
|
|
162
|
+
**Fix:** `./scripts/fix-audio-tunnel.sh` (restarts socat automatically)
|
|
163
|
+
|
|
164
|
+
**Issue 3: Audio works intermittently**
|
|
165
|
+
|
|
166
|
+
**Symptom:** Audio plays sometimes but not always
|
|
167
|
+
**Cause:** Multiple SSH sessions creating conflicting tunnels
|
|
168
|
+
**Fix:** `./scripts/fix-audio-tunnel.sh` (kills all tunnels and creates one clean tunnel)
|
|
169
|
+
|
|
170
|
+
### Manual Diagnostics
|
|
171
|
+
|
|
172
|
+
If the automated fix doesn't work, try these manual checks:
|
|
173
|
+
|
|
174
|
+
**Check socat bridge (WSL):**
|
|
175
|
+
```bash
|
|
176
|
+
wsl ss -tlnp | grep 14713
|
|
177
|
+
# Expected: LISTEN 0 5 *:14713 *:* users:(("socat"...))
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
**Check SSH tunnel (ubuntu-rdp):**
|
|
181
|
+
```bash
|
|
182
|
+
ssh ubuntu-rdp 'netstat -tlnp | grep 14713'
|
|
183
|
+
# Expected: tcp 0 0 127.0.0.1:14713 0.0.0.0:* LISTEN
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**Find stale processes:**
|
|
187
|
+
```bash
|
|
188
|
+
ssh ubuntu-rdp 'sudo lsof -i :14713'
|
|
189
|
+
# Should show only one sshd process
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
**Test audio:**
|
|
193
|
+
```bash
|
|
194
|
+
ssh ubuntu-rdp
|
|
195
|
+
export PULSE_SERVER=tcp:localhost:14713
|
|
196
|
+
speaker-test -t sine -f 1000 -l 1
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
**Detailed troubleshooting guide:** See [TROUBLESHOOTING.md](./TROUBLESHOOTING.md) for in-depth analysis of recent issues and their solutions.
|
|
200
|
+
|
|
201
|
+
### Legacy Issues
|
|
202
|
+
|
|
89
203
|
**Audio doesn't play:**
|
|
90
204
|
- Ensure WSL is updated: `wsl --update`
|
|
91
205
|
- Restart WSL: `wsl --shutdown`
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
# Audio Tunnel Troubleshooting - 2025-10-16
|
|
2
|
+
|
|
3
|
+
## Problem Summary
|
|
4
|
+
|
|
5
|
+
The audio tunnel that was working yesterday stopped functioning today. Users experienced:
|
|
6
|
+
- `speaker-test` failing with "Connection refused"
|
|
7
|
+
- SSH tunnel showing "Warning: remote port forwarding failed for listen port 14713"
|
|
8
|
+
|
|
9
|
+
## Root Cause Analysis
|
|
10
|
+
|
|
11
|
+
### Primary Issue: Stale SSH Processes
|
|
12
|
+
**Multiple old SSH sessions** on ubuntu-rdp (remote server) were holding port 14713, preventing new tunnels from binding to that port.
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
# Investigation revealed:
|
|
16
|
+
$ sudo lsof -i :14713
|
|
17
|
+
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
|
|
18
|
+
sshd 2845015 administrator 7u IPv6 70604344 0t0 TCP ip6-localhost:14713 (LISTEN)
|
|
19
|
+
sshd 2845015 administrator 9u IPv4 70604345 0t0 TCP localhost:14713 (LISTEN)
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Secondary Issue: Stopped socat Bridge
|
|
23
|
+
The socat bridge on WSL (Windows side) had stopped running, breaking the connection chain even if the tunnel worked.
|
|
24
|
+
|
|
25
|
+
## How the Audio Tunnel Works
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
ubuntu-rdp (Remote) WSL (Windows) Windows
|
|
29
|
+
│ │ │
|
|
30
|
+
│ Speaker-test/TTS │ │
|
|
31
|
+
│ ↓ │ │
|
|
32
|
+
│ PULSE_SERVER= │ │
|
|
33
|
+
│ tcp:localhost:14713 │ │
|
|
34
|
+
│ ↓ │ │
|
|
35
|
+
│ [SSH Tunnel Port 14713] ←──┴──→ [socat Bridge] │
|
|
36
|
+
│ │ ↓ │
|
|
37
|
+
│ │ TCP:14713 → │
|
|
38
|
+
│ │ UNIX:/mnt/wslg/ │
|
|
39
|
+
│ │ PulseServer │
|
|
40
|
+
│ │ ↓ │
|
|
41
|
+
│ │ [WSL PulseAudio] ───→ Speakers
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Symptoms
|
|
45
|
+
|
|
46
|
+
1. **SSH tunnel fails to establish:**
|
|
47
|
+
```
|
|
48
|
+
Warning: remote port forwarding failed for listen port 14713
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
2. **Audio playback error:**
|
|
52
|
+
```
|
|
53
|
+
ALSA lib pulse.c:242:(pulse_connect) PulseAudio: Unable to connect: Connection terminated
|
|
54
|
+
Playback open error: -111,Connection refused
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
3. **pactl info shows local connection instead of TCP:**
|
|
58
|
+
```
|
|
59
|
+
Server String: unix:/mnt/wslg/PulseServer
|
|
60
|
+
# Instead of:
|
|
61
|
+
Server String: tcp:localhost:14713
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## The Fix
|
|
65
|
+
|
|
66
|
+
### Step 1: Kill Stale Processes on Remote Server
|
|
67
|
+
```bash
|
|
68
|
+
ssh ubuntu-rdp 'sudo fuser -k 14713/tcp'
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
This forcefully kills all processes (including zombie SSH sessions) holding port 14713 on the remote server.
|
|
72
|
+
|
|
73
|
+
### Step 2: Restart socat Bridge on WSL
|
|
74
|
+
```powershell
|
|
75
|
+
# Kill any existing socat
|
|
76
|
+
wsl pkill socat
|
|
77
|
+
|
|
78
|
+
# Start fresh socat bridge
|
|
79
|
+
Start-Job -ScriptBlock {
|
|
80
|
+
wsl socat 'TCP-LISTEN:14713,fork,reuseaddr' 'UNIX-CONNECT:/mnt/wslg/PulseServer'
|
|
81
|
+
} -Name "SocatAudioBridge"
|
|
82
|
+
|
|
83
|
+
# Verify it's running
|
|
84
|
+
wsl ss -tlnp | Select-String ":14713"
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Step 3: Kill Local Stale SSH Tunnels
|
|
88
|
+
```bash
|
|
89
|
+
wsl bash -c "pkill -f 'ssh.*ubuntu-rdp'"
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Step 4: Create Fresh SSH Tunnel
|
|
93
|
+
```bash
|
|
94
|
+
wsl bash -c "ssh -f -N -R 14713:localhost:14713 ubuntu-rdp"
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Step 5: Verify Everything Works
|
|
98
|
+
```bash
|
|
99
|
+
# Check tunnel exists on remote
|
|
100
|
+
wsl bash -c "ssh ubuntu-rdp 'netstat -tlnp | grep 14713'"
|
|
101
|
+
|
|
102
|
+
# Test audio
|
|
103
|
+
ssh ubuntu-rdp
|
|
104
|
+
export PULSE_SERVER=tcp:localhost:14713
|
|
105
|
+
speaker-test -t sine -f 1000 -l 1
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Prevention
|
|
109
|
+
|
|
110
|
+
### Why This Happens
|
|
111
|
+
- SSH sessions don't always clean up properly when disconnected
|
|
112
|
+
- Network interruptions can leave zombie processes
|
|
113
|
+
- Multiple VS Code Remote sessions can create conflicting tunnels
|
|
114
|
+
- X2Go client (if enabled) can conflict with SSH audio tunnel
|
|
115
|
+
|
|
116
|
+
### Best Practices
|
|
117
|
+
|
|
118
|
+
1. **Always use `-f` flag for background tunnels:**
|
|
119
|
+
```bash
|
|
120
|
+
ssh -f -N -R 14713:localhost:14713 ubuntu-rdp
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
2. **Check for existing tunnels before creating new ones:**
|
|
124
|
+
```bash
|
|
125
|
+
ssh ubuntu-rdp 'sudo lsof -i :14713'
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
3. **Clean exit from SSH sessions:**
|
|
129
|
+
- Use `exit` command instead of closing terminal
|
|
130
|
+
- Avoid killing terminal windows with active SSH sessions
|
|
131
|
+
|
|
132
|
+
4. **Disable X2Go PulseAudio:**
|
|
133
|
+
- X2Go's audio support conflicts with SSH tunnel
|
|
134
|
+
- Disable in X2Go session settings under "Media/Sound"
|
|
135
|
+
|
|
136
|
+
5. **Use the automated fix script:**
|
|
137
|
+
```bash
|
|
138
|
+
./scripts/fix-audio-tunnel.sh
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## Automated Solution
|
|
142
|
+
|
|
143
|
+
The updated `fix-audio-tunnel.sh` script now handles:
|
|
144
|
+
- ✅ Kills stale SSH processes on remote server
|
|
145
|
+
- ✅ Restarts socat bridge on WSL
|
|
146
|
+
- ✅ Kills local stale SSH tunnels
|
|
147
|
+
- ✅ Creates fresh tunnel
|
|
148
|
+
- ✅ Verifies connection works
|
|
149
|
+
- ✅ Tests audio playback
|
|
150
|
+
|
|
151
|
+
## Future Improvements
|
|
152
|
+
|
|
153
|
+
### 1. Healthcheck Script
|
|
154
|
+
Create a cron job or systemd timer that periodically checks tunnel health:
|
|
155
|
+
```bash
|
|
156
|
+
#!/bin/bash
|
|
157
|
+
# /usr/local/bin/check-audio-tunnel.sh
|
|
158
|
+
if ! ss -tlnp | grep -q :14713; then
|
|
159
|
+
# Alert or auto-fix
|
|
160
|
+
logger "Audio tunnel down, attempting fix"
|
|
161
|
+
/path/to/fix-audio-tunnel.sh
|
|
162
|
+
fi
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### 2. SSH Config Improvement
|
|
166
|
+
Add these to `~/.ssh/config` for more reliable connections:
|
|
167
|
+
```
|
|
168
|
+
Host ubuntu-rdp
|
|
169
|
+
ServerAliveInterval 30
|
|
170
|
+
ServerAliveCountMax 3
|
|
171
|
+
ExitOnForwardFailure yes
|
|
172
|
+
# This makes SSH exit if tunnel can't be created
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### 3. Monitoring
|
|
176
|
+
Add tunnel status to shell prompt or status bar:
|
|
177
|
+
```bash
|
|
178
|
+
# In .bashrc or .zshrc
|
|
179
|
+
audio_tunnel_status() {
|
|
180
|
+
if ss -tlnp 2>/dev/null | grep -q :14713; then
|
|
181
|
+
echo "🔊"
|
|
182
|
+
else
|
|
183
|
+
echo "🔇"
|
|
184
|
+
fi
|
|
185
|
+
}
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
## Related Issues
|
|
189
|
+
|
|
190
|
+
- **VS Code Remote SSH**: May need `"remote.SSH.useExecServer": false` in settings
|
|
191
|
+
- **Multiple WSL instances**: Each instance needs its own socat bridge
|
|
192
|
+
- **Firewall rules**: Ensure UFW allows localhost connections to 14713
|
|
193
|
+
- **PulseAudio config**: Must have `autospawn = no` and `auth-anonymous = true`
|
|
194
|
+
|
|
195
|
+
## Key Learnings
|
|
196
|
+
|
|
197
|
+
1. **Always check for stale processes first** - `sudo lsof -i :14713` should be the first diagnostic command
|
|
198
|
+
2. **socat bridge is critical** - Without it, even a working tunnel won't function
|
|
199
|
+
3. **Force kill is necessary** - Regular process termination may not clear port bindings
|
|
200
|
+
4. **Background tunnels need monitoring** - The `-f` flag creates fire-and-forget tunnels that need healthchecks
|
|
201
|
+
5. **Environment variable persistence** - `PULSE_SERVER` must be set in every new shell session
|
|
202
|
+
|
|
203
|
+
## Success Indicators
|
|
204
|
+
|
|
205
|
+
When working correctly, you should see:
|
|
206
|
+
|
|
207
|
+
1. **On WSL:**
|
|
208
|
+
```bash
|
|
209
|
+
wsl ss -tlnp | grep 14713
|
|
210
|
+
# Output: socat listening on *:14713
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
2. **On ubuntu-rdp:**
|
|
214
|
+
```bash
|
|
215
|
+
netstat -tlnp | grep 14713
|
|
216
|
+
# Output: listening on 127.0.0.1:14713 and ::1:14713
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
3. **PulseAudio connection:**
|
|
220
|
+
```bash
|
|
221
|
+
export PULSE_SERVER=tcp:localhost:14713
|
|
222
|
+
pactl info | head -3
|
|
223
|
+
# Output: Server String: tcp:localhost:14713
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
4. **Audio playback:**
|
|
227
|
+
```bash
|
|
228
|
+
speaker-test -t sine -f 1000 -l 1
|
|
229
|
+
# Output: Sound plays through Windows speakers
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
## Diagnostic Commands Cheat Sheet
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
# Check socat bridge (on WSL)
|
|
236
|
+
wsl ss -tlnp | grep 14713
|
|
237
|
+
|
|
238
|
+
# Check tunnel on remote
|
|
239
|
+
ssh ubuntu-rdp 'netstat -tlnp | grep 14713'
|
|
240
|
+
|
|
241
|
+
# Find processes using port
|
|
242
|
+
ssh ubuntu-rdp 'sudo lsof -i :14713'
|
|
243
|
+
|
|
244
|
+
# Check PulseAudio connection
|
|
245
|
+
ssh ubuntu-rdp 'export PULSE_SERVER=tcp:localhost:14713 && pactl info'
|
|
246
|
+
|
|
247
|
+
# Test audio
|
|
248
|
+
ssh ubuntu-rdp 'export PULSE_SERVER=tcp:localhost:14713 && speaker-test -t sine -f 1000 -l 1'
|
|
249
|
+
|
|
250
|
+
# Kill stale processes
|
|
251
|
+
ssh ubuntu-rdp 'sudo fuser -k 14713/tcp'
|
|
252
|
+
|
|
253
|
+
# Kill local SSH tunnels
|
|
254
|
+
wsl pkill -f 'ssh.*ubuntu-rdp'
|
|
255
|
+
|
|
256
|
+
# Create new tunnel
|
|
257
|
+
wsl bash -c "ssh -f -N -R 14713:localhost:14713 ubuntu-rdp"
|
|
258
|
+
```
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# AgentVibes Audio Tunnel Configuration
|
|
2
|
+
# Personal configuration - DO NOT COMMIT
|
|
3
|
+
|
|
4
|
+
# Remote server hostname (from your ~/.ssh/config)
|
|
5
|
+
REMOTE_HOST="ubuntu-rdp"
|
|
6
|
+
|
|
7
|
+
# Tunnel port (default: 14713)
|
|
8
|
+
TUNNEL_PORT="14713"
|
|
9
|
+
|
|
10
|
+
# PulseAudio socket path (WSL default)
|
|
11
|
+
PULSE_SOCKET="/mnt/wslg/PulseServer"
|
|
12
|
+
|
|
13
|
+
# Log file for automatic fixes
|
|
14
|
+
AUTO_FIX_LOG="/tmp/audio-tunnel-autofix.log"
|
|
15
|
+
|
|
16
|
+
# Healthcheck interval in minutes (for cron setup)
|
|
17
|
+
CHECK_INTERVAL="5"
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# AgentVibes Audio Tunnel Configuration
|
|
2
|
+
# Copy this file to audio-tunnel.config and customize for your setup
|
|
3
|
+
# DO NOT commit audio-tunnel.config to git (it's in .gitignore)
|
|
4
|
+
|
|
5
|
+
# Remote server hostname (from your ~/.ssh/config)
|
|
6
|
+
REMOTE_HOST="your-remote-host"
|
|
7
|
+
|
|
8
|
+
# Tunnel port (default: 14713)
|
|
9
|
+
TUNNEL_PORT="14713"
|
|
10
|
+
|
|
11
|
+
# PulseAudio socket path (WSL default)
|
|
12
|
+
PULSE_SOCKET="/mnt/wslg/PulseServer"
|
|
13
|
+
|
|
14
|
+
# Log file for automatic fixes
|
|
15
|
+
AUTO_FIX_LOG="/tmp/audio-tunnel-autofix.log"
|
|
16
|
+
|
|
17
|
+
# Healthcheck interval in minutes (for cron setup)
|
|
18
|
+
CHECK_INTERVAL="5"
|