From c25907f1b65aae9d94d66346c8d96bc3d9b03f6b Mon Sep 17 00:00:00 2001 From: kriptoburak Date: Wed, 13 May 2026 20:36:45 +0300 Subject: [PATCH] docs: add TweetClaw marketplace seed --- README.md | 2 +- prisma/seed-data.json | 17 +++++++++++++++-- prisma/seed.ts | 10 +++++++--- src/app/api/agent/route.ts | 3 ++- 4 files changed, 25 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 1ada31d77..3472c4434 100644 --- a/README.md +++ b/README.md @@ -126,7 +126,7 @@ src/ prisma/ schema.prisma # Database schema seed.ts # Database seeder - seed-data.json # Initial skill data (5,147 skills) + seed-data.json # Initial skill data (5,148 skills) scripts/ parse-skills.ts # Parse awesome-openclaw-skills README scrape-skill-details.ts # Scrape detail pages from ClawSkills.sh diff --git a/prisma/seed-data.json b/prisma/seed-data.json index 7013b59a0..509f9646e 100644 --- a/prisma/seed-data.json +++ b/prisma/seed-data.json @@ -18,7 +18,7 @@ { "name": "Search & Research", "slug": "search-and-research", - "skillCount": 342 + "skillCount": 343 }, { "name": "Browser & Automation", @@ -30204,6 +30204,19 @@ "downloads": 129, "stars": 0 }, + { + "name": "TweetClaw", + "slug": "xquik-dev-tweetclaw", + "description": "Official @xquik/tweetclaw OpenClaw plugin for X/Twitter workflows: search tweets and replies, export followers, look up users, monitor tweets, webhooks, giveaway draws, and approval-gated posting.", + "clawHubUrl": "https://clawhub.ai/kriptoburak/xquik-tweetclaw", + "clawSkillsUrl": null, + "githubUrl": "https://github.com/Xquik-dev/tweetclaw", + "installCmd": "openclaw plugins install @xquik/tweetclaw", + "author": "Xquik-dev", + "category": "Search & Research", + "downloads": 0, + "stars": 37 + }, { "name": "ads-manager-agent", "slug": "amekala-ads-manager-agent", @@ -56770,4 +56783,4 @@ "stars": 0 } ] -} \ No newline at end of file +} diff --git a/prisma/seed.ts b/prisma/seed.ts index 023eb905c..b687b8a2a 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -49,10 +49,12 @@ async function main() { } // Use the clawskills slug as our slug - let slug = skill.slug || slugify(skill.name); + const slug = skill.slug || slugify(skill.name); // Construct clawHub URL from author and skill name const clawHubUrl = skill.clawHubUrl || skill.clawSkillsUrl || null; + const githubUrl = skill.githubUrl || null; + const installCmd = skill.installCmd || `clawhub install ${skill.name || slug}`; await prisma.skill.upsert({ where: { slug }, @@ -61,6 +63,8 @@ async function main() { brief: skill.description, // Use description as brief initially clawHubUrl, clawSkillsUrl: skill.clawSkillsUrl || null, + githubUrl, + installCmd, author: skill.author, downloads: skill.downloads || 0, stars: skill.stars || 0, @@ -72,8 +76,8 @@ async function main() { description: skill.description, clawHubUrl, clawSkillsUrl: skill.clawSkillsUrl || null, - githubUrl: null, - installCmd: `clawhub install ${skill.name || slug}`, + githubUrl, + installCmd, author: skill.author, categoryId, downloads: skill.downloads || 0, diff --git a/src/app/api/agent/route.ts b/src/app/api/agent/route.ts index da2ae9279..397fa0211 100644 --- a/src/app/api/agent/route.ts +++ b/src/app/api/agent/route.ts @@ -53,7 +53,8 @@ export async function GET(req: NextRequest) { md += `|-------|-------------|---------|-------|\n`; for (const s of skills) { - md += `| [${s.name}](https://takoapi.com/skills/${s.slug}) | ${s.description.slice(0, 80)} | \`clawhub install ${s.slug}\` | ${s.likesCount} |\n`; + const install = s.installCmd || `clawhub install ${s.slug}`; + md += `| [${s.name}](https://takoapi.com/skills/${s.slug}) | ${s.description.slice(0, 80)} | \`${install}\` | ${s.likesCount} |\n`; } md += `\n---\n`;