From 3d054496e4cecbc92fd7c8e0df068c004c2e156b Mon Sep 17 00:00:00 2001 From: Minsu Lee Date: Mon, 14 Sep 2026 10:25:41 +0900 Subject: [PATCH 1/2] feat(marketplace): add the spring plugin Registers `pleaseai/spring-plugin`, which answers Spring questions from the reference documentation of the version a project declares rather than the newest release. It reads the Spring Boot version out of `build.gradle`, `build.gradle.kts` or `pom.xml`, resolves it to a published documentation archive, and unpacks it into a shared cache. Relevance signals cover the two build tools and the files that carry a declared version, so the suggestion fires on a Spring project rather than on any JVM one. `.agents/plugins/marketplace.json` and `.cursor-plugin/marketplace.json` are the output of `bun run plugins:multi-format`, as CONTRIBUTING requires. That command also rewrites every `plugins/*/plugin.json`, adding a `$schema` key and bumping versions that had drifted from their sources; none of that belongs to this change, so those files are left as they were. --- .agents/plugins/marketplace.json | 116 ++++++++++++++++++++++++++++++- .claude-plugin/marketplace.json | 26 +++++++ .cursor-plugin/marketplace.json | 10 +-- 3 files changed, 144 insertions(+), 8 deletions(-) diff --git a/.agents/plugins/marketplace.json b/.agents/plugins/marketplace.json index 7fadec61..5d45bf7f 100644 --- a/.agents/plugins/marketplace.json +++ b/.agents/plugins/marketplace.json @@ -1126,6 +1126,18 @@ }, "category": "Productivity" }, + { + "name": "tanstack", + "source": { + "source": "local", + "path": "./plugins/tanstack" + }, + "policy": { + "installation": "AVAILABLE", + "authentication": "ON_INSTALL" + }, + "category": "Framework" + }, { "name": "run-verify", "source": { @@ -1151,10 +1163,108 @@ "category": "UI" }, { - "name": "tanstack", + "name": "shunt-codex", "source": { - "source": "local", - "path": "./plugins/tanstack" + "source": "git-subdir", + "url": "https://github.com/pleaseai/shunt.git", + "path": "./plugins/shunt-codex", + "ref": "main" + }, + "policy": { + "installation": "AVAILABLE", + "authentication": "ON_INSTALL" + }, + "category": "AI" + }, + { + "name": "shunt-xai", + "source": { + "source": "git-subdir", + "url": "https://github.com/pleaseai/shunt.git", + "path": "./plugins/shunt-xai", + "ref": "main" + }, + "policy": { + "installation": "AVAILABLE", + "authentication": "ON_INSTALL" + }, + "category": "AI" + }, + { + "name": "shunt-kimi", + "source": { + "source": "git-subdir", + "url": "https://github.com/pleaseai/shunt.git", + "path": "./plugins/shunt-kimi", + "ref": "main" + }, + "policy": { + "installation": "AVAILABLE", + "authentication": "ON_INSTALL" + }, + "category": "AI" + }, + { + "name": "shunt-deepseek", + "source": { + "source": "git-subdir", + "url": "https://github.com/pleaseai/shunt.git", + "path": "./plugins/shunt-deepseek", + "ref": "main" + }, + "policy": { + "installation": "AVAILABLE", + "authentication": "ON_INSTALL" + }, + "category": "AI" + }, + { + "name": "shunt-zai", + "source": { + "source": "git-subdir", + "url": "https://github.com/pleaseai/shunt.git", + "path": "./plugins/shunt-zai", + "ref": "main" + }, + "policy": { + "installation": "AVAILABLE", + "authentication": "ON_INSTALL" + }, + "category": "AI" + }, + { + "name": "shunt-minimax", + "source": { + "source": "git-subdir", + "url": "https://github.com/pleaseai/shunt.git", + "path": "./plugins/shunt-minimax", + "ref": "main" + }, + "policy": { + "installation": "AVAILABLE", + "authentication": "ON_INSTALL" + }, + "category": "AI" + }, + { + "name": "shunt-mimo", + "source": { + "source": "git-subdir", + "url": "https://github.com/pleaseai/shunt.git", + "path": "./plugins/shunt-mimo", + "ref": "main" + }, + "policy": { + "installation": "AVAILABLE", + "authentication": "ON_INSTALL" + }, + "category": "AI" + }, + { + "name": "spring", + "source": { + "source": "url", + "url": "https://github.com/pleaseai/spring-plugin.git" }, "policy": { "installation": "AVAILABLE", diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 77b0165f..82c3be86 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -1653,6 +1653,32 @@ "ref": "main" }, "homepage": "https://github.com/pleaseai/shunt/tree/main/plugins/shunt-mimo" + }, + { + "name": "spring", + "description": "Answers Spring questions from the reference documentation of the version your project declares, not the newest release.", + "category": "framework", + "keywords": ["spring", "spring-boot", "java", "kotlin", "documentation"], + "tags": ["framework", "docs", "skills"], + "source": { + "source": "github", + "repo": "pleaseai/spring-plugin" + }, + "homepage": "https://github.com/pleaseai/spring-plugin", + "relevance": { + "topic": "Spring", + "signals": { + "cli": ["gradle", "./gradlew", "mvn", "./mvnw"], + "filesRead": [ + "**/build.gradle", + "**/build.gradle.kts", + "**/pom.xml", + "**/gradle/libs.versions.toml", + "**/src/main/resources/application*.yml", + "**/src/main/resources/application*.properties" + ] + } + } } ] } diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index ff31f0a7..8c1b1899 100644 --- a/.cursor-plugin/marketplace.json +++ b/.cursor-plugin/marketplace.json @@ -364,15 +364,15 @@ "source": "./plugins/greptile", "description": "Greptile agent skills for PR quality: check PR review comments and status checks, run Greptile CLI reviews on local branches, and iteratively improve PRs until they score 5/5" }, - { - "name": "shadcn-ui", - "source": "./plugins/shadcn-ui", - "description": "Manages shadcn/ui components and projects — adding, searching, fixing, styling, and composing UI — plus migrating from Radix UI to Base UI." - }, { "name": "tanstack", "source": "./plugins/tanstack", "description": "Version-aware skills for the TanStack ecosystem (Query, Router, Start, Table, Form, DB, Virtual, ...) via the official @tanstack/intent CLI — loads skills shipped inside the installed npm packages" + }, + { + "name": "shadcn-ui", + "source": "./plugins/shadcn-ui", + "description": "Manages shadcn/ui components and projects — adding, searching, fixing, styling, and composing UI — plus migrating from Radix UI to Base UI." } ] } From 083b0c5ca302576b8d4f07d909808f964ba2ecb8 Mon Sep 17 00:00:00 2001 From: Minsu Lee Date: Mon, 14 Sep 2026 10:32:39 +0900 Subject: [PATCH 2/2] fix(marketplace): gate the spring suggestion on an actual Spring dependency The signals matched every Gradle and Maven project. `gradle`, `mvn`, `**/build.gradle` and `**/pom.xml` say "this is a JVM project", not "this project uses Spring", so the suggestion would have fired on any Java or Kotlin repository. Replaces them with `manifestDeps`, which tests manifest contents rather than manifest existence: `spring-boot` in a `pom.xml`, `org.springframework.boot` in a Gradle build script or a version catalog. The remaining `filesRead` patterns keep only the Spring Boot config-file conventions, `application*` under `src/main/resources`. --- .claude-plugin/marketplace.json | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 82c3be86..3ace2da6 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -1668,14 +1668,15 @@ "relevance": { "topic": "Spring", "signals": { - "cli": ["gradle", "./gradlew", "mvn", "./mvnw"], "filesRead": [ - "**/build.gradle", - "**/build.gradle.kts", - "**/pom.xml", - "**/gradle/libs.versions.toml", "**/src/main/resources/application*.yml", + "**/src/main/resources/application*.yaml", "**/src/main/resources/application*.properties" + ], + "manifestDeps": [ + { "file": "[/\\\\]pom\\.xml$", "pattern": "spring-boot" }, + { "file": "[/\\\\]build\\.gradle(\\.kts)?$", "pattern": "org\\.springframework\\.boot" }, + { "file": "[/\\\\]libs\\.versions\\.toml$", "pattern": "org\\.springframework\\.boot" } ] } }