Skip to content

Commit 3670a8c

Browse files
author
Shubham Agarwal
committed
Merge branch 'main' into migrate-mobile-apps-plugin
2 parents 53c9688 + 0188a8b commit 3670a8c

37 files changed

Lines changed: 2593 additions & 339 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude-plugin/marketplace.json

Lines changed: 6 additions & 132 deletions
Original file line numberDiff line numberDiff line change
@@ -10,153 +10,27 @@
1010
"plugins": [
1111
{
1212
"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"
3014
},
3115
{
3216
"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"
5418
},
5519
{
5620
"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"
7622
},
7723
{
7824
"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"
10226
},
10327
{
10428
"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"
13030
},
13131
{
13232
"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",
135-
"category": "development",
136-
"version": "0.1.0",
137-
"license": "MIT",
138-
"tags": [
139-
"power platform",
140-
"power apps",
141-
"code apps",
142-
"mobile",
143-
"expo",
144-
"react native",
145-
"native",
146-
"connectors",
147-
"microsoft"
148-
],
149-
"keywords": [
150-
"power platform",
151-
"power apps",
152-
"code apps",
153-
"mobile",
154-
"expo",
155-
"react native",
156-
"native",
157-
"connectors",
158-
"microsoft"
159-
]
33+
"source": "./plugins/mobile-apps"
16034
}
16135
]
16236
}

AGENTS.md

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -63,15 +63,15 @@ Skills that apply to all plugins live in `shared/skills/<skill-name>/`. The work
6363
- `shared/skills/<skill-name>/<workflow>.md` — Full workflow (phases, instructions, field definitions)
6464
- `shared/skills/<skill-name>/SKILL.template.md` — Template SKILL.md (frontmatter + reference to workflow); supports `{{PLUGIN_NAME}}` placeholder
6565
- `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
6767

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.
6969

7070
## Shared Telemetry
7171

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.
7373

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.
7575

7676
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`.
7777

@@ -98,12 +98,15 @@ Current adopters: `power-pages`. Others adopt on demand.
9898

9999
Keep the root `.claude-plugin/marketplace.json` and each plugin's
100100
`.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
107110
`node scripts/validate-legacy-compatibility.js` after metadata changes.
108111

109112
## Code Conventions

README.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -225,9 +225,11 @@ power-platform-skills/
225225
The `.claude-plugin` files are compatibility mirrors for users who subscribed
226226
before the Open Plugins migration. The root legacy marketplace mirrors
227227
`marketplace.json`, and per-plugin legacy manifests mirror `.plugin/plugin.json`.
228-
The shared marketplace uses repository-root-relative plugin `source` paths so
229-
existing subscriptions can auto-update without requiring users to remove and
230-
reinstall the marketplace or plugins.
228+
The shared marketplace keeps marketplace-level `owner` and `metadata`, while each
229+
plugin entry is intentionally just `name` plus repository-root-relative `source`.
230+
Plugin descriptions, versions, licenses, and keywords are controlled from each
231+
plugin's `.plugin/plugin.json`. This keeps existing subscriptions updating without
232+
duplicating display/update metadata.
231233
232234
## Documentation
233235

marketplace.json

Lines changed: 6 additions & 132 deletions
Original file line numberDiff line numberDiff line change
@@ -10,153 +10,27 @@
1010
"plugins": [
1111
{
1212
"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"
3014
},
3115
{
3216
"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"
5418
},
5519
{
5620
"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"
7622
},
7723
{
7824
"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"
10226
},
10327
{
10428
"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"
13030
},
13131
{
13232
"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",
135-
"category": "development",
136-
"version": "0.1.0",
137-
"license": "MIT",
138-
"tags": [
139-
"power platform",
140-
"power apps",
141-
"code apps",
142-
"mobile",
143-
"expo",
144-
"react native",
145-
"native",
146-
"connectors",
147-
"microsoft"
148-
],
149-
"keywords": [
150-
"power platform",
151-
"power apps",
152-
"code apps",
153-
"mobile",
154-
"expo",
155-
"react native",
156-
"native",
157-
"connectors",
158-
"microsoft"
159-
]
33+
"source": "./plugins/mobile-apps"
16034
}
16135
]
16236
}

plugins/canvas-apps/skills/report-issue/report-issue-workflow.md

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)