agentvibes 4.2.0 → 4.4.1
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 +208 -84
- 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 +5895 -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 +143 -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
|
@@ -1,154 +1,154 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
#
|
|
3
|
-
# File: .claude/hooks/github-star-reminder.sh
|
|
4
|
-
#
|
|
5
|
-
# AgentVibes - Finally, your AI Agents can Talk Back! Text-to-Speech WITH personality for AI Assistants!
|
|
6
|
-
# Website: https://agentvibes.org
|
|
7
|
-
# Repository: https://github.com/paulpreibisch/AgentVibes
|
|
8
|
-
#
|
|
9
|
-
# Co-created by Paul Preibisch with Claude AI
|
|
10
|
-
# Copyright (c) 2025 Paul Preibisch
|
|
11
|
-
#
|
|
12
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
13
|
-
# you may not use this file except in compliance with the License.
|
|
14
|
-
# You may obtain a copy of the License at
|
|
15
|
-
#
|
|
16
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
17
|
-
#
|
|
18
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
19
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
20
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
-
# See the License for the specific language governing permissions and
|
|
22
|
-
# limitations under the License.
|
|
23
|
-
#
|
|
24
|
-
# DISCLAIMER: This software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
25
|
-
# express or implied, including but not limited to the warranties of
|
|
26
|
-
# merchantability, fitness for a particular purpose and noninfringement.
|
|
27
|
-
# In no event shall the authors or copyright holders be liable for any claim,
|
|
28
|
-
# damages or other liability, whether in an action of contract, tort or
|
|
29
|
-
# otherwise, arising from, out of or in connection with the software or the
|
|
30
|
-
# use or other dealings in the software.
|
|
31
|
-
#
|
|
32
|
-
# ---
|
|
33
|
-
#
|
|
34
|
-
# @fileoverview GitHub Star Reminder System - Gentle daily reminder to star repository
|
|
35
|
-
# @context Shows a once-per-day reminder to encourage users to support the project without being annoying
|
|
36
|
-
# @architecture Timestamp-based tracking using daily date comparison in a state file
|
|
37
|
-
# @dependencies date command for timestamp generation
|
|
38
|
-
# @entrypoints Called by play-tts.sh router on every TTS execution, sourced or executed directly
|
|
39
|
-
# @patterns Rate-limiting via file-based state, graceful degradation, user-opt-out support
|
|
40
|
-
# @related .claude/github-star-reminder.txt (state file), .claude/github-star-reminder-disabled.flag (opt-out)
|
|
41
|
-
|
|
42
|
-
# Determine config directory (project-local or global)
|
|
43
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
44
|
-
CLAUDE_DIR="$(dirname "$SCRIPT_DIR")"
|
|
45
|
-
|
|
46
|
-
# Check if we have a project-local .claude directory
|
|
47
|
-
if [[ -d "$CLAUDE_DIR" ]] && [[ "$CLAUDE_DIR" != "$HOME/.claude" ]]; then
|
|
48
|
-
REMINDER_FILE="$CLAUDE_DIR/github-star-reminder.txt"
|
|
49
|
-
else
|
|
50
|
-
REMINDER_FILE="$HOME/.claude/github-star-reminder.txt"
|
|
51
|
-
mkdir -p "$HOME/.claude"
|
|
52
|
-
fi
|
|
53
|
-
|
|
54
|
-
GITHUB_REPO="https://github.com/paulpreibisch/AgentVibes"
|
|
55
|
-
|
|
56
|
-
# @function is_reminder_disabled
|
|
57
|
-
# @intent Check if GitHub star reminders have been disabled by the user
|
|
58
|
-
# @why Respect user preferences and provide opt-out mechanism for reminders
|
|
59
|
-
# @param None
|
|
60
|
-
# @returns None
|
|
61
|
-
# @exitcode 0=reminders disabled, 1=reminders enabled
|
|
62
|
-
# @sideeffects Reads flag files from local/global .claude directories
|
|
63
|
-
# @edgecases Checks both flag file and "disabled" text in reminder file for backward compatibility
|
|
64
|
-
# @calledby should_show_reminder
|
|
65
|
-
# @calls cat for reading reminder file content
|
|
66
|
-
is_reminder_disabled() {
|
|
67
|
-
# Check for disable flag file
|
|
68
|
-
local disable_file_local="$CLAUDE_DIR/github-star-reminder-disabled.flag"
|
|
69
|
-
local disable_file_global="$HOME/.claude/github-star-reminder-disabled.flag"
|
|
70
|
-
|
|
71
|
-
if [[ -f "$disable_file_local" ]] || [[ -f "$disable_file_global" ]]; then
|
|
72
|
-
return 0 # Disabled
|
|
73
|
-
fi
|
|
74
|
-
|
|
75
|
-
# Check if reminder file contains "disabled"
|
|
76
|
-
if [[ -f "$REMINDER_FILE" ]]; then
|
|
77
|
-
local content=$(cat "$REMINDER_FILE" 2>/dev/null)
|
|
78
|
-
if [[ "$content" == "disabled" ]]; then
|
|
79
|
-
return 0 # Disabled
|
|
80
|
-
fi
|
|
81
|
-
fi
|
|
82
|
-
|
|
83
|
-
return 1 # Not disabled
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
# @function should_show_reminder
|
|
87
|
-
# @intent Determine if reminder should be displayed based on date and disable status
|
|
88
|
-
# @why Implement once-per-day rate limiting to avoid annoying users
|
|
89
|
-
# @param None
|
|
90
|
-
# @returns None
|
|
91
|
-
# @exitcode 0=should show, 1=should not show
|
|
92
|
-
# @sideeffects Reads .claude/github-star-reminder.txt for last reminder date
|
|
93
|
-
# @edgecases Shows reminder if file doesn't exist (first run), compares YYYYMMDD format dates
|
|
94
|
-
# @calledby Main execution block
|
|
95
|
-
# @calls is_reminder_disabled, cat, date
|
|
96
|
-
should_show_reminder() {
|
|
97
|
-
# Check if disabled first
|
|
98
|
-
if is_reminder_disabled; then
|
|
99
|
-
return 1
|
|
100
|
-
fi
|
|
101
|
-
|
|
102
|
-
# If no reminder file exists, show it
|
|
103
|
-
if [[ ! -f "$REMINDER_FILE" ]]; then
|
|
104
|
-
return 0
|
|
105
|
-
fi
|
|
106
|
-
|
|
107
|
-
# Read last reminder date
|
|
108
|
-
LAST_REMINDER=$(cat "$REMINDER_FILE" 2>/dev/null || echo "0")
|
|
109
|
-
CURRENT_DATE=$(date +%Y%m%d)
|
|
110
|
-
|
|
111
|
-
# Show reminder if it's a new day
|
|
112
|
-
if [[ "$LAST_REMINDER" != "$CURRENT_DATE" ]]; then
|
|
113
|
-
return 0
|
|
114
|
-
fi
|
|
115
|
-
|
|
116
|
-
return 1
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
# @function show_reminder
|
|
120
|
-
# @intent Display friendly GitHub star reminder with opt-out instructions
|
|
121
|
-
# @why Encourage community support while being respectful and non-intrusive
|
|
122
|
-
# @param None
|
|
123
|
-
# @returns None
|
|
124
|
-
# @exitcode Always 0
|
|
125
|
-
# @sideeffects Updates reminder file with current date, writes to stdout
|
|
126
|
-
# @edgecases None
|
|
127
|
-
# @calledby Main execution block when should_show_reminder returns true
|
|
128
|
-
# @calls date, echo
|
|
129
|
-
show_reminder() {
|
|
130
|
-
echo ""
|
|
131
|
-
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
132
|
-
echo "⭐ Enjoying AgentVibes?"
|
|
133
|
-
echo ""
|
|
134
|
-
echo " If you find this project helpful, please consider giving us"
|
|
135
|
-
echo " a star on GitHub! It helps others discover AgentVibes and"
|
|
136
|
-
echo " motivates us to keep improving it."
|
|
137
|
-
echo ""
|
|
138
|
-
echo " 👉 $GITHUB_REPO"
|
|
139
|
-
echo ""
|
|
140
|
-
echo " Thank you for your support! 🙏"
|
|
141
|
-
echo ""
|
|
142
|
-
echo " 💡 To disable these reminders, run:"
|
|
143
|
-
echo " echo \"disabled\" > $REMINDER_FILE"
|
|
144
|
-
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
145
|
-
echo ""
|
|
146
|
-
|
|
147
|
-
# Update the reminder file with today's date
|
|
148
|
-
date +%Y%m%d > "$REMINDER_FILE"
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
# Main execution
|
|
152
|
-
if should_show_reminder; then
|
|
153
|
-
show_reminder
|
|
154
|
-
fi
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# File: .claude/hooks/github-star-reminder.sh
|
|
4
|
+
#
|
|
5
|
+
# AgentVibes - Finally, your AI Agents can Talk Back! Text-to-Speech WITH personality for AI Assistants!
|
|
6
|
+
# Website: https://agentvibes.org
|
|
7
|
+
# Repository: https://github.com/paulpreibisch/AgentVibes
|
|
8
|
+
#
|
|
9
|
+
# Co-created by Paul Preibisch with Claude AI
|
|
10
|
+
# Copyright (c) 2025 Paul Preibisch
|
|
11
|
+
#
|
|
12
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
13
|
+
# you may not use this file except in compliance with the License.
|
|
14
|
+
# You may obtain a copy of the License at
|
|
15
|
+
#
|
|
16
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
17
|
+
#
|
|
18
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
19
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
20
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
+
# See the License for the specific language governing permissions and
|
|
22
|
+
# limitations under the License.
|
|
23
|
+
#
|
|
24
|
+
# DISCLAIMER: This software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
25
|
+
# express or implied, including but not limited to the warranties of
|
|
26
|
+
# merchantability, fitness for a particular purpose and noninfringement.
|
|
27
|
+
# In no event shall the authors or copyright holders be liable for any claim,
|
|
28
|
+
# damages or other liability, whether in an action of contract, tort or
|
|
29
|
+
# otherwise, arising from, out of or in connection with the software or the
|
|
30
|
+
# use or other dealings in the software.
|
|
31
|
+
#
|
|
32
|
+
# ---
|
|
33
|
+
#
|
|
34
|
+
# @fileoverview GitHub Star Reminder System - Gentle daily reminder to star repository
|
|
35
|
+
# @context Shows a once-per-day reminder to encourage users to support the project without being annoying
|
|
36
|
+
# @architecture Timestamp-based tracking using daily date comparison in a state file
|
|
37
|
+
# @dependencies date command for timestamp generation
|
|
38
|
+
# @entrypoints Called by play-tts.sh router on every TTS execution, sourced or executed directly
|
|
39
|
+
# @patterns Rate-limiting via file-based state, graceful degradation, user-opt-out support
|
|
40
|
+
# @related .claude/github-star-reminder.txt (state file), .claude/github-star-reminder-disabled.flag (opt-out)
|
|
41
|
+
|
|
42
|
+
# Determine config directory (project-local or global)
|
|
43
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
44
|
+
CLAUDE_DIR="$(dirname "$SCRIPT_DIR")"
|
|
45
|
+
|
|
46
|
+
# Check if we have a project-local .claude directory
|
|
47
|
+
if [[ -d "$CLAUDE_DIR" ]] && [[ "$CLAUDE_DIR" != "$HOME/.claude" ]]; then
|
|
48
|
+
REMINDER_FILE="$CLAUDE_DIR/github-star-reminder.txt"
|
|
49
|
+
else
|
|
50
|
+
REMINDER_FILE="$HOME/.claude/github-star-reminder.txt"
|
|
51
|
+
mkdir -p "$HOME/.claude"
|
|
52
|
+
fi
|
|
53
|
+
|
|
54
|
+
GITHUB_REPO="https://github.com/paulpreibisch/AgentVibes"
|
|
55
|
+
|
|
56
|
+
# @function is_reminder_disabled
|
|
57
|
+
# @intent Check if GitHub star reminders have been disabled by the user
|
|
58
|
+
# @why Respect user preferences and provide opt-out mechanism for reminders
|
|
59
|
+
# @param None
|
|
60
|
+
# @returns None
|
|
61
|
+
# @exitcode 0=reminders disabled, 1=reminders enabled
|
|
62
|
+
# @sideeffects Reads flag files from local/global .claude directories
|
|
63
|
+
# @edgecases Checks both flag file and "disabled" text in reminder file for backward compatibility
|
|
64
|
+
# @calledby should_show_reminder
|
|
65
|
+
# @calls cat for reading reminder file content
|
|
66
|
+
is_reminder_disabled() {
|
|
67
|
+
# Check for disable flag file
|
|
68
|
+
local disable_file_local="$CLAUDE_DIR/github-star-reminder-disabled.flag"
|
|
69
|
+
local disable_file_global="$HOME/.claude/github-star-reminder-disabled.flag"
|
|
70
|
+
|
|
71
|
+
if [[ -f "$disable_file_local" ]] || [[ -f "$disable_file_global" ]]; then
|
|
72
|
+
return 0 # Disabled
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
# Check if reminder file contains "disabled"
|
|
76
|
+
if [[ -f "$REMINDER_FILE" ]]; then
|
|
77
|
+
local content=$(cat "$REMINDER_FILE" 2>/dev/null)
|
|
78
|
+
if [[ "$content" == "disabled" ]]; then
|
|
79
|
+
return 0 # Disabled
|
|
80
|
+
fi
|
|
81
|
+
fi
|
|
82
|
+
|
|
83
|
+
return 1 # Not disabled
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
# @function should_show_reminder
|
|
87
|
+
# @intent Determine if reminder should be displayed based on date and disable status
|
|
88
|
+
# @why Implement once-per-day rate limiting to avoid annoying users
|
|
89
|
+
# @param None
|
|
90
|
+
# @returns None
|
|
91
|
+
# @exitcode 0=should show, 1=should not show
|
|
92
|
+
# @sideeffects Reads .claude/github-star-reminder.txt for last reminder date
|
|
93
|
+
# @edgecases Shows reminder if file doesn't exist (first run), compares YYYYMMDD format dates
|
|
94
|
+
# @calledby Main execution block
|
|
95
|
+
# @calls is_reminder_disabled, cat, date
|
|
96
|
+
should_show_reminder() {
|
|
97
|
+
# Check if disabled first
|
|
98
|
+
if is_reminder_disabled; then
|
|
99
|
+
return 1
|
|
100
|
+
fi
|
|
101
|
+
|
|
102
|
+
# If no reminder file exists, show it
|
|
103
|
+
if [[ ! -f "$REMINDER_FILE" ]]; then
|
|
104
|
+
return 0
|
|
105
|
+
fi
|
|
106
|
+
|
|
107
|
+
# Read last reminder date
|
|
108
|
+
LAST_REMINDER=$(cat "$REMINDER_FILE" 2>/dev/null || echo "0")
|
|
109
|
+
CURRENT_DATE=$(date +%Y%m%d)
|
|
110
|
+
|
|
111
|
+
# Show reminder if it's a new day
|
|
112
|
+
if [[ "$LAST_REMINDER" != "$CURRENT_DATE" ]]; then
|
|
113
|
+
return 0
|
|
114
|
+
fi
|
|
115
|
+
|
|
116
|
+
return 1
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
# @function show_reminder
|
|
120
|
+
# @intent Display friendly GitHub star reminder with opt-out instructions
|
|
121
|
+
# @why Encourage community support while being respectful and non-intrusive
|
|
122
|
+
# @param None
|
|
123
|
+
# @returns None
|
|
124
|
+
# @exitcode Always 0
|
|
125
|
+
# @sideeffects Updates reminder file with current date, writes to stdout
|
|
126
|
+
# @edgecases None
|
|
127
|
+
# @calledby Main execution block when should_show_reminder returns true
|
|
128
|
+
# @calls date, echo
|
|
129
|
+
show_reminder() {
|
|
130
|
+
echo ""
|
|
131
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
132
|
+
echo "⭐ Enjoying AgentVibes?"
|
|
133
|
+
echo ""
|
|
134
|
+
echo " If you find this project helpful, please consider giving us"
|
|
135
|
+
echo " a star on GitHub! It helps others discover AgentVibes and"
|
|
136
|
+
echo " motivates us to keep improving it."
|
|
137
|
+
echo ""
|
|
138
|
+
echo " 👉 $GITHUB_REPO"
|
|
139
|
+
echo ""
|
|
140
|
+
echo " Thank you for your support! 🙏"
|
|
141
|
+
echo ""
|
|
142
|
+
echo " 💡 To disable these reminders, run:"
|
|
143
|
+
echo " echo \"disabled\" > $REMINDER_FILE"
|
|
144
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
145
|
+
echo ""
|
|
146
|
+
|
|
147
|
+
# Update the reminder file with today's date
|
|
148
|
+
date +%Y%m%d > "$REMINDER_FILE"
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
# Main execution
|
|
152
|
+
if should_show_reminder; then
|
|
153
|
+
show_reminder
|
|
154
|
+
fi
|