mirror of
https://github.com/Heretek-AI/awesome-opencode.git
synced 2026-11-07 10:45:57 -10:00
Entries gain a fixed kind and 1-3 topics (replacing 374 one-off tags as the categorization axis), an OpenCode API compat field (required for plugins), and npm/path for packages and monorepo folders. repo must be a repository root; unknown fields such as install: or repository: are rejected. Cross-entry rules (one entry per repo+path, kind must fit the category, no placeholder owners or mojibake) live in scripts/utils/catalog.js, and validate.js now always loads the whole catalog and fails on unparseable YAML. Adds npm run fmt for canonical formatting and drops the unused glob dependency. Co-Authored-By: Claude Opus 5.5 <[email protected]>
169 lines
5.2 KiB
JSON
169 lines
5.2 KiB
JSON
{
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
"$id": "https://github.com/Heretek-AI/awesome-opencode/data/schema.json",
|
|
"title": "Awesome Opencode Entry",
|
|
"description": "Schema for validating YAML entries in the Heretek-AI/awesome-opencode list. Cross-entry rules (unique repos, kind per category, compat for plugins) live in scripts/utils/catalog.js.",
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 80,
|
|
"description": "Display name of the project or tool"
|
|
},
|
|
"repo": {
|
|
"type": "string",
|
|
"format": "uri",
|
|
"pattern": "^https://((github\\.com|gitlab\\.com|codeberg\\.org|gitee\\.com)/[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+|github\\.com/[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+/discussions/[0-9]+|gist\\.github\\.com/[A-Za-z0-9_-]+/[0-9a-f]+)/?$",
|
|
"description": "Repository root URL (no /tree/ or /blob/ paths, no npm or marketing pages). Gists and GitHub discussions (for guides) are also accepted. Use `path` for a package inside a monorepo."
|
|
},
|
|
"path": {
|
|
"type": "string",
|
|
"pattern": "^(?!/)(?!.*\\.\\.)(?!.*/$)[A-Za-z0-9_.@/-]+$",
|
|
"description": "Subdirectory of `repo` that holds this entry, for monorepos (e.g. packages/my-plugin)"
|
|
},
|
|
"npm": {
|
|
"type": "string",
|
|
"pattern": "^(@[a-z0-9-~][a-z0-9-._~]*/)?[a-z0-9-~][a-z0-9-._~]*$",
|
|
"description": "npm package name, for entries installed from npm. Used for the V2 compatibility check and health checks."
|
|
},
|
|
"homepage": {
|
|
"type": "string",
|
|
"format": "uri",
|
|
"description": "Documentation URL if different from repository"
|
|
},
|
|
"tagline": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 120,
|
|
"description": "Short punchy summary (shown in collapsed view)"
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 1500,
|
|
"description": "Full description of the project (shown when expanded)"
|
|
},
|
|
"kind": {
|
|
"type": "string",
|
|
"enum": [
|
|
"plugin",
|
|
"theme",
|
|
"agent",
|
|
"skill",
|
|
"mcp-server",
|
|
"client",
|
|
"tool",
|
|
"config",
|
|
"guide",
|
|
"fork"
|
|
],
|
|
"description": "What the entry is. plugin: OpenCode plugin package. theme: color theme. agent: agent/subagent configuration. skill: SKILL.md pack. mcp-server: Model Context Protocol server. client: GUI, TUI, web, mobile, editor or chat front-end for OpenCode. tool: CLI, proxy, library or other utility. config: starter config, commands or templates. guide: docs, tutorials or articles. fork: a modified build of OpenCode."
|
|
},
|
|
"also": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"enum": [
|
|
"plugin",
|
|
"theme",
|
|
"agent",
|
|
"skill",
|
|
"mcp-server",
|
|
"client",
|
|
"tool",
|
|
"config",
|
|
"guide",
|
|
"fork"
|
|
]
|
|
},
|
|
"uniqueItems": true,
|
|
"maxItems": 3,
|
|
"description": "Secondary kinds, e.g. a plugin that also ships an MCP server. Cross-listed in the README and site."
|
|
},
|
|
"topics": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"enum": [
|
|
"memory",
|
|
"context",
|
|
"orchestration",
|
|
"workflow",
|
|
"providers",
|
|
"cost",
|
|
"notifications",
|
|
"sessions",
|
|
"code-quality",
|
|
"security",
|
|
"git",
|
|
"remote",
|
|
"web",
|
|
"ui",
|
|
"voice",
|
|
"media",
|
|
"docs",
|
|
"environment",
|
|
"observability",
|
|
"integrations",
|
|
"code-intel",
|
|
"prompting",
|
|
"domain"
|
|
]
|
|
},
|
|
"minItems": 1,
|
|
"maxItems": 3,
|
|
"uniqueItems": true,
|
|
"description": "1-3 use-case topics from a fixed list. The first one is the primary topic used for README grouping."
|
|
},
|
|
"compat": {
|
|
"type": "string",
|
|
"enum": [
|
|
"v2",
|
|
"v1",
|
|
"n/a",
|
|
"unknown"
|
|
],
|
|
"description": "OpenCode API generation. v2: depends on @opencode/* (e.g. @opencode/plugin with Plugin.define). v1: legacy @opencode-ai/* only. n/a: does not use the plugin/SDK API. unknown: not yet verified. Required for plugins; CI verifies it."
|
|
},
|
|
"scope": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"enum": [
|
|
"global",
|
|
"project"
|
|
]
|
|
},
|
|
"minItems": 1,
|
|
"uniqueItems": true,
|
|
"description": "Installation scope: global (~/.config/opencode/) or project (.opencode/). Defaults to [global] if omitted."
|
|
},
|
|
"tags": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Free-form search keywords. Not rendered; use `topics` for categorization."
|
|
},
|
|
"min_version": {
|
|
"type": "string",
|
|
"pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+",
|
|
"description": "Minimum OpenCode version required (semver format, e.g. '2.0.0')"
|
|
},
|
|
"installation": {
|
|
"type": "string",
|
|
"description": "Detailed installation instructions in markdown format"
|
|
}
|
|
},
|
|
"required": [
|
|
"name",
|
|
"repo",
|
|
"tagline",
|
|
"description",
|
|
"kind",
|
|
"topics"
|
|
],
|
|
"additionalProperties": false
|
|
}
|