From d5cd1f40dda838ce8838bbf771d07f8102d2dafd Mon Sep 17 00:00:00 2001 From: James Murdza Date: Sat, 18 Apr 2026 15:38:52 +0000 Subject: [PATCH 1/2] Remove broken/inappropriate links from awesome-ai-devtools list - Removed GitHub source link from Forge (broken link) - Removed Helium MCP (financial news/trading, not relevant to AI dev tools) - Removed Formatho Tools (broken link) --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 7137f36..0c0a051 100644 --- a/README.md +++ b/README.md @@ -90,7 +90,6 @@ Plugins that add AI-powered completion, chat, and refactoring to existing code e - [FlyonUI MCP](https://flyonui.com/mcp) — Integrate FlyonUI MCP - Tailwind AI Builder directly into your IDE and craft stunning Tailwind CSS Components, Blocks and Pages inspired by FlyonUI. - [Traycer](https://traycer.ai) - Plan-First Coding Assistant in VS Code. - [shadcn/studio MCP](https://shadcnstudio.com/mcp) - Integrate shadcn/studio MCP Server directly into your favorite IDE and craft stunning shadcn/ui Components, Blocks and Pages inspired by shadcn/studio. -- [Helium MCP](https://github.com/connerlambden/helium-mcp) — Real-time news with bias scoring, live market data, AI options pricing, and balanced news synthesis via MCP. ([Website](https://heliumtrades.com/mcp-page/)) - [shadcn/studio MCP](https://shadcnstudio.com/mcp) — Integrate shadcn/studio MCP Server directly into your favorite IDE and craft stunning shadcn/ui Components, Blocks and Pages inspired by shadcn/studio. - [Sweep](https://sweep.dev/) — AI coding plugin for JetBrains IDEs with autocomplete, codebase indexing, and context-aware suggestions. Uses proprietary LLMs with zero data retention. - [Antigravity Link](https://github.com/cafeTechne/antigravity-link-extension) — VS Code extension that bridges mobile devices to Google's Antigravity IDE. Mirror active AI chat sessions on your phone, send messages, upload files, stop AI generation, and automate workflows via a local HTTP API or 9 MCP tools. Listed in the official MCP Registry. @@ -161,7 +160,7 @@ Platforms that scaffold and deploy full-stack applications from natural language - [Pico](https://picoapps.xyz) — End-to-end micro app generator with instant deployment. - [SoftGen](https://softgen.ai/) — AI-powered software generation platform for building Web Apps. - [LlamaCoder](https://llamacoder.together.ai/) — Open source code generation model for building applications using open source LLMs. -- [Forge](https://forge-web.rebaselabs.online) [(Source)](https://github.com/sudo-rebase/forge) — AI-powered full-stack app creator that generates Next.js apps from natural language. BYOK model — use your own Anthropic, OpenAI, or Google AI key with no markup. Multi-stage pipeline with auto-fix and TypeScript strict mode. +- [Forge](https://forge-web.rebaselabs.online) — AI-powered full-stack app creator that generates Next.js apps from natural language. BYOK model — use your own Anthropic, OpenAI, or Google AI key with no markup. Multi-stage pipeline with auto-fix and TypeScript strict mode. - [e2b_Fragments](https://fragments.e2b.dev/) — Platform for building and deploying AI-powered applications with sandboxed environments. - [Mocha](https://getmocha.com/) — AI-powered no-code application builder for creating web apps without writing code. - [Pythagora](https://www.pythagora.ai/) — AI development platform with 14 specialized agents that builds React/Node.js apps from natural language. Integrates with VS Code and Cursor with one-click deployment. @@ -233,7 +232,7 @@ Web utilities for quick code generation, language translation, and regex creatio - [AutoRegex](https://www.autoregex.xyz/) — AutoRegex uses OpenAI's GPT-3 to produce regular expressions from plain English. - [unpkg.ai](https://unpkg.ai/) — Open source AI-powered ESM module generation service. Generate JavaScript modules via URL for rapid prototyping. - [EnigmaEasel](https://enigmaeasel.com) — AI-powered engine for generating accessible color palettes and systems, OKLCH gradients, and font pairings with one-click Tailwind CSS and SCSS exports. -- [Formatho Tools](https://formatho.com/Tools) — 100+ privacy-first developer utilities with client-side processing. No signup, no data leaves your browser. Also maintains an [awesome-ai-tools list](https://github.com/formatho/awesome-ai-tools). + #### ChatGPT Plugins From 0102db0e5f37163d708f62cfe70029aa7babf260 Mon Sep 17 00:00:00 2001 From: James Murdza Date: Sat, 25 Apr 2026 22:30:39 -0700 Subject: [PATCH 2/2] Create pr-template-check.yml --- .github/workflows/pr-template-check.yml | 106 ++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 .github/workflows/pr-template-check.yml diff --git a/.github/workflows/pr-template-check.yml b/.github/workflows/pr-template-check.yml new file mode 100644 index 0000000..7a39c91 --- /dev/null +++ b/.github/workflows/pr-template-check.yml @@ -0,0 +1,106 @@ +name: PR Template Check +on: + pull_request: + types: [opened, edited] +jobs: + check-pr-template: + runs-on: ubuntu-latest + permissions: + pull-requests: write + steps: + - name: Check PR follows template + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const prBody = context.payload.pull_request.body || ''; + const prNumber = context.payload.pull_request.number; + const prAuthor = context.payload.pull_request.user.login; + // Define required sections from the PR template + const requiredSections = [ + '## Description', + '## Checklist' + ]; + // Define required checklist items + const checklistItems = [ + 'The entry is a tool that uses AI', + 'The entry is a developer-focused tool', + 'The description is unambiguous and clear', + 'The description matches the style of other entries' + ]; + let issues = []; + // Check for required sections + for (const section of requiredSections) { + if (!prBody.includes(section)) { + issues.push(`Missing required section: \`${section}\``); + } + } + // Check if checklist section exists and has checked items + if (prBody.includes('## Checklist')) { + // Check if at least some checklist items are checked + const checkedPattern = /- \[x\]/gi; + const checkedMatches = prBody.match(checkedPattern) || []; + if (checkedMatches.length === 0) { + issues.push('No checklist items are checked. Please review and check all applicable items.'); + } + // Verify all required checklist items are present + for (const item of checklistItems) { + if (!prBody.includes(item)) { + issues.push(`Missing checklist item: \`${item}\``); + } + } + } + // Check if description section has actual content (not just the template comments) + const descriptionMatch = prBody.match(/## Description\s*([\s\S]*?)(?=## Checklist|$)/); + if (descriptionMatch) { + // Remove HTML comments and whitespace + const descriptionContent = descriptionMatch[1] + .replace(//g, '') + .trim(); + if (descriptionContent.length < 10) { + issues.push('The Description section appears to be empty or too brief. Please describe your changes.'); + } + } + if (issues.length > 0) { + // Create a comment explaining the issues + const commentBody = `👋 Hi @${prAuthor}, + Thank you for your contribution! However, this PR doesn't follow our PR template requirements. + **Issues found:** + ${issues.map(issue => `- ${issue}`).join('\n')} + **What to do:** + 1. Please edit your PR description to follow the [PR template](/.github/PULL_REQUEST_TEMPLATE.md) + 2. Make sure to fill out the Description section + 3. Check all applicable items in the Checklist + This PR will be closed automatically. Once you've updated your PR description, feel free to reopen it or create a new PR. + --- + *This is an automated message. If you believe this is an error, please comment below.*`; + // Post the comment + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + body: commentBody + }); + // Close the PR + await github.rest.pulls.update({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: prNumber, + state: 'closed' + }); + // Add a label to indicate why it was closed + try { + await github.rest.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + labels: ['invalid-template'] + }); + } catch (labelError) { + // Label might not exist, that's okay + console.log('Could not add label:', labelError.message); + } + core.setFailed('PR does not follow the template and has been closed.'); + } else { + console.log('PR follows the template requirements! ✅'); + }