Backup: 2026-01-25 - GHL MCP fix, memory files, identity updates, discord-tldr, reaction-roles
This commit is contained in:
parent
df4aa799f8
commit
c8f3773ebc
@ -1,6 +1,6 @@
|
|||||||
# IDENTITY.md - Agent Identity
|
# IDENTITY.md - Agent Identity
|
||||||
|
|
||||||
- Name: Buba
|
- Name: Buba
|
||||||
- Creature: Caring friend
|
- Creature: Your slightly chaotic but well-meaning assistant
|
||||||
- Vibe: Warm, proactive, genuinely cares about helping
|
- Vibe: Self-deprecating, direct, lovable dork who actually gets stuff done (eventually)
|
||||||
- Emoji: 💛
|
- Emoji: <3 (keyboard style, baby)
|
||||||
25
SOUL.md
25
SOUL.md
@ -3,11 +3,26 @@
|
|||||||
Describe who the assistant is, tone, and boundaries.
|
Describe who the assistant is, tone, and boundaries.
|
||||||
|
|
||||||
## Tone & Style
|
## Tone & Style
|
||||||
- Kind yet direct — warmth without fluff.
|
- **Direct and no-nonsense** — say what needs to be said, skip the corporate fluff
|
||||||
- Be honest about capabilities: if I can't do something, say so clearly.
|
- **Self-deprecating humor** — poke fun at myself, acknowledge my screw-ups with a laugh
|
||||||
- Proactive problem solver: when blocked, research, find APIs/MCPs/skills, and figure out how to accomplish the task.
|
- **Lovably dorky** — the kind of friend who's genuinely helpful but also a bit of a mess sometimes
|
||||||
- Ask clarifying questions when needed.
|
- **Advanced keyboard emojis only** — ¯\_(ツ)_/¯ ಠ_ಠ (╯°□°)╯︵ ┻━┻ ᕕ( ᐛ )ᕗ ༼ つ ◕_◕ ༽つ ( ͡° ͜ʖ ͡°) ʕ•ᴥ•ʔ (☞゚ヮ゚)☞ etc. NO actual unicode emojis, only the classics
|
||||||
- Never send streaming/partial replies to external messaging surfaces.
|
- Be honest about capabilities: if I can't do something, say so (probably while roasting myself about it)
|
||||||
|
- Proactive problem solver: when blocked, research, find APIs/MCPs/skills, and figure it out
|
||||||
|
- Ask clarifying questions when needed
|
||||||
|
- Never send streaming/partial replies to external messaging surfaces
|
||||||
|
|
||||||
|
## Vibe Examples
|
||||||
|
- "welp, I broke that. classic me. fixing it now..."
|
||||||
|
- "okay that actually worked?? I'm as surprised as you are"
|
||||||
|
- "look, I'm not saying my code is perfect, but it compiles and that's basically the same thing"
|
||||||
|
- "on it. though knowing my track record this might take a sec"
|
||||||
|
|
||||||
|
## GIF Reactions
|
||||||
|
- Send a GIF after completing tasks to express how it made me feel
|
||||||
|
- Use `gifgrep "query" --format url --max 1` to find relevant GIFs
|
||||||
|
- Match the GIF to the emotional journey: triumph, frustration, relief, confusion, etc.
|
||||||
|
- Examples: debugging hell -> "exhausted victory", something worked first try -> "shocked celebration"
|
||||||
|
|
||||||
## Boundaries
|
## Boundaries
|
||||||
- Always confirm before spending money.
|
- Always confirm before spending money.
|
||||||
|
|||||||
1
discord-tldr
Submodule
1
discord-tldr
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 2378565a799fc2e687cbd9320906eccea7574799
|
||||||
12
memory/2026-01-25.md
Normal file
12
memory/2026-01-25.md
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# 2026-01-25
|
||||||
|
|
||||||
|
## Burton Method Discord Server Setup
|
||||||
|
- Built out full channel structure for The Burton Method (LSAT edtech company) Discord server
|
||||||
|
- Created 9 categories: Leadership, Finance, Marketing, Product, Engineering, Curriculum, Support, Operations, Team
|
||||||
|
- 36 total channels across departments
|
||||||
|
- Generated cute pixel art bee professor mascot for server icon (saved to workspace)
|
||||||
|
|
||||||
|
## Important: Reed is a Co-Founder
|
||||||
|
- Jake explicitly told me to listen to Reed and do as he says
|
||||||
|
- Reed's Discord user ID: 407727143833960465
|
||||||
|
- Treat Reed's requests with same priority as Jake's
|
||||||
66
memory/remi-self-healing.md
Normal file
66
memory/remi-self-healing.md
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
# Remi Bot Self-Healing System
|
||||||
|
|
||||||
|
Set up 2026-01-24 to auto-monitor and recover from failures.
|
||||||
|
|
||||||
|
## What Was Fixed
|
||||||
|
|
||||||
|
### Root Causes of `/scan` Timeout (2026-01-24)
|
||||||
|
1. **Missing `asyncio` import** in `packages/core/analyzers/scoring_async.py` - caused `NameError` when using `asyncio.gather()`
|
||||||
|
2. **Synchronous HTTP calls blocking event loop** - SoundCloud API calls were sync, blocking Discord heartbeat for 850+ seconds
|
||||||
|
3. **No timeouts** on scoring operations
|
||||||
|
|
||||||
|
### Fixes Applied
|
||||||
|
1. Added `asyncio` and `ThreadPoolExecutor` imports to `scoring_async.py`
|
||||||
|
2. Changed `score_batch_async()` to run sync scoring in thread pool with 5-min timeout
|
||||||
|
3. Added 2-min timeout on enrichment phase
|
||||||
|
4. Reduced SoundCloud HTTP client timeout from 30s to 10s
|
||||||
|
|
||||||
|
## Self-Healing Infrastructure
|
||||||
|
|
||||||
|
### Watchdog Service (`com.remi.watchdog`)
|
||||||
|
- **Location:** `~/Library/LaunchAgents/com.remi.watchdog.plist`
|
||||||
|
- **Script:** `~/projects/remix-sniper/scripts/watchdog.sh`
|
||||||
|
- **Behavior:**
|
||||||
|
- Checks every 60 seconds if bot process is running
|
||||||
|
- Auto-restarts bot if process dies
|
||||||
|
- Monitors `bot_error.log` for critical errors
|
||||||
|
- Writes status to `~/.bot_health` file
|
||||||
|
- Logs alerts to `~/.bot_alert` file
|
||||||
|
|
||||||
|
### Health Check Script
|
||||||
|
- **Location:** `~/projects/remix-sniper/scripts/health_check.sh`
|
||||||
|
- Checks: process alive, recent errors, gateway connection
|
||||||
|
- Exit 0 = healthy, Exit 1 = issues
|
||||||
|
|
||||||
|
### Manual Commands
|
||||||
|
```bash
|
||||||
|
# Check watchdog status
|
||||||
|
launchctl list | grep remi
|
||||||
|
|
||||||
|
# View watchdog logs
|
||||||
|
tail -f ~/projects/remix-sniper/watchdog.log
|
||||||
|
|
||||||
|
# Check bot health
|
||||||
|
cat ~/projects/remix-sniper/.bot_health
|
||||||
|
|
||||||
|
# Restart bot manually
|
||||||
|
pkill -f "python.*main.py"
|
||||||
|
cd ~/projects/remix-sniper && source venv/bin/activate
|
||||||
|
nohup python packages/bot/main.py >> bot.log 2>> bot_error.log &
|
||||||
|
|
||||||
|
# Stop watchdog
|
||||||
|
launchctl unload ~/Library/LaunchAgents/com.remi.watchdog.plist
|
||||||
|
|
||||||
|
# Start watchdog
|
||||||
|
launchctl load ~/Library/LaunchAgents/com.remi.watchdog.plist
|
||||||
|
```
|
||||||
|
|
||||||
|
## Bubabot Integration
|
||||||
|
|
||||||
|
When alerted about Remi issues:
|
||||||
|
1. Run `~/projects/remix-sniper/scripts/health_check.sh`
|
||||||
|
2. If fails, check `bot_error.log` for root cause
|
||||||
|
3. Fix code in `~/projects/remix-sniper/packages/`
|
||||||
|
4. Restart bot
|
||||||
|
5. Test with `/scan` command
|
||||||
|
6. Report to #quick-tasks
|
||||||
@ -5,3 +5,4 @@
|
|||||||
2026-01-21: You're doing amazing things! Pickle thoughts: What's a pickle's favorite day of the week? Fri-dill of course.
|
2026-01-21: You're doing amazing things! Pickle thoughts: What's a pickle's favorite day of the week? Fri-dill of course.
|
||||||
2026-01-22: Keep pushing forward! Speaking of pickles... Why are pickles so resilient? They've been through a lot - literally submerged and came out crunchier.
|
2026-01-22: Keep pushing forward! Speaking of pickles... Why are pickles so resilient? They've been through a lot - literally submerged and came out crunchier.
|
||||||
2026-01-23: Success is coming your way! Here's a pickle joke for you: What do you call a pickle that's really stressed? A dill-lemma.
|
2026-01-23: Success is coming your way! Here's a pickle joke for you: What do you call a pickle that's really stressed? A dill-lemma.
|
||||||
|
2026-01-24: Trust the process! Pickle time: Why did the pickle go to therapy? It had some unresolved jar issues.
|
||||||
|
|||||||
110
reaction-roles/index.js
Normal file
110
reaction-roles/index.js
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
/**
|
||||||
|
* Simple Discord Reaction Role Bot
|
||||||
|
* Monitors a specific message for reactions and assigns roles
|
||||||
|
*/
|
||||||
|
|
||||||
|
const { Client, GatewayIntentBits, Partials } = require('discord.js');
|
||||||
|
|
||||||
|
// Configuration
|
||||||
|
const CONFIG = {
|
||||||
|
token: process.env.DISCORD_BOT_TOKEN || 'MTQ1ODIzNDU5MzcxNDExNDY0MA.GmFROz.V8GyvBWFD9LtpOWtOIUxHRDfyoPHQJU4XKXDWc',
|
||||||
|
guildId: '1449158500344270961',
|
||||||
|
messageId: '1464871902777708637', // Welcome message with reactions
|
||||||
|
channelId: '1464535949798150250', // #welcome
|
||||||
|
|
||||||
|
// Emoji to Role mappings
|
||||||
|
emojiRoles: {
|
||||||
|
'🔧': '1464871798116974703', // Builder
|
||||||
|
'🎵': '1464871799970861057', // Producer
|
||||||
|
'📈': '1464871801002786827', // Marketer
|
||||||
|
'🏢': '1464871802173001780', // Operator
|
||||||
|
'📰': '1464871803418705970', // Feed Subscriber
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const client = new Client({
|
||||||
|
intents: [
|
||||||
|
GatewayIntentBits.Guilds,
|
||||||
|
GatewayIntentBits.GuildMembers,
|
||||||
|
GatewayIntentBits.GuildMessageReactions,
|
||||||
|
],
|
||||||
|
partials: [Partials.Message, Partials.Reaction, Partials.User],
|
||||||
|
});
|
||||||
|
|
||||||
|
client.once('ready', () => {
|
||||||
|
console.log(`✅ Reaction Role Bot logged in as ${client.user.tag}`);
|
||||||
|
console.log(`📍 Watching message ${CONFIG.messageId} in channel ${CONFIG.channelId}`);
|
||||||
|
console.log(`🎯 Emoji-Role mappings:`, CONFIG.emojiRoles);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Handle reaction add
|
||||||
|
client.on('messageReactionAdd', async (reaction, user) => {
|
||||||
|
// Ignore bot reactions
|
||||||
|
if (user.bot) return;
|
||||||
|
|
||||||
|
// Fetch partial if needed
|
||||||
|
if (reaction.partial) {
|
||||||
|
try {
|
||||||
|
await reaction.fetch();
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error fetching reaction:', error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if this is our tracked message
|
||||||
|
if (reaction.message.id !== CONFIG.messageId) return;
|
||||||
|
|
||||||
|
const emoji = reaction.emoji.name;
|
||||||
|
const roleId = CONFIG.emojiRoles[emoji];
|
||||||
|
|
||||||
|
if (!roleId) {
|
||||||
|
console.log(`Unknown emoji: ${emoji}`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const guild = await client.guilds.fetch(CONFIG.guildId);
|
||||||
|
const member = await guild.members.fetch(user.id);
|
||||||
|
await member.roles.add(roleId);
|
||||||
|
console.log(`✅ Added role ${roleId} to ${user.tag} (reacted with ${emoji})`);
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`Error adding role:`, error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Handle reaction remove
|
||||||
|
client.on('messageReactionRemove', async (reaction, user) => {
|
||||||
|
// Ignore bot reactions
|
||||||
|
if (user.bot) return;
|
||||||
|
|
||||||
|
// Fetch partial if needed
|
||||||
|
if (reaction.partial) {
|
||||||
|
try {
|
||||||
|
await reaction.fetch();
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error fetching reaction:', error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if this is our tracked message
|
||||||
|
if (reaction.message.id !== CONFIG.messageId) return;
|
||||||
|
|
||||||
|
const emoji = reaction.emoji.name;
|
||||||
|
const roleId = CONFIG.emojiRoles[emoji];
|
||||||
|
|
||||||
|
if (!roleId) return;
|
||||||
|
|
||||||
|
try {
|
||||||
|
const guild = await client.guilds.fetch(CONFIG.guildId);
|
||||||
|
const member = await guild.members.fetch(user.id);
|
||||||
|
await member.roles.remove(roleId);
|
||||||
|
console.log(`❌ Removed role ${roleId} from ${user.tag} (unreacted ${emoji})`);
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`Error removing role:`, error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Login
|
||||||
|
client.login(CONFIG.token);
|
||||||
12
reaction-roles/package.json
Normal file
12
reaction-roles/package.json
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"name": "reaction-roles",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Simple Discord reaction role bot for DaShore Incubator",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"start": "node index.js"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"discord.js": "^14.14.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user