mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-10-10 13:51:45 +00:00
Adds a hardcoded process:transport-owner tier so the terminal can own its WebSocket server and ssh2 clients, which cannot cross the worker boundary.
241 lines
6.7 KiB
JSON
241 lines
6.7 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "https://termix.site/schemas/plugin-manifest.schema.json",
|
|
"title": "Termix Plugin Manifest",
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"id",
|
|
"name",
|
|
"version",
|
|
"description",
|
|
"author",
|
|
"license",
|
|
"engine",
|
|
"category",
|
|
"capabilities",
|
|
"permissions",
|
|
"sidecars"
|
|
],
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"pattern": "^[a-z0-9-]+$",
|
|
"description": "Unique plugin id, lowercase alphanumeric and hyphens only."
|
|
},
|
|
"name": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"version": {
|
|
"type": "string",
|
|
"pattern": "^\\d+\\.\\d+\\.\\d+(-[0-9A-Za-z-.]+)?(\\+[0-9A-Za-z-.]+)?$",
|
|
"description": "Semver version string."
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"author": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["name"],
|
|
"properties": {
|
|
"name": { "type": "string", "minLength": 1 },
|
|
"url": { "type": "string", "format": "uri" }
|
|
}
|
|
},
|
|
"license": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"repository": {
|
|
"type": "string",
|
|
"format": "uri"
|
|
},
|
|
"category": {
|
|
"type": "string",
|
|
"enum": [
|
|
"Terminal",
|
|
"Files & Transfer",
|
|
"Infrastructure",
|
|
"Monitoring",
|
|
"Networking",
|
|
"Access & Security",
|
|
"Productivity"
|
|
],
|
|
"description": "Store category used for browsing/filtering. Must match one of the categories the store UI filters by."
|
|
},
|
|
"icon": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"description": "Either a Lucide icon name (same convention as contributes.tabs[].icon) or a relative path to an icon.svg shipped in the plugin package root. If both a Lucide name and an icon.svg are present, the registry-index build should prefer icon.svg."
|
|
},
|
|
"engine": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["termix", "api"],
|
|
"properties": {
|
|
"termix": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"description": "Informational-only Termix version range this plugin targets. Not mechanically enforced."
|
|
},
|
|
"api": {
|
|
"type": "string",
|
|
"pattern": "^[0-9]+$",
|
|
"description": "Plugin SDK major version, as a string. The real compatibility gate."
|
|
}
|
|
}
|
|
},
|
|
"capabilities": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["backend", "frontend", "electron", "platforms"],
|
|
"properties": {
|
|
"backend": { "type": "boolean" },
|
|
"frontend": { "type": "boolean" },
|
|
"electron": { "type": "boolean" },
|
|
"platforms": {
|
|
"type": "array",
|
|
"items": { "type": "string", "minLength": 1 }
|
|
}
|
|
}
|
|
},
|
|
"permissions": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"enum": [
|
|
"hosts.read",
|
|
"hosts.write",
|
|
"credentials.use",
|
|
"ssh.exec",
|
|
"ssh.sftp",
|
|
"storage.own",
|
|
"storage.secrets",
|
|
"network.outbound",
|
|
"events.read",
|
|
"notify.send",
|
|
"users.read",
|
|
"process.sidecar",
|
|
"process:transport-owner",
|
|
"ui.tab",
|
|
"ui.rail",
|
|
"ui.card",
|
|
"ui.settings",
|
|
"ui.palette"
|
|
]
|
|
}
|
|
},
|
|
"contributes": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"tabs": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["id", "titleKey", "icon", "openFrom"],
|
|
"properties": {
|
|
"id": { "type": "string", "minLength": 1 },
|
|
"titleKey": { "type": "string", "minLength": 1 },
|
|
"icon": { "type": "string", "minLength": 1 },
|
|
"openFrom": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"enum": ["rail", "host-context-menu", "palette"]
|
|
},
|
|
"minItems": 1
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"hostCapability": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["key", "labelKey", "editorTab"],
|
|
"properties": {
|
|
"key": { "type": "string", "minLength": 1 },
|
|
"labelKey": { "type": "string", "minLength": 1 },
|
|
"editorTab": { "type": "string", "minLength": 1 }
|
|
}
|
|
},
|
|
"permissionGroup": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["group", "permissions"],
|
|
"properties": {
|
|
"group": { "type": "string", "minLength": 1 },
|
|
"permissions": {
|
|
"type": "array",
|
|
"items": { "type": "string", "minLength": 1 },
|
|
"minItems": 1
|
|
},
|
|
"defaultForRole": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "array",
|
|
"items": { "type": "string", "minLength": 1 }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"settingsPanel": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["titleKey"],
|
|
"properties": {
|
|
"titleKey": { "type": "string", "minLength": 1 }
|
|
}
|
|
},
|
|
"dashboardCards": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["id", "titleKey"],
|
|
"properties": {
|
|
"id": { "type": "string", "minLength": 1 },
|
|
"titleKey": { "type": "string", "minLength": 1 }
|
|
}
|
|
}
|
|
},
|
|
"apiPrefix": {
|
|
"type": "string",
|
|
"pattern": "^[a-z0-9-]+$",
|
|
"description": "Mounted at /plugin-api/<id>/<apiPrefix>/*."
|
|
}
|
|
}
|
|
},
|
|
"dependencies": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"plugins": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"description": "Semver range string."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"sidecars": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["id", "binary"],
|
|
"properties": {
|
|
"id": { "type": "string", "minLength": 1 },
|
|
"binary": { "type": "string", "minLength": 1 }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|