Files
awesome-copilot/.schemas/cookbook.schema.json
Aaron Powell a998c2d38c feat: support external recipes in cookbook (#831)
* feat(schema): add external recipe fields to cookbook schema

Add optional external, url, and author fields to the recipe schema
in cookbook.schema.json. When external is true, url is required via
conditional validation. Author supports name (required) and url
(optional) for attribution.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* feat(data): support external recipes in data generator

- External recipes (external: true) skip local file validation
- Validate URL format for external recipes
- Pass through external, url, and author fields to output JSON
- Add per-recipe languages array: derived from resolved variant keys
  for local recipes, and from tags matching known language IDs for
  external recipes
- Collect language IDs in a first pass before processing recipes

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* feat(website): render external recipe cards on cookbook page

- Extend Recipe interface with external, url, author, and languages
- Render external recipes with Community badge, author attribution,
  and View on GitHub link instead of View Recipe/View Example buttons
- Language filter uses per-recipe languages array uniformly
- Remove Nerd Font icons from select dropdown options (native selects
  cannot render custom web fonts)
- Add CSS for external recipe cards (dashed border, badge, author)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* feat(cookbook): add community samples section with first external recipe

Add a Community Samples cookbook section to cookbook.yml with the
Node.js Agentic Issue Resolver as the first external recipe entry,
linking to https://github.com/Impesud/nodejs-copilot-issue-resolver.

Resolves the use case from PR #613 for supporting external samples.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* feat(cookbook): add Copilot SDK Web App to community samples

Add aaronpowell/copilot-sdk-web-app — a full-stack chat app built with
the GitHub Copilot SDK, .NET Aspire, and React.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-03-02 19:36:10 +11:00

133 lines
4.4 KiB
JSON

{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Cookbook Manifest",
"description": "Schema for cookbook.yml manifest defining cookbooks and recipes",
"type": "object",
"required": ["cookbooks"],
"properties": {
"cookbooks": {
"type": "array",
"description": "List of cookbooks",
"items": {
"type": "object",
"required": ["id", "name", "description", "path", "languages", "recipes"],
"properties": {
"id": {
"type": "string",
"description": "Unique identifier for the cookbook",
"pattern": "^[a-z0-9-]+$"
},
"name": {
"type": "string",
"description": "Display name for the cookbook"
},
"description": {
"type": "string",
"description": "Brief description of the cookbook"
},
"path": {
"type": "string",
"description": "Relative path to the cookbook folder"
},
"featured": {
"type": "boolean",
"description": "Whether this cookbook should be featured",
"default": false
},
"languages": {
"type": "array",
"description": "Programming languages supported by this cookbook",
"items": {
"type": "object",
"required": ["id", "name"],
"properties": {
"id": {
"type": "string",
"description": "Language identifier (folder name)",
"pattern": "^[a-z0-9-]+$"
},
"name": {
"type": "string",
"description": "Display name for the language"
},
"icon": {
"type": "string",
"description": "Emoji icon for the language"
},
"extension": {
"type": "string",
"description": "File extension for runnable examples",
"pattern": "^\\.[a-z]+$"
}
}
}
},
"recipes": {
"type": "array",
"description": "List of recipes in this cookbook",
"items": {
"type": "object",
"required": ["id", "name", "description"],
"properties": {
"id": {
"type": "string",
"description": "Recipe identifier (matches markdown filename without extension)",
"pattern": "^[a-z0-9-]+$"
},
"name": {
"type": "string",
"description": "Display name for the recipe"
},
"description": {
"type": "string",
"description": "Brief description of what the recipe covers"
},
"tags": {
"type": "array",
"description": "Tags for filtering and categorization",
"items": {
"type": "string"
}
},
"external": {
"type": "boolean",
"description": "Whether this recipe links to an external repository",
"default": false
},
"url": {
"type": "string",
"description": "URL to the external repository or project (required when external is true)",
"format": "uri"
},
"author": {
"type": "object",
"description": "Author information for external recipes",
"required": ["name"],
"properties": {
"name": {
"type": "string",
"description": "Author display name or GitHub username"
},
"url": {
"type": "string",
"description": "Author profile URL",
"format": "uri"
}
}
}
},
"if": {
"properties": { "external": { "const": true } },
"required": ["external"]
},
"then": {
"required": ["url"]
}
}
}
}
}
}
}
}