agentvibes 4.2.0 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agentvibes/bmad/bmad-voices.md +69 -69
- package/.agentvibes/config.json +12 -0
- package/.claude/activation-instructions +54 -54
- package/.claude/audio/tracks/README.md +52 -52
- package/.claude/commands/agent-vibes/add.md +21 -21
- package/.claude/commands/agent-vibes/agent-vibes.md +101 -101
- package/.claude/commands/agent-vibes/agent.md +79 -79
- package/.claude/commands/agent-vibes/background-music.md +111 -111
- package/.claude/commands/agent-vibes/bmad.md +198 -198
- package/.claude/commands/agent-vibes/clean.md +18 -18
- package/.claude/commands/agent-vibes/cleanup.md +18 -18
- package/.claude/commands/agent-vibes/commands.json +145 -145
- package/.claude/commands/agent-vibes/effects.md +97 -97
- package/.claude/commands/agent-vibes/get.md +9 -9
- package/.claude/commands/agent-vibes/hide.md +91 -91
- package/.claude/commands/agent-vibes/language.md +23 -23
- package/.claude/commands/agent-vibes/learn.md +67 -67
- package/.claude/commands/agent-vibes/list.md +13 -13
- package/.claude/commands/agent-vibes/mute.md +37 -37
- package/.claude/commands/agent-vibes/preview.md +17 -17
- package/.claude/commands/agent-vibes/provider.md +68 -68
- package/.claude/commands/agent-vibes/replay-target.md +14 -14
- package/.claude/commands/agent-vibes/sample.md +12 -12
- package/.claude/commands/agent-vibes/set-favorite-voice.md +84 -84
- package/.claude/commands/agent-vibes/set-pretext.md +65 -65
- package/.claude/commands/agent-vibes/set-speed.md +41 -41
- package/.claude/commands/agent-vibes/show.md +84 -84
- package/.claude/commands/agent-vibes/switch.md +87 -87
- package/.claude/commands/agent-vibes/target-voice.md +26 -26
- package/.claude/commands/agent-vibes/target.md +30 -30
- package/.claude/commands/agent-vibes/translate.md +68 -68
- package/.claude/commands/agent-vibes/unmute.md +45 -45
- package/.claude/commands/agent-vibes/verbosity.md +89 -89
- package/.claude/commands/agent-vibes/whoami.md +7 -7
- package/.claude/commands/agent-vibes-bmad-voices.md +117 -117
- package/.claude/commands/agent-vibes-rdp.md +24 -24
- package/.claude/config/agentvibes.json +1 -0
- package/.claude/config/audio-effects.cfg +2 -2
- package/.claude/config/audio-effects.cfg.sample +52 -52
- package/.claude/config/background-music-volume.txt +1 -0
- package/.claude/config/intro-text.txt +1 -0
- package/.claude/config/piper-speech-rate.txt +4 -0
- package/.claude/config/piper-target-speech-rate.txt +1 -0
- package/.claude/config/reverb-level.txt +1 -0
- package/.claude/config/tts-speech-rate.txt +4 -0
- package/.claude/config/tts-target-speech-rate.txt +1 -0
- package/.claude/docs/TERMUX_SETUP.md +408 -408
- package/.claude/github-star-reminder.txt +1 -1
- package/.claude/hooks/README-TTS-QUEUE.md +135 -135
- package/.claude/hooks/audio-cache-utils.sh +246 -246
- package/.claude/hooks/audio-processor.sh +433 -433
- package/.claude/hooks/background-music-manager.sh +404 -404
- package/.claude/hooks/bmad-speak-enhanced.sh +165 -165
- package/.claude/hooks/bmad-speak.sh +269 -269
- package/.claude/hooks/bmad-tts-injector.sh +568 -568
- package/.claude/hooks/bmad-voice-manager.sh +928 -928
- package/.claude/hooks/clawdbot-receiver-SECURE.sh +129 -129
- package/.claude/hooks/clawdbot-receiver.sh +107 -107
- package/.claude/hooks/clean-audio-cache.sh +22 -22
- package/.claude/hooks/cleanup-cache.sh +106 -106
- package/.claude/hooks/configure-rdp-mode.sh +137 -137
- package/.claude/hooks/download-extra-voices.sh +244 -244
- package/.claude/hooks/effects-manager.sh +268 -268
- package/.claude/hooks/github-star-reminder.sh +154 -154
- package/.claude/hooks/language-manager.sh +362 -362
- package/.claude/hooks/learn-manager.sh +492 -492
- package/.claude/hooks/macos-voice-manager.sh +205 -205
- package/.claude/hooks/migrate-background-music.sh +125 -125
- package/.claude/hooks/migrate-to-agentvibes.sh +161 -161
- package/.claude/hooks/optimize-background-music.sh +87 -87
- package/.claude/hooks/path-resolver.sh +60 -60
- package/.claude/hooks/personality-manager.sh +448 -448
- package/.claude/hooks/piper-download-voices.sh +225 -225
- package/.claude/hooks/piper-installer.sh +292 -292
- package/.claude/hooks/piper-multispeaker-registry.sh +171 -171
- package/.claude/hooks/piper-voice-manager.sh +24 -3
- package/.claude/hooks/play-tts-agentvibes-receiver-for-voiceless-connections.sh +90 -90
- package/.claude/hooks/play-tts-enhanced.sh +105 -105
- package/.claude/hooks/play-tts-macos.sh +368 -368
- package/.claude/hooks/play-tts-piper.sh +679 -679
- package/.claude/hooks/play-tts-soprano.sh +356 -356
- package/.claude/hooks/play-tts-ssh-remote.sh +167 -167
- package/.claude/hooks/play-tts-termux-ssh.sh +169 -169
- package/.claude/hooks/play-tts.sh +301 -301
- package/.claude/hooks/prepare-release.sh +54 -54
- package/.claude/hooks/provider-commands.sh +617 -617
- package/.claude/hooks/provider-manager.sh +399 -399
- package/.claude/hooks/replay-target-audio.sh +95 -95
- package/.claude/hooks/requirements.txt +6 -6
- package/.claude/hooks/sentiment-manager.sh +201 -201
- package/.claude/hooks/session-start-tts.sh +81 -81
- package/.claude/hooks/soprano-gradio-synth.py +139 -139
- package/.claude/hooks/speed-manager.sh +291 -291
- package/.claude/hooks/stop-tts.sh +84 -84
- package/.claude/hooks/termux-installer.sh +261 -261
- package/.claude/hooks/translate-manager.sh +341 -341
- package/.claude/hooks/translator.py +237 -237
- package/.claude/hooks/tts-queue-worker.sh +145 -145
- package/.claude/hooks/tts-queue.sh +165 -165
- package/.claude/hooks/verbosity-manager.sh +178 -178
- package/.claude/hooks/voice-manager.sh +548 -548
- package/.claude/hooks-windows/audio-cache-utils.ps1 +119 -119
- package/.claude/hooks-windows/background-music-manager.ps1 +348 -0
- package/.claude/hooks-windows/clean-audio-cache.ps1 +53 -0
- package/.claude/hooks-windows/download-extra-voices.ps1 +185 -0
- package/.claude/hooks-windows/effects-manager.ps1 +294 -0
- package/.claude/hooks-windows/language-manager.ps1 +193 -0
- package/.claude/hooks-windows/learn-manager.ps1 +241 -0
- package/.claude/hooks-windows/personality-manager.ps1 +266 -0
- package/.claude/hooks-windows/play-tts-piper.ps1 +209 -0
- package/.claude/hooks-windows/play-tts-sapi.ps1 +108 -0
- package/.claude/hooks-windows/play-tts-soprano.ps1 +159 -158
- package/.claude/hooks-windows/play-tts-windows-piper.ps1 +50 -5
- package/.claude/hooks-windows/play-tts-windows-sapi.ps1 +108 -108
- package/.claude/hooks-windows/play-tts.ps1 +344 -266
- package/.claude/hooks-windows/provider-manager.ps1 +29 -10
- package/.claude/hooks-windows/session-start-tts.ps1 +124 -124
- package/.claude/hooks-windows/soprano-gradio-synth.py +153 -153
- package/.claude/hooks-windows/speed-manager.ps1 +166 -0
- package/.claude/hooks-windows/verbosity-manager.ps1 +119 -0
- package/.claude/hooks-windows/voice-manager-windows.ps1 +92 -8
- package/.claude/output-styles/agent-vibes.md +202 -202
- package/.claude/personalities/angry.md +14 -14
- package/.claude/personalities/annoying.md +14 -14
- package/.claude/personalities/crass.md +14 -14
- package/.claude/personalities/dramatic.md +14 -14
- package/.claude/personalities/dry-humor.md +50 -50
- package/.claude/personalities/flirty.md +20 -20
- package/.claude/personalities/funny.md +14 -14
- package/.claude/personalities/grandpa.md +32 -32
- package/.claude/personalities/millennial.md +14 -14
- package/.claude/personalities/moody.md +14 -14
- package/.claude/personalities/normal.md +16 -16
- package/.claude/personalities/pirate.md +14 -14
- package/.claude/personalities/poetic.md +14 -14
- package/.claude/personalities/professional.md +14 -14
- package/.claude/personalities/rapper.md +55 -55
- package/.claude/personalities/robot.md +14 -14
- package/.claude/personalities/sarcastic.md +38 -38
- package/.claude/personalities/sassy.md +14 -14
- package/.claude/personalities/surfer-dude.md +14 -14
- package/.claude/personalities/zen.md +14 -14
- package/.claude/settings.json +15 -15
- package/.claude/verbosity.txt +1 -1
- package/.clawdbot/README.md +105 -105
- package/.clawdbot/skill/SKILL.md +241 -241
- package/.mcp.json +12 -0
- package/CLAUDE.md +170 -170
- package/README.md +2029 -2007
- package/RELEASE_NOTES.md +1310 -1203
- package/WINDOWS-SETUP.md +208 -208
- package/bin/agent-vibes +39 -39
- package/bin/agentvibes-voice-browser.js +1840 -1840
- package/bin/agentvibes.js +48 -2
- package/bin/mcp-server.js +121 -121
- package/bin/mcp-server.sh +206 -206
- package/bin/test-bmad-pr +78 -78
- package/mcp-server/QUICK_START.md +203 -203
- package/mcp-server/README.md +345 -345
- package/mcp-server/WINDOWS_SETUP.md +260 -260
- package/mcp-server/docs/troubleshooting-audio.md +313 -313
- package/mcp-server/examples/claude_desktop_config.json +11 -11
- package/mcp-server/examples/claude_desktop_config_piper.json +9 -9
- package/mcp-server/examples/custom_instructions.md +169 -169
- package/mcp-server/install-deps.js +130 -130
- package/mcp-server/pyproject.toml +52 -52
- package/mcp-server/requirements.txt +2 -2
- package/mcp-server/server.py +1465 -1453
- package/mcp-server/test_server.py +395 -395
- package/mcp-server/test_windows_script_parity.py +336 -0
- package/package.json +110 -110
- package/setup-windows.ps1 +815 -815
- package/src/bmad-detector.js +71 -71
- package/src/cli/list-personalities.js +110 -110
- package/src/cli/list-voices.js +114 -114
- package/src/commands/bmad-voices.js +394 -394
- package/src/commands/install-mcp.js +476 -476
- package/src/console/app.js +824 -824
- package/src/console/audio-env.js +20 -1
- package/src/console/brand-colors.js +13 -13
- package/src/console/constants/personalities.js +44 -44
- package/src/console/footer-config.js +50 -50
- package/src/console/modals/modal-overlay.js +247 -247
- package/src/console/navigation.js +62 -62
- package/src/console/tabs/agents-tab.js +1684 -1516
- package/src/console/tabs/help-tab.js +261 -261
- package/src/console/tabs/install-tab.js +1007 -991
- package/src/console/tabs/music-tab.js +22 -8
- package/src/console/tabs/placeholder-tab.js +53 -53
- package/src/console/tabs/readme-tab.js +267 -267
- package/src/console/tabs/receiver-tab.js +1472 -1212
- package/src/console/tabs/settings-tab.js +152 -79
- package/src/console/tabs/voices-tab.js +100 -21
- package/src/console/widgets/destroy-list.js +25 -25
- package/src/console/widgets/format-utils.js +89 -89
- package/src/console/widgets/notice.js +55 -55
- package/src/console/widgets/personality-picker.js +185 -185
- package/src/console/widgets/reverb-picker.js +94 -94
- package/src/console/widgets/track-picker.js +285 -285
- package/src/installer/music-file-input.js +304 -304
- package/src/installer.js +5882 -5829
- package/src/services/agent-voice-store.js +423 -423
- package/src/services/config-service.js +264 -264
- package/src/services/navigation-service.js +123 -123
- package/src/services/provider-service.js +132 -132
- package/src/services/verbosity-service.js +157 -157
- package/src/utils/audio-duration-validator.js +298 -298
- package/src/utils/audio-format-validator.js +277 -277
- package/src/utils/dependency-checker.js +469 -466
- package/src/utils/file-ownership-verifier.js +358 -358
- package/src/utils/list-formatter.js +194 -194
- package/src/utils/music-file-validator.js +285 -285
- package/src/utils/preview-list-prompt.js +136 -136
- package/src/utils/provider-validator.js +96 -12
- package/src/utils/secure-music-storage.js +412 -412
- package/templates/agentvibes-receiver.sh +482 -482
- package/templates/audio/welcome-music.mp3 +0 -0
- package/voice-assignments.json +8244 -8244
- package/.claude/config/background-music-position.txt +0 -1
package/CLAUDE.md
CHANGED
|
@@ -1,170 +1,170 @@
|
|
|
1
|
-
# AgentVibes Development Guidelines
|
|
2
|
-
|
|
3
|
-
**Version:** 3.0
|
|
4
|
-
**Updated:** 2026-02-15
|
|
5
|
-
**Status:** Active (Using BMAD Methodology)
|
|
6
|
-
|
|
7
|
-
## Overview
|
|
8
|
-
|
|
9
|
-
AgentVibes is a Text-to-Speech system for AI assistants with personality support.
|
|
10
|
-
|
|
11
|
-
### Project Uses BMAD Methodology
|
|
12
|
-
|
|
13
|
-
This project follows **BMAD (BMM - Business Model Methodology)** for all story development:
|
|
14
|
-
- Use `/sprint-planning` to initialize sprint tracking
|
|
15
|
-
- Use `/dev-story` for each story implementation (NOT manual commits)
|
|
16
|
-
- `/dev-story` handles: implementation → testing → code review → auto-fixes → status updates
|
|
17
|
-
- All stories tracked in `docs/implementation-artifacts/sprint-status.yaml`
|
|
18
|
-
- Status updates: `ready-for-dev` → `in-progress` → `complete`
|
|
19
|
-
|
|
20
|
-
**Required Reading:** See `BMAD-STORY-DEVELOPMENT.md` for complete workflow.
|
|
21
|
-
|
|
22
|
-
## Critical Rules
|
|
23
|
-
|
|
24
|
-
### ✅ MANDATORY: Use BMAD Workflow
|
|
25
|
-
1. **Initialize sprint:** Run `/sprint-planning` once per sprint
|
|
26
|
-
2. **Develop each story:** Run `/dev-story` (NOT manual coding)
|
|
27
|
-
3. **Never skip workflow steps** - Workflow enforces quality gates
|
|
28
|
-
4. **Update sprint-status.yaml** automatically via `/dev-story`
|
|
29
|
-
5. **Code review included** - Built into `/dev-story` workflow
|
|
30
|
-
|
|
31
|
-
### ✅ Git Workflow (ONLY Outside BMAD)
|
|
32
|
-
For changes outside story development:
|
|
33
|
-
1. Describe changes before acting
|
|
34
|
-
2. Get explicit user approval before commits/pushes
|
|
35
|
-
3. Test locally before pushing
|
|
36
|
-
4. Exception: Changes made by `/dev-story` auto-commit
|
|
37
|
-
|
|
38
|
-
## Security Requirements (SonarCloud Compliance)
|
|
39
|
-
|
|
40
|
-
### Core Security Rules (NO EXCEPTIONS)
|
|
41
|
-
1. **No hardcoded credentials** - Never commit API keys, passwords, tokens
|
|
42
|
-
2. **Validate all external input** - User input, files, environment variables
|
|
43
|
-
3. **Secure temp directories** - Use `$XDG_RUNTIME_DIR` or user-specific `/tmp`
|
|
44
|
-
4. **Verify file ownership** - Check before processing external files (uid check)
|
|
45
|
-
5. **Prevent path traversal** - Validate paths stay within expected directories (use `path.resolve()`)
|
|
46
|
-
6. **Never log sensitive data** - Mask credentials in logs
|
|
47
|
-
|
|
48
|
-
### Bash/Shell Security
|
|
49
|
-
```bash
|
|
50
|
-
set -euo pipefail # REQUIRED: Always use strict mode
|
|
51
|
-
|
|
52
|
-
# Secure temp with proper permissions
|
|
53
|
-
TEMP_DIR="${XDG_RUNTIME_DIR:-/tmp}/agentvibes-$RANDOM"
|
|
54
|
-
mkdir -p "$TEMP_DIR"; chmod 700 "$TEMP_DIR"
|
|
55
|
-
|
|
56
|
-
# Verify file ownership before processing
|
|
57
|
-
[[ $(stat -c '%u' "$file" 2>/dev/null || stat -f '%u' "$file" 2>/dev/null) == $(id -u) ]] || exit 1
|
|
58
|
-
|
|
59
|
-
trap 'rm -f "$TEMP_FILE"' EXIT # Clean up: use single quotes for deferred expansion
|
|
60
|
-
|
|
61
|
-
# Validate input
|
|
62
|
-
[[ "$VALUE" =~ ^[0-9]+$ ]] || exit 1 # Only allow numbers
|
|
63
|
-
|
|
64
|
-
echo "$VARIABLE" # GOOD: Quoted
|
|
65
|
-
echo $VARIABLE # BAD: Vulnerable to word splitting
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
### JavaScript/Node.js Security
|
|
69
|
-
```javascript
|
|
70
|
-
// Path safety: ALWAYS use path.resolve()
|
|
71
|
-
const safePath = path.resolve(userInput);
|
|
72
|
-
function isPathSafe(target, base) {
|
|
73
|
-
const r = path.resolve(target), b = path.resolve(base);
|
|
74
|
-
return r === b || r.startsWith(b + path.sep);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// Never log credentials - ALWAYS mask
|
|
78
|
-
console.log('Key: ' + apiKey.substring(0, 3) + '...'); // Good
|
|
79
|
-
console.log(`Key: ${apiKey}`); // BAD
|
|
80
|
-
|
|
81
|
-
// Resource cleanup with try-finally
|
|
82
|
-
let proc;
|
|
83
|
-
try {
|
|
84
|
-
proc = spawn(...);
|
|
85
|
-
} finally {
|
|
86
|
-
if (proc && !proc.killed) proc.kill();
|
|
87
|
-
}
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
### Python Security
|
|
91
|
-
```python
|
|
92
|
-
# Resource cleanup
|
|
93
|
-
process = None
|
|
94
|
-
try:
|
|
95
|
-
process = subprocess.Popen(...)
|
|
96
|
-
finally:
|
|
97
|
-
if process and process.poll() is None:
|
|
98
|
-
process.kill()
|
|
99
|
-
|
|
100
|
-
# Graceful error handling
|
|
101
|
-
try:
|
|
102
|
-
content = path.read_text()
|
|
103
|
-
except (PermissionError, UnicodeDecodeError, OSError) as e:
|
|
104
|
-
print(f"Warning: {e}", file=sys.stderr)
|
|
105
|
-
return default_value
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
## Code Quality Standards
|
|
109
|
-
|
|
110
|
-
- ✅ **Error handling:** No silent failures - always handle errors explicitly
|
|
111
|
-
- ✅ **Defensive programming:** Check preconditions and validate inputs
|
|
112
|
-
- ✅ **Resource cleanup:** Always clean up files, processes, connections
|
|
113
|
-
- ✅ **Race conditions:** Use file locking for shared resources
|
|
114
|
-
- ✅ **Comments:** Security-critical code only (explain WHY, not WHAT)
|
|
115
|
-
- ✅ **Single responsibility:** Keep functions focused and testable
|
|
116
|
-
|
|
117
|
-
## Testing Requirements
|
|
118
|
-
|
|
119
|
-
- Run `npm test` before committing (REQUIRED)
|
|
120
|
-
- Write tests for: input validation, path handling, edge cases
|
|
121
|
-
- Code review via `/dev-story` includes test validation
|
|
122
|
-
- Target: 80%+ code coverage for new features
|
|
123
|
-
|
|
124
|
-
## Definition of Done (Checked by /dev-story)
|
|
125
|
-
|
|
126
|
-
- [ ] All tests pass (`npm test`)
|
|
127
|
-
- [ ] No Sonar security hotspots
|
|
128
|
-
- [ ] Code follows project patterns (project-context.md)
|
|
129
|
-
- [ ] Credentials masked in logs
|
|
130
|
-
- [ ] Paths validated (no traversal)
|
|
131
|
-
- [ ] File operations safe (ownership checked)
|
|
132
|
-
- [ ] Shell scripts use strict mode
|
|
133
|
-
- [ ] Resources properly cleaned up
|
|
134
|
-
- [ ] Acceptance criteria satisfied
|
|
135
|
-
|
|
136
|
-
## Story Development Workflow (REQUIRED)
|
|
137
|
-
|
|
138
|
-
### For Each Sprint:
|
|
139
|
-
1. Run `/sprint-planning` to initialize sprint-status.yaml
|
|
140
|
-
2. For each story, run `/dev-story` (handles everything)
|
|
141
|
-
3. Check progress anytime with `/sprint-status`
|
|
142
|
-
|
|
143
|
-
### What /dev-story Does:
|
|
144
|
-
- Finds next ready-for-dev story
|
|
145
|
-
- Loads story file with acceptance criteria
|
|
146
|
-
- Implements tasks with code + tests
|
|
147
|
-
- **Runs adversarial code review** (finds 3-10 issues)
|
|
148
|
-
- **Auto-fixes HIGH and MEDIUM severity issues**
|
|
149
|
-
- Validates against project-context.md
|
|
150
|
-
- Updates sprint-status.yaml automatically
|
|
151
|
-
- Marks story complete when all ACs satisfied
|
|
152
|
-
|
|
153
|
-
**Never bypass the workflow** - it enforces all quality gates.
|
|
154
|
-
|
|
155
|
-
## Important Files
|
|
156
|
-
|
|
157
|
-
| File | Purpose |
|
|
158
|
-
|------|---------|
|
|
159
|
-
| `CLAUDE.md` | Development standards (this file) |
|
|
160
|
-
| `BMAD-STORY-DEVELOPMENT.md` | How to use BMAD methodology |
|
|
161
|
-
| `project-context.md` | Project-specific patterns (if exists) |
|
|
162
|
-
| `docs/epics.md` | All epics and stories |
|
|
163
|
-
| `docs/implementation-artifacts/sprint-status.yaml` | Sprint progress tracking |
|
|
164
|
-
| `_bmad/core/tasks/workflow.xml` | BMAD execution engine (read-only) |
|
|
165
|
-
|
|
166
|
-
## References
|
|
167
|
-
|
|
168
|
-
- **BMAD Methodology:** See `/sprint-planning`, `/dev-story`, `/sprint-status` workflows
|
|
169
|
-
- **Security Standards:** [SonarCloud Rules](https://rules.sonarsource.com/javascript/type/Security_Hotspot), [OWASP Top 10](https://owasp.org/www-project-top-ten/)
|
|
170
|
-
- **Bash Best Practices:** [Shellharden](https://github.com/anordal/shellharden/blob/master/how_to_do_things_safely_in_bash.md)
|
|
1
|
+
# AgentVibes Development Guidelines
|
|
2
|
+
|
|
3
|
+
**Version:** 3.0
|
|
4
|
+
**Updated:** 2026-02-15
|
|
5
|
+
**Status:** Active (Using BMAD Methodology)
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
AgentVibes is a Text-to-Speech system for AI assistants with personality support.
|
|
10
|
+
|
|
11
|
+
### Project Uses BMAD Methodology
|
|
12
|
+
|
|
13
|
+
This project follows **BMAD (BMM - Business Model Methodology)** for all story development:
|
|
14
|
+
- Use `/sprint-planning` to initialize sprint tracking
|
|
15
|
+
- Use `/dev-story` for each story implementation (NOT manual commits)
|
|
16
|
+
- `/dev-story` handles: implementation → testing → code review → auto-fixes → status updates
|
|
17
|
+
- All stories tracked in `docs/implementation-artifacts/sprint-status.yaml`
|
|
18
|
+
- Status updates: `ready-for-dev` → `in-progress` → `complete`
|
|
19
|
+
|
|
20
|
+
**Required Reading:** See `BMAD-STORY-DEVELOPMENT.md` for complete workflow.
|
|
21
|
+
|
|
22
|
+
## Critical Rules
|
|
23
|
+
|
|
24
|
+
### ✅ MANDATORY: Use BMAD Workflow
|
|
25
|
+
1. **Initialize sprint:** Run `/sprint-planning` once per sprint
|
|
26
|
+
2. **Develop each story:** Run `/dev-story` (NOT manual coding)
|
|
27
|
+
3. **Never skip workflow steps** - Workflow enforces quality gates
|
|
28
|
+
4. **Update sprint-status.yaml** automatically via `/dev-story`
|
|
29
|
+
5. **Code review included** - Built into `/dev-story` workflow
|
|
30
|
+
|
|
31
|
+
### ✅ Git Workflow (ONLY Outside BMAD)
|
|
32
|
+
For changes outside story development:
|
|
33
|
+
1. Describe changes before acting
|
|
34
|
+
2. Get explicit user approval before commits/pushes
|
|
35
|
+
3. Test locally before pushing
|
|
36
|
+
4. Exception: Changes made by `/dev-story` auto-commit
|
|
37
|
+
|
|
38
|
+
## Security Requirements (SonarCloud Compliance)
|
|
39
|
+
|
|
40
|
+
### Core Security Rules (NO EXCEPTIONS)
|
|
41
|
+
1. **No hardcoded credentials** - Never commit API keys, passwords, tokens
|
|
42
|
+
2. **Validate all external input** - User input, files, environment variables
|
|
43
|
+
3. **Secure temp directories** - Use `$XDG_RUNTIME_DIR` or user-specific `/tmp`
|
|
44
|
+
4. **Verify file ownership** - Check before processing external files (uid check)
|
|
45
|
+
5. **Prevent path traversal** - Validate paths stay within expected directories (use `path.resolve()`)
|
|
46
|
+
6. **Never log sensitive data** - Mask credentials in logs
|
|
47
|
+
|
|
48
|
+
### Bash/Shell Security
|
|
49
|
+
```bash
|
|
50
|
+
set -euo pipefail # REQUIRED: Always use strict mode
|
|
51
|
+
|
|
52
|
+
# Secure temp with proper permissions
|
|
53
|
+
TEMP_DIR="${XDG_RUNTIME_DIR:-/tmp}/agentvibes-$RANDOM"
|
|
54
|
+
mkdir -p "$TEMP_DIR"; chmod 700 "$TEMP_DIR"
|
|
55
|
+
|
|
56
|
+
# Verify file ownership before processing
|
|
57
|
+
[[ $(stat -c '%u' "$file" 2>/dev/null || stat -f '%u' "$file" 2>/dev/null) == $(id -u) ]] || exit 1
|
|
58
|
+
|
|
59
|
+
trap 'rm -f "$TEMP_FILE"' EXIT # Clean up: use single quotes for deferred expansion
|
|
60
|
+
|
|
61
|
+
# Validate input
|
|
62
|
+
[[ "$VALUE" =~ ^[0-9]+$ ]] || exit 1 # Only allow numbers
|
|
63
|
+
|
|
64
|
+
echo "$VARIABLE" # GOOD: Quoted
|
|
65
|
+
echo $VARIABLE # BAD: Vulnerable to word splitting
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### JavaScript/Node.js Security
|
|
69
|
+
```javascript
|
|
70
|
+
// Path safety: ALWAYS use path.resolve()
|
|
71
|
+
const safePath = path.resolve(userInput);
|
|
72
|
+
function isPathSafe(target, base) {
|
|
73
|
+
const r = path.resolve(target), b = path.resolve(base);
|
|
74
|
+
return r === b || r.startsWith(b + path.sep);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Never log credentials - ALWAYS mask
|
|
78
|
+
console.log('Key: ' + apiKey.substring(0, 3) + '...'); // Good
|
|
79
|
+
console.log(`Key: ${apiKey}`); // BAD
|
|
80
|
+
|
|
81
|
+
// Resource cleanup with try-finally
|
|
82
|
+
let proc;
|
|
83
|
+
try {
|
|
84
|
+
proc = spawn(...);
|
|
85
|
+
} finally {
|
|
86
|
+
if (proc && !proc.killed) proc.kill();
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Python Security
|
|
91
|
+
```python
|
|
92
|
+
# Resource cleanup
|
|
93
|
+
process = None
|
|
94
|
+
try:
|
|
95
|
+
process = subprocess.Popen(...)
|
|
96
|
+
finally:
|
|
97
|
+
if process and process.poll() is None:
|
|
98
|
+
process.kill()
|
|
99
|
+
|
|
100
|
+
# Graceful error handling
|
|
101
|
+
try:
|
|
102
|
+
content = path.read_text()
|
|
103
|
+
except (PermissionError, UnicodeDecodeError, OSError) as e:
|
|
104
|
+
print(f"Warning: {e}", file=sys.stderr)
|
|
105
|
+
return default_value
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Code Quality Standards
|
|
109
|
+
|
|
110
|
+
- ✅ **Error handling:** No silent failures - always handle errors explicitly
|
|
111
|
+
- ✅ **Defensive programming:** Check preconditions and validate inputs
|
|
112
|
+
- ✅ **Resource cleanup:** Always clean up files, processes, connections
|
|
113
|
+
- ✅ **Race conditions:** Use file locking for shared resources
|
|
114
|
+
- ✅ **Comments:** Security-critical code only (explain WHY, not WHAT)
|
|
115
|
+
- ✅ **Single responsibility:** Keep functions focused and testable
|
|
116
|
+
|
|
117
|
+
## Testing Requirements
|
|
118
|
+
|
|
119
|
+
- Run `npm test` before committing (REQUIRED)
|
|
120
|
+
- Write tests for: input validation, path handling, edge cases
|
|
121
|
+
- Code review via `/dev-story` includes test validation
|
|
122
|
+
- Target: 80%+ code coverage for new features
|
|
123
|
+
|
|
124
|
+
## Definition of Done (Checked by /dev-story)
|
|
125
|
+
|
|
126
|
+
- [ ] All tests pass (`npm test`)
|
|
127
|
+
- [ ] No Sonar security hotspots
|
|
128
|
+
- [ ] Code follows project patterns (project-context.md)
|
|
129
|
+
- [ ] Credentials masked in logs
|
|
130
|
+
- [ ] Paths validated (no traversal)
|
|
131
|
+
- [ ] File operations safe (ownership checked)
|
|
132
|
+
- [ ] Shell scripts use strict mode
|
|
133
|
+
- [ ] Resources properly cleaned up
|
|
134
|
+
- [ ] Acceptance criteria satisfied
|
|
135
|
+
|
|
136
|
+
## Story Development Workflow (REQUIRED)
|
|
137
|
+
|
|
138
|
+
### For Each Sprint:
|
|
139
|
+
1. Run `/sprint-planning` to initialize sprint-status.yaml
|
|
140
|
+
2. For each story, run `/dev-story` (handles everything)
|
|
141
|
+
3. Check progress anytime with `/sprint-status`
|
|
142
|
+
|
|
143
|
+
### What /dev-story Does:
|
|
144
|
+
- Finds next ready-for-dev story
|
|
145
|
+
- Loads story file with acceptance criteria
|
|
146
|
+
- Implements tasks with code + tests
|
|
147
|
+
- **Runs adversarial code review** (finds 3-10 issues)
|
|
148
|
+
- **Auto-fixes HIGH and MEDIUM severity issues**
|
|
149
|
+
- Validates against project-context.md
|
|
150
|
+
- Updates sprint-status.yaml automatically
|
|
151
|
+
- Marks story complete when all ACs satisfied
|
|
152
|
+
|
|
153
|
+
**Never bypass the workflow** - it enforces all quality gates.
|
|
154
|
+
|
|
155
|
+
## Important Files
|
|
156
|
+
|
|
157
|
+
| File | Purpose |
|
|
158
|
+
|------|---------|
|
|
159
|
+
| `CLAUDE.md` | Development standards (this file) |
|
|
160
|
+
| `BMAD-STORY-DEVELOPMENT.md` | How to use BMAD methodology |
|
|
161
|
+
| `project-context.md` | Project-specific patterns (if exists) |
|
|
162
|
+
| `docs/epics.md` | All epics and stories |
|
|
163
|
+
| `docs/implementation-artifacts/sprint-status.yaml` | Sprint progress tracking |
|
|
164
|
+
| `_bmad/core/tasks/workflow.xml` | BMAD execution engine (read-only) |
|
|
165
|
+
|
|
166
|
+
## References
|
|
167
|
+
|
|
168
|
+
- **BMAD Methodology:** See `/sprint-planning`, `/dev-story`, `/sprint-status` workflows
|
|
169
|
+
- **Security Standards:** [SonarCloud Rules](https://rules.sonarsource.com/javascript/type/Security_Hotspot), [OWASP Top 10](https://owasp.org/www-project-top-ten/)
|
|
170
|
+
- **Bash Best Practices:** [Shellharden](https://github.com/anordal/shellharden/blob/master/how_to_do_things_safely_in_bash.md)
|