From 0f12a82e238d8b685814343a4b7bb232a7e031eb Mon Sep 17 00:00:00 2001 From: Minsu Lee Date: Tue, 15 Sep 2026 20:43:42 +0900 Subject: [PATCH 1/4] feat(marketplace): replace flutter plugin with official flutter/agent-plugins Swap the `pleaseai/flutter-plugin` entry for the official Flutter team plugin at `flutter/agent-plugins`, which ships Flutter/Dart skills and the Dart MCP server. Drop the now-unused `external-plugins/flutter` submodule and update the README and ARCHITECTURE rosters. BREAKING CHANGE: the install name changes from `flutter@pleaseai` to `dart-flutter@pleaseai`. Upstream's plugin.json declares `"name": "dart-flutter"`, and every github-source entry in this marketplace must match its upstream manifest name. Existing users must reinstall under the new name. --- .agents/plugins/marketplace.json | 4 ++-- .claude-plugin/marketplace.json | 8 ++++---- .gitmodules | 3 --- ARCHITECTURE.md | 2 +- README.md | 8 ++++---- external-plugins/flutter | 1 - 6 files changed, 11 insertions(+), 15 deletions(-) delete mode 160000 external-plugins/flutter diff --git a/.agents/plugins/marketplace.json b/.agents/plugins/marketplace.json index 5d45bf7f..416645b4 100644 --- a/.agents/plugins/marketplace.json +++ b/.agents/plugins/marketplace.json @@ -17,10 +17,10 @@ "category": "AI" }, { - "name": "flutter", + "name": "dart-flutter", "source": { "source": "url", - "url": "https://github.com/pleaseai/flutter-plugin.git" + "url": "https://github.com/flutter/agent-plugins.git" }, "policy": { "installation": "AVAILABLE", diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 3ace2da6..8aed9ab1 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -24,14 +24,14 @@ } }, { - "name": "flutter", - "description": "Enables several Flutter and Dart-related commands and context.", + "name": "dart-flutter", + "description": "Official Dart and Flutter plugin - installs Flutter/Dart skills and the Dart MCP server for building natively compiled apps for mobile, web, desktop, and embedded from a single codebase", "category": "mobile", "keywords": ["flutter", "dart", "mobile", "cross-platform"], - "tags": ["framework", "mobile"], + "tags": ["framework", "mobile", "skills", "mcp"], "source": { "source": "github", - "repo": "pleaseai/flutter-plugin" + "repo": "flutter/agent-plugins" }, "relevance": { "topic": "Flutter", diff --git a/.gitmodules b/.gitmodules index 86c6de7e..ba5523d1 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +1,6 @@ [submodule "external-plugins/nanobanana"] path = external-plugins/nanobanana url = git@github.com:pleaseai/nanobanana-plugin.git -[submodule "external-plugins/flutter"] - path = external-plugins/flutter - url = git@github.com:pleaseai/flutter-plugin.git [submodule "external-plugins/code-review"] path = external-plugins/code-review url = git@github.com:pleaseai/code-review-plugin.git diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index ef3bc4b9..5dc5827c 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -83,7 +83,7 @@ Development standards and reference documentation for **human contributors**. No Read-only git submodules containing **Type 4** plugins: external projects that are either Gemini CLI extensions or standalone Claude Code plugins. These are the canonical upstream sources. The sync pipeline reads from here and generates artifacts into `plugins/`. -Current external plugins: code-review, firebase, flutter, grafana, nanobanana, postgres, security, spec-kit. +Current external plugins: code-review, firebase, grafana, nanobanana, postgres, security, spec-kit. ### `hooks/` diff --git a/README.md b/README.md index 895ad07b..d2ccbd86 100644 --- a/README.md +++ b/README.md @@ -35,10 +35,10 @@ AI-powered security analysis for code changes and pull requests, identifying vul **Install:** `/plugin install gemini-cli-security@pleaseai` | **Repository:** [pleaseai/security-plugin](https://github.com/pleaseai/security-plugin) -#### Flutter Development -Flutter and Dart-related commands and context for enhanced mobile development workflow. +#### Dart and Flutter +Official Dart and Flutter plugin from the Flutter team - Flutter/Dart skills and the Dart MCP server for building natively compiled apps across mobile, web, desktop, and embedded. -**Install:** `/plugin install flutter@pleaseai` | **Repository:** [pleaseai/flutter-plugin](https://github.com/pleaseai/flutter-plugin) +**Install:** `/plugin install dart-flutter@pleaseai` | **Repository:** [flutter/agent-plugins](https://github.com/flutter/agent-plugins) #### Code Review Comprehensive code review plugin for Claude Code with specialized review agents. @@ -562,7 +562,7 @@ Once the marketplace is added (or files copied), the following plugins are avail # External plugins /plugin install nanobanana@pleaseai /plugin install gemini-cli-security@pleaseai -/plugin install flutter@pleaseai +/plugin install dart-flutter@pleaseai /plugin install code-review@pleaseai /plugin install spec-kit@pleaseai /plugin install firebase@pleaseai diff --git a/external-plugins/flutter b/external-plugins/flutter deleted file mode 160000 index 54b8b594..00000000 --- a/external-plugins/flutter +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 54b8b594c8770683c5de8e2ab423a2d293ddffff From b1fb2111185c098039abd56d9ddc6082997db2e9 Mon Sep 17 00:00:00 2001 From: Minsu Lee Date: Tue, 15 Sep 2026 20:46:00 +0900 Subject: [PATCH 2/4] chore: record github-source marketplace entry conventions in agent memory Capture the three unwritten conventions for github-source (external) marketplace entries surfaced while swapping flutter for dart-flutter in #274: the entry name must match the upstream plugin.json name, no submodule is added for upstreams that do not accept PRs, and no release-please entry is created. --- .claude/agent-memory/github-pr-manager/MEMORY.md | 1 + .../marketplace-external-plugin-conventions.md | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 .claude/agent-memory/github-pr-manager/MEMORY.md create mode 100644 .claude/agent-memory/github-pr-manager/marketplace-external-plugin-conventions.md diff --git a/.claude/agent-memory/github-pr-manager/MEMORY.md b/.claude/agent-memory/github-pr-manager/MEMORY.md new file mode 100644 index 00000000..8c76b7ec --- /dev/null +++ b/.claude/agent-memory/github-pr-manager/MEMORY.md @@ -0,0 +1 @@ +- [External marketplace plugin conventions](marketplace-external-plugin-conventions.md) — github-source entries: name must match upstream manifest, no submodule, no release-please entry diff --git a/.claude/agent-memory/github-pr-manager/marketplace-external-plugin-conventions.md b/.claude/agent-memory/github-pr-manager/marketplace-external-plugin-conventions.md new file mode 100644 index 00000000..7da1fa8c --- /dev/null +++ b/.claude/agent-memory/github-pr-manager/marketplace-external-plugin-conventions.md @@ -0,0 +1,16 @@ +--- +name: marketplace-external-plugin-conventions +description: Unwritten conventions for github-source (external) marketplace entries in pleaseai/claude-code-plugins — name must match upstream manifest, no submodule, no release-please entry +metadata: + type: project +--- + +For `github:`-source entries in `.claude-plugin/marketplace.json` (as opposed to local `./plugins/...` entries), three conventions hold that are not written down in CLAUDE.md or `.claude/rules/marketplace-sync.md`: + +1. **The marketplace entry name must match the upstream `.claude-plugin/plugin.json` `"name"`** — e.g. `gemini-cli-security` ← `pleaseai/security-plugin`, `dart-flutter` ← `flutter/agent-plugins`. Do not alias to a friendlier name even when it breaks existing installs; document the rename as a BREAKING CHANGE instead. +2. **No git submodule** is added for third-party upstreams that do not accept PRs (chrome-devtools-mcp, notion, cloudflare, modern-web-guidance, dart-flutter all follow this). +3. **No `release-please-config.json` / `.release-please-manifest.json` entry** — those companions apply only to local plugins. + +**Why:** the name invariant keeps `/plugin install @pleaseai` resolvable against what the upstream manifest declares; drift there breaks installs silently. Established in PR #274 (flutter → dart-flutter swap). + +**How to apply:** when adding or swapping a github-source plugin, check upstream's manifest name first and surface any resulting install-name change prominently in the PR body. Skip the submodule and release-please steps that local plugins require. From 5bb298b86d34a5ac005ed0dfb273a90e7595a9c6 Mon Sep 17 00:00:00 2001 From: Minsu Lee Date: Tue, 15 Sep 2026 20:50:13 +0900 Subject: [PATCH 3/4] fix: drop stale flutter references left by the submodule removal Greptile flagged two references to the removed `external-plugins/flutter` submodule. The CLAUDE.md one was already fixed while resolving the merge with main; this removes the remaining IDE VCS directory mapping, which pointed at a directory that no longer exists. --- .idea/vcs.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/.idea/vcs.xml b/.idea/vcs.xml index d19e3ad3..e37bdf7d 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -4,7 +4,6 @@ - From b48650253fd9b7af172fc1f61f91e611e177d999 Mon Sep 17 00:00:00 2001 From: Minsu Lee Date: Tue, 15 Sep 2026 20:57:57 +0900 Subject: [PATCH 4/4] chore: apply AI code review suggestions Point the Flutter tooling detection at the renamed plugin. The hook interpolates pluginName into `/plugin install @pleaseai`, so the stale `flutter` value produced an install command that no longer resolves after the marketplace rename. --- plugins/please-plugins/hooks/tooling-mappings.json | 2 +- plugins/please-plugins/skills/find-plugin/SKILL.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/please-plugins/hooks/tooling-mappings.json b/plugins/please-plugins/hooks/tooling-mappings.json index 44c71f82..be78a250 100644 --- a/plugins/please-plugins/hooks/tooling-mappings.json +++ b/plugins/please-plugins/hooks/tooling-mappings.json @@ -1,5 +1,5 @@ [ { "indicators": { "files": ["pnpm-lock.yaml"], "packageManager": "pnpm" }, "pluginName": "pnpm" }, { "indicators": { "files": ["turbo.json"], "packageManager": null }, "pluginName": "turborepo" }, - { "indicators": { "files": ["pubspec.lock", "pubspec.yaml"], "packageManager": null }, "pluginName": "flutter" } + { "indicators": { "files": ["pubspec.lock", "pubspec.yaml"], "packageManager": null }, "pluginName": "dart-flutter" } ] diff --git a/plugins/please-plugins/skills/find-plugin/SKILL.md b/plugins/please-plugins/skills/find-plugin/SKILL.md index 50965d1d..24ba93f5 100644 --- a/plugins/please-plugins/skills/find-plugin/SKILL.md +++ b/plugins/please-plugins/skills/find-plugin/SKILL.md @@ -103,7 +103,7 @@ Quick reference for the types of plugins available: | Category | Examples | |----------|----------| | **Framework** | nuxt, vue, react, next, vitepress, slidev, tiptap | -| **Mobile** | flutter, react-native | +| **Mobile** | dart-flutter, react-native | | **Database** | prisma, supabase, mcp-neo4j | | **Tooling** | vite, pnpm, turborepo, tsdown, gatekeeper, ast-grep | | **AI** | nanobanana, ai-sdk, mastra, gemini |