agentvibes 2.4.3-beta.2 → 2.4.3
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 +7 -7
- package/RELEASE_NOTES.md +94 -119
- package/package.json +1 -1
- package/.bmad-core/agent-teams/team-all.yaml +0 -15
- package/.bmad-core/agent-teams/team-fullstack.yaml +0 -19
- package/.bmad-core/agent-teams/team-ide-minimal.yaml +0 -11
- package/.bmad-core/agent-teams/team-no-ui.yaml +0 -14
- package/.bmad-core/agents/analyst.md +0 -84
- package/.bmad-core/agents/architect.md +0 -85
- package/.bmad-core/agents/bmad-master.md +0 -110
- package/.bmad-core/agents/bmad-orchestrator.md +0 -147
- package/.bmad-core/agents/dev.md +0 -81
- package/.bmad-core/agents/pm.md +0 -84
- package/.bmad-core/agents/po.md +0 -79
- package/.bmad-core/agents/qa.md +0 -87
- package/.bmad-core/agents/sm.md +0 -65
- package/.bmad-core/agents/ux-expert.md +0 -69
- package/.bmad-core/checklists/architect-checklist.md +0 -440
- package/.bmad-core/checklists/change-checklist.md +0 -184
- package/.bmad-core/checklists/pm-checklist.md +0 -372
- package/.bmad-core/checklists/po-master-checklist.md +0 -434
- package/.bmad-core/checklists/story-dod-checklist.md +0 -96
- package/.bmad-core/checklists/story-draft-checklist.md +0 -155
- package/.bmad-core/core-config.yaml +0 -22
- package/.bmad-core/data/bmad-kb.md +0 -809
- package/.bmad-core/data/brainstorming-techniques.md +0 -38
- package/.bmad-core/data/elicitation-methods.md +0 -156
- package/.bmad-core/data/technical-preferences.md +0 -5
- package/.bmad-core/data/test-levels-framework.md +0 -148
- package/.bmad-core/data/test-priorities-matrix.md +0 -174
- package/.bmad-core/enhanced-ide-development-workflow.md +0 -248
- package/.bmad-core/install-manifest.yaml +0 -230
- package/.bmad-core/tasks/advanced-elicitation.md +0 -119
- package/.bmad-core/tasks/apply-qa-fixes.md +0 -150
- package/.bmad-core/tasks/brownfield-create-epic.md +0 -162
- package/.bmad-core/tasks/brownfield-create-story.md +0 -149
- package/.bmad-core/tasks/correct-course.md +0 -72
- package/.bmad-core/tasks/create-brownfield-story.md +0 -314
- package/.bmad-core/tasks/create-deep-research-prompt.md +0 -280
- package/.bmad-core/tasks/create-doc.md +0 -103
- package/.bmad-core/tasks/create-next-story.md +0 -114
- package/.bmad-core/tasks/document-project.md +0 -345
- package/.bmad-core/tasks/execute-checklist.md +0 -88
- package/.bmad-core/tasks/facilitate-brainstorming-session.md +0 -138
- package/.bmad-core/tasks/generate-ai-frontend-prompt.md +0 -53
- package/.bmad-core/tasks/index-docs.md +0 -175
- package/.bmad-core/tasks/kb-mode-interaction.md +0 -77
- package/.bmad-core/tasks/nfr-assess.md +0 -345
- package/.bmad-core/tasks/qa-gate.md +0 -163
- package/.bmad-core/tasks/review-story.md +0 -316
- package/.bmad-core/tasks/risk-profile.md +0 -355
- package/.bmad-core/tasks/shard-doc.md +0 -187
- package/.bmad-core/tasks/test-design.md +0 -176
- package/.bmad-core/tasks/trace-requirements.md +0 -266
- package/.bmad-core/tasks/validate-next-story.md +0 -136
- package/.bmad-core/templates/architecture-tmpl.yaml +0 -651
- package/.bmad-core/templates/brainstorming-output-tmpl.yaml +0 -156
- package/.bmad-core/templates/brownfield-architecture-tmpl.yaml +0 -477
- package/.bmad-core/templates/brownfield-prd-tmpl.yaml +0 -281
- package/.bmad-core/templates/competitor-analysis-tmpl.yaml +0 -307
- package/.bmad-core/templates/front-end-architecture-tmpl.yaml +0 -219
- package/.bmad-core/templates/front-end-spec-tmpl.yaml +0 -350
- package/.bmad-core/templates/fullstack-architecture-tmpl.yaml +0 -824
- package/.bmad-core/templates/market-research-tmpl.yaml +0 -253
- package/.bmad-core/templates/prd-tmpl.yaml +0 -203
- package/.bmad-core/templates/project-brief-tmpl.yaml +0 -222
- package/.bmad-core/templates/qa-gate-tmpl.yaml +0 -103
- package/.bmad-core/templates/story-tmpl.yaml +0 -138
- package/.bmad-core/user-guide.md +0 -577
- package/.bmad-core/utils/bmad-doc-template.md +0 -327
- package/.bmad-core/utils/workflow-management.md +0 -71
- package/.bmad-core/workflows/brownfield-fullstack.yaml +0 -298
- package/.bmad-core/workflows/brownfield-service.yaml +0 -188
- package/.bmad-core/workflows/brownfield-ui.yaml +0 -198
- package/.bmad-core/workflows/greenfield-fullstack.yaml +0 -241
- package/.bmad-core/workflows/greenfield-service.yaml +0 -207
- package/.bmad-core/workflows/greenfield-ui.yaml +0 -236
- package/.bmad-core/working-in-the-brownfield.md +0 -606
- package/.claude/commands/BMad/analyst.md +0 -88
- package/.claude/commands/BMad/architect.md +0 -89
- package/.claude/commands/BMad/bmad-master.md +0 -114
- package/.claude/commands/BMad/bmad-orchestrator.md +0 -151
- package/.claude/commands/BMad/dev.md +0 -85
- package/.claude/commands/BMad/pm.md +0 -88
- package/.claude/commands/BMad/po.md +0 -83
- package/.claude/commands/BMad/qa.md +0 -91
- package/.claude/commands/BMad/sm.md +0 -69
- package/.claude/commands/BMad/tasks/advanced-elicitation.md +0 -123
- package/.claude/commands/BMad/tasks/apply-qa-fixes.md +0 -154
- package/.claude/commands/BMad/tasks/brownfield-create-epic.md +0 -166
- package/.claude/commands/BMad/tasks/brownfield-create-story.md +0 -153
- package/.claude/commands/BMad/tasks/correct-course.md +0 -76
- package/.claude/commands/BMad/tasks/create-brownfield-story.md +0 -318
- package/.claude/commands/BMad/tasks/create-deep-research-prompt.md +0 -284
- package/.claude/commands/BMad/tasks/create-doc.md +0 -107
- package/.claude/commands/BMad/tasks/create-next-story.md +0 -118
- package/.claude/commands/BMad/tasks/document-project.md +0 -349
- package/.claude/commands/BMad/tasks/execute-checklist.md +0 -92
- package/.claude/commands/BMad/tasks/facilitate-brainstorming-session.md +0 -142
- package/.claude/commands/BMad/tasks/generate-ai-frontend-prompt.md +0 -57
- package/.claude/commands/BMad/tasks/index-docs.md +0 -179
- package/.claude/commands/BMad/tasks/kb-mode-interaction.md +0 -81
- package/.claude/commands/BMad/tasks/nfr-assess.md +0 -349
- package/.claude/commands/BMad/tasks/qa-gate.md +0 -167
- package/.claude/commands/BMad/tasks/review-story.md +0 -320
- package/.claude/commands/BMad/tasks/risk-profile.md +0 -359
- package/.claude/commands/BMad/tasks/shard-doc.md +0 -191
- package/.claude/commands/BMad/tasks/test-design.md +0 -180
- package/.claude/commands/BMad/tasks/trace-requirements.md +0 -270
- package/.claude/commands/BMad/tasks/validate-next-story.md +0 -140
- package/.claude/commands/BMad/ux-expert.md +0 -73
- package/.claude/github-star-reminder.txt +0 -1
- package/.claude/piper-voices-dir.txt +0 -1
- package/.claude/plugins/bmad-voices-enabled.flag +0 -0
- package/.mcp.json +0 -88
- package/RELEASE_NOTES_v2.4.0_DRAFT.md +0 -116
- package/RELEASE_NOTES_v2.4.1_DRAFT.md +0 -61
- package/docs/2025-11-15_15-14-33.snagx +0 -0
- package/docs/Screenshot 2025-11-15 151325.png +0 -0
- package/docs/Screenshot 2025-11-15 151432.png +0 -0
- package/docs/macos-piper-issue.md +0 -172
- package/docs/stargazer-cms-prd.md +0 -1918
- package/docs/whatsapp-plugin-github-issue.md +0 -393
- package/docs/whatsapp-tts-plugin-feasibility.md +0 -418
- package/docs/whatsapp-tts-standalone-plugin.md +0 -628
- package/github-profile-draft.md +0 -57
- package/linkedin/vibe-coding-and-pulseaudio.md +0 -121
- package/mcp-server/agentvibes.db +0 -0
- package/scripts/audio-tunnel.config +0 -17
|
@@ -1,628 +0,0 @@
|
|
|
1
|
-
# WhatsApp TTS Plugin - Standalone Architecture
|
|
2
|
-
|
|
3
|
-
## Executive Summary
|
|
4
|
-
|
|
5
|
-
**Status**: ✅ **HIGHLY FEASIBLE - STANDALONE DESIGN**
|
|
6
|
-
|
|
7
|
-
The WhatsApp TTS plugin should be a **completely independent repository** that depends on AgentVibes as an external library, similar to how other MCP plugins work.
|
|
8
|
-
|
|
9
|
-
## Why Standalone?
|
|
10
|
-
|
|
11
|
-
### Benefits of Independent Repository
|
|
12
|
-
|
|
13
|
-
✅ **Separation of Concerns**: Plugin development doesn't affect AgentVibes core
|
|
14
|
-
✅ **Independent Versioning**: Plugin can release updates without AgentVibes releases
|
|
15
|
-
✅ **Easier Maintenance**: Different maintainers can own different repos
|
|
16
|
-
✅ **Cleaner Dependencies**: Users only install what they need
|
|
17
|
-
✅ **Community Contributions**: Easier for external contributors
|
|
18
|
-
✅ **Multiple Plugins**: Opens path for Signal-TTS, Telegram-TTS, Slack-TTS, etc.
|
|
19
|
-
|
|
20
|
-
### Dependency Model
|
|
21
|
-
|
|
22
|
-
```
|
|
23
|
-
┌─────────────────────────────────────┐
|
|
24
|
-
│ whatsapp-agentvibes-plugin │ ← New Standalone Repo
|
|
25
|
-
│ (Independent MCP Server) │
|
|
26
|
-
└──────────────┬──────────────────────┘
|
|
27
|
-
│ depends on (via subprocess/API calls)
|
|
28
|
-
│
|
|
29
|
-
┌────────┴─────────┬────────────────┐
|
|
30
|
-
▼ ▼ ▼
|
|
31
|
-
┌────────────┐ ┌──────────────┐ ┌─────────────┐
|
|
32
|
-
│ WhatsApp │ │ AgentVibes │ │ FastMCP │
|
|
33
|
-
│ MCP Server │ │ (installed) │ │ (Python) │
|
|
34
|
-
└────────────┘ └──────────────┘ └─────────────┘
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
## Standalone Repository Structure
|
|
38
|
-
|
|
39
|
-
### Repository Name
|
|
40
|
-
`whatsapp-agentvibes` or `agentvibes-whatsapp-plugin`
|
|
41
|
-
|
|
42
|
-
### Directory Structure
|
|
43
|
-
|
|
44
|
-
```
|
|
45
|
-
whatsapp-agentvibes/
|
|
46
|
-
├── README.md # Installation & usage guide
|
|
47
|
-
├── LICENSE # Apache 2.0
|
|
48
|
-
├── requirements.txt # Python dependencies
|
|
49
|
-
├── pyproject.toml # Package metadata
|
|
50
|
-
├── setup.py # Installation script
|
|
51
|
-
│
|
|
52
|
-
├── src/
|
|
53
|
-
│ └── whatsapp_agentvibes/
|
|
54
|
-
│ ├── __init__.py
|
|
55
|
-
│ ├── server.py # Main MCP server
|
|
56
|
-
│ ├── monitor.py # WhatsApp message monitoring
|
|
57
|
-
│ ├── voice_manager.py # Voice assignment logic
|
|
58
|
-
│ ├── config.py # Configuration management
|
|
59
|
-
│ └── agentvibes_client.py # AgentVibes integration layer
|
|
60
|
-
│
|
|
61
|
-
├── config/
|
|
62
|
-
│ ├── notifications.json.example # Example configuration
|
|
63
|
-
│ └── claude_desktop_config.json # MCP setup example
|
|
64
|
-
│
|
|
65
|
-
├── tests/
|
|
66
|
-
│ ├── test_voice_assignment.py
|
|
67
|
-
│ ├── test_monitor.py
|
|
68
|
-
│ └── test_config.py
|
|
69
|
-
│
|
|
70
|
-
└── docs/
|
|
71
|
-
├── installation.md
|
|
72
|
-
├── configuration.md
|
|
73
|
-
├── troubleshooting.md
|
|
74
|
-
└── development.md
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
## How It Integrates with AgentVibes
|
|
78
|
-
|
|
79
|
-
### Option 1: Subprocess Calls (RECOMMENDED)
|
|
80
|
-
|
|
81
|
-
**The plugin calls AgentVibes' play-tts.sh script directly:**
|
|
82
|
-
|
|
83
|
-
```python
|
|
84
|
-
# whatsapp_agentvibes/agentvibes_client.py
|
|
85
|
-
|
|
86
|
-
import subprocess
|
|
87
|
-
import os
|
|
88
|
-
from pathlib import Path
|
|
89
|
-
|
|
90
|
-
class AgentVibesClient:
|
|
91
|
-
"""Client for calling AgentVibes TTS functionality"""
|
|
92
|
-
|
|
93
|
-
def __init__(self):
|
|
94
|
-
# Detect AgentVibes installation
|
|
95
|
-
self.agentvibes_path = self._find_agentvibes()
|
|
96
|
-
if not self.agentvibes_path:
|
|
97
|
-
raise RuntimeError("AgentVibes not found. Please install AgentVibes first.")
|
|
98
|
-
|
|
99
|
-
self.play_tts_script = self.agentvibes_path / ".claude" / "hooks" / "play-tts.sh"
|
|
100
|
-
|
|
101
|
-
def _find_agentvibes(self) -> Path:
|
|
102
|
-
"""Find AgentVibes installation"""
|
|
103
|
-
# Check common installation locations
|
|
104
|
-
locations = [
|
|
105
|
-
Path.home() / ".claude", # Global installation
|
|
106
|
-
Path.home() / "AgentVibes" / ".claude", # Local clone
|
|
107
|
-
Path("/usr/local/lib/agentvibes/.claude"), # System install
|
|
108
|
-
]
|
|
109
|
-
|
|
110
|
-
for location in locations:
|
|
111
|
-
if (location / "hooks" / "play-tts.sh").exists():
|
|
112
|
-
return location.parent
|
|
113
|
-
|
|
114
|
-
# Check if in PATH (npx installation)
|
|
115
|
-
try:
|
|
116
|
-
result = subprocess.run(
|
|
117
|
-
["which", "agentvibes"],
|
|
118
|
-
capture_output=True,
|
|
119
|
-
text=True
|
|
120
|
-
)
|
|
121
|
-
if result.returncode == 0:
|
|
122
|
-
# Found in PATH, use global .claude
|
|
123
|
-
return Path.home()
|
|
124
|
-
except:
|
|
125
|
-
pass
|
|
126
|
-
|
|
127
|
-
return None
|
|
128
|
-
|
|
129
|
-
async def speak(self, text: str, voice: str = None, personality: str = None):
|
|
130
|
-
"""Use AgentVibes to speak text"""
|
|
131
|
-
args = ["bash", str(self.play_tts_script), text]
|
|
132
|
-
if voice:
|
|
133
|
-
args.append(voice)
|
|
134
|
-
|
|
135
|
-
# Set environment for voice/personality
|
|
136
|
-
env = os.environ.copy()
|
|
137
|
-
if personality:
|
|
138
|
-
# Temporarily set personality via environment
|
|
139
|
-
env["TTS_PERSONALITY"] = personality
|
|
140
|
-
|
|
141
|
-
process = await asyncio.create_subprocess_exec(
|
|
142
|
-
*args,
|
|
143
|
-
stdout=asyncio.subprocess.PIPE,
|
|
144
|
-
stderr=asyncio.subprocess.PIPE,
|
|
145
|
-
env=env
|
|
146
|
-
)
|
|
147
|
-
|
|
148
|
-
stdout, stderr = await process.communicate()
|
|
149
|
-
|
|
150
|
-
if process.returncode != 0:
|
|
151
|
-
raise RuntimeError(f"TTS failed: {stderr.decode()}")
|
|
152
|
-
|
|
153
|
-
return stdout.decode()
|
|
154
|
-
|
|
155
|
-
def list_voices(self) -> list:
|
|
156
|
-
"""Get available voices from AgentVibes"""
|
|
157
|
-
voice_manager = self.agentvibes_path / ".claude" / "hooks" / "voice-manager.sh"
|
|
158
|
-
result = subprocess.run(
|
|
159
|
-
["bash", str(voice_manager), "list-simple"],
|
|
160
|
-
capture_output=True,
|
|
161
|
-
text=True
|
|
162
|
-
)
|
|
163
|
-
|
|
164
|
-
if result.returncode == 0:
|
|
165
|
-
return [v.strip() for v in result.stdout.strip().split("\n") if v]
|
|
166
|
-
return []
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
**Pros**:
|
|
170
|
-
- ✅ Simple, no modifications to AgentVibes needed
|
|
171
|
-
- ✅ Uses AgentVibes exactly as installed
|
|
172
|
-
- ✅ Works with any AgentVibes version
|
|
173
|
-
- ✅ No API versioning issues
|
|
174
|
-
|
|
175
|
-
**Cons**:
|
|
176
|
-
- ⚠️ Requires AgentVibes to be installed and in PATH
|
|
177
|
-
- ⚠️ Subprocess overhead (minimal)
|
|
178
|
-
|
|
179
|
-
### Option 2: Python API (Future Enhancement)
|
|
180
|
-
|
|
181
|
-
If AgentVibes later exposes a Python API:
|
|
182
|
-
|
|
183
|
-
```python
|
|
184
|
-
from agentvibes import TTS
|
|
185
|
-
|
|
186
|
-
tts = TTS()
|
|
187
|
-
tts.speak("Hello world", voice="Aria")
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
This would require AgentVibes to publish as a pip package.
|
|
191
|
-
|
|
192
|
-
## Installation Process
|
|
193
|
-
|
|
194
|
-
### Prerequisites Check
|
|
195
|
-
|
|
196
|
-
```bash
|
|
197
|
-
# Installation script checks dependencies
|
|
198
|
-
#!/bin/bash
|
|
199
|
-
|
|
200
|
-
echo "Checking prerequisites..."
|
|
201
|
-
|
|
202
|
-
# 1. Check WhatsApp MCP Server
|
|
203
|
-
if [ ! -d "$HOME/whatsapp-mcp" ]; then
|
|
204
|
-
echo "❌ WhatsApp MCP Server not found"
|
|
205
|
-
echo " Install from: https://github.com/lharries/whatsapp-mcp"
|
|
206
|
-
exit 1
|
|
207
|
-
fi
|
|
208
|
-
|
|
209
|
-
# 2. Check AgentVibes
|
|
210
|
-
if ! command -v agentvibes &> /dev/null; then
|
|
211
|
-
if [ ! -f "$HOME/.claude/hooks/play-tts.sh" ]; then
|
|
212
|
-
echo "❌ AgentVibes not found"
|
|
213
|
-
echo " Install with: npx agentvibes install --yes"
|
|
214
|
-
exit 1
|
|
215
|
-
fi
|
|
216
|
-
fi
|
|
217
|
-
|
|
218
|
-
# 3. Check Python 3.8+
|
|
219
|
-
if ! command -v python3 &> /dev/null; then
|
|
220
|
-
echo "❌ Python 3.8+ required"
|
|
221
|
-
exit 1
|
|
222
|
-
fi
|
|
223
|
-
|
|
224
|
-
echo "✅ All prerequisites met!"
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
### User Installation Steps
|
|
228
|
-
|
|
229
|
-
**Step 1: Install Prerequisites**
|
|
230
|
-
```bash
|
|
231
|
-
# Install WhatsApp MCP Server
|
|
232
|
-
git clone https://github.com/lharries/whatsapp-mcp.git
|
|
233
|
-
cd whatsapp-mcp/whatsapp-bridge && go run main.go
|
|
234
|
-
|
|
235
|
-
# Install AgentVibes
|
|
236
|
-
npx agentvibes install --yes
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
**Step 2: Install Plugin**
|
|
240
|
-
```bash
|
|
241
|
-
# Option A: Via pip (if published)
|
|
242
|
-
pip install whatsapp-agentvibes
|
|
243
|
-
|
|
244
|
-
# Option B: From source
|
|
245
|
-
git clone https://github.com/yourusername/whatsapp-agentvibes.git
|
|
246
|
-
cd whatsapp-agentvibes
|
|
247
|
-
pip install -e .
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
**Step 3: Configure Claude Desktop**
|
|
251
|
-
```json
|
|
252
|
-
{
|
|
253
|
-
"mcpServers": {
|
|
254
|
-
"whatsapp": {
|
|
255
|
-
"command": "uv",
|
|
256
|
-
"args": [
|
|
257
|
-
"--directory",
|
|
258
|
-
"/path/to/whatsapp-mcp/whatsapp-mcp-server",
|
|
259
|
-
"run",
|
|
260
|
-
"main.py"
|
|
261
|
-
]
|
|
262
|
-
},
|
|
263
|
-
"whatsapp-agentvibes": {
|
|
264
|
-
"command": "python",
|
|
265
|
-
"args": ["-m", "whatsapp_agentvibes.server"]
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
```
|
|
270
|
-
|
|
271
|
-
## Configuration File
|
|
272
|
-
|
|
273
|
-
**Location**: `~/.config/whatsapp-agentvibes/config.json`
|
|
274
|
-
|
|
275
|
-
```json
|
|
276
|
-
{
|
|
277
|
-
"version": "1.0",
|
|
278
|
-
"whatsapp": {
|
|
279
|
-
"database_path": "~/whatsapp-mcp/whatsapp-bridge/store/messages.db",
|
|
280
|
-
"poll_interval_seconds": 2
|
|
281
|
-
},
|
|
282
|
-
"agentvibes": {
|
|
283
|
-
"installation_path": "~/.claude",
|
|
284
|
-
"default_voice": "Aria",
|
|
285
|
-
"use_personality": true
|
|
286
|
-
},
|
|
287
|
-
"notifications": {
|
|
288
|
-
"enabled_contacts": [],
|
|
289
|
-
"contact_voices": {},
|
|
290
|
-
"announce_sender_name": true,
|
|
291
|
-
"announce_media": true
|
|
292
|
-
},
|
|
293
|
-
"voice_assignment": {
|
|
294
|
-
"strategy": "hash",
|
|
295
|
-
"available_voices": []
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
```
|
|
299
|
-
|
|
300
|
-
## MCP Server Implementation
|
|
301
|
-
|
|
302
|
-
### Main Server (Standalone)
|
|
303
|
-
|
|
304
|
-
```python
|
|
305
|
-
# src/whatsapp_agentvibes/server.py
|
|
306
|
-
|
|
307
|
-
from mcp.server import Server
|
|
308
|
-
from mcp.types import Tool, TextContent
|
|
309
|
-
import mcp.server.stdio
|
|
310
|
-
|
|
311
|
-
from .monitor import WhatsAppMonitor
|
|
312
|
-
from .voice_manager import VoiceManager
|
|
313
|
-
from .config import Config
|
|
314
|
-
from .agentvibes_client import AgentVibesClient
|
|
315
|
-
|
|
316
|
-
class WhatsAppAgentVibesServer:
|
|
317
|
-
def __init__(self):
|
|
318
|
-
self.config = Config.load()
|
|
319
|
-
self.agentvibes = AgentVibesClient()
|
|
320
|
-
self.voice_manager = VoiceManager(self.agentvibes, self.config)
|
|
321
|
-
self.monitor = WhatsAppMonitor(
|
|
322
|
-
self.config,
|
|
323
|
-
self.voice_manager,
|
|
324
|
-
self.agentvibes
|
|
325
|
-
)
|
|
326
|
-
|
|
327
|
-
async def start_monitoring(self):
|
|
328
|
-
"""Start monitoring WhatsApp messages"""
|
|
329
|
-
await self.monitor.start()
|
|
330
|
-
|
|
331
|
-
# Create MCP server
|
|
332
|
-
app = Server("whatsapp-agentvibes")
|
|
333
|
-
wa_server = WhatsAppAgentVibesServer()
|
|
334
|
-
|
|
335
|
-
@app.list_tools()
|
|
336
|
-
async def list_tools() -> list[Tool]:
|
|
337
|
-
return [
|
|
338
|
-
Tool(
|
|
339
|
-
name="whatsapp_enable_notifications",
|
|
340
|
-
description="Enable TTS notifications for a WhatsApp contact or group",
|
|
341
|
-
inputSchema={
|
|
342
|
-
"type": "object",
|
|
343
|
-
"properties": {
|
|
344
|
-
"contact": {
|
|
345
|
-
"type": "string",
|
|
346
|
-
"description": "Contact name, phone number, or JID"
|
|
347
|
-
}
|
|
348
|
-
},
|
|
349
|
-
"required": ["contact"]
|
|
350
|
-
}
|
|
351
|
-
),
|
|
352
|
-
# ... other tools
|
|
353
|
-
]
|
|
354
|
-
|
|
355
|
-
@app.call_tool()
|
|
356
|
-
async def call_tool(name: str, arguments: dict) -> list[TextContent]:
|
|
357
|
-
if name == "whatsapp_enable_notifications":
|
|
358
|
-
result = await wa_server.enable_notifications(arguments["contact"])
|
|
359
|
-
return [TextContent(type="text", text=result)]
|
|
360
|
-
# ... handle other tools
|
|
361
|
-
|
|
362
|
-
async def main():
|
|
363
|
-
# Start background message monitoring
|
|
364
|
-
asyncio.create_task(wa_server.start_monitoring())
|
|
365
|
-
|
|
366
|
-
# Start MCP server
|
|
367
|
-
async with mcp.server.stdio.stdio_server() as (read_stream, write_stream):
|
|
368
|
-
await app.run(read_stream, write_stream, app.create_initialization_options())
|
|
369
|
-
|
|
370
|
-
if __name__ == "__main__":
|
|
371
|
-
asyncio.run(main())
|
|
372
|
-
```
|
|
373
|
-
|
|
374
|
-
## Package Metadata
|
|
375
|
-
|
|
376
|
-
### pyproject.toml
|
|
377
|
-
|
|
378
|
-
```toml
|
|
379
|
-
[project]
|
|
380
|
-
name = "whatsapp-agentvibes"
|
|
381
|
-
version = "1.0.0"
|
|
382
|
-
description = "WhatsApp TTS notifications plugin for AgentVibes"
|
|
383
|
-
authors = [
|
|
384
|
-
{name = "Your Name", email = "your.email@example.com"}
|
|
385
|
-
]
|
|
386
|
-
license = {text = "Apache-2.0"}
|
|
387
|
-
readme = "README.md"
|
|
388
|
-
requires-python = ">=3.8"
|
|
389
|
-
|
|
390
|
-
dependencies = [
|
|
391
|
-
"mcp>=0.9.0",
|
|
392
|
-
"aiosqlite>=0.19.0",
|
|
393
|
-
]
|
|
394
|
-
|
|
395
|
-
[project.urls]
|
|
396
|
-
Homepage = "https://github.com/yourusername/whatsapp-agentvibes"
|
|
397
|
-
Documentation = "https://github.com/yourusername/whatsapp-agentvibes/blob/main/docs"
|
|
398
|
-
Repository = "https://github.com/yourusername/whatsapp-agentvibes"
|
|
399
|
-
Issues = "https://github.com/yourusername/whatsapp-agentvibes/issues"
|
|
400
|
-
|
|
401
|
-
[project.optional-dependencies]
|
|
402
|
-
dev = [
|
|
403
|
-
"pytest>=7.0.0",
|
|
404
|
-
"pytest-asyncio>=0.21.0",
|
|
405
|
-
"black>=23.0.0",
|
|
406
|
-
"ruff>=0.1.0",
|
|
407
|
-
]
|
|
408
|
-
|
|
409
|
-
[build-system]
|
|
410
|
-
requires = ["hatchling"]
|
|
411
|
-
build-backend = "hatchling.build"
|
|
412
|
-
|
|
413
|
-
[project.scripts]
|
|
414
|
-
whatsapp-agentvibes = "whatsapp_agentvibes.server:main"
|
|
415
|
-
```
|
|
416
|
-
|
|
417
|
-
### requirements.txt
|
|
418
|
-
|
|
419
|
-
```txt
|
|
420
|
-
mcp>=0.9.0
|
|
421
|
-
aiosqlite>=0.19.0
|
|
422
|
-
```
|
|
423
|
-
|
|
424
|
-
**Note**: AgentVibes is NOT listed as a dependency because it's called via subprocess, not imported.
|
|
425
|
-
|
|
426
|
-
## README Structure
|
|
427
|
-
|
|
428
|
-
```markdown
|
|
429
|
-
# WhatsApp AgentVibes Plugin
|
|
430
|
-
|
|
431
|
-
Voice notifications for WhatsApp messages using AgentVibes TTS.
|
|
432
|
-
|
|
433
|
-
## Features
|
|
434
|
-
- 🔔 TTS notifications for selected contacts/groups
|
|
435
|
-
- 🎭 Round-robin voice assignment (different voice per contact)
|
|
436
|
-
- 🗣️ Group chat speaker differentiation
|
|
437
|
-
- 🎤 27+ voices via AgentVibes
|
|
438
|
-
- 🌍 Multi-language support
|
|
439
|
-
|
|
440
|
-
## Prerequisites
|
|
441
|
-
1. **WhatsApp MCP Server**: https://github.com/lharries/whatsapp-mcp
|
|
442
|
-
2. **AgentVibes**: `npx agentvibes install --yes`
|
|
443
|
-
3. **Python 3.8+**
|
|
444
|
-
|
|
445
|
-
## Installation
|
|
446
|
-
|
|
447
|
-
### Quick Start
|
|
448
|
-
```bash
|
|
449
|
-
pip install whatsapp-agentvibes
|
|
450
|
-
```
|
|
451
|
-
|
|
452
|
-
### Configure Claude Desktop
|
|
453
|
-
Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
|
|
454
|
-
```json
|
|
455
|
-
{
|
|
456
|
-
"mcpServers": {
|
|
457
|
-
"whatsapp-agentvibes": {
|
|
458
|
-
"command": "python",
|
|
459
|
-
"args": ["-m", "whatsapp_agentvibes.server"]
|
|
460
|
-
}
|
|
461
|
-
}
|
|
462
|
-
}
|
|
463
|
-
```
|
|
464
|
-
|
|
465
|
-
## Usage
|
|
466
|
-
|
|
467
|
-
### Enable notifications for a contact
|
|
468
|
-
```
|
|
469
|
-
You: "Enable WhatsApp notifications for Mom"
|
|
470
|
-
Claude: ✅ Enabled notifications for Jane Smith with voice "Aria"
|
|
471
|
-
```
|
|
472
|
-
|
|
473
|
-
### View active notifications
|
|
474
|
-
```
|
|
475
|
-
You: "Show WhatsApp notification channels"
|
|
476
|
-
Claude: 🔔 Active: Mom (Aria), Dad (Terry), Work Group (multiple)
|
|
477
|
-
```
|
|
478
|
-
|
|
479
|
-
## Configuration
|
|
480
|
-
|
|
481
|
-
Edit `~/.config/whatsapp-agentvibes/config.json`
|
|
482
|
-
|
|
483
|
-
## Documentation
|
|
484
|
-
- [Installation Guide](docs/installation.md)
|
|
485
|
-
- [Configuration Reference](docs/configuration.md)
|
|
486
|
-
- [Troubleshooting](docs/troubleshooting.md)
|
|
487
|
-
|
|
488
|
-
## License
|
|
489
|
-
Apache 2.0
|
|
490
|
-
```
|
|
491
|
-
|
|
492
|
-
## Advantages of Standalone Architecture
|
|
493
|
-
|
|
494
|
-
### 1. **Clean Separation**
|
|
495
|
-
- AgentVibes = TTS engine
|
|
496
|
-
- WhatsApp MCP = Message source
|
|
497
|
-
- This plugin = Integration layer
|
|
498
|
-
|
|
499
|
-
### 2. **Independent Development**
|
|
500
|
-
```
|
|
501
|
-
AgentVibes v2.3.0 → v2.4.0 (new voices added)
|
|
502
|
-
↓ (plugin automatically gets new voices)
|
|
503
|
-
Plugin v1.0.0 (no changes needed)
|
|
504
|
-
```
|
|
505
|
-
|
|
506
|
-
### 3. **Multiple Plugins Possible**
|
|
507
|
-
```
|
|
508
|
-
agentvibes-whatsapp-plugin
|
|
509
|
-
agentvibes-signal-plugin
|
|
510
|
-
agentvibes-telegram-plugin
|
|
511
|
-
agentvibes-slack-plugin
|
|
512
|
-
agentvibes-discord-plugin
|
|
513
|
-
```
|
|
514
|
-
|
|
515
|
-
All use the same AgentVibes installation!
|
|
516
|
-
|
|
517
|
-
### 4. **Easier Testing**
|
|
518
|
-
```bash
|
|
519
|
-
# Test plugin without affecting AgentVibes
|
|
520
|
-
cd whatsapp-agentvibes
|
|
521
|
-
pytest tests/
|
|
522
|
-
|
|
523
|
-
# Test AgentVibes without affecting plugins
|
|
524
|
-
cd AgentVibes
|
|
525
|
-
npm test
|
|
526
|
-
```
|
|
527
|
-
|
|
528
|
-
### 5. **User Choice**
|
|
529
|
-
Users can:
|
|
530
|
-
- Use AgentVibes alone (just TTS)
|
|
531
|
-
- Use WhatsApp MCP alone (no voice)
|
|
532
|
-
- Install plugin to combine both
|
|
533
|
-
- Install multiple messaging plugins
|
|
534
|
-
|
|
535
|
-
## Integration Testing
|
|
536
|
-
|
|
537
|
-
### Test Script
|
|
538
|
-
|
|
539
|
-
```python
|
|
540
|
-
# tests/test_integration.py
|
|
541
|
-
|
|
542
|
-
import pytest
|
|
543
|
-
from whatsapp_agentvibes.agentvibes_client import AgentVibesClient
|
|
544
|
-
|
|
545
|
-
def test_agentvibes_found():
|
|
546
|
-
"""Test that AgentVibes is installed and accessible"""
|
|
547
|
-
client = AgentVibesClient()
|
|
548
|
-
assert client.agentvibes_path is not None
|
|
549
|
-
assert client.play_tts_script.exists()
|
|
550
|
-
|
|
551
|
-
def test_list_voices():
|
|
552
|
-
"""Test retrieving voices from AgentVibes"""
|
|
553
|
-
client = AgentVibesClient()
|
|
554
|
-
voices = client.list_voices()
|
|
555
|
-
assert len(voices) > 0
|
|
556
|
-
assert "Aria" in voices or "en_US-lessac-medium" in voices
|
|
557
|
-
|
|
558
|
-
@pytest.mark.asyncio
|
|
559
|
-
async def test_speak():
|
|
560
|
-
"""Test TTS functionality"""
|
|
561
|
-
client = AgentVibesClient()
|
|
562
|
-
result = await client.speak("Test message", voice="Aria")
|
|
563
|
-
assert "Saved to:" in result or "Spoke:" in result
|
|
564
|
-
```
|
|
565
|
-
|
|
566
|
-
## Distribution Strategy
|
|
567
|
-
|
|
568
|
-
### Phase 1: GitHub Only
|
|
569
|
-
```bash
|
|
570
|
-
pip install git+https://github.com/yourusername/whatsapp-agentvibes.git
|
|
571
|
-
```
|
|
572
|
-
|
|
573
|
-
### Phase 2: PyPI Publication
|
|
574
|
-
```bash
|
|
575
|
-
pip install whatsapp-agentvibes
|
|
576
|
-
```
|
|
577
|
-
|
|
578
|
-
### Phase 3: NPX Wrapper (Optional)
|
|
579
|
-
```bash
|
|
580
|
-
npx whatsapp-agentvibes install
|
|
581
|
-
```
|
|
582
|
-
|
|
583
|
-
## Documentation as Separate Repo
|
|
584
|
-
|
|
585
|
-
The plugin repository should have comprehensive docs:
|
|
586
|
-
|
|
587
|
-
```
|
|
588
|
-
docs/
|
|
589
|
-
├── installation.md # Step-by-step setup
|
|
590
|
-
├── configuration.md # All config options
|
|
591
|
-
├── usage.md # Example commands
|
|
592
|
-
├── troubleshooting.md # Common issues
|
|
593
|
-
├── development.md # Contributing guide
|
|
594
|
-
└── architecture.md # How it works
|
|
595
|
-
```
|
|
596
|
-
|
|
597
|
-
## Conclusion
|
|
598
|
-
|
|
599
|
-
**Recommendation**: Build as **completely standalone plugin**
|
|
600
|
-
|
|
601
|
-
### Key Benefits:
|
|
602
|
-
✅ Independent development cycles
|
|
603
|
-
✅ Easier maintenance and contributions
|
|
604
|
-
✅ No coupling to AgentVibes codebase
|
|
605
|
-
✅ Opens path for more messaging plugins
|
|
606
|
-
✅ Users install only what they need
|
|
607
|
-
✅ Cleaner architecture overall
|
|
608
|
-
|
|
609
|
-
### Implementation:
|
|
610
|
-
- New repo: `whatsapp-agentvibes` or `agentvibes-whatsapp-plugin`
|
|
611
|
-
- Dependency: Calls AgentVibes via subprocess (no code imports)
|
|
612
|
-
- Distribution: pip package on PyPI
|
|
613
|
-
- Configuration: Separate config file
|
|
614
|
-
- Testing: Independent test suite
|
|
615
|
-
|
|
616
|
-
This is the **right architectural approach** for a plugin ecosystem! 🎉
|
|
617
|
-
|
|
618
|
-
---
|
|
619
|
-
|
|
620
|
-
**Next Steps**:
|
|
621
|
-
1. Create new standalone repository
|
|
622
|
-
2. Implement AgentVibesClient wrapper
|
|
623
|
-
3. Build MCP server with monitoring
|
|
624
|
-
4. Write comprehensive documentation
|
|
625
|
-
5. Publish to PyPI
|
|
626
|
-
|
|
627
|
-
**Document Version**: 2.0 (Standalone Architecture)
|
|
628
|
-
**Date**: 2025-11-12
|
package/github-profile-draft.md
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
# GitHub Profile Draft - Paul Preibisch
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
Hi! I'm Paul Preibisch, a Software Developer with over 12 years of experience, primarily in educational software. I'm currently deep diving into agentic programming and modern AI-driven development workflows.
|
|
5
|
-
|
|
6
|
-
## Current Focus
|
|
7
|
-
|
|
8
|
-
### 🎭 AgentVibes - Voice-Enabled AI Development
|
|
9
|
-
Creator and maintainer of [AgentVibes](https://github.com/paulpreibisch/AgentVibes) (13 ⭐), an innovative tool that brings Claude Code sessions to life with voice. This project represents my deep dive into agentic programming, where I've invested over 850 hours exploring autonomous systems and AI-driven development workflows.
|
|
10
|
-
|
|
11
|
-
**Key Features:**
|
|
12
|
-
- Multi-provider TTS integration (ElevenLabs, Piper, OpenAI)
|
|
13
|
-
- Dynamic personality system for voice responses
|
|
14
|
-
- Language learning mode with dual-language support
|
|
15
|
-
- Claude Code hook integration for seamless AI interaction
|
|
16
|
-
|
|
17
|
-
## Recent Work
|
|
18
|
-
|
|
19
|
-
### Educational Content Creation Platform
|
|
20
|
-
Developed a highly scalable content creation tool that enables clients to upload thousands of sentences and automatically generate corresponding images for each sentence. Built with Express.js, React, and Node.js, featuring:
|
|
21
|
-
- Efficient batch processing and queue management
|
|
22
|
-
- Handling thousands of simultaneous content generation requests
|
|
23
|
-
- Large-scale content processing workflows
|
|
24
|
-
|
|
25
|
-
### Open Source Contributions
|
|
26
|
-
- Consistent contributor to the MCP Shrimp Task Manager repository
|
|
27
|
-
- Focus on task automation and workflow optimization
|
|
28
|
-
- Active engagement in agent-based programming paradigms
|
|
29
|
-
|
|
30
|
-
## Professional Experience
|
|
31
|
-
|
|
32
|
-
### Lead Developer - CurrentSCM @ Vista Projects Limited
|
|
33
|
-
- Built and maintained robust API with 850+ unique endpoints on multi-tenant enterprise application
|
|
34
|
-
- Full-spectrum Laravel Framework development: notifications, queues, jobs, middleware, validations, workflows, pipelines, caching
|
|
35
|
-
- Created comprehensive Test Platform for 15 Excel Import Templates using DTOs
|
|
36
|
-
- Developed scalable PDF authoring microservice using TDD and SOLID principles
|
|
37
|
-
- Consolidated documentation across 9 different exports, saving significant development time
|
|
38
|
-
- Enhanced invoicing for milestone payments, solving complex floating point challenges
|
|
39
|
-
- Completed 1800+ developer hours of support, resolving GitHub issues and features
|
|
40
|
-
- Completed 33 LaraCast lessons for continuous skill development
|
|
41
|
-
|
|
42
|
-
### Lead Developer - Movie English Project (now Globify.com)
|
|
43
|
-
10 years leading platform development in educational software space
|
|
44
|
-
|
|
45
|
-
## Tech Stack
|
|
46
|
-
- **Primary:** Laravel, PHP
|
|
47
|
-
- **Frontend:** React, modern JavaScript frameworks
|
|
48
|
-
- **Backend:** Node.js, Express.js
|
|
49
|
-
- **Current Focus:** Agentic Programming, AI Development, Claude Code
|
|
50
|
-
- **DevOps:** Queue systems, batch processing, microservices
|
|
51
|
-
|
|
52
|
-
## Get in Touch
|
|
53
|
-
🌐 Website: [preibisch.biz](https://preibisch.biz)
|
|
54
|
-
📍 Location: La Paz, BCS
|
|
55
|
-
|
|
56
|
-
---
|
|
57
|
-
*"Digging Deep into Agentic Programming"*
|