Skip to content

Commit a0c26e1

Browse files
authored
Merge branch 'staged' into add-entra-agent-user-skill
2 parents cc2d5ac + 63faa5b commit a0c26e1

195 files changed

Lines changed: 763 additions & 33511 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.

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

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)