Skip to content

Commit 4598f59

Browse files
committed
sync: upstream microsoft/power-platform-skills 2026-06-30
Upstream range: 2923950..0188a8b Affected plugins: canvas-apps, code-apps-preview, mcp-apps, model-apps, power-pages Merge strategy: direct-copy, intelligent-merge, deferred-telemetry
1 parent bbd8dfe commit 4598f59

202 files changed

Lines changed: 14663 additions & 2311 deletions

File tree

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: 7 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -4,78 +4,29 @@
44
"name": "Microsoft"
55
},
66
"metadata": {
7-
"description": "Plugins for Power Platform development with Claude Code and GitHub Copilot"
7+
"description": "Plugins for Power Platform development with Claude Code and GitHub Copilot",
8+
"pluginRoot": "."
89
},
910
"plugins": [
1011
{
1112
"name": "power-pages",
12-
"source": "./plugins/power-pages",
13-
"description": "Power Pages development and management plugin for Claude Code and GitHub Copilot",
14-
"category": "development",
15-
"tags": [
16-
"power platform",
17-
"power pages",
18-
"microsoft power platform",
19-
"microsoft"
20-
]
13+
"source": "./plugins/power-pages"
2114
},
2215
{
2316
"name": "model-apps",
24-
"source": "./plugins/model-apps",
25-
"description": "Build and deploy generative pages for Power Apps model-driven apps",
26-
"category": "development",
27-
"tags": [
28-
"power platform",
29-
"power apps",
30-
"model-driven apps",
31-
"generative pages",
32-
"genux",
33-
"microsoft"
34-
]
17+
"source": "./plugins/model-apps"
3518
},
3619
{
3720
"name": "mcp-apps",
38-
"source": "./plugins/mcp-apps",
39-
"description": "Generate MCP App widgets for MCP tools",
40-
"category": "development",
41-
"tags": [
42-
"mcp",
43-
"mcp-apps",
44-
"widget",
45-
"power platform",
46-
"microsoft"
47-
]
21+
"source": "./plugins/mcp-apps"
4822
},
4923
{
5024
"name": "canvas-apps",
51-
"source": "./plugins/canvas-apps",
52-
"description": "Build Power Apps Canvas Apps using the Canvas Authoring MCP server",
53-
"category": "development",
54-
"tags": [
55-
"power platform",
56-
"power apps",
57-
"canvas apps",
58-
"pa-yaml",
59-
"msapp",
60-
"connectors",
61-
"microsoft"
62-
]
25+
"source": "./plugins/canvas-apps"
6326
},
6427
{
6528
"name": "code-apps-preview",
66-
"source": "./plugins/code-apps",
67-
"description": "Build and deploy Power Apps code apps using React, Vite, and Power Platform connectors",
68-
"category": "development",
69-
"tags": [
70-
"power platform",
71-
"power apps",
72-
"code apps",
73-
"react",
74-
"vite",
75-
"dataverse",
76-
"connectors",
77-
"microsoft"
78-
]
29+
"source": "./plugins/code-apps"
7930
}
8031
]
8132
}

.claude/settings.json

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,7 @@
2121
"Bash(dir:*)",
2222
"Read",
2323
"Write",
24-
"Edit",
25-
"mcp__playwright__*",
26-
"mcp__*__browser_*"
24+
"Edit"
2725
]
2826
}
2927
}

.github/workflows/power-pages-alm-lint.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
# Deliberately separate from `power-pages-script-tests.yml`.
2+
# This workflow runs policy enforcement (gate markers, ALM-aware-by-default,
3+
# discovery coverage) — pure-Node, OS-independent, completes in seconds, so
4+
# it runs on a single OS to surface red checks fast.
5+
# The sibling workflow runs functional unit tests across ubuntu × windows × macos.
6+
# See PLUGIN_DEVELOPMENT_GUIDE.md and references/approval-gates.md.
17
name: power-pages-alm-lint
28

39
on:
@@ -11,6 +17,12 @@ jobs:
1117
alm-lint:
1218
name: alm-lint
1319
runs-on: ubuntu-latest
20+
# Consistency backstop: keep all power-pages CI opted out of telemetry
21+
# transmission. This job runs only the linter today (no emission), so the
22+
# var is inert here — it guarantees no transmission if an emitting step is
23+
# ever added to this workflow.
24+
env:
25+
POWER_PLATFORM_SKILLS_TELEMETRY_POWER_PAGES_OPTOUT: "1"
1426
steps:
1527
- name: checkout
1628
uses: actions/checkout@v4

.github/workflows/power-pages-script-tests.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
# Deliberately separate from `power-pages-alm-lint.yml`.
2+
# This workflow runs functional unit tests across ubuntu × windows × macos to
3+
# catch OS-specific regressions in Node scripts. Slow (~30s on macOS).
4+
# The sibling workflow runs fast policy enforcement on a single OS so red
5+
# checks for gate-marker / catalog drift surface before this matrix finishes.
16
name: power-pages-script-tests
27

38
on:
@@ -11,6 +16,14 @@ jobs:
1116
test-power-pages-scripts:
1217
name: test-power-pages-scripts (${{ matrix.os }})
1318
runs-on: ${{ matrix.os }}
19+
# Defense-in-depth: opt this CI job out of telemetry transmission so even
20+
# a test that forgets to isolate emission (no FAKE_HTTPS probe / temp
21+
# ikey) can never POST to the production collector. Honored end-to-end
22+
# because emit-spawn forwards this var to the detached dispatcher. The two
23+
# positive-emission tests clear it in their own spawn env so they still
24+
# exercise the real emit path.
25+
env:
26+
POWER_PLATFORM_SKILLS_TELEMETRY_POWER_PAGES_OPTOUT: "1"
1427
strategy:
1528
fail-fast: false
1629
matrix:

.github/workflows/validate-repository-metadata.yml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ on:
77
workflow_dispatch:
88

99
permissions:
10-
contents: read
10+
contents: read
1111

1212
jobs:
1313
validate-repository-metadata:
@@ -22,8 +22,11 @@ jobs:
2222
with:
2323
node-version: 20
2424

25-
- name: validate-kebab-case-plugin-names
25+
- name: validate-open-plugin-names
2626
run: node scripts/validate-plugin-names.js
2727

28+
- name: validate-legacy-compatibility
29+
run: node scripts/validate-legacy-compatibility.js
30+
2831
- name: validate-skill-descriptions
2932
run: node scripts/validate-skill-descriptions.js

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,3 +53,6 @@ Thumbs.db
5353

5454
.playwright-mcp/
5555

56+
# oh-my-claudecode scratch state
57+
.omc/
58+

AGENTS.md

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,21 @@ This file provides guidance to AI Agents when working with code in this reposito
44

55
## What This Repo Is
66

7-
A **plugin marketplace** for Power Platform development by Microsoft. The marketplace manifest (`.claude-plugin/marketplace.json`) references individual plugins in `plugins/`. Each plugin has its own `AGENTS.md` with plugin-specific guidance.
7+
A **plugin marketplace** for Power Platform development by Microsoft. The Open Plugins marketplace manifest (`marketplace.json`) references individual plugins in `plugins/`. Legacy `.claude-plugin` manifest mirrors are kept for existing subscriptions. Each plugin has its own `AGENTS.md` with plugin-specific guidance.
88

99
## Repository Structure
1010

11-
```text
11+
```
1212
power-platform-skills/
13-
├── .claude-plugin/
14-
│ └── marketplace.json # Marketplace manifest (lists all available plugins)
13+
├── marketplace.json # Open Plugins marketplace manifest (lists all available plugins)
14+
├── .claude-plugin/ # Legacy manifest mirrors for existing subscriptions
15+
│ └── marketplace.json
1516
├── plugins/ # Directory containing individual plugins
1617
│ └── <plugin-name>/ # Individual plugin (e.g., power-pages)
18+
│ ├── .plugin/
19+
│ │ └── plugin.json # Open Plugins manifest
1720
│ ├── .claude-plugin/
18-
│ │ └── plugin.json # Plugin manifest
21+
│ │ └── plugin.json # Legacy manifest mirror
1922
│ ├── AGENTS.md # Plugin-specific development guidelines
2023
│ ├── agents/ # Agent persona files
2124
│ ├── commands/ # Command entry points
@@ -42,7 +45,8 @@ No root-level build, lint, or test commands exist. Build/test tooling lives insi
4245

4346
Each plugin follows this structure:
4447

45-
- `.claude-plugin/plugin.json` — Plugin metadata (name, version, keywords)
48+
- `.plugin/plugin.json` — Open Plugins metadata (name, version, keywords)
49+
- `.claude-plugin/plugin.json` — legacy mirror of `.plugin/plugin.json` kept for existing subscriptions
4650
- `.mcp.json` — MCP server configuration (optional)
4751
- `agents/` — Agent definitions (`.md` files with YAML frontmatter)
4852
- `skills/` — Skill definitions, each in its own subdirectory with a `SKILL.md`
@@ -59,20 +63,36 @@ Do not mark a plugin as ready for internal publication until it has a completed
5963

6064
## Cross-Plugin Shared Skills
6165

62-
Skills that apply to all plugins live in `shared/skills/<skill-name>/`. The workflow logic is written once in a shared `.md` file, and each plugin has a thin `skills/<skill-name>/SKILL.md` that contains only the YAML frontmatter and a reference to the shared workflow file.
66+
Skills that apply to all plugins live in `shared/skills/<skill-name>/`. The workflow logic is written once in a shared `.md` file, and each plugin has a thin `skills/<skill-name>/SKILL.md` that contains only the YAML frontmatter and a reference to the workflow path bundled inside that plugin at install time.
6367

6468
**Pattern:**
6569

6670
- `shared/skills/<skill-name>/<workflow>.md` — Full workflow (phases, instructions, field definitions)
6771
- `shared/skills/<skill-name>/SKILL.template.md` — Template SKILL.md (frontmatter + reference to workflow); supports `{{PLUGIN_NAME}}` placeholder
6872
- `plugins/<plugin>/skills/<skill-name>/SKILL.md` — Per-plugin wrapper generated from the template above
73+
- `plugins/<plugin>/skills/<skill-name>/<workflow>.md` — Bundled workflow file copied into the plugin so installs work without repo-root shared paths
74+
75+
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.
76+
77+
## Legacy Marketplace Compatibility
6978

70-
This keeps the skill discoverable in each plugin while avoiding content duplication. When updating a shared skill, edit the workflow file and/or `SKILL.template.md` in `shared/`, then update the per-plugin wrappers (frontmatter + reference pointing to the shared workflow, with `{{PLUGIN_NAME}}` substituted) and commit them alongside the shared change.
79+
Keep the root `.claude-plugin/marketplace.json` and each plugin's `.claude-plugin/plugin.json` as JSON mirrors of their Open Plugins counterparts. The shared root marketplace must stay dual-compatible while keeping per-plugin entries minimal: each plugin entry should include only the required `name` and repository-root-relative `source` fields. Keep marketplace-level `owner` and `metadata` because they describe the collection, but store per-plugin display/update metadata (description, version, license, keywords, and similar fields) in each `.plugin/plugin.json` instead of duplicating or overriding it in the marketplace index. Existing marketplace subscriptions may still resolve the legacy paths during auto-update, so removing or drifting these files can force users to reinstall. Because mirrors are committed files, update both source and legacy copies together, then run `node scripts/validate-legacy-compatibility.js` after metadata changes.
7180

7281
## Code Conventions
7382

7483
**DRY (Don't Repeat Yourself):** Never duplicate logic across files. Each plugin has shared utilities (e.g., `scripts/lib/`) and shared reference docs (e.g., `references/`). Always check for and reuse existing helpers before writing new code. When adding shared logic, put it in the plugin's shared modules — not in individual skill directories.
7584

85+
### Code comments
86+
87+
Most code in this repo is Node.js scripts and hooks that shell out to `pac`/`az`, call the Dataverse and Power Platform APIs, and parse loosely structured CLI output. The reasoning behind a line is rarely obvious from the line alone, so comments matter.
88+
89+
- Err on the side of over-commenting when the reasoning is not obvious. Comments should explain **why** code is written a particular way.
90+
- Comment non-obvious implementation details: concurrency hazards, lifecycle constraints, compatibility requirements, platform quirks, upstream PAC CLI or Dataverse workarounds, and intentional deviations from the obvious helper or API.
91+
- When parsing strings, logs, CLI output, OData payloads, or other loosely structured data, include a comment with an example of the raw format being parsed.
92+
- When code follows an external standard, protocol, or Power Platform convention, include links to the relevant documentation so future readers can verify the rule.
93+
- When code touches auth tokens or other privacy/security-sensitive flows, explain the scope and fail-closed behavior.
94+
- Do not add comments that only narrate clear code.
95+
7696
## Maintaining This File
7797

7898
When you add new plugins or change the repository-level structure, update this file. For plugin-specific changes, update the plugin's own `AGENTS.md` (e.g., `plugins/power-pages/AGENTS.md`).

CODEOWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
* @microsoft/power-platform-skills-contributors

CODE_OF_CONDUCT.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# Microsoft Open Source Code of Conduct
2+
3+
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
4+
5+
Resources:
6+
7+
- [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/)
8+
- [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/)
9+
- Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns
10+
- Employees can reach out at [aka.ms/opensource/moderation-support](https://aka.ms/opensource/moderation-support)

0 commit comments

Comments
 (0)