| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- {
- "$schema": "https://json-schema.org/draft/2020-12/schema",
- "$id": "https://sub2api.local/schemas/plugin-manifest-v1.json",
- "title": "Sub2API Plugin Manifest v1",
- "type": "object",
- "additionalProperties": false,
- "required": ["schema_version", "id", "name", "version", "requires", "capabilities", "runtimes", "ui", "files"],
- "properties": {
- "schema_version": { "const": 1 },
- "id": { "type": "string", "maxLength": 160, "pattern": "^[a-z0-9]+([._-][a-z0-9]+)+$" },
- "name": { "type": "string", "minLength": 1, "maxLength": 160 },
- "version": { "type": "string", "pattern": "^v?(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)(-[0-9A-Za-z-]+(\\.[0-9A-Za-z-]+)*)?(\\+[0-9A-Za-z-]+(\\.[0-9A-Za-z-]+)*)?$" },
- "description": { "type": "string" },
- "author": { "type": "string", "maxLength": 160 },
- "requires": {
- "type": "object",
- "additionalProperties": false,
- "required": ["sub2api", "plugin_protocol", "transport_api", "ui_bridge"],
- "properties": {
- "sub2api": { "type": "string", "minLength": 1 },
- "recommended_sub2api_version": { "type": "string" },
- "tested_sub2api_versions": { "type": "array", "items": { "type": "string" }, "uniqueItems": true },
- "plugin_protocol": { "const": 1 },
- "transport_api": { "const": 1 },
- "ui_bridge": { "const": 1 }
- }
- },
- "capabilities": {
- "type": "array",
- "minItems": 1,
- "items": {
- "type": "object",
- "additionalProperties": false,
- "required": ["id", "platform", "account_type"],
- "properties": {
- "id": { "const": "openai.oauth.outbound_transport.v1" },
- "platform": { "const": "openai" },
- "account_type": { "const": "oauth" }
- }
- }
- },
- "runtimes": {
- "type": "object",
- "minProperties": 1,
- "patternProperties": {
- "^[a-z0-9]+-[a-z0-9]+$": {
- "type": "object",
- "additionalProperties": false,
- "required": ["path"],
- "properties": { "path": { "$ref": "#/$defs/safePath" } }
- }
- },
- "additionalProperties": false
- },
- "ui": {
- "type": "object",
- "additionalProperties": false,
- "required": ["entrypoint"],
- "properties": { "entrypoint": { "type": "string", "pattern": "^ui/.+" } }
- },
- "files": {
- "type": "object",
- "minProperties": 2,
- "propertyNames": { "$ref": "#/$defs/safePath" },
- "additionalProperties": { "type": "string", "pattern": "^[a-f0-9]{64}$" }
- }
- },
- "$defs": {
- "safePath": {
- "type": "string",
- "minLength": 1,
- "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*\\\\).+$"
- }
- }
- }
|