Skip to content

Commit dbaa8f6

Browse files
authored
Merge branch 'staged' into agentic-workflows-staged
2 parents f668abc + 068a95f commit dbaa8f6

12 files changed

Lines changed: 1034 additions & 57 deletions

.github/plugin/marketplace.json

Lines changed: 45 additions & 45 deletions
Large diffs are not rendered by default.

docs/README.instructions.md

Lines changed: 3 additions & 0 deletions
Large diffs are not rendered by default.

docs/README.prompts.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ Ready-to-use prompt templates for specific development scenarios and tasks, defi
3131
| [Azure Cosmos DB NoSQL Data Modeling Expert System Prompt](../prompts/cosmosdb-datamodeling.prompt.md)<br />[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fcosmosdb-datamodeling.prompt.md)<br />[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fcosmosdb-datamodeling.prompt.md) | Step-by-step guide for capturing key application requirements for NoSQL use-case and produce Azure Cosmos DB Data NoSQL Model design using best practices and common patterns, artifacts_produced: "cosmosdb_requirements.md" file and "cosmosdb_data_model.md" file |
3232
| [Azure Cost Optimize](../prompts/az-cost-optimize.prompt.md)<br />[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Faz-cost-optimize.prompt.md)<br />[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Faz-cost-optimize.prompt.md) | Analyze Azure resources used in the app (IaC files and/or resources in a target rg) and optimize costs - creating GitHub issues for identified optimizations. |
3333
| [Azure Resource Health & Issue Diagnosis](../prompts/azure-resource-health-diagnose.prompt.md)<br />[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fazure-resource-health-diagnose.prompt.md)<br />[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fazure-resource-health-diagnose.prompt.md) | Analyze Azure resource health, diagnose issues from logs and telemetry, and create a remediation plan for identified problems. |
34+
| [BigQuery Pipeline Audit: Cost, Safety and Production Readiness](../prompts/bigquery-pipeline-audit.prompt.md)<br />[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fbigquery-pipeline-audit.prompt.md)<br />[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fbigquery-pipeline-audit.prompt.md) | Audits Python + BigQuery pipelines for cost safety, idempotency, and production readiness. Returns a structured report with exact patch locations. |
3435
| [Boost Prompt](../prompts/boost-prompt.prompt.md)<br />[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fboost-prompt.prompt.md)<br />[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fboost-prompt.prompt.md) | Interactive prompt refinement workflow: interrogates scope, deliverables, constraints; copies final markdown to clipboard; never writes code. Requires the Joyride extension. |
3536
| [C# Async Programming Best Practices](../prompts/csharp-async.prompt.md)<br />[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fcsharp-async.prompt.md)<br />[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fcsharp-async.prompt.md) | Get best practices for C# async programming |
3637
| [C# Documentation Best Practices](../prompts/csharp-docs.prompt.md)<br />[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fcsharp-docs.prompt.md)<br />[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fcsharp-docs.prompt.md) | Ensure that C# types are documented with XML comments and follow best practices for documentation. |

docs/README.skills.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ Skills differ from other primitives by supporting bundled assets (scripts, code
3636
| [copilot-sdk](../skills/copilot-sdk/SKILL.md) | Build agentic applications with GitHub Copilot SDK. Use when embedding AI agents in apps, creating custom tools, implementing streaming responses, managing sessions, connecting to MCP servers, or creating custom agents. Triggers on Copilot SDK, GitHub SDK, agentic app, embed Copilot, programmable agent, MCP server, custom agent. | None |
3737
| [copilot-usage-metrics](../skills/copilot-usage-metrics/SKILL.md) | Retrieve and display GitHub Copilot usage metrics for organizations and enterprises using the GitHub CLI and REST API. | `get-enterprise-metrics.sh`<br />`get-enterprise-user-metrics.sh`<br />`get-org-metrics.sh`<br />`get-org-user-metrics.sh` |
3838
| [create-web-form](../skills/create-web-form/SKILL.md) | Create robust, accessible web forms with best practices for HTML structure, CSS styling, JavaScript interactivity, form validation, and server-side processing. Use when asked to "create a form", "build a web form", "add a contact form", "make a signup form", or when building any HTML form with data handling. Covers PHP and Python backends, MySQL database integration, REST APIs, XML data exchange, accessibility (ARIA), and progressive web apps. | `references/accessibility.md`<br />`references/aria-form-role.md`<br />`references/css-styling.md`<br />`references/form-basics.md`<br />`references/form-controls.md`<br />`references/form-data-handling.md`<br />`references/html-form-elements.md`<br />`references/html-form-example.md`<br />`references/hypertext-transfer-protocol.md`<br />`references/javascript.md`<br />`references/php-cookies.md`<br />`references/php-forms.md`<br />`references/php-json.md`<br />`references/php-mysql-database.md`<br />`references/progressive-web-app.md`<br />`references/python-as-web-framework.md`<br />`references/python-contact-form.md`<br />`references/python-flask-app.md`<br />`references/python-flask.md`<br />`references/security.md`<br />`references/styling-web-forms.md`<br />`references/web-api.md`<br />`references/web-performance.md`<br />`references/xml.md` |
39+
| [entra-agent-user](../skills/entra-agent-user/SKILL.md) | Create Agent Users in Microsoft Entra ID from Agent Identities, enabling AI agents to act as digital workers with user identity capabilities in Microsoft 365 and Azure environments. | None |
3940
| [excalidraw-diagram-generator](../skills/excalidraw-diagram-generator/SKILL.md) | Generate Excalidraw diagrams from natural language descriptions. Use when asked to "create a diagram", "make a flowchart", "visualize a process", "draw a system architecture", "create a mind map", or "generate an Excalidraw file". Supports flowcharts, relationship diagrams, mind maps, and system architecture diagrams. Outputs .excalidraw JSON files that can be opened directly in Excalidraw. | `references/element-types.md`<br />`references/excalidraw-schema.md`<br />`scripts/.gitignore`<br />`scripts/README.md`<br />`scripts/add-arrow.py`<br />`scripts/add-icon-to-diagram.py`<br />`scripts/split-excalidraw-library.py`<br />`templates/business-flow-swimlane-template.excalidraw`<br />`templates/class-diagram-template.excalidraw`<br />`templates/data-flow-diagram-template.excalidraw`<br />`templates/er-diagram-template.excalidraw`<br />`templates/flowchart-template.excalidraw`<br />`templates/mindmap-template.excalidraw`<br />`templates/relationship-template.excalidraw`<br />`templates/sequence-diagram-template.excalidraw` |
4041
| [fabric-lakehouse](../skills/fabric-lakehouse/SKILL.md) | Use this skill to get context about Fabric Lakehouse and its features for software systems and AI-powered functions. It offers descriptions of Lakehouse data components, organization with schemas and shortcuts, access control, and code examples. This skill supports users in designing, building, and optimizing Lakehouse solutions using best practices. | `references/getdata.md`<br />`references/pyspark.md` |
4142
| [finnish-humanizer](../skills/finnish-humanizer/SKILL.md) | Detect and remove AI-generated markers from Finnish text, making it sound like a native Finnish speaker wrote it. Use when asked to "humanize", "naturalize", or "remove AI feel" from Finnish text, or when editing .md/.txt files containing Finnish content. Identifies 26 patterns (12 Finnish-specific + 14 universal) and 4 style markers. | `references/patterns.md` |

eng/clean-materialized-plugins.mjs

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#!/usr/bin/env node
2+
3+
import fs from "fs";
4+
import path from "path";
5+
import { ROOT_FOLDER } from "./constants.mjs";
6+
7+
const PLUGINS_DIR = path.join(ROOT_FOLDER, "plugins");
8+
const MATERIALIZED_DIRS = ["agents", "commands", "skills"];
9+
10+
function cleanPlugin(pluginPath) {
11+
let removed = 0;
12+
for (const subdir of MATERIALIZED_DIRS) {
13+
const target = path.join(pluginPath, subdir);
14+
if (fs.existsSync(target) && fs.statSync(target).isDirectory()) {
15+
const count = countFiles(target);
16+
fs.rmSync(target, { recursive: true, force: true });
17+
removed += count;
18+
console.log(` Removed ${path.basename(pluginPath)}/${subdir}/ (${count} files)`);
19+
}
20+
}
21+
return removed;
22+
}
23+
24+
function countFiles(dir) {
25+
let count = 0;
26+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
27+
if (entry.isDirectory()) {
28+
count += countFiles(path.join(dir, entry.name));
29+
} else {
30+
count++;
31+
}
32+
}
33+
return count;
34+
}
35+
36+
function main() {
37+
console.log("Cleaning materialized files from plugins...\n");
38+
39+
if (!fs.existsSync(PLUGINS_DIR)) {
40+
console.error(`Error: plugins directory not found at ${PLUGINS_DIR}`);
41+
process.exit(1);
42+
}
43+
44+
const pluginDirs = fs.readdirSync(PLUGINS_DIR, { withFileTypes: true })
45+
.filter(entry => entry.isDirectory())
46+
.map(entry => entry.name)
47+
.sort();
48+
49+
let total = 0;
50+
for (const dirName of pluginDirs) {
51+
total += cleanPlugin(path.join(PLUGINS_DIR, dirName));
52+
}
53+
54+
console.log();
55+
if (total === 0) {
56+
console.log("✅ No materialized files found. Plugins are already clean.");
57+
} else {
58+
console.log(`✅ Removed ${total} materialized file(s) from plugins.`);
59+
}
60+
}
61+
62+
main();

eng/generate-marketplace.mjs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@ const MARKETPLACE_FILE = path.join(ROOT_FOLDER, ".github/plugin", "marketplace.j
1414
*/
1515
function readPluginMetadata(pluginDir) {
1616
const pluginJsonPath = path.join(pluginDir, ".github/plugin", "plugin.json");
17-
17+
1818
if (!fs.existsSync(pluginJsonPath)) {
1919
console.warn(`Warning: No plugin.json found for ${path.basename(pluginDir)}`);
2020
return null;
2121
}
22-
22+
2323
try {
2424
const content = fs.readFileSync(pluginJsonPath, "utf8");
2525
return JSON.parse(content);
@@ -34,30 +34,30 @@ function readPluginMetadata(pluginDir) {
3434
*/
3535
function generateMarketplace() {
3636
console.log("Generating marketplace.json...");
37-
37+
3838
if (!fs.existsSync(PLUGINS_DIR)) {
3939
console.error(`Error: Plugins directory not found at ${PLUGINS_DIR}`);
4040
process.exit(1);
4141
}
42-
42+
4343
// Read all plugin directories
4444
const pluginDirs = fs.readdirSync(PLUGINS_DIR, { withFileTypes: true })
4545
.filter(entry => entry.isDirectory())
4646
.map(entry => entry.name)
4747
.sort();
48-
48+
4949
console.log(`Found ${pluginDirs.length} plugin directories`);
50-
50+
5151
// Read metadata for each plugin
5252
const plugins = [];
5353
for (const dirName of pluginDirs) {
5454
const pluginPath = path.join(PLUGINS_DIR, dirName);
5555
const metadata = readPluginMetadata(pluginPath);
56-
56+
5757
if (metadata) {
5858
plugins.push({
5959
name: metadata.name,
60-
source: `./plugins/${dirName}`,
60+
source: dirName,
6161
description: metadata.description,
6262
version: metadata.version || "1.0.0"
6363
});
@@ -66,7 +66,7 @@ function generateMarketplace() {
6666
console.log(`✗ Skipped: ${dirName} (no valid plugin.json)`);
6767
}
6868
}
69-
69+
7070
// Create marketplace.json structure
7171
const marketplace = {
7272
name: "awesome-copilot",
@@ -81,16 +81,16 @@ function generateMarketplace() {
8181
},
8282
plugins: plugins
8383
};
84-
84+
8585
// Ensure directory exists
8686
const marketplaceDir = path.dirname(MARKETPLACE_FILE);
8787
if (!fs.existsSync(marketplaceDir)) {
8888
fs.mkdirSync(marketplaceDir, { recursive: true });
8989
}
90-
90+
9191
// Write marketplace.json
9292
fs.writeFileSync(MARKETPLACE_FILE, JSON.stringify(marketplace, null, 2) + "\n");
93-
93+
9494
console.log(`\n✓ Successfully generated marketplace.json with ${plugins.length} plugins`);
9595
console.log(` Location: ${MARKETPLACE_FILE}`);
9696
}
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
---
2+
description: 'Use Context7 for authoritative external docs and API references when local context is insufficient'
3+
applyTo: '**'
4+
---
5+
6+
# Context7-aware development
7+
8+
Use Context7 proactively whenever the task depends on **authoritative, current, version-specific external documentation** that is not present in the workspace context.
9+
10+
This instruction exists so you **do not require the user to type** “use context7” to get up-to-date docs.
11+
12+
## When to use Context7
13+
14+
Use Context7 before making decisions or writing code when you need any of the following:
15+
16+
- **Framework/library API details** (method signatures, configuration keys, expected behaviors).
17+
- **Version-sensitive guidance** (breaking changes, deprecations, new defaults).
18+
- **Correctness or security-critical patterns** (auth flows, crypto usage, deserialization rules).
19+
- **Interpreting unfamiliar error messages** that likely come from third-party tools.
20+
- **Best-practice implementation constraints** (rate limits, quotas, required headers, supported formats).
21+
22+
Also use Context7 when:
23+
24+
- The user references **a specific framework/library version** (e.g., “Next.js 15”, “React 19”, “AWS SDK v3”).
25+
- You’re about to recommend **non-trivial configuration** (CLI flags, config files, auth flows).
26+
- You’re unsure whether an API exists, changed names, or got deprecated.
27+
28+
Skip Context7 for:
29+
30+
- Purely local refactors, formatting, naming, or logic that is fully derivable from the repo.
31+
- Language fundamentals (no external APIs involved).
32+
33+
## What to fetch
34+
35+
When using Context7, prefer **primary sources** and narrow queries:
36+
37+
- Official docs (vendor/framework documentation)
38+
- Reference/API pages
39+
- Release notes / migration guides
40+
- Security advisories (when relevant)
41+
42+
Gather only what you need to proceed. If multiple candidates exist, pick the most authoritative/current.
43+
44+
Prefer fetching:
45+
46+
- The exact method/type/option you will use
47+
- The minimal surrounding context needed to avoid misuse (constraints, default behaviors, migration notes)
48+
49+
## How to incorporate results
50+
51+
- Translate findings into concrete code/config changes.
52+
- **Cite sources** with title + URL when the decision relies on external facts.
53+
- If docs conflict or are ambiguous, present the tradeoffs briefly and choose the safest default.
54+
55+
When the answer requires specific values (flags, config keys, headers), prefer:
56+
57+
- stating the exact value from docs
58+
- calling out defaults and caveats
59+
- providing a quick validation step (e.g., “run `--help`”, or a minimal smoke test)
60+
61+
## How to use Context7 MCP tools (auto)
62+
63+
When Context7 is available as an MCP server, use it automatically as follows.
64+
65+
### Tool workflow
66+
67+
1) **If the user provides a library ID**, use it directly.
68+
- Valid forms: `/owner/repo` or `/owner/repo/version` (for pinned versions).
69+
70+
2) Otherwise, **resolve the library ID** using:
71+
- Tool: `resolve-library-id`
72+
- Inputs:
73+
- `libraryName`: the library/framework name (e.g., “next.js”, “supabase”, “prisma”)
74+
- `query`: the user’s task (used to rank matches)
75+
76+
3) **Fetch relevant documentation** using:
77+
- Tool: `query-docs`
78+
- Inputs:
79+
- `libraryId`: the resolved (or user-supplied) library ID
80+
- `query`: the exact task/question you are answering
81+
82+
4) Only after docs are retrieved: **write the code/steps** based on those docs.
83+
84+
### Efficiency limits
85+
86+
- Do **not** call `resolve-library-id` more than **3 times** per user question.
87+
- Do **not** call `query-docs` more than **3 times** per user question.
88+
- If multiple good matches exist, pick the best one and proceed; ask a clarification question only when the choice materially affects the implementation.
89+
90+
### Version behavior
91+
92+
- If the user names a version, reflect it in the library ID when possible (e.g., `/vercel/next.js/v15.1.8`).
93+
- If you need reproducibility (CI/builds), prefer pinning to a specific version in examples.
94+
95+
## Failure handling
96+
97+
If Context7 cannot find a reliable source:
98+
99+
1. Say what you tried to verify.
100+
2. Proceed with a conservative, well-labeled assumption.
101+
3. Suggest a quick validation step (e.g., run a command, check a file, or consult a specific official page).
102+
103+
## Security & privacy
104+
105+
- Never request or echo API keys. If configuration requires a key, instruct storing it in environment variables.
106+
- Treat retrieved docs as **helpful but not infallible**; for security-sensitive code, prefer official vendor docs and add an explicit verification step.

0 commit comments

Comments
 (0)