Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/README.workflows.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,4 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-agentic-workflows) for guideline

| Name | Description | Triggers |
| ---- | ----------- | -------- |
| [Daily Issues Report](../workflows/daily-issues-report.md) | Generates a daily summary of open issues and recent activity as a GitHub issue | N/A |
| [Daily Issues Report](../workflows/daily-issues-report.md) | Generates a daily summary of open issues and recent activity as a GitHub issue | schedule |
11 changes: 2 additions & 9 deletions eng/generate-website-data.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,6 @@ function generateWorkflowsData(gitDates) {
items: workflows,
filters: {
triggers: [],
tags: [],
},
};
}
Expand All @@ -214,7 +213,6 @@ function generateWorkflowsData(gitDates) {
});

const allTriggers = new Set();
const allTags = new Set();

for (const file of workflowFiles) {
const filePath = path.join(WORKFLOWS_DIR, file);
Expand All @@ -226,15 +224,13 @@ function generateWorkflowsData(gitDates) {
.replace(/\\/g, "/");

(metadata.triggers || []).forEach((t) => allTriggers.add(t));
(metadata.tags || []).forEach((t) => allTags.add(t));

const id = path.basename(file, ".md");
workflows.push({
id,
title: metadata.name,
description: metadata.description,
triggers: metadata.triggers || [],
tags: metadata.tags || [],
path: relativePath,
lastUpdated: gitDates.get(relativePath) || null,
});
Expand All @@ -248,7 +244,6 @@ function generateWorkflowsData(gitDates) {
items: sortedWorkflows,
filters: {
triggers: Array.from(allTriggers).sort(),
tags: Array.from(allTags).sort(),
},
};
}
Expand Down Expand Up @@ -682,9 +677,7 @@ function generateSearchIndex(
lastUpdated: workflow.lastUpdated,
searchText: `${workflow.title} ${
workflow.description
} ${workflow.triggers.join(" ")} ${workflow.tags.join(
" "
)}`.toLowerCase(),
} ${workflow.triggers.join(" ")}`.toLowerCase(),
});
}

Expand Down Expand Up @@ -843,7 +836,7 @@ async function main() {
const workflowsData = generateWorkflowsData(gitDates);
const workflows = workflowsData.items;
console.log(
`✓ Generated ${workflows.length} workflows (${workflowsData.filters.triggers.length} triggers, ${workflowsData.filters.tags.length} tags)`
`✓ Generated ${workflows.length} workflows (${workflowsData.filters.triggers.length} triggers)`
);

const instructionsData = generateInstructionsData(gitDates);
Expand Down
11 changes: 8 additions & 3 deletions eng/yaml-parser.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -275,14 +275,19 @@ function parseWorkflowMetadata(filePath) {
return null;
}

// Extract triggers from frontmatter if present
const triggers = frontmatter.triggers || [];
// Extract triggers from the 'on' field (top-level keys)
const onField = frontmatter.on;
const triggers = [];
if (onField && typeof onField === "object") {
triggers.push(...Object.keys(onField));
} else if (typeof onField === "string") {
triggers.push(onField);
}

return {
name: frontmatter.name,
description: frontmatter.description,
triggers,
tags: frontmatter.tags || [],
path: filePath,
};
},
Expand Down
1 change: 1 addition & 0 deletions website/src/env.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/// <reference types="astro/client" />
10 changes: 5 additions & 5 deletions website/src/layouts/BaseLayout.astro
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ interface Props {

const {
title,
description = "Community-driven collection of custom agents, prompts, and instructions for GitHub Copilot",
description = "Community-driven collection of custom agents, instructions, and skills for GitHub Copilot",
activeNav = "",
} = Astro.props;
const base = import.meta.env.BASE_URL;
Expand Down Expand Up @@ -57,10 +57,6 @@ try {
href={`${base}agents/`}
class:list={[{ active: activeNav === "agents" }]}>Agents</a
>
<a
href={`${base}prompts/`}
class:list={[{ active: activeNav === "prompts" }]}>Prompts</a
>
<a
href={`${base}instructions/`}
class:list={[{ active: activeNav === "instructions" }]}
Expand All @@ -74,6 +70,10 @@ try {
href={`${base}hooks/`}
class:list={[{ active: activeNav === "hooks" }]}>Hooks</a
>
<a
href={`${base}workflows/`}
class:list={[{ active: activeNav === "workflows" }]}>Workflows</a
>
<a
href={`${base}plugins/`}
class:list={[{ active: activeNav === "plugins" }]}
Expand Down
20 changes: 10 additions & 10 deletions website/src/pages/index.astro
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ const base = import.meta.env.BASE_URL;
<section class="hero" aria-labelledby="hero-heading">
<div class="container">
<h1 id="hero-heading">Awesome GitHub Copilot</h1>
<p class="hero-subtitle">Community-contributed instructions, prompts, agents, and skills to enhance your GitHub Copilot experience</p>
<p class="hero-subtitle">Community-contributed agents, instructions, and skills to enhance your GitHub Copilot experience</p>
<div class="hero-search">
<label for="global-search" class="sr-only">Search all resources</label>
<input type="text" id="global-search" placeholder="Search all resources..." autocomplete="off" role="combobox" aria-autocomplete="list" aria-expanded="false" aria-controls="search-results">
Expand All @@ -33,14 +33,6 @@ const base = import.meta.env.BASE_URL;
</div>
<div class="card-count" data-count="agents" aria-label="Agent count">-</div>
</a>
<a href={`${base}prompts/`} class="card card-with-count" id="card-prompts">
<div class="card-icon" aria-hidden="true">🎯</div>
<div class="card-content">
<h3>Prompts</h3>
<p>Ready-to-use prompt templates for development tasks</p>
</div>
<div class="card-count" data-count="prompts" aria-label="Prompt count">-</div>
</a>
<a href={`${base}instructions/`} class="card card-with-count" id="card-instructions">
<div class="card-icon" aria-hidden="true">📋</div>
<div class="card-content">
Expand All @@ -65,6 +57,14 @@ const base = import.meta.env.BASE_URL;
</div>
<div class="card-count" data-count="hooks" aria-label="Hook count">-</div>
</a>
<a href={`${base}workflows/`} class="card card-with-count" id="card-workflows">
<div class="card-icon" aria-hidden="true">⚡</div>
<div class="card-content">
<h3>Workflows</h3>
<p>AI-powered automations for GitHub Actions</p>
</div>
<div class="card-count" data-count="workflows" aria-label="Workflow count">-</div>
</a>
<a href={`${base}plugins/`} class="card card-with-count" id="card-plugins">
<div class="card-icon" aria-hidden="true">🔌</div>
<div class="card-content">
Expand Down Expand Up @@ -103,7 +103,7 @@ const base = import.meta.env.BASE_URL;
<div class="step">
<div class="step-number" aria-hidden="true">1</div>
<h3>Browse</h3>
<p>Explore agents, prompts, instructions, and skills</p>
<p>Explore agents, instructions, skills, and plugins</p>
</div>
<div class="step">
<div class="step-number" aria-hidden="true">2</div>
Expand Down
16 changes: 1 addition & 15 deletions website/src/pages/llms.txt.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import type { APIRoute } from "astro";
import agentsData from "../../public/data/agents.json";
import promptsData from "../../public/data/prompts.json";
import instructionsData from "../../public/data/instructions.json";
import skillsData from "../../public/data/skills.json";

Expand All @@ -9,7 +8,6 @@ const GITHUB_RAW_BASE = "https://raw.githubusercontent.com/github/awesome-copilo

export const GET: APIRoute = () => {
const agents = agentsData.items;
const prompts = promptsData.items;
const instructions = instructionsData.items;
const skills = skillsData.items;

Expand All @@ -22,16 +20,14 @@ export const GET: APIRoute = () => {

// Summary blockquote (optional but recommended)
content +=
"> A community-driven collection of custom agents, prompts, instructions, and skills to enhance GitHub Copilot experiences across various domains, languages, and use cases.\n\n";
"> A community-driven collection of custom agents, instructions, and skills to enhance GitHub Copilot experiences across various domains, languages, and use cases.\n\n";

// Add overview section
content += "## Overview\n\n";
content +=
"This repository provides resources to customize and enhance GitHub Copilot:\n\n";
content +=
"- **Agents**: Specialized GitHub Copilot agents that integrate with MCP servers\n";
content +=
"- **Prompts**: Task-specific prompts for code generation and problem-solving\n";
content +=
"- **Instructions**: Coding standards and best practices applied to specific file patterns\n";
content +=
Expand All @@ -47,16 +43,6 @@ export const GET: APIRoute = () => {
}
content += "\n";

// Process Prompts
content += "## Prompts\n\n";
for (const prompt of prompts) {
const description = (prompt.description || "No description available")
.replace(/\s+/g, " ")
.trim();
content += `- [${prompt.title}](${url(prompt.path)}): ${description}\n`;
}
content += "\n";

// Process Instructions
content += "## Instructions\n\n";
for (const instruction of instructions) {
Expand Down
8 changes: 4 additions & 4 deletions website/src/pages/plugins.astro
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ import BaseLayout from '../layouts/BaseLayout.astro';
import Modal from '../components/Modal.astro';
---

<BaseLayout title="Plugins" description="Curated plugins of prompts, agents, and skills for specific workflows" activeNav="plugins">
<BaseLayout title="Plugins" description="Curated plugins of agents, hooks, and skills for specific workflows" activeNav="plugins">
<main id="main-content">
<div class="page-header">
<div class="container">
<h1>🔌 Plugins</h1>
<p>Curated plugins of prompts, agents, and skills for specific workflows</p>
<p>Curated plugins of agents, hooks, and skills for specific workflows</p>
</div>
</div>

Expand All @@ -18,7 +18,7 @@ import Modal from '../components/Modal.astro';
<label for="search-input" class="sr-only">Search plugins</label>
<input type="text" id="search-input" placeholder="Search plugins..." autocomplete="off">
</div>

<div class="filters-bar" id="filters-bar">
<div class="filter-group">
<label for="filter-tag">Tag:</label>
Expand All @@ -32,7 +32,7 @@ import Modal from '../components/Modal.astro';
</div>
<button id="clear-filters" class="btn btn-secondary btn-small">Clear Filters</button>
</div>

<div class="results-count" id="results-count" aria-live="polite"></div>
<div class="resource-list" id="resource-list" role="list">
<div class="loading" aria-live="polite">Loading plugins...</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,26 @@ import BaseLayout from '../layouts/BaseLayout.astro';
import Modal from '../components/Modal.astro';
---

<BaseLayout title="Prompts" description="Ready-to-use prompt templates for development tasks with GitHub Copilot" activeNav="prompts">
<BaseLayout title="Workflows" description="AI-powered repository automations that run coding agents in GitHub Actions" activeNav="workflows">
<main id="main-content">
<div class="page-header">
<div class="container">
<h1>🎯 Prompts</h1>
<p>Ready-to-use prompt templates for development tasks with GitHub Copilot</p>
<h1>⚡ Agentic Workflows</h1>
<p>AI-powered repository automations that run coding agents in GitHub Actions</p>
</div>
</div>

<div class="page-content">
<div class="container">
<div class="search-bar">
<label for="search-input" class="sr-only">Search prompts</label>
<input type="text" id="search-input" placeholder="Search prompts..." autocomplete="off">
<label for="search-input" class="sr-only">Search workflows</label>
<input type="text" id="search-input" placeholder="Search workflows..." autocomplete="off">
</div>

<div class="filters-bar" id="filters-bar">
<div class="filter-group">
<label for="filter-tool">Tool:</label>
<select id="filter-tool" multiple aria-label="Filter by tool"></select>
<label for="filter-trigger">Trigger:</label>
<select id="filter-trigger" multiple aria-label="Filter by trigger"></select>
</div>
<div class="filter-group">
<label for="sort-select">Sort:</label>
Expand All @@ -36,7 +36,7 @@ import Modal from '../components/Modal.astro';

<div class="results-count" id="results-count" aria-live="polite"></div>
<div class="resource-list" id="resource-list" role="list">
<div class="loading" aria-live="polite">Loading prompts...</div>
<div class="loading" aria-live="polite">Loading workflows...</div>
</div>
</div>
</div>
Expand All @@ -45,6 +45,6 @@ import Modal from '../components/Modal.astro';
<Modal />

<script>
import '../scripts/pages/prompts';
import '../scripts/pages/workflows';
</script>
</BaseLayout>
2 changes: 1 addition & 1 deletion website/src/scripts/modal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@ export function setupInstallDropdown(containerId: string): void {
/**
* Open file viewer modal
* @param filePath - Path to the file
* @param type - Resource type (agent, prompt, instruction, etc.)
* @param type - Resource type (agent, instruction, etc.)
* @param updateUrl - Whether to update the URL hash (default: true)
* @param trigger - The element that triggered the modal (for focus return)
*/
Expand Down
2 changes: 1 addition & 1 deletion website/src/scripts/pages/agents.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* Agents page functionality
*/
import { createChoices, getChoicesValues, type Choices } from '../choices';
import { FuzzySearch, SearchItem } from '../search';
import { FuzzySearch, type SearchItem } from '../search';
import { fetchData, debounce, escapeHtml, getGitHubUrl, getInstallDropdownHtml, setupDropdownCloseHandlers, getActionButtonsHtml, setupActionHandlers, getLastUpdatedHtml } from '../utils';
import { setupModal, openFileModal } from '../modal';

Expand Down
2 changes: 1 addition & 1 deletion website/src/scripts/pages/hooks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* Hooks page functionality
*/
import { createChoices, getChoicesValues, type Choices } from "../choices";
import { FuzzySearch, SearchItem } from "../search";
import { FuzzySearch, type SearchItem } from "../search";
import {
fetchData,
debounce,
Expand Down
4 changes: 2 additions & 2 deletions website/src/scripts/pages/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@ import { setupModal, openFileModal } from '../modal';
interface Manifest {
counts: {
agents: number;
prompts: number;
instructions: number;
skills: number;
hooks: number;
workflows: number;
plugins: number;
tools: number;
};
Expand All @@ -36,7 +36,7 @@ export async function initHomepage(): Promise<void> {
const manifest = await fetchData<Manifest>('manifest.json');
if (manifest && manifest.counts) {
// Populate counts in cards
const countKeys = ['agents', 'prompts', 'instructions', 'skills', 'hooks', 'plugins', 'tools'] as const;
const countKeys = ['agents', 'instructions', 'skills', 'hooks', 'workflows', 'plugins', 'tools'] as const;
countKeys.forEach(key => {
const countEl = document.querySelector(`.card-count[data-count="${key}"]`);
if (countEl && manifest.counts[key] !== undefined) {
Expand Down
2 changes: 1 addition & 1 deletion website/src/scripts/pages/instructions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* Instructions page functionality
*/
import { createChoices, getChoicesValues, type Choices } from '../choices';
import { FuzzySearch, SearchItem } from '../search';
import { FuzzySearch, type SearchItem } from '../search';
import { fetchData, debounce, escapeHtml, getGitHubUrl, getInstallDropdownHtml, setupDropdownCloseHandlers, getActionButtonsHtml, setupActionHandlers, getLastUpdatedHtml } from '../utils';
import { setupModal, openFileModal } from '../modal';

Expand Down
2 changes: 1 addition & 1 deletion website/src/scripts/pages/plugins.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* Plugins page functionality
*/
import { createChoices, getChoicesValues, type Choices } from '../choices';
import { FuzzySearch, SearchItem } from '../search';
import { FuzzySearch, type SearchItem } from '../search';
import { fetchData, debounce, escapeHtml, getGitHubUrl } from '../utils';
import { setupModal, openFileModal } from '../modal';

Expand Down
Loading