agentvibes 2.2.0 โ 2.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/github-star-reminder.txt +1 -1
- package/.mcp-minimal.json +27 -0
- package/README.md +9 -9
- package/RELEASE_NOTES.md +106 -0
- package/package.json +1 -1
- package/sonar +141 -0
- package/src/installer.js +25 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
20251103
|
package/.mcp-minimal.json
CHANGED
|
@@ -71,6 +71,33 @@
|
|
|
71
71
|
"env": {
|
|
72
72
|
"ELEVENLABS_API_KEY": "${ELEVENLABS_API_KEY}"
|
|
73
73
|
}
|
|
74
|
+
},
|
|
75
|
+
"sonarqube": {
|
|
76
|
+
"command": "docker",
|
|
77
|
+
"args": [
|
|
78
|
+
"run",
|
|
79
|
+
"-i",
|
|
80
|
+
"--name",
|
|
81
|
+
"sonarqube-mcp-server-agentvibes",
|
|
82
|
+
"--rm",
|
|
83
|
+
"-e",
|
|
84
|
+
"SONARQUBE_TOKEN=${SONARQUBE_TOKEN}",
|
|
85
|
+
"-e",
|
|
86
|
+
"SONARQUBE_URL=https://sonarcloud.io",
|
|
87
|
+
"-e",
|
|
88
|
+
"SONARQUBE_ORG=${SONARQUBE_ORG}",
|
|
89
|
+
"-e",
|
|
90
|
+
"SONARQUBE_PROJECT=${SONARQUBE_PROJECT}",
|
|
91
|
+
"-v",
|
|
92
|
+
"/home/fire/claude/AgentVibes/.sonarqube-storage:/storage",
|
|
93
|
+
"mcp/sonarqube"
|
|
94
|
+
],
|
|
95
|
+
"env": {
|
|
96
|
+
"SONARQUBE_TOKEN": "${SONARQUBE_TOKEN}",
|
|
97
|
+
"SONARQUBE_URL": "https://sonarcloud.io",
|
|
98
|
+
"SONARQUBE_ORG": "${SONARQUBE_ORG}",
|
|
99
|
+
"SONARQUBE_PROJECT": "${SONARQUBE_PROJECT}"
|
|
100
|
+
}
|
|
74
101
|
}
|
|
75
102
|
}
|
|
76
103
|
}
|
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
[](https://github.com/paulpreibisch/AgentVibes/actions/workflows/publish.yml)
|
|
12
12
|
[](https://opensource.org/licenses/Apache-2.0)
|
|
13
13
|
|
|
14
|
-
**Author**: Paul Preibisch ([@997Fire](https://x.com/997Fire)) | **Version**: v2.1
|
|
14
|
+
**Author**: Paul Preibisch ([@997Fire](https://x.com/997Fire)) | **Version**: v2.2.1
|
|
15
15
|
|
|
16
16
|
---
|
|
17
17
|
|
|
@@ -92,18 +92,18 @@ Whether you're coding in Claude Code, chatting in Claude Desktop, or using Warp
|
|
|
92
92
|
|
|
93
93
|
## ๐ฐ Latest Release
|
|
94
94
|
|
|
95
|
-
**[v2.
|
|
95
|
+
**[v2.2.0 - Provider-Aware Features, BMAD v6 Support & MCP Improvements](https://github.com/paulpreibisch/AgentVibes/releases/tag/v2.2.1)** ๐
|
|
96
96
|
|
|
97
|
-
|
|
97
|
+
Major enhancements to multi-provider support, BMAD integration, and MCP server configuration! This release makes AgentVibes smarter about which TTS provider you're using and adds full support for BMAD-METHOD v6-alpha.
|
|
98
98
|
|
|
99
99
|
**Key highlights:**
|
|
100
|
-
-
|
|
101
|
-
-
|
|
102
|
-
-
|
|
103
|
-
-
|
|
104
|
-
-
|
|
100
|
+
- ๐ฏ **Provider-Aware Voice Switching** - Automatically detects and uses the correct provider (ElevenLabs or Piper)
|
|
101
|
+
- ๐ค **BMAD v6 Support** - Full backward compatibility with v4, with improved agent voice mappings
|
|
102
|
+
- ๐ง **MCP NPX Fix** - Corrected NPX configuration for seamless MCP server setup
|
|
103
|
+
- โจ **Improved Installer UX** - Cleaner prompts and better visual formatting
|
|
104
|
+
- ๐ญ **Better Voice Mappings** - Provider-aware BMAD agent voices (PM: Ryan, Analyst: Kristin)
|
|
105
105
|
|
|
106
|
-
[โ View
|
|
106
|
+
[โ View All Releases](https://github.com/paulpreibisch/AgentVibes/releases)
|
|
107
107
|
|
|
108
108
|
[โ Back to top](#-table-of-contents)
|
|
109
109
|
|
package/RELEASE_NOTES.md
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# AgentVibes Release Notes
|
|
2
|
+
|
|
3
|
+
## v2.2.1 - Documentation & Installer UX Improvements (2025-11-03)
|
|
4
|
+
|
|
5
|
+
### ๐ค AI Summary
|
|
6
|
+
|
|
7
|
+
This patch release improves the user experience during installation and updates the documentation to reflect the latest v2.2.0 features. The MCP server configuration display has been redesigned with cleaner visual formatting, making it easier to copy the JSON configuration without accidentally including border characters. The README now properly highlights v2.2.0's provider-aware features, BMAD v6 support, and the transition from output-styles to SessionStart hooks.
|
|
8
|
+
|
|
9
|
+
### ๐ Changes
|
|
10
|
+
|
|
11
|
+
#### โจ Improvements
|
|
12
|
+
- **Installer UX**: Split MCP configuration display into three sections for cleaner formatting
|
|
13
|
+
- Top boxed section with intro and description
|
|
14
|
+
- Middle section (no box) showing only the JSON config for easy copy-paste
|
|
15
|
+
- Bottom boxed section with setup links and guides
|
|
16
|
+
- Prevents accidental copying of border characters when copying JSON config
|
|
17
|
+
|
|
18
|
+
#### ๐ Documentation
|
|
19
|
+
- **README**: Updated latest release section to showcase v2.2.0 features
|
|
20
|
+
- Provider-aware voice switching
|
|
21
|
+
- **BMAD v6 support** with full backward compatibility to v4
|
|
22
|
+
- MCP NPX configuration improvements
|
|
23
|
+
- Improved installer UX highlights
|
|
24
|
+
- Better voice mapping details
|
|
25
|
+
- **Architecture Change**: Documented transition from output-styles to SessionStart hooks
|
|
26
|
+
- SessionStart hook now automatically loads TTS protocol on every session
|
|
27
|
+
- Cleaner, more reliable activation mechanism
|
|
28
|
+
- No need for manual output-style selection
|
|
29
|
+
|
|
30
|
+
### ๐ฏ User Impact
|
|
31
|
+
|
|
32
|
+
**For New Users**: The improved installer display makes it much easier to copy the MCP server configuration into your `~/.claude/mcp.json` file without formatting issues. You'll also benefit from the new SessionStart hook architecture which automatically activates TTS on every Claude Code session.
|
|
33
|
+
|
|
34
|
+
**For Existing Users**: When running `npx agentvibes install` or viewing installation instructions, you'll see a cleaner, more professional display that's easier to read and use. Note that AgentVibes now uses SessionStart hooks instead of output-styles for automatic activation.
|
|
35
|
+
|
|
36
|
+
**BMAD Users**: Full support for BMAD-METHOD v6-alpha with automatic agent voice assignment, while maintaining complete backward compatibility with v4.
|
|
37
|
+
|
|
38
|
+
### ๐ฆ Files Changed
|
|
39
|
+
- `README.md` - Updated v2.2.0 release highlights
|
|
40
|
+
- `src/installer.js` - Improved MCP configuration display formatting
|
|
41
|
+
- `.claude/github-star-reminder.txt` - Updated reminder state
|
|
42
|
+
- `AgentVibes.code-workspace` - Workspace configuration updates
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## v2.2.0 - Provider-Aware Features, BMAD v6 Support & MCP Improvements (2025-11-02)
|
|
47
|
+
|
|
48
|
+
### ๐ค AI Summary
|
|
49
|
+
|
|
50
|
+
Major enhancements to multi-provider support, BMAD integration, and MCP server configuration! This release makes AgentVibes smarter about which TTS provider you're using and adds full support for BMAD-METHOD v6-alpha with complete backward compatibility to v4.
|
|
51
|
+
|
|
52
|
+
### ๐ Changes
|
|
53
|
+
|
|
54
|
+
#### โจ New Features
|
|
55
|
+
- **Provider-Aware Voice Switching**: Automatically detects whether you're using ElevenLabs or Piper TTS
|
|
56
|
+
- **BMAD v6 Support**: Full support for BMAD-METHOD v6-alpha with backward compatibility to v4
|
|
57
|
+
- **Improved Voice Mappings**: Provider-aware BMAD agent voices (PM: Ryan on Piper, Analyst: Kristin)
|
|
58
|
+
- **SessionStart Hook Support**: Reorganized repository structure for better hook integration
|
|
59
|
+
|
|
60
|
+
#### ๐ง Fixes
|
|
61
|
+
- **MCP NPX Configuration**: Corrected NPX command configuration for seamless MCP server setup
|
|
62
|
+
- **Voice Manager**: Made `/agent-vibes:switch` and `voice-manager.sh` provider-aware
|
|
63
|
+
- **Installer Prompts**: Removed redundant BMAD enable messages and duplicate pause prompts
|
|
64
|
+
- **JSON Formatting**: Removed color codes from MCP JSON output for clean copy-paste
|
|
65
|
+
|
|
66
|
+
#### ๐ Documentation
|
|
67
|
+
- Added prominent macOS bash 5.x requirement to README
|
|
68
|
+
- Updated documentation to remove deprecated output-style references
|
|
69
|
+
- Improved BMAD v6 TTS support documentation
|
|
70
|
+
|
|
71
|
+
### ๐ฏ User Impact
|
|
72
|
+
|
|
73
|
+
**Provider Awareness**: AgentVibes now intelligently works with both ElevenLabs and Piper TTS providers without manual configuration. Voice switching commands automatically use the correct provider's voice list.
|
|
74
|
+
|
|
75
|
+
**BMAD Integration**: If you're using BMAD-METHOD (v4 or v6), AgentVibes will automatically assign appropriate voices to each agent based on your TTS provider, with full backward compatibility.
|
|
76
|
+
|
|
77
|
+
**MCP Setup**: The corrected NPX configuration means MCP server setup is now seamless with the command: `npx -y --package=agentvibes agentvibes-mcp-server`
|
|
78
|
+
|
|
79
|
+
### ๐ฆ Commits Since v2.1.5
|
|
80
|
+
```
|
|
81
|
+
01f5283 docs: Update README version to v2.2.0
|
|
82
|
+
ca47e74 chore: Release v2.2.0
|
|
83
|
+
8b6cae9 Merge v6-alpha: Provider-aware features, BMAD improvements, MCP NPX fix
|
|
84
|
+
a9c5439 fix: Correct MCP server NPX configuration
|
|
85
|
+
9965372 chore: Bump version to 2.2.0-beta.9
|
|
86
|
+
3d2c9da feat: Set BMAD analyst voice to Kristin (Piper)
|
|
87
|
+
0241dc0 feat: Make BMAD voice mappings provider-aware
|
|
88
|
+
bfd887d feat: Change BMAD Project Manager voice to Ryan (Piper)
|
|
89
|
+
34ae021 chore: Bump version to 2.2.0-beta.8
|
|
90
|
+
041c475 fix: Make /agent-vibes:switch and voice-manager.sh provider-aware
|
|
91
|
+
eb0b3ec fix: Remove color codes from MCP JSON for clean copy-paste
|
|
92
|
+
0ae1c4d fix: Remove redundant BMAD enable message and simplify prompts
|
|
93
|
+
cf6e1cd fix: Remove duplicate 'recent changes' pause in installer
|
|
94
|
+
d01de85 docs: Remove deprecated output-style references
|
|
95
|
+
ffa1696 feat: Add BMAD v6 TTS support and improve installer UX
|
|
96
|
+
24d77f3 chore: Bump version to 2.2.0-beta.2
|
|
97
|
+
18ce2d3 refactor: Reorganize repository structure and add SessionStart hook support
|
|
98
|
+
8dec688 chore: Bump version to 2.2.0-beta.1 for beta release
|
|
99
|
+
ccad898 feat: Add BMAD-METHOD v6-alpha support with backward compatibility
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Previous Releases
|
|
105
|
+
|
|
106
|
+
For release notes prior to v2.2.0, please see the [GitHub Releases page](https://github.com/paulpreibisch/AgentVibes/releases).
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "agentvibes",
|
|
4
|
-
"version": "2.2.
|
|
4
|
+
"version": "2.2.2",
|
|
5
5
|
"description": "Now your AI Agents can finally talk back! Professional TTS voice for Claude Code and Claude Desktop (via MCP) with multi-provider support.",
|
|
6
6
|
"homepage": "https://agentvibes.org",
|
|
7
7
|
"keywords": [
|
package/sonar
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# SonarQube Analysis Wrapper Script
|
|
4
|
+
# Run SonarCloud analysis on the AgentVibes project
|
|
5
|
+
#
|
|
6
|
+
|
|
7
|
+
set -euo pipefail
|
|
8
|
+
|
|
9
|
+
# Colors for output
|
|
10
|
+
RED='\033[0;31m'
|
|
11
|
+
GREEN='\033[0;32m'
|
|
12
|
+
YELLOW='\033[1;33m'
|
|
13
|
+
CYAN='\033[0;36m'
|
|
14
|
+
NC='\033[0m' # No Color
|
|
15
|
+
|
|
16
|
+
# Configuration
|
|
17
|
+
PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
18
|
+
STORAGE_DIR="$PROJECT_DIR/.sonarqube-storage"
|
|
19
|
+
CONTAINER_NAME="sonarqube-mcp-server-agentvibes"
|
|
20
|
+
IMAGE_NAME="mcp/sonarqube"
|
|
21
|
+
|
|
22
|
+
# Check required environment variables
|
|
23
|
+
check_env_vars() {
|
|
24
|
+
local missing=0
|
|
25
|
+
|
|
26
|
+
# Use AgentVibes-prefixed environment variables
|
|
27
|
+
if [[ -z "${AGENTVIBES_SONARQUBE_TOKEN:-}" ]]; then
|
|
28
|
+
echo -e "${RED}โ AGENTVIBES_SONARQUBE_TOKEN is not set${NC}"
|
|
29
|
+
missing=1
|
|
30
|
+
fi
|
|
31
|
+
|
|
32
|
+
if [[ -z "${AGENTVIBES_SONARQUBE_ORG:-}" ]]; then
|
|
33
|
+
echo -e "${RED}โ AGENTVIBES_SONARQUBE_ORG is not set${NC}"
|
|
34
|
+
missing=1
|
|
35
|
+
fi
|
|
36
|
+
|
|
37
|
+
if [[ -z "${AGENTVIBES_SONARQUBE_PROJECT:-}" ]]; then
|
|
38
|
+
echo -e "${RED}โ AGENTVIBES_SONARQUBE_PROJECT is not set${NC}"
|
|
39
|
+
missing=1
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
if [[ $missing -eq 1 ]]; then
|
|
43
|
+
echo -e "\n${YELLOW}๐ก Set these environment variables in ~/.zshrc:${NC}"
|
|
44
|
+
echo " export AGENTVIBES_SONARQUBE_TOKEN='your-token'"
|
|
45
|
+
echo " export AGENTVIBES_SONARQUBE_ORG='paulpreibisch'"
|
|
46
|
+
echo " export AGENTVIBES_SONARQUBE_PROJECT='AgentVibes'"
|
|
47
|
+
echo -e "\n${YELLOW}Then reload: source ~/.zshrc${NC}"
|
|
48
|
+
exit 1
|
|
49
|
+
fi
|
|
50
|
+
|
|
51
|
+
# Set standard variable names for Docker container
|
|
52
|
+
export SONARQUBE_TOKEN="${AGENTVIBES_SONARQUBE_TOKEN}"
|
|
53
|
+
export SONARQUBE_ORG="${AGENTVIBES_SONARQUBE_ORG}"
|
|
54
|
+
export SONARQUBE_PROJECT="${AGENTVIBES_SONARQUBE_PROJECT}"
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
# Check if Docker is available
|
|
58
|
+
check_docker() {
|
|
59
|
+
if ! command -v docker &> /dev/null; then
|
|
60
|
+
echo -e "${RED}โ Docker is not available${NC}"
|
|
61
|
+
echo -e "${YELLOW}๐ก Please start Docker Desktop or enable Docker in WSL2${NC}"
|
|
62
|
+
exit 1
|
|
63
|
+
fi
|
|
64
|
+
|
|
65
|
+
if ! docker info &> /dev/null; then
|
|
66
|
+
echo -e "${RED}โ Docker daemon is not running${NC}"
|
|
67
|
+
echo -e "${YELLOW}๐ก Please start Docker Desktop${NC}"
|
|
68
|
+
exit 1
|
|
69
|
+
fi
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
# Create storage directory if it doesn't exist
|
|
73
|
+
setup_storage() {
|
|
74
|
+
if [[ ! -d "$STORAGE_DIR" ]]; then
|
|
75
|
+
echo -e "${CYAN}๐ Creating storage directory...${NC}"
|
|
76
|
+
mkdir -p "$STORAGE_DIR"
|
|
77
|
+
fi
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
# Pull the latest image if needed
|
|
81
|
+
pull_image() {
|
|
82
|
+
if ! docker images | grep -q "mcp/sonarqube"; then
|
|
83
|
+
echo -e "${CYAN}๐ฆ Pulling SonarQube MCP image...${NC}"
|
|
84
|
+
docker pull "$IMAGE_NAME" || {
|
|
85
|
+
echo -e "${RED}โ Failed to pull image${NC}"
|
|
86
|
+
echo -e "${YELLOW}๐ก Make sure you have access to the mcp/sonarqube image${NC}"
|
|
87
|
+
exit 1
|
|
88
|
+
}
|
|
89
|
+
fi
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
# Stop any existing container
|
|
93
|
+
cleanup() {
|
|
94
|
+
if docker ps -a | grep -q "$CONTAINER_NAME"; then
|
|
95
|
+
echo -e "${CYAN}๐งน Cleaning up existing container...${NC}"
|
|
96
|
+
docker rm -f "$CONTAINER_NAME" &> /dev/null || true
|
|
97
|
+
fi
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
# Run the analysis
|
|
101
|
+
run_analysis() {
|
|
102
|
+
echo -e "${GREEN}๐ Starting SonarCloud analysis...${NC}"
|
|
103
|
+
echo -e "${CYAN} Organization: ${SONARQUBE_ORG}${NC}"
|
|
104
|
+
echo -e "${CYAN} Project: ${SONARQUBE_PROJECT}${NC}"
|
|
105
|
+
echo -e "${CYAN} URL: https://sonarcloud.io${NC}"
|
|
106
|
+
echo ""
|
|
107
|
+
|
|
108
|
+
docker run -i \
|
|
109
|
+
--name "$CONTAINER_NAME" \
|
|
110
|
+
--rm \
|
|
111
|
+
-e "SONARQUBE_TOKEN=${SONARQUBE_TOKEN}" \
|
|
112
|
+
-e "SONARQUBE_URL=https://sonarcloud.io" \
|
|
113
|
+
-e "SONARQUBE_ORG=${SONARQUBE_ORG}" \
|
|
114
|
+
-e "SONARQUBE_PROJECT=${SONARQUBE_PROJECT}" \
|
|
115
|
+
-v "${STORAGE_DIR}:/storage" \
|
|
116
|
+
"$IMAGE_NAME" "$@"
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
# Main execution
|
|
120
|
+
main() {
|
|
121
|
+
echo -e "${CYAN}โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ${NC}"
|
|
122
|
+
echo -e "${CYAN} SonarQube Analysis - AgentVibes${NC}"
|
|
123
|
+
echo -e "${CYAN}โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ${NC}"
|
|
124
|
+
echo ""
|
|
125
|
+
|
|
126
|
+
check_env_vars
|
|
127
|
+
check_docker
|
|
128
|
+
setup_storage
|
|
129
|
+
pull_image
|
|
130
|
+
cleanup
|
|
131
|
+
run_analysis "$@"
|
|
132
|
+
|
|
133
|
+
echo ""
|
|
134
|
+
echo -e "${GREEN}โ
Analysis complete!${NC}"
|
|
135
|
+
echo -e "${CYAN}๐ View results: https://sonarcloud.io/project/overview?id=${SONARQUBE_PROJECT}${NC}"
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
# Handle Ctrl+C gracefully
|
|
139
|
+
trap cleanup EXIT
|
|
140
|
+
|
|
141
|
+
main "$@"
|
package/src/installer.js
CHANGED
|
@@ -925,15 +925,31 @@ async function install(options = {}) {
|
|
|
925
925
|
chalk.gray(' "Switch to Aria voice" instead of /agent-vibes:switch "Aria"\n') +
|
|
926
926
|
chalk.gray(' "Set personality to sarcastic" instead of /agent-vibes:personality sarcastic\n\n') +
|
|
927
927
|
chalk.cyan('๐ Claude Code MCP Configuration:\n\n') +
|
|
928
|
-
chalk.white('Add this to your ') + chalk.cyan('~/.claude/mcp.json') + chalk.white('
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
928
|
+
chalk.white('Add this to your ') + chalk.cyan('~/.claude/mcp.json') + chalk.white(':'),
|
|
929
|
+
{
|
|
930
|
+
padding: 1,
|
|
931
|
+
margin: 1,
|
|
932
|
+
borderStyle: 'round',
|
|
933
|
+
borderColor: 'cyan',
|
|
934
|
+
}
|
|
935
|
+
)
|
|
936
|
+
);
|
|
937
|
+
|
|
938
|
+
// Display JSON config without border
|
|
939
|
+
console.log(
|
|
940
|
+
'\n{\n' +
|
|
941
|
+
' "mcpServers": {\n' +
|
|
942
|
+
' "agentvibes": {\n' +
|
|
943
|
+
' "command": "npx",\n' +
|
|
944
|
+
' "args": ["-y", "--package=agentvibes", "agentvibes-mcp-server"]\n' +
|
|
945
|
+
' }\n' +
|
|
946
|
+
' }\n' +
|
|
947
|
+
'}\n'
|
|
948
|
+
);
|
|
949
|
+
|
|
950
|
+
// Bottom section with border
|
|
951
|
+
console.log(
|
|
952
|
+
boxen(
|
|
937
953
|
chalk.cyan('๐ฑ Claude Desktop / Warp Terminal:\n') +
|
|
938
954
|
chalk.white(' npx agentvibes setup-mcp-for-claude-desktop\n\n') +
|
|
939
955
|
chalk.cyan('๐ Full Guide:\n') +
|