verstak-sdk/schemas/manifest.json

428 lines
11 KiB
JSON

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://git.mirv.top/verstak/verstak-sdk/schemas/manifest.json",
"title": "Verstak Plugin Manifest",
"description": "Schema for Verstak plugin.json manifest files",
"type": "object",
"required": [
"schemaVersion",
"id",
"name",
"version",
"apiVersion",
"provides",
"permissions"
],
"properties": {
"schemaVersion": {
"type": "integer",
"description": "Schema version for the manifest format",
"enum": [1]
},
"id": {
"type": "string",
"description": "Unique plugin identifier (e.g. 'official.notes')",
"pattern": "^[a-zA-Z][a-zA-Z0-9.-]*$"
},
"name": {
"type": "string",
"description": "Human-readable plugin name"
},
"version": {
"type": "string",
"description": "Plugin semantic version",
"pattern": "^\\d+\\.\\d+\\.\\d+(-[a-zA-Z0-9.]+)?$"
},
"apiVersion": {
"type": "string",
"description": "Verstak Platform API version this plugin targets",
"pattern": "^\\d+$"
},
"description": {
"type": "string",
"description": "Brief description of the plugin's purpose"
},
"source": {
"type": "string",
"description": "Plugin source classification",
"enum": ["official", "local", "third-party"]
},
"icon": {
"type": "string",
"description": "Path to plugin icon (relative to plugin root)"
},
"provides": {
"type": "array",
"description": "Capabilities this plugin provides",
"items": {
"type": "string"
},
"minItems": 1
},
"requires": {
"type": "array",
"description": "Required capabilities — plugin cannot load without these",
"items": {
"type": "string"
},
"default": []
},
"optionalRequires": {
"type": "array",
"description": "Optional capabilities — plugin degrades gracefully without these",
"items": {
"type": "string"
},
"default": []
},
"permissions": {
"type": "array",
"description": "Runtime permissions requested by the plugin",
"items": {
"type": "string",
"enum": [
"vault.read",
"vault.write",
"vault.watch",
"files.read",
"files.write",
"files.delete",
"workbench.open",
"storage.namespace",
"storage.migrations",
"events.publish",
"events.subscribe",
"ui.register",
"commands.register",
"network.local",
"network.remote",
"process.spawn",
"secrets.read",
"secrets.write",
"sync.participate"
]
},
"minItems": 1
},
"frontend": {
"type": "object",
"description": "Frontend bundle configuration",
"properties": {
"entry": {
"type": "string",
"description": "Path to the frontend entry JavaScript file"
},
"style": {
"type": "string",
"description": "Path to the frontend stylesheet"
}
},
"required": ["entry"]
},
"backend": {
"type": "object",
"description": "Backend sidecar configuration",
"properties": {
"type": {
"type": "string",
"enum": ["sidecar"],
"description": "Backend type (only 'sidecar' supported)"
},
"entry": {
"type": "object",
"description": "Platform-specific binaries",
"patternProperties": {
"^(linux|windows|darwin)-(amd64|arm64)$": {
"type": "string",
"description": "Path to the binary for this platform"
}
},
"minProperties": 1
},
"healthCheck": {
"type": "object",
"description": "Sidecar health check configuration",
"properties": {
"type": {
"type": "string",
"enum": ["rpc", "stdio", "tcp"],
"default": "rpc"
},
"timeout": {
"type": "integer",
"description": "Health check timeout in milliseconds",
"default": 5000
}
}
}
},
"required": ["type", "entry"]
},
"migrations": {
"type": "object",
"description": "Database migration configuration",
"properties": {
"path": {
"type": "string",
"description": "Path to migrations directory"
}
}
},
"contributes": {
"type": "object",
"description": "UI and action contributions",
"properties": {
"views": {
"type": "array",
"items": {
"$ref": "#/$defs/ContributionView"
}
},
"commands": {
"type": "array",
"items": {
"$ref": "#/$defs/ContributionCommand"
}
},
"settingsPanels": {
"type": "array",
"items": {
"$ref": "#/$defs/ContributionSettingsPanel"
}
},
"sidebarItems": {
"type": "array",
"items": {
"$ref": "#/$defs/ContributionSidebarItem"
}
},
"fileActions": {
"type": "array",
"items": {
"$ref": "#/$defs/ContributionAction"
}
},
"noteActions": {
"type": "array",
"items": {
"$ref": "#/$defs/ContributionAction"
}
},
"contextMenuEntries": {
"type": "array",
"items": {
"$ref": "#/$defs/ContributionContextMenuEntry"
}
},
"searchProviders": {
"type": "array",
"items": {
"$ref": "#/$defs/ContributionSearchProvider"
}
},
"activityProviders": {
"type": "array",
"items": {
"$ref": "#/$defs/ContributionActivityProvider"
}
},
"statusBarItems": {
"type": "array",
"items": {
"$ref": "#/$defs/ContributionStatusBarItem"
}
},
"openProviders": {
"type": "array",
"items": {
"$ref": "#/$defs/ContributionOpenProvider"
}
},
"workspaceItems": {
"type": "array",
"items": {
"$ref": "#/$defs/ContributionWorkspaceItem"
}
}
}
},
"sync": {
"type": "object",
"description": "Sync configuration — what data this plugin allows syncing",
"properties": {
"namespaces": {
"type": "array",
"description": "Storage namespaces allowed for sync",
"items": {
"type": "string"
}
},
"participate": {
"type": "boolean",
"description": "Whether this plugin participates in sync at all",
"default": false
}
}
}
},
"$defs": {
"ContributionView": {
"type": "object",
"properties": {
"id": { "type": "string" },
"title": { "type": "string" },
"icon": { "type": "string" },
"component": { "type": "string" }
},
"required": ["id", "component"]
},
"ContributionCommand": {
"type": "object",
"properties": {
"id": { "type": "string" },
"title": { "type": "string" },
"keybinding": { "type": "string" },
"icon": { "type": "string" },
"handler": { "type": "string" }
},
"required": ["id", "title"]
},
"ContributionSettingsPanel": {
"type": "object",
"properties": {
"id": { "type": "string" },
"title": { "type": "string" },
"component": { "type": "string" },
"icon": { "type": "string" }
},
"required": ["id", "title", "component"]
},
"ContributionSidebarItem": {
"type": "object",
"properties": {
"id": { "type": "string" },
"title": { "type": "string" },
"icon": { "type": "string" },
"view": { "type": "string" },
"position": {
"type": "integer",
"description": "Sort order (lower = higher)"
}
},
"required": ["id", "title", "view"]
},
"ContributionAction": {
"type": "object",
"properties": {
"id": { "type": "string" },
"label": { "type": "string" },
"icon": { "type": "string" },
"capability": {
"type": "string",
"description": "Required capability for this action to appear"
},
"handler": { "type": "string" }
},
"required": ["id", "label"]
},
"ContributionContextMenuEntry": {
"type": "object",
"properties": {
"id": { "type": "string" },
"label": { "type": "string" },
"context": {
"type": "string",
"enum": ["file", "note", "case", "folder"]
},
"group": { "type": "string" },
"capability": { "type": "string" },
"handler": { "type": "string" }
},
"required": ["id", "label", "context"]
},
"ContributionSearchProvider": {
"type": "object",
"properties": {
"id": { "type": "string" },
"label": { "type": "string" },
"handler": { "type": "string" }
},
"required": ["id", "label", "handler"]
},
"ContributionActivityProvider": {
"type": "object",
"properties": {
"id": { "type": "string" },
"events": {
"type": "array",
"items": { "type": "string" }
},
"handler": { "type": "string" }
},
"required": ["id", "handler"]
},
"ContributionStatusBarItem": {
"type": "object",
"properties": {
"id": { "type": "string" },
"label": { "type": "string" },
"position": {
"type": "string",
"enum": ["left", "right"]
},
"handler": { "type": "string" }
},
"required": ["id", "label"]
},
"OpenProviderSupport": {
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": ["vault-file"]
},
"extensions": {
"type": "array",
"items": { "type": "string" }
},
"mime": {
"type": "array",
"items": { "type": "string" }
},
"contexts": {
"type": "array",
"items": { "type": "string" }
}
},
"required": ["kind"]
},
"ContributionOpenProvider": {
"type": "object",
"properties": {
"id": { "type": "string" },
"title": { "type": "string" },
"priority": { "type": "integer" },
"component": { "type": "string" },
"supports": {
"type": "array",
"items": {
"$ref": "#/$defs/OpenProviderSupport"
},
"minItems": 1
}
},
"required": ["id", "title", "component", "supports"]
},
"ContributionWorkspaceItem": {
"type": "object",
"properties": {
"id": { "type": "string" },
"title": { "type": "string" },
"icon": { "type": "string" },
"component": { "type": "string" }
},
"required": ["id", "title", "component"]
}
}
}