mirror of
https://github.com/anthropics/claude-plugins-official.git
synced 2026-04-16 12:22:43 +00:00
Compare commits
20 Commits
add-adlc
...
48aa435178
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
48aa435178 | ||
|
|
7e401edac7 | ||
|
|
7f3389d21f | ||
|
|
560b7e0d38 | ||
|
|
903a6aba48 | ||
|
|
dcd86cd6f9 | ||
|
|
985075c567 | ||
|
|
39353b5b42 | ||
|
|
507462e2fb | ||
|
|
d6fa70eb1a | ||
|
|
8145923edc | ||
|
|
2b666914e6 | ||
|
|
e8fb9898a6 | ||
|
|
c28404f818 | ||
|
|
fb48c3af93 | ||
|
|
622ef85323 | ||
|
|
173bd29be3 | ||
|
|
0de7a91403 | ||
|
|
c5b7657350 | ||
|
|
3ffb4b4ca8 |
@@ -7,6 +7,16 @@
|
||||
"email": "support@anthropic.com"
|
||||
},
|
||||
"plugins": [
|
||||
{
|
||||
"name": "adlc",
|
||||
"description": "Agentforce Agent Development Life Cycle — author, discover, scaffold, deploy, test, and optimize .agent files",
|
||||
"category": "development",
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/SalesforceAIResearch/agentforce-adlc.git"
|
||||
},
|
||||
"homepage": "https://github.com/SalesforceAIResearch/agentforce-adlc"
|
||||
},
|
||||
{
|
||||
"name": "adspirer-ads-agent",
|
||||
"description": "Cross-platform ad management for Google Ads, Meta Ads, TikTok Ads, and LinkedIn Ads. 91 tools for keyword research, campaign creation, performance analysis, and budget optimization.",
|
||||
@@ -169,6 +179,16 @@
|
||||
"category": "database",
|
||||
"homepage": "https://github.com/AzureCosmosDB/cosmosdb-claude-code-plugin"
|
||||
},
|
||||
{
|
||||
"name": "azure-skills",
|
||||
"description": "Microsoft Azure MCP integration for cloud resource management, deployments, and Azure services. Manage your Azure infrastructure, monitor applications, and deploy resources directly from Claude Code.",
|
||||
"category": "deployment",
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/microsoft/azure-skills.git"
|
||||
},
|
||||
"homepage": "https://github.com/microsoft/azure-skills"
|
||||
},
|
||||
{
|
||||
"name": "base44",
|
||||
"description": "Build and deploy Base44 full-stack apps with CLI project management and JavaScript/TypeScript SDK development skills",
|
||||
@@ -180,6 +200,21 @@
|
||||
},
|
||||
"homepage": "https://docs.base44.com"
|
||||
},
|
||||
{
|
||||
"name": "bigdata-com",
|
||||
"description": "Official Bigdata.com plugin providing financial research, analytics, and intelligence tools powered by Bigdata MCP.",
|
||||
"author": {
|
||||
"name": "RavenPack"
|
||||
},
|
||||
"category": "database",
|
||||
"source": {
|
||||
"source": "git-subdir",
|
||||
"url": "Bigdata-com/bigdata-plugins-marketplace",
|
||||
"path": "plugins/bigdata-com",
|
||||
"ref": "main"
|
||||
},
|
||||
"homepage": "https://docs.bigdata.com"
|
||||
},
|
||||
{
|
||||
"name": "box",
|
||||
"description": "Work with your Box content directly from Claude Code — search files, organize folders, collaborate with your team, and use Box AI to answer questions, summarize documents, and extract data without leaving your workflow.",
|
||||
@@ -411,6 +446,18 @@
|
||||
},
|
||||
"homepage": "https://github.com/astronomer/agents"
|
||||
},
|
||||
{
|
||||
"name": "dataverse",
|
||||
"description": "Agent skills for building on, analyzing, and managing Microsoft Dataverse — with Dataverse MCP, PAC CLI, and Python SDK.",
|
||||
"category": "database",
|
||||
"source": {
|
||||
"source": "git-subdir",
|
||||
"url": "https://github.com/microsoft/Dataverse-skills.git",
|
||||
"path": ".github/plugins/dataverse",
|
||||
"ref": "main"
|
||||
},
|
||||
"homepage": "https://github.com/microsoft/Dataverse-skills"
|
||||
},
|
||||
{
|
||||
"name": "deploy-on-aws",
|
||||
"description": "Deploy applications to AWS with architecture recommendations, cost estimates, and IaC deployment.",
|
||||
@@ -876,8 +923,7 @@
|
||||
"description": "Nimble web data toolkit — search, extract, map, crawl the web and work with structured data agents",
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/Nimbleway/agent-skills.git",
|
||||
"sha": "cf391e95bd8ac009e3641f172434a1d130dde7fe"
|
||||
"url": "https://github.com/Nimbleway/agent-skills.git"
|
||||
},
|
||||
"homepage": "https://docs.nimbleway.com/integrations/agent-skills/plugin-installation"
|
||||
},
|
||||
@@ -1280,6 +1326,32 @@
|
||||
"category": "productivity",
|
||||
"homepage": "https://github.com/anthropics/claude-plugins-official/tree/main/plugins/session-report"
|
||||
},
|
||||
{
|
||||
"name": "shopify",
|
||||
"description": "Shopify developer tools for Claude Code — search Shopify docs, generate and validate GraphQL, Liquid, and UI extension code",
|
||||
"author": {
|
||||
"name": "Shopify"
|
||||
},
|
||||
"category": "development",
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/Shopify/shopify-plugins.git"
|
||||
},
|
||||
"homepage": "https://shopify.dev/docs/apps/build/devmcp"
|
||||
},
|
||||
{
|
||||
"name": "shopify-ai-toolkit",
|
||||
"description": "Shopify's AI Toolkit provides 18 development skills for building on the Shopify platform, covering documentation search, API schema access, GraphQL and Liquid code validation, Hydrogen storefronts, Polaris UI extensions, store management via CLI, and onboarding guidance for both developers and merchants.",
|
||||
"author": {
|
||||
"name": "Shopify"
|
||||
},
|
||||
"category": "development",
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/Shopify/Shopify-AI-Toolkit.git"
|
||||
},
|
||||
"homepage": "https://shopify.dev"
|
||||
},
|
||||
{
|
||||
"name": "skill-creator",
|
||||
"description": "Create new skills, improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, update or optimize an existing skill, run evals to test a skill, or benchmark skill performance with variance analysis.",
|
||||
@@ -1302,14 +1374,17 @@
|
||||
"homepage": "https://github.com/slackapi/slack-mcp-plugin/tree/main"
|
||||
},
|
||||
{
|
||||
"name": "sonarqube-agent-plugins",
|
||||
"description": "Integrate SonarQube code quality and security analysis into Claude Code: namespaced slash commands, a guided skill to setup the SonarQube CLI, and a startup check for CLI wiring. MCP server registration and secrets-scanning hooks are installed by the SonarQube CLI as part of setup.",
|
||||
"name": "sonarqube",
|
||||
"description": "Automatically enforce SonarQube code quality and security in the agent coding loop — 7,000+ rules, secrets scanning, agentic analysis, and quality gates across 40+ languages. PostToolUse hooks run analysis after every file edit. Pre-tool secrets scanning prevents 450+ patterns from reaching the LLM. Slash commands give on-demand access to quality gate status, coverage, duplication, and dependency risks. Includes SonarQube CLI, MCP Server, skills, hooks, and slash commands.",
|
||||
"author": {
|
||||
"name": "SonarSource"
|
||||
},
|
||||
"category": "security",
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/SonarSource/sonarqube-agent-plugins.git"
|
||||
},
|
||||
"homepage": "https://github.com/SonarSource/sonarqube-agent-plugins"
|
||||
"homepage": "https://www.sonarsource.com"
|
||||
},
|
||||
{
|
||||
"name": "sonatype-guide",
|
||||
|
||||
@@ -222,6 +222,8 @@ type GateResult =
|
||||
const recentSentIds = new Set<string>()
|
||||
const RECENT_SENT_CAP = 200
|
||||
|
||||
const dmChannelUsers = new Map<string, string>()
|
||||
|
||||
function noteSent(id: string): void {
|
||||
recentSentIds.add(id)
|
||||
if (recentSentIds.size > RECENT_SENT_CAP) {
|
||||
@@ -404,7 +406,8 @@ async function fetchAllowedChannel(id: string) {
|
||||
const ch = await fetchTextChannel(id)
|
||||
const access = loadAccess()
|
||||
if (ch.type === ChannelType.DM) {
|
||||
if (access.allowFrom.includes(ch.recipientId)) return ch
|
||||
const userId = ch.recipientId ?? dmChannelUsers.get(id)
|
||||
if (userId && access.allowFrom.includes(userId)) return ch
|
||||
} else {
|
||||
const key = ch.isThread() ? ch.parentId ?? ch.id : ch.id
|
||||
if (key in access.groups) return ch
|
||||
@@ -823,6 +826,10 @@ async function handleInbound(msg: Message): Promise<void> {
|
||||
|
||||
const chat_id = msg.channelId
|
||||
|
||||
if (msg.channel.type === ChannelType.DM) {
|
||||
dmChannelUsers.set(chat_id, msg.author.id)
|
||||
}
|
||||
|
||||
// Permission-reply intercept: if this looks like "yes xxxxx" for a
|
||||
// pending permission request, emit the structured event instead of
|
||||
// relaying as chat. The sender is already gate()-approved at this point
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "telegram",
|
||||
"description": "Telegram channel for Claude Code \u2014 messaging bridge with built-in access control. Manage pairing, allowlists, and policy via /telegram:access.",
|
||||
"version": "0.0.5",
|
||||
"version": "0.0.6",
|
||||
"keywords": [
|
||||
"telegram",
|
||||
"messaging",
|
||||
|
||||
@@ -985,14 +985,17 @@ bot.catch(err => {
|
||||
process.stderr.write(`telegram channel: handler error (polling continues): ${err.error}\n`)
|
||||
})
|
||||
|
||||
// 409 Conflict = another getUpdates consumer is still active (zombie from a
|
||||
// previous session, or a second Claude Code instance). Retry with backoff
|
||||
// until the slot frees up instead of crashing on the first rejection.
|
||||
// Retry polling with backoff on any error. Previously only 409 was retried —
|
||||
// a single ETIMEDOUT/ECONNRESET/DNS failure rejected bot.start(), the catch
|
||||
// returned, and polling stopped permanently while the process stayed alive
|
||||
// (MCP stdin keeps it running). Outbound tools kept working but the bot was
|
||||
// deaf to inbound messages until a full restart.
|
||||
void (async () => {
|
||||
for (let attempt = 1; ; attempt++) {
|
||||
try {
|
||||
await bot.start({
|
||||
onStart: info => {
|
||||
attempt = 0
|
||||
botUsername = info.username
|
||||
process.stderr.write(`telegram channel: polling as @${info.username}\n`)
|
||||
void bot.api.setMyCommands(
|
||||
@@ -1008,28 +1011,22 @@ void (async () => {
|
||||
return // bot.stop() was called — clean exit from the loop
|
||||
} catch (err) {
|
||||
if (shuttingDown) return
|
||||
if (err instanceof GrammyError && err.error_code === 409) {
|
||||
if (attempt >= 8) {
|
||||
process.stderr.write(
|
||||
`telegram channel: 409 Conflict persists after ${attempt} attempts — ` +
|
||||
`another poller is holding the bot token (stray 'bun server.ts' process or a second session). Exiting.\n`,
|
||||
)
|
||||
return
|
||||
}
|
||||
const delay = Math.min(1000 * attempt, 15000)
|
||||
const detail = attempt === 1
|
||||
? ' — another instance is polling (zombie session, or a second Claude Code running?)'
|
||||
: ''
|
||||
process.stderr.write(
|
||||
`telegram channel: 409 Conflict${detail}, retrying in ${delay / 1000}s\n`,
|
||||
)
|
||||
await new Promise(r => setTimeout(r, delay))
|
||||
continue
|
||||
}
|
||||
// bot.stop() mid-setup rejects with grammy's "Aborted delay" — expected, not an error.
|
||||
if (err instanceof Error && err.message === 'Aborted delay') return
|
||||
process.stderr.write(`telegram channel: polling failed: ${err}\n`)
|
||||
return
|
||||
const is409 = err instanceof GrammyError && err.error_code === 409
|
||||
if (is409 && attempt >= 8) {
|
||||
process.stderr.write(
|
||||
`telegram channel: 409 Conflict persists after ${attempt} attempts — ` +
|
||||
`another poller is holding the bot token (stray 'bun server.ts' process or a second session). Exiting.\n`,
|
||||
)
|
||||
return
|
||||
}
|
||||
const delay = Math.min(1000 * attempt, 15000)
|
||||
const detail = is409
|
||||
? `409 Conflict${attempt === 1 ? ' — another instance is polling (zombie session, or a second Claude Code running?)' : ''}`
|
||||
: `polling error: ${err}`
|
||||
process.stderr.write(`telegram channel: ${detail}, retrying in ${delay / 1000}s\n`)
|
||||
await new Promise(r => setTimeout(r, delay))
|
||||
}
|
||||
}
|
||||
})()
|
||||
|
||||
Reference in New Issue
Block a user