agentvibes 1.0.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/.claude/commands/agent-vibes/add.md +21 -0
- package/.claude/commands/agent-vibes/agent-vibes.md +68 -0
- package/.claude/commands/agent-vibes/get.md +9 -0
- package/.claude/commands/agent-vibes/list.md +13 -0
- package/.claude/commands/agent-vibes/personality.md +79 -0
- package/.claude/commands/agent-vibes/preview.md +16 -0
- package/.claude/commands/agent-vibes/replay.md +19 -0
- package/.claude/commands/agent-vibes/sample.md +12 -0
- package/.claude/commands/agent-vibes/sentiment.md +52 -0
- package/.claude/commands/agent-vibes/set-pretext.md +65 -0
- package/.claude/commands/agent-vibes/switch.md +53 -0
- package/.claude/commands/agent-vibes/whoami.md +7 -0
- package/.claude/hooks/personality-manager.sh +358 -0
- package/.claude/hooks/play-tts.sh +99 -0
- package/.claude/hooks/sentiment-manager.sh +164 -0
- package/.claude/hooks/voice-manager.sh +308 -0
- package/.claude/hooks/voices-config.sh +22 -0
- package/.claude/output-styles/agent-vibes.md +124 -0
- package/.claude/personalities/angry.md +16 -0
- package/.claude/personalities/annoying.md +16 -0
- package/.claude/personalities/crass.md +16 -0
- package/.claude/personalities/dramatic.md +16 -0
- package/.claude/personalities/flirty.md +22 -0
- package/.claude/personalities/funny.md +16 -0
- package/.claude/personalities/grandpa.md +34 -0
- package/.claude/personalities/millennial.md +16 -0
- package/.claude/personalities/moody.md +16 -0
- package/.claude/personalities/normal.md +17 -0
- package/.claude/personalities/pirate.md +16 -0
- package/.claude/personalities/poetic.md +16 -0
- package/.claude/personalities/professional.md +16 -0
- package/.claude/personalities/robot.md +16 -0
- package/.claude/personalities/sarcastic.md +40 -0
- package/.claude/personalities/sassy.md +16 -0
- package/.claude/personalities/surfer-dude.md +16 -0
- package/.claude/personalities/zen.md +16 -0
- package/LICENSE +190 -0
- package/NPM_PUBLISH_GUIDE.md +145 -0
- package/README.md +446 -0
- package/bin/agent-vibes +43 -0
- package/package.json +45 -0
- package/src/installer.js +443 -0
- package/templates/output-styles/agent-vibes.md +124 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Add a new custom ElevenLabs TTS voice
|
|
3
|
+
argument-hint: <voice_name> <voice_id>
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Add a new custom ElevenLabs TTS voice to your voice library.
|
|
7
|
+
|
|
8
|
+
Usage:
|
|
9
|
+
- `/agent-vibes:add "My Custom Voice" abc123xyz456789`
|
|
10
|
+
- `/agent-vibes:add Narrator KTPVrSVAEUSJRClDzBw7`
|
|
11
|
+
|
|
12
|
+
The voice ID should be a 15-30 character alphanumeric string from your ElevenLabs account.
|
|
13
|
+
|
|
14
|
+
To find your voice IDs:
|
|
15
|
+
1. Go to https://elevenlabs.io/app/voice-library
|
|
16
|
+
2. Click on a voice
|
|
17
|
+
3. Copy the voice ID from the URL or settings
|
|
18
|
+
|
|
19
|
+
After adding, you can switch to it with `/agent-vibes:switch "Voice Name"`
|
|
20
|
+
|
|
21
|
+
!bash .claude/hooks/voice-manager.sh add $ARGUMENTS
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: ElevenLabs TTS voice management commands
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# 🎤 ElevenLabs Voice Management
|
|
6
|
+
|
|
7
|
+
Manage your ElevenLabs text-to-speech voices with these commands:
|
|
8
|
+
|
|
9
|
+
## Available Commands
|
|
10
|
+
|
|
11
|
+
### `/agent-vibes:list [first|last] [N]`
|
|
12
|
+
List all available voices, with optional filtering
|
|
13
|
+
- `/agent-vibes:list` - Show all voices
|
|
14
|
+
- `/agent-vibes:list first 5` - Show first 5 voices
|
|
15
|
+
- `/agent-vibes:list last 3` - Show last 3 voices
|
|
16
|
+
|
|
17
|
+
### `/agent-vibes:preview [first|last] [N]`
|
|
18
|
+
Preview voices by playing audio samples
|
|
19
|
+
- `/agent-vibes:preview` - Preview first 3 voices
|
|
20
|
+
- `/agent-vibes:preview 5` - Preview first 5 voices
|
|
21
|
+
- `/agent-vibes:preview last 5` - Preview last 5 voices
|
|
22
|
+
|
|
23
|
+
### `/agent-vibes:switch <voice_name>`
|
|
24
|
+
Switch to a different default voice
|
|
25
|
+
- `/agent-vibes:switch Northern Terry`
|
|
26
|
+
- `/agent-vibes:switch "Cowboy Bob"`
|
|
27
|
+
|
|
28
|
+
### `/agent-vibes:get`
|
|
29
|
+
Display the currently selected voice
|
|
30
|
+
|
|
31
|
+
### `/agent-vibes:add <name> <voice_id>`
|
|
32
|
+
Add a new custom voice from your ElevenLabs account
|
|
33
|
+
- `/agent-vibes:add "My Voice" abc123xyz456`
|
|
34
|
+
|
|
35
|
+
### `/agent-vibes:replay [N]`
|
|
36
|
+
Replay recently played TTS audio
|
|
37
|
+
- `/agent-vibes:replay` - Replay last audio
|
|
38
|
+
- `/agent-vibes:replay 1` - Replay most recent
|
|
39
|
+
- `/agent-vibes:replay 2` - Replay second-to-last
|
|
40
|
+
- `/agent-vibes:replay 3` - Replay third-to-last
|
|
41
|
+
|
|
42
|
+
Keeps last 10 audio files in history.
|
|
43
|
+
|
|
44
|
+
### `/agent-vibes:set-pretext <word>`
|
|
45
|
+
Set a prefix word/phrase for all TTS messages
|
|
46
|
+
- `/agent-vibes:set-pretext AgentVibes` - All TTS starts with "AgentVibes:"
|
|
47
|
+
- `/agent-vibes:set-pretext "Project Alpha"` - Custom phrase
|
|
48
|
+
- `/agent-vibes:set-pretext ""` - Clear pretext
|
|
49
|
+
|
|
50
|
+
Saved locally in `.claude/config/agentvibes.json`
|
|
51
|
+
|
|
52
|
+
## Getting Voice IDs
|
|
53
|
+
|
|
54
|
+
To add your own custom voices:
|
|
55
|
+
1. Go to https://elevenlabs.io/app/voice-library
|
|
56
|
+
2. Select or create a voice
|
|
57
|
+
3. Copy the voice ID (15-30 character alphanumeric string)
|
|
58
|
+
4. Use `/agent-vibes:add` to add it
|
|
59
|
+
|
|
60
|
+
## Default Voices
|
|
61
|
+
|
|
62
|
+
The system comes with these Character Voices from ElevenLabs:
|
|
63
|
+
- Northern Terry, Grandpa Spuds Oxley, Ms. Walker
|
|
64
|
+
- Ralf Eisend, Amy, Michael, Jessica Anne Bogart
|
|
65
|
+
- Aria, Lutz Laugh, Dr. Von Fusion, Matthew Schmitz
|
|
66
|
+
- Demon Monster, Cowboy Bob, Drill Sergeant
|
|
67
|
+
|
|
68
|
+
Enjoy your TTS experience! 🎵
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: List available ElevenLabs TTS voices with optional filtering
|
|
3
|
+
argument-hint: [first|last] [N]
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
List available ElevenLabs TTS voices.
|
|
7
|
+
|
|
8
|
+
Usage examples:
|
|
9
|
+
- `/agent-vibes:list` - Show all voices
|
|
10
|
+
- `/agent-vibes:list first 5` - Show first 5 voices
|
|
11
|
+
- `/agent-vibes:list last 3` - Show last 3 voices
|
|
12
|
+
|
|
13
|
+
!bash .claude/hooks/voice-manager.sh list $ARGUMENTS
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Set or customize the personality style for TTS messages
|
|
3
|
+
argument-hint: [personality_name|list|add|edit|get|reset]
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /agent-vibes:personality
|
|
7
|
+
|
|
8
|
+
Set or customize the personality style for TTS messages.
|
|
9
|
+
|
|
10
|
+
This command allows you to add character and emotion to your TTS announcements by applying personality modifiers to messages.
|
|
11
|
+
|
|
12
|
+
## Usage
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
# Set a personality
|
|
16
|
+
/agent-vibes:personality flirty
|
|
17
|
+
/agent-vibes:personality sarcastic
|
|
18
|
+
|
|
19
|
+
# List all personalities
|
|
20
|
+
/agent-vibes:personality list
|
|
21
|
+
|
|
22
|
+
# Add custom personality
|
|
23
|
+
/agent-vibes:personality add cowboy "Howdy partner!" "Yeehaw!"
|
|
24
|
+
|
|
25
|
+
# Show current personality
|
|
26
|
+
/agent-vibes:personality get
|
|
27
|
+
|
|
28
|
+
# Reset to normal
|
|
29
|
+
/agent-vibes:personality reset
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Available Personalities
|
|
33
|
+
|
|
34
|
+
- **normal** - Standard professional tone
|
|
35
|
+
- **flirty** - Playful and charming
|
|
36
|
+
- **angry** - Frustrated and irritated
|
|
37
|
+
- **sassy** - Bold with attitude
|
|
38
|
+
- **moody** - Melancholic and brooding
|
|
39
|
+
- **funny** - Lighthearted and comedic
|
|
40
|
+
- **sarcastic** - Dry wit and irony
|
|
41
|
+
- **poetic** - Elegant and lyrical
|
|
42
|
+
- **annoying** - Over-enthusiastic
|
|
43
|
+
- **professional** - Formal and precise
|
|
44
|
+
- **pirate** - Seafaring swagger
|
|
45
|
+
- **robot** - Mechanical and precise
|
|
46
|
+
- **surfer-dude** - Chill beach vibes
|
|
47
|
+
- **millennial** - Internet generation speak
|
|
48
|
+
- **zen** - Peaceful and mindful
|
|
49
|
+
- **dramatic** - Theatrical flair
|
|
50
|
+
- **crass** - Edgy and blunt
|
|
51
|
+
- **random** - Picks a different personality each time!
|
|
52
|
+
|
|
53
|
+
## Editing Personalities
|
|
54
|
+
|
|
55
|
+
Each personality is stored as a markdown file in `.claude/personalities/`. You can:
|
|
56
|
+
|
|
57
|
+
### Edit existing personalities:
|
|
58
|
+
```bash
|
|
59
|
+
/agent-vibes:personality edit flirty
|
|
60
|
+
```
|
|
61
|
+
This shows the file path - edit it directly to customize behavior.
|
|
62
|
+
|
|
63
|
+
### Create new personalities:
|
|
64
|
+
```bash
|
|
65
|
+
/agent-vibes:personality add cowboy
|
|
66
|
+
```
|
|
67
|
+
Creates a new personality file, then edit it to customize.
|
|
68
|
+
|
|
69
|
+
### Personality files contain:
|
|
70
|
+
- **Prefix**: Text added before messages
|
|
71
|
+
- **Suffix**: Text added after messages
|
|
72
|
+
- **AI Instructions**: How the AI should speak
|
|
73
|
+
- **Example Responses**: Sample messages
|
|
74
|
+
|
|
75
|
+
Files are located in `.claude/personalities/[name].md`
|
|
76
|
+
|
|
77
|
+
## Implementation
|
|
78
|
+
|
|
79
|
+
!bash .claude/hooks/personality-manager.sh $ARGUMENTS
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Preview ElevenLabs TTS voices by playing audio samples
|
|
3
|
+
argument-hint: [voice_name|first|last] [N]
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Preview ElevenLabs TTS voices by playing audio samples.
|
|
7
|
+
|
|
8
|
+
Usage examples:
|
|
9
|
+
- `/agent-vibes:preview` - Preview first 3 voices (default)
|
|
10
|
+
- `/agent-vibes:preview 5` - Preview first 5 voices
|
|
11
|
+
- `/agent-vibes:preview Jessica` - Preview Jessica Anne Bogart voice
|
|
12
|
+
- `/agent-vibes:preview "Northern Terry"` - Preview Northern Terry voice
|
|
13
|
+
- `/agent-vibes:preview first 10` - Preview first 10 voices
|
|
14
|
+
- `/agent-vibes:preview last 5` - Preview last 5 voices
|
|
15
|
+
|
|
16
|
+
!bash .claude/hooks/voice-manager.sh preview $ARGUMENTS
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Replay recently played TTS audio
|
|
3
|
+
argument-hint: [N]
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Replay previously played TTS audio from history.
|
|
7
|
+
|
|
8
|
+
Usage:
|
|
9
|
+
- `/agent-vibes:replay` - Replay last audio (most recent)
|
|
10
|
+
- `/agent-vibes:replay 1` - Replay last audio
|
|
11
|
+
- `/agent-vibes:replay 2` - Replay second-to-last audio
|
|
12
|
+
- `/agent-vibes:replay 3` - Replay third-to-last audio
|
|
13
|
+
|
|
14
|
+
The system keeps the last 10 audio files in history. This is useful for:
|
|
15
|
+
- Hearing a summary again
|
|
16
|
+
- Checking what was just said
|
|
17
|
+
- Comparing different voice samples
|
|
18
|
+
|
|
19
|
+
!bash .claude/hooks/voice-manager.sh replay $ARGUMENTS
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Test a voice with sample text
|
|
3
|
+
argument-hint: <voice-name>
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Test a specific ElevenLabs voice by playing sample text.
|
|
7
|
+
|
|
8
|
+
Usage:
|
|
9
|
+
- `/agent-vibes:sample Cowboy` - Test the Cowboy voice
|
|
10
|
+
- `/agent-vibes:sample "Northern Terry"` - Test Northern Terry voice
|
|
11
|
+
|
|
12
|
+
!bash .claude/hooks/voice-manager.sh sample $ARGUMENTS
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Set sentiment/personality for your current voice
|
|
3
|
+
argument-hint: [personality_name|list|get]
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Agent Vibes Sentiment Command
|
|
7
|
+
|
|
8
|
+
Set the sentiment/personality style for your current voice without changing the voice itself.
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
.claude/hooks/sentiment-manager.sh "$@"
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Usage
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
# Set sentiment for current voice
|
|
18
|
+
/agent-vibes:sentiment flirty
|
|
19
|
+
/agent-vibes:sentiment sarcastic
|
|
20
|
+
/agent-vibes:sentiment angry
|
|
21
|
+
|
|
22
|
+
# See current sentiment
|
|
23
|
+
/agent-vibes:sentiment get
|
|
24
|
+
|
|
25
|
+
# List available sentiments
|
|
26
|
+
/agent-vibes:sentiment list
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## What This Does
|
|
30
|
+
|
|
31
|
+
The sentiment command allows you to:
|
|
32
|
+
- Keep your current voice (e.g., your custom voice)
|
|
33
|
+
- Apply a personality style (flirty, sarcastic, angry, etc.)
|
|
34
|
+
- Change how AI speaks without changing WHO speaks
|
|
35
|
+
|
|
36
|
+
## Example
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# You're using your custom voice "MyVoice"
|
|
40
|
+
/agent-vibes:switch MyVoice
|
|
41
|
+
|
|
42
|
+
# Now add a sarcastic sentiment to MyVoice
|
|
43
|
+
/agent-vibes:sentiment sarcastic
|
|
44
|
+
# AI will now respond with sarcasm in MyVoice
|
|
45
|
+
|
|
46
|
+
# Or set both at once
|
|
47
|
+
/agent-vibes:switch MyVoice --sentiment flirty
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Available Sentiments
|
|
51
|
+
|
|
52
|
+
Run `/agent-vibes:sentiment list` to see all available personality styles.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Set a pretext word/phrase that prefixes all TTS announcements
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Set TTS Pretext
|
|
6
|
+
|
|
7
|
+
Configure a word or phrase that will be spoken before every TTS message.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
/agent-vibes:set-pretext <word>
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Examples
|
|
16
|
+
|
|
17
|
+
Set "AgentVibes" as the pretext:
|
|
18
|
+
```bash
|
|
19
|
+
/agent-vibes:set-pretext AgentVibes
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Set a phrase:
|
|
23
|
+
```bash
|
|
24
|
+
/agent-vibes:set-pretext "Project Alpha"
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Clear the pretext:
|
|
28
|
+
```bash
|
|
29
|
+
/agent-vibes:set-pretext ""
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## What It Does
|
|
33
|
+
|
|
34
|
+
When a pretext is set:
|
|
35
|
+
- **Without pretext**: "I'll do the task"
|
|
36
|
+
- **With pretext**: "AgentVibes: I'll do the task"
|
|
37
|
+
|
|
38
|
+
The pretext is saved locally in `.claude/config/agentvibes.json` and persists across sessions.
|
|
39
|
+
|
|
40
|
+
!bash
|
|
41
|
+
CONFIG_DIR="${CLAUDE_PROJECT_DIR:-.}/.claude/config"
|
|
42
|
+
CONFIG_FILE="$CONFIG_DIR/agentvibes.json"
|
|
43
|
+
|
|
44
|
+
# Get the pretext from arguments
|
|
45
|
+
PRETEXT="$ARGUMENTS"
|
|
46
|
+
|
|
47
|
+
# Create config directory if it doesn't exist
|
|
48
|
+
mkdir -p "$CONFIG_DIR"
|
|
49
|
+
|
|
50
|
+
# Initialize config file if it doesn't exist
|
|
51
|
+
if [ ! -f "$CONFIG_FILE" ]; then
|
|
52
|
+
echo '{}' > "$CONFIG_FILE"
|
|
53
|
+
fi
|
|
54
|
+
|
|
55
|
+
# Update or clear the pretext
|
|
56
|
+
if [ -z "$PRETEXT" ]; then
|
|
57
|
+
# Clear pretext
|
|
58
|
+
jq 'del(.pretext)' "$CONFIG_FILE" > "${CONFIG_FILE}.tmp" && mv "${CONFIG_FILE}.tmp" "$CONFIG_FILE"
|
|
59
|
+
echo "✅ Pretext cleared"
|
|
60
|
+
else
|
|
61
|
+
# Set pretext
|
|
62
|
+
jq --arg pretext "$PRETEXT" '.pretext = $pretext' "$CONFIG_FILE" > "${CONFIG_FILE}.tmp" && mv "${CONFIG_FILE}.tmp" "$CONFIG_FILE"
|
|
63
|
+
echo "✅ Pretext set to: $PRETEXT"
|
|
64
|
+
echo "📢 All TTS messages will now start with: \"$PRETEXT:\""
|
|
65
|
+
fi
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Switch to a different ElevenLabs TTS voice
|
|
3
|
+
argument-hint: [voice_name_or_number] [--sentiment personality_name]
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Voice Selection
|
|
7
|
+
|
|
8
|
+
If no arguments provided, display this list:
|
|
9
|
+
|
|
10
|
+
## 🎤 Available ElevenLabs Voices
|
|
11
|
+
|
|
12
|
+
1. **Amy** - Young and friendly
|
|
13
|
+
2. **Aria** - Clear professional
|
|
14
|
+
3. **Cowboy Bob** - Western charm
|
|
15
|
+
4. **Demon Monster** - Deep and spooky
|
|
16
|
+
5. **Dr. Von Fusion** - Eccentric scientist
|
|
17
|
+
6. **Drill Sergeant** - Military authority
|
|
18
|
+
7. **Grandpa Spuds Oxley** - Wise elder
|
|
19
|
+
8. **Jessica Anne Bogart** - Wickedly eloquent
|
|
20
|
+
9. **Lutz Laugh** - Jovial and giggly
|
|
21
|
+
10. **Matthew Schmitz** - Deep baritone
|
|
22
|
+
11. **Michael** - British urban
|
|
23
|
+
12. **Ms. Walker** - Warm teacher
|
|
24
|
+
13. **Northern Terry** - Eccentric British
|
|
25
|
+
14. **Ralf Eisend** - International speaker
|
|
26
|
+
|
|
27
|
+
Then check current voice with: !bash .claude/hooks/voice-manager.sh get
|
|
28
|
+
|
|
29
|
+
And inform user: "To switch voices, use `/agent-vibes:switch <number>` or `/agent-vibes:switch <name>`"
|
|
30
|
+
|
|
31
|
+
If arguments ARE provided:
|
|
32
|
+
|
|
33
|
+
1. Parse arguments for --sentiment flag
|
|
34
|
+
2. If --sentiment is present:
|
|
35
|
+
- Extract voice name/number (everything before --sentiment)
|
|
36
|
+
- Extract sentiment name (after --sentiment)
|
|
37
|
+
- Execute: !bash .claude/hooks/voice-manager.sh switch <voice>
|
|
38
|
+
- Then execute: !bash .claude/hooks/sentiment-manager.sh set <sentiment>
|
|
39
|
+
3. If no --sentiment flag:
|
|
40
|
+
- Execute: !bash .claude/hooks/voice-manager.sh switch $ARGUMENTS
|
|
41
|
+
|
|
42
|
+
## Examples
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
# Switch voice only
|
|
46
|
+
/agent-vibes:switch Jessica Anne Bogart
|
|
47
|
+
|
|
48
|
+
# Switch voice and set sentiment
|
|
49
|
+
/agent-vibes:switch Aria --sentiment sarcastic
|
|
50
|
+
|
|
51
|
+
# Switch by number with sentiment
|
|
52
|
+
/agent-vibes:switch 5 --sentiment flirty
|
|
53
|
+
```
|