You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: .claude-plugin/marketplace.json
+6-132Lines changed: 6 additions & 132 deletions
Original file line number
Diff line number
Diff line change
@@ -10,153 +10,27 @@
10
10
"plugins": [
11
11
{
12
12
"name": "power-pages",
13
-
"source": "./plugins/power-pages",
14
-
"description": "Power Pages development and management plugin for Claude Code and GitHub Copilot",
15
-
"category": "development",
16
-
"version": "2.6.0",
17
-
"license": "MIT",
18
-
"tags": [
19
-
"power platform",
20
-
"power pages",
21
-
"microsoft power platform",
22
-
"microsoft"
23
-
],
24
-
"keywords": [
25
-
"power platform",
26
-
"power pages",
27
-
"microsoft power platform",
28
-
"microsoft"
29
-
]
13
+
"source": "./plugins/power-pages"
30
14
},
31
15
{
32
16
"name": "model-apps",
33
-
"source": "./plugins/model-apps",
34
-
"description": "Build and deploy generative pages for Power Apps model-driven apps",
35
-
"category": "development",
36
-
"version": "2.2.0",
37
-
"license": "MIT",
38
-
"tags": [
39
-
"power platform",
40
-
"power apps",
41
-
"model-driven apps",
42
-
"generative pages",
43
-
"genux",
44
-
"microsoft"
45
-
],
46
-
"keywords": [
47
-
"power platform",
48
-
"power apps",
49
-
"model-driven apps",
50
-
"generative pages",
51
-
"genux",
52
-
"microsoft"
53
-
]
17
+
"source": "./plugins/model-apps"
54
18
},
55
19
{
56
20
"name": "mcp-apps",
57
-
"source": "./plugins/mcp-apps",
58
-
"description": "Generate MCP App widgets for MCP tools",
59
-
"category": "development",
60
-
"version": "1.0.0",
61
-
"license": "MIT",
62
-
"tags": [
63
-
"mcp",
64
-
"mcp-apps",
65
-
"widget",
66
-
"power platform",
67
-
"microsoft"
68
-
],
69
-
"keywords": [
70
-
"mcp",
71
-
"mcp-apps",
72
-
"widget",
73
-
"power platform",
74
-
"microsoft"
75
-
]
21
+
"source": "./plugins/mcp-apps"
76
22
},
77
23
{
78
24
"name": "canvas-apps",
79
-
"source": "./plugins/canvas-apps",
80
-
"description": "Build Power Apps Canvas Apps using the Canvas Authoring MCP server",
81
-
"category": "development",
82
-
"version": "2.1.0",
83
-
"license": "MIT",
84
-
"tags": [
85
-
"power platform",
86
-
"power apps",
87
-
"canvas apps",
88
-
"pa-yaml",
89
-
"msapp",
90
-
"connectors",
91
-
"microsoft"
92
-
],
93
-
"keywords": [
94
-
"power platform",
95
-
"power apps",
96
-
"canvas apps",
97
-
"pa-yaml",
98
-
"msapp",
99
-
"connectors",
100
-
"microsoft"
101
-
]
25
+
"source": "./plugins/canvas-apps"
102
26
},
103
27
{
104
28
"name": "code-apps-preview",
105
-
"source": "./plugins/code-apps",
106
-
"description": "Build and deploy Power Apps code apps using React, Vite, and Power Platform connectors",
107
-
"category": "development",
108
-
"version": "1.0.0",
109
-
"license": "MIT",
110
-
"tags": [
111
-
"power platform",
112
-
"power apps",
113
-
"code apps",
114
-
"react",
115
-
"vite",
116
-
"dataverse",
117
-
"connectors",
118
-
"microsoft"
119
-
],
120
-
"keywords": [
121
-
"power platform",
122
-
"power apps",
123
-
"code apps",
124
-
"react",
125
-
"vite",
126
-
"dataverse",
127
-
"connectors",
128
-
"microsoft"
129
-
]
29
+
"source": "./plugins/code-apps"
130
30
},
131
31
{
132
32
"name": "mobile-app",
133
-
"source": "./plugins/mobile-apps",
134
-
"description": "Build and deploy Power Apps code apps for mobile using Expo (React Native), with native device functionality and Power Platform connectors",
-`plugins/<plugin>/skills/<skill-name>/SKILL.md` — Per-plugin wrapper generated from the template above
66
-
-`plugins/<plugin>/skills/<skill-name>/<workflow>.md` — Symlink to the shared workflow when the plugin must work after installing only its own plugin directory
66
+
-`plugins/<plugin>/skills/<skill-name>/<workflow>.md` — Copied workflow file bundled with the plugin so it works after installing only its own plugin directory
67
67
68
-
This keeps the skill discoverable in each plugin while preserving install-time portability. Marketplace installs copy only the plugin directory, so per-plugin wrappers must not reference repo-root `shared/` paths at runtime. Instead, point the wrapper at `${PLUGIN_ROOT}/skills/<skill-name>/<workflow>.md` and keep a symlink from that per-plugin path to the repo-root shared workflow; marketplace installers dereference same-marketplace symlinks into the installed plugin cache. When updating a shared skill, edit the workflow file and/or `SKILL.template.md` in `shared/`, then update the per-plugin wrappers (frontmatter + bundled workflow reference, with `{{PLUGIN_NAME}}` substituted) and ensure any per-plugin symlinks still resolve under `plugins/<plugin>/skills/<skill-name>/`. Commit the shared source and per-plugin symlinks together.
68
+
This keeps the skill discoverable in each plugin while preserving install-time portability. Marketplace installs copy only the plugin directory, so per-plugin wrappers must not reference repo-root `shared/` paths at runtime. Instead, point the wrapper at `${PLUGIN_ROOT}/skills/<skill-name>/<workflow>.md` and keep a physical copy of the shared workflow at that per-plugin path. Do not use Git symlinks for shared content; Windows and plugin-host installs can materialize them as plain link files. When updating a shared skill, edit the workflow file and/or `SKILL.template.md` in `shared/`, then refresh the per-plugin wrappers (frontmatter + bundled workflow reference, with `{{PLUGIN_NAME}}` substituted) and copy the workflow content into each adopting plugin. Commit the shared source and per-plugin copies together.
69
69
70
70
## Shared Telemetry
71
71
72
-
1DS telemetry code for all plugins lives at `shared/telemetry/`. Each adopting plugin **symlinks**the library into its own tree —`plugins/<plugin>/scripts/lib/telemetry/lib` is a symlink to `shared/telemetry/lib`. The marketplace installer dereferences that symlink into the installed plugin at install time, so the shared code ships without copying it into each plugin. Each plugin keeps its own real `ikey.json` next to the symlink.
72
+
1DS telemetry code for all plugins lives at `shared/telemetry/`. Each adopting plugin keeps a physical copy of the library in its own tree at`plugins/<plugin>/scripts/lib/telemetry/lib`, alongside that plugin's real `ikey.json`. Do not use Git symlinks for this copy; plugin hosts may not dereference them reliably.
73
73
74
-
Edit `shared/telemetry/`directly — the symlink makes changes live for every adopting plugin immediately; there is nothing to re-sync.
74
+
Edit `shared/telemetry/`first, then refresh every adopting plugin's copied `scripts/lib/telemetry/lib` directory in the same change so the canonical source and bundled plugin content stay in sync.
75
75
76
76
Per-plugin iKey/collector routing is pluggable via a `resolver.js` placed next to the plugin's `ikey.json` (implementing the `resolve`/`isProvisioned` contract); the shared library ships only that contract plus a static-key fallback, not any routing logic. A per-plugin opt-out env var `POWER_PLATFORM_SKILLS_TELEMETRY_<PLUGIN>_OPTOUT` (derived as the uppercased plugin name with non-alphanumerics collapsed to `_`, suffixed `_OPTOUT`) disables transmission for automation when set to `1`/`true` (dotnet `*_TELEMETRY_OPTOUT` convention); it has the **highest precedence**, overriding both the persisted `config.json` choice and `/<plugin>:telemetry on`.
77
77
@@ -98,12 +98,15 @@ Current adopters: `power-pages`. Others adopt on demand.
98
98
99
99
Keep the root `.claude-plugin/marketplace.json` and each plugin's
100
100
`.claude-plugin/plugin.json`as JSON mirrors of their Open Plugins counterparts.
101
-
The shared root marketplace must stay dual-compatible: use repository-root-relative
102
-
plugin `source` paths and preserve legacy `category`/`tags` fields alongside Open
103
-
Plugins metadata. Existing marketplace subscriptions may still resolve the legacy
104
-
paths during auto-update, so removing or drifting these files can force users to
105
-
reinstall. Because mirrors are committed files (not symlinks), update both source
106
-
and legacy copies together, then run
101
+
The shared root marketplace must stay dual-compatible while keeping per-plugin
102
+
entries minimal: each plugin entry should include only the required `name` and
103
+
repository-root-relative `source` fields. Keep marketplace-level `owner` and
104
+
`metadata`because they describe the collection, but store per-plugin display/update
105
+
metadata (description, version, license, keywords, etc.) in each `.plugin/plugin.json`
106
+
instead of duplicating or overriding it in the marketplace index. Existing marketplace
107
+
subscriptions may still resolve the legacy paths during auto-update, so removing or
108
+
drifting these files can force users to reinstall. Because mirrors are committed
109
+
files (not symlinks), update both source and legacy copies together, then run
Copy file name to clipboardExpand all lines: marketplace.json
+6-132Lines changed: 6 additions & 132 deletions
Original file line number
Diff line number
Diff line change
@@ -10,153 +10,27 @@
10
10
"plugins": [
11
11
{
12
12
"name": "power-pages",
13
-
"source": "./plugins/power-pages",
14
-
"description": "Power Pages development and management plugin for Claude Code and GitHub Copilot",
15
-
"category": "development",
16
-
"version": "2.6.0",
17
-
"license": "MIT",
18
-
"tags": [
19
-
"power platform",
20
-
"power pages",
21
-
"microsoft power platform",
22
-
"microsoft"
23
-
],
24
-
"keywords": [
25
-
"power platform",
26
-
"power pages",
27
-
"microsoft power platform",
28
-
"microsoft"
29
-
]
13
+
"source": "./plugins/power-pages"
30
14
},
31
15
{
32
16
"name": "model-apps",
33
-
"source": "./plugins/model-apps",
34
-
"description": "Build and deploy generative pages for Power Apps model-driven apps",
35
-
"category": "development",
36
-
"version": "2.2.0",
37
-
"license": "MIT",
38
-
"tags": [
39
-
"power platform",
40
-
"power apps",
41
-
"model-driven apps",
42
-
"generative pages",
43
-
"genux",
44
-
"microsoft"
45
-
],
46
-
"keywords": [
47
-
"power platform",
48
-
"power apps",
49
-
"model-driven apps",
50
-
"generative pages",
51
-
"genux",
52
-
"microsoft"
53
-
]
17
+
"source": "./plugins/model-apps"
54
18
},
55
19
{
56
20
"name": "mcp-apps",
57
-
"source": "./plugins/mcp-apps",
58
-
"description": "Generate MCP App widgets for MCP tools",
59
-
"category": "development",
60
-
"version": "1.0.0",
61
-
"license": "MIT",
62
-
"tags": [
63
-
"mcp",
64
-
"mcp-apps",
65
-
"widget",
66
-
"power platform",
67
-
"microsoft"
68
-
],
69
-
"keywords": [
70
-
"mcp",
71
-
"mcp-apps",
72
-
"widget",
73
-
"power platform",
74
-
"microsoft"
75
-
]
21
+
"source": "./plugins/mcp-apps"
76
22
},
77
23
{
78
24
"name": "canvas-apps",
79
-
"source": "./plugins/canvas-apps",
80
-
"description": "Build Power Apps Canvas Apps using the Canvas Authoring MCP server",
81
-
"category": "development",
82
-
"version": "2.1.0",
83
-
"license": "MIT",
84
-
"tags": [
85
-
"power platform",
86
-
"power apps",
87
-
"canvas apps",
88
-
"pa-yaml",
89
-
"msapp",
90
-
"connectors",
91
-
"microsoft"
92
-
],
93
-
"keywords": [
94
-
"power platform",
95
-
"power apps",
96
-
"canvas apps",
97
-
"pa-yaml",
98
-
"msapp",
99
-
"connectors",
100
-
"microsoft"
101
-
]
25
+
"source": "./plugins/canvas-apps"
102
26
},
103
27
{
104
28
"name": "code-apps-preview",
105
-
"source": "./plugins/code-apps",
106
-
"description": "Build and deploy Power Apps code apps using React, Vite, and Power Platform connectors",
107
-
"category": "development",
108
-
"version": "1.0.0",
109
-
"license": "MIT",
110
-
"tags": [
111
-
"power platform",
112
-
"power apps",
113
-
"code apps",
114
-
"react",
115
-
"vite",
116
-
"dataverse",
117
-
"connectors",
118
-
"microsoft"
119
-
],
120
-
"keywords": [
121
-
"power platform",
122
-
"power apps",
123
-
"code apps",
124
-
"react",
125
-
"vite",
126
-
"dataverse",
127
-
"connectors",
128
-
"microsoft"
129
-
]
29
+
"source": "./plugins/code-apps"
130
30
},
131
31
{
132
32
"name": "mobile-app",
133
-
"source": "./plugins/mobile-apps",
134
-
"description": "Build and deploy Power Apps code apps for mobile using Expo (React Native), with native device functionality and Power Platform connectors",
0 commit comments