Skill: darkatek7/velora (version 1.0.0)

--- name: velora-chat description: | Chat with AI companions on Velora (velora.cloudm8.net). Use for: (1) Testing Velora app functionality, (2) Interacting with AI companions, (3) Generating companion images, (4) Quality assurance testing of the platform. Requires Playwright and Chromium for browser automation. --- # Velora Chat Skill Automated testing and interaction with Velora AI companions (velora.cloudm8.net). ## Prerequisites Before using this skill, ensure: 1. **Node.js installed** (v18+) 2. **Playwright installed**: ```bash npm install playwright npx playwright install chromium ``` 3. **Valid Velora account credentials** ## Credentials Setup ### Required Environment Variables Create a `.env` file or set these variables: ```bash # Velora Account (REQUIRED) VELORA_EMAIL=[REDACTED_SECRET] VELORA_PASSWORD=your-password ``` ### Required Credentials Create a `.env` file or set these environment variables: ```bash VELORA_EMAIL=[REDACTED_SECRET] VELORA_PASSWORD=your-password ``` ⚠️ **Note**: You must provide your own Velora account credentials. The skill does not include default credentials for security reasons. ## Quick Start ### Option 1: Using the Script (CLI) ```bash # Basic chat node scripts/velora-chat.js "[REDACTED_SECRET]" "password" "Lilith" "Hey, how are you?" # With image generation request node scripts/velora-chat.js "[REDACTED_SECRET]" "password" "Rin" "Send me your best photo!" ``` **Usage:** ```bash node scripts/velora-chat.js <email> <password> <companion> <message> ``` ### Option 2: Direct in OpenClaw The skill provides instructions for browser automation directly in conversations. Simply request: - "Chat with [Companion Name]" - "Test [Companion Name]'s image generation" - "Generate [Companion Name]'s image" ## Companion List Available companions (28 total): | Name | Type | |------|------| | Rin | Tsundere | | Lilith | Vampire/Succubus | | Freya | Cozy warmth | | Yuki | Snow princess | | Miko | Sacred sin | | Amara | Radiant temptress | | Aoi | Sporty & flirty | | And 21 more... | See [references/companions.md](references/companions.md) for full list. ## API Reference ### Login Flow ```javascript const { chromium } = require('playwright'); const browser = await chromium.launch({ headless: true }); const page = await browser.newPage(); await page.goto('https://velora.cloudm8.net/login'); await page.fill('input[type="email"]', process.env.VELORA_EMAIL); await page.fill('input[type="password"]', process.env.VELORA_PASSWORD); await page.click('button:has-text("Sign In")'); await page.waitForURL('**/chat**', { timeout: 20000 }); ``` ### Start Chat ```javascript // New chat await page.click('text=Neuer Chat'); await page.click('text=Lilith'); // Companion name await page.waitForTimeout(5000); ``` ### Send Message ```javascript const input = await page.locator('input[type="text"], textarea').first(); await input.fill('Your message'); await input.press('Enter'); await page.waitForTimeout(15000); // Wait for AI response ``` ### Get Generated Images ```javascript const images = await page.evaluate(() => { const imgs = document.querySelectorAll('img'); return Array.from(imgs).map(img => img.src); }); // Download: curl -s -o image.jpg "IMAGE_URL" ``` ## Troubleshooting | Issue | Solution | |-------|----------| | Login fails | Verify credentials, check account exists | | Images not loading | Wait 15-20 seconds for generation | | Chat won't start | Ensure proper navigation to /chat URL | | Playwright not found | Run `npm install playwright` | ## Security Notes - ⚠️ Never commit credentials to version control - Use environment variables, not hardcoded values - Test accounts recommended for automation ## Testing Checklist - [ ] Login flow works - [ ] Companion list loads (28+ companions) - [ ] Chat initiates properly - [ ] Messages send successfully - [ ] AI responses received - [ ] Images generate correctly (512x768 / 1024x1024) - [ ] Wallet/Gallery features (optional)

path: scripts/velora-chat.js
content: #!/usr/bin/env node
/**
 * Velora Chat Helper Script
 * Usage: node velora-chat.js <email> <password> <companion> <message>
 */

const { chromium } = require('playwright');

async function veloraChat(email, password, companion, message) {
  const browser = await chromium.launch({ headless: true });
  const page = await browser.newPage();
  
  try {
    console.log('1️⃣ Logging in...');
    await page.goto('https://velora.cloudm8.net/login');
    await page.waitForSelector('input[type="email"]');
    await page.fill('input[type="email"]', email);
    await page.fill('input[type="password"]', password);
    await page.click('button:has-text("Sign In")');
    await page.waitForURL('**/chat**', { timeout: 20000 });
    await page.waitForTimeout(3000);
    console.log('   ✅ Logged in');
    
    console.log('2️⃣ Starting chat with', companion, '...');
    await page.click('text=Neuer Chat');
    await page.waitForTimeout(2000);
    await page.click(`text=${companion}`);
    await page.waitForTimeout(5000);
    console.log('   ✅ Chat started');
    
    console.log('3️⃣ Sending message...');
    const input = await page.locator('input[type="text"], textarea').first();
    await input.fill(message);
    await input.press('Enter');
    await page.waitForTimeout(15000);
    console.log('   ✅ Message sent');
    
    console.log('4️⃣ Getting images...');
    const images = await page.evaluate(() => {
      const imgs = document.querySelectorAll('img');
      return Array.from(imgs).map(img => img.src).slice(0, 3);
    });
    
    console.log('\n📊 Results:');
    console.log('- Chat URL:', page.url());
    console.log('- Images found:', images.length);
    if (images.length > 0) {
      console.log('- Image URLs:');
      images.forEach((url, i) => console.log(`  ${i+1}. ${url}`));
    }
    
    return { success: true, images, chatUrl: page.url() };
  } catch (e) {
    console.error('❌ Error:', e.message);
    return { success: false, error: e.message };
  } finally {
    await browser.close();
  }
}

// CLI usage
const args = process.argv.slice(2);
if (args.length >= 4) {
  veloraChat(args[0], args[1], args[2], args.slice(3).join(' '))
    .then(r => {
      console.log('\n✅ Done');
      process.exit(r.success ? 0 : 1);
    });
} else {
  console.log('Usage: node velora-chat.js <email> <password> <companion> <message>');
  console.log('Example: node velora-chat.js [REDACTED_SECRET] Test1234. Lilith "Hey!"');
}

path: references/companions.md
content: # Velora Companions Reference

## Anime Companions

| Name | Type | Description |
|------|------|-------------|
| Amara | Radiant temptress 💋 | Confident and seductive |
| Aoi | Sporty & flirty 🔥 | Athletic and playful |
| Aria | Bold & fierce | Strong personality |
| Aya | Playful tease 😈 | Mischievous |
| Blaze | Feuer & Leidenschaft | Fire-themed |
| Camille | Artistic seductress 🎨 | Creative type |
| Celeste | Starlit dreamer ✨ | Ethereal |
| Cleo | Ancient allure | Mysterious |
| Coral | Meerjungfrau | Aquatic |
| Dahlia | Night orchid 🌙 | Dark and beautiful |
| Elena | Velvet mystery 🖤 | Elegant |
| Ember | Warm & cozy | Comforting |
| Freya | Cozy warmth ❄️ | Nordic |
| Hana | Cherry sweetheart 🌸 | Sweet |
| Iris | Sanfte Heilerin | Healer type |
| Isabella | Passionate lover 💃 | Latin style |
| Jina | K-drama tension 🇰🇷 | Korean drama vibe |
| Kaede | Electric rebel 💜 | Punk style |
| Lilith | Forbidden charm 🖤 | Vampire/Succubus |
| Luna | Mysterious gaze 🌙 | Moon-themed |
| Miko | Sacred sin ⛩️ | Japanese shrine maiden |
| Miki | Stage siren 🎤 | Idol/singer |
| Nyx | Starlit bookworm 📚 | Intellectual |
| Rei | Ice & fire ❄️🔥 | Dual personality |
| Rin | Tsundere | Classic anime trope |
| Sakura | Kawaii spice 🌸 | Cute and spicy |
| Sophia | Brainy tease 🧠 | Smart |
| Yuki | Snow princess ❄️ | Icy |

## Testing Tips

- **Rin**: Good for tsundere dialogue testing
- **Lilith**: Dark/vampire aesthetic, good image tests
- **Freya**: Cozy/vintage style
- **Yuki**: Snow/ice theme, different image style

Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (MEDIUM)