{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://browser.local/schemas/game-plugin.manifest.schema.json", "title": "GamePluginManifest", "type": "object", "required": ["id", "name", "version", "kind", "server", "capabilities", "permissions", "productionLifecycle"], "additionalProperties": false, "properties": { "$schema": { "type": "string" }, "id": { "type": "string", "pattern": "^game\\.[a-z0-9][a-z0-9._-]*$" }, "name": { "type": "string", "minLength": 1, "maxLength": 80 }, "description": { "type": "string", "minLength": 1, "maxLength": 240 }, "version": { "type": "string", "minLength": 1, "maxLength": 40 }, "kind": { "const": "game-plugin" }, "tags": { "type": "array", "items": { "type": "string", "pattern": "^[a-z0-9][a-z0-9._-]*$" }, "uniqueItems": true, "maxItems": 8 }, "server": { "type": "object", "required": ["type", "displayName", "createFormSchema"], "additionalProperties": false, "properties": { "type": { "type": "string", "pattern": "^[a-z0-9][a-z0-9._-]*$", "maxLength": 80 }, "displayName": { "type": "string", "minLength": 1, "maxLength": 80 }, "supportedOS": { "type": "array", "items": { "enum": ["windows", "linux", "darwin"] } }, "createFormSchema": { "$ref": "#/$defs/relativeJsonRef" }, "createFields": { "type": "array", "maxItems": 32, "items": { "$ref": "#/$defs/pluginCreateField" } } } }, "bridge": { "type": "object", "required": ["actions"], "additionalProperties": false, "properties": { "actions": { "type": "array", "items": { "$ref": "#/$defs/bridgeAction" }, "uniqueItems": true, "minItems": 1 } } }, "gameClientBridge": { "$ref": "#/$defs/gameClientBridgeManifest" }, "capabilities": { "type": "array", "items": { "$ref": "#/$defs/runCapability" }, "uniqueItems": true }, "permissions": { "type": "array", "items": { "$ref": "#/$defs/pluginPermission" }, "uniqueItems": true }, "remoteAccess": { "type": "object", "required": ["methods"], "additionalProperties": false, "properties": { "methods": { "type": "array", "items": { "$ref": "#/$defs/remoteAccessMethod" }, "uniqueItems": true, "minItems": 1 }, "runCapabilities": { "type": "array", "items": { "$ref": "#/$defs/runCapability" }, "uniqueItems": true }, "databaseEngines": { "type": "array", "items": { "$ref": "#/$defs/remoteDatabaseEngine" }, "uniqueItems": true }, "rcon": { "type": "boolean" }, "logTransfer": { "type": "boolean" } } }, "runtimeProfiles": { "type": "object", "additionalProperties": false, "properties": { "discovery": { "type": "array", "items": { "$ref": "#/$defs/runtimeDiscoveryProbe" }, "uniqueItems": true }, "lifecycleProfiles": { "type": "array", "items": { "$ref": "#/$defs/runtimeLifecycleProfile" }, "uniqueItems": true }, "dependencyProbes": { "type": "array", "items": { "$ref": "#/$defs/runtimeDependencyProbe" }, "uniqueItems": true }, "installPlans": { "type": "array", "items": { "$ref": "#/$defs/runtimeInstallPlan" }, "uniqueItems": true }, "serverDeployments": { "type": "array", "items": { "$ref": "#/$defs/runtimeServerDeploymentProfile" }, "uniqueItems": true, "maxItems": 8 }, "logSources": { "type": "array", "items": { "$ref": "#/$defs/runtimeLogSource" }, "uniqueItems": true }, "logEvents": { "type": "array", "items": { "$ref": "#/$defs/runtimeLogEvent" }, "uniqueItems": true, "maxItems": 128 }, "transportProfiles": { "type": "array", "items": { "$ref": "#/$defs/runtimeTransportProfile" }, "uniqueItems": true }, "clientManagers": { "type": "array", "items": { "$ref": "#/$defs/runtimeClientManagerProfile" }, "uniqueItems": true }, "dllExtensions": { "type": "array", "items": { "$ref": "#/$defs/runtimeDLLExtensionProfile" }, "uniqueItems": true, "maxItems": 16 } } }, "actions": { "type": "object", "required": ["install", "start", "stop"], "additionalProperties": false, "properties": { "install": { "$ref": "#/$defs/relativeJsonRef" }, "start": { "$ref": "#/$defs/relativeJsonRef" }, "stop": { "$ref": "#/$defs/relativeJsonRef" }, "restart": { "$ref": "#/$defs/relativeJsonRef" }, "status": { "$ref": "#/$defs/relativeJsonRef" } } }, "assetFiles": { "type": "array", "items": { "$ref": "#/$defs/pluginAssetFile" }, "uniqueItems": true, "maxItems": 64 }, "productionLifecycle": { "type": "object", "required": ["operations", "dependencyPolicy"], "additionalProperties": false, "properties": { "operations": { "type": "array", "items": { "$ref": "#/$defs/productionLifecycleOperation" }, "uniqueItems": true, "minItems": 1 }, "dependencyPolicy": { "enum": ["required", "optional"] } } }, "pages": { "type": "array", "items": { "type": "object", "required": ["key", "title", "path", "bundleKey", "bundleVersion", "bundleIntegritySha256"], "additionalProperties": false, "properties": { "key": { "type": "string", "pattern": "^[a-z0-9][a-z0-9-]*$" }, "title": { "type": "string", "minLength": 1, "maxLength": 40 }, "path": { "type": "string", "pattern": "^/[a-z0-9_./-]*$" }, "bundleKey": { "type": "string", "pattern": "^[a-z0-9][a-z0-9._-]{0,79}$" }, "bundleVersion": { "type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,79}$" }, "bundleIntegritySha256": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" }, "permissions": { "type": "array", "items": { "$ref": "#/$defs/pluginPermission" }, "uniqueItems": true }, "bridgeActions": { "type": "array", "items": { "$ref": "#/$defs/bridgeAction" }, "uniqueItems": true }, "featureKeys": { "type": "array", "items": { "type": "string" }, "uniqueItems": true } } } }, "fileWorkspace": { "type": "object", "required": ["defaultDirectoryKey", "directories", "files", "configFields"], "additionalProperties": false, "properties": { "defaultDirectoryKey": { "$ref": "#/$defs/logicalKey" }, "directories": { "type": "array", "items": { "$ref": "#/$defs/pluginLogicalDirectory" } }, "files": { "type": "array", "items": { "$ref": "#/$defs/pluginLogicalFile" } }, "configFields": { "type": "array", "items": { "$ref": "#/$defs/pluginConfigField" } } } }, "ai": { "type": "object", "required": ["mediation", "configWritePolicy"], "additionalProperties": false, "properties": { "purposes": { "type": "array", "items": { "$ref": "#/$defs/aiPurpose" }, "uniqueItems": true }, "mediation": { "const": "platform" }, "configWritePolicy": { "const": "review-required" } } } }, "$defs": { "pluginLogicalDirectory": { "type": "object", "required": ["key", "label", "scope"], "additionalProperties": false, "properties": { "key": { "$ref": "#/$defs/logicalKey" }, "label": { "type": "string", "minLength": 1, "maxLength": 60 }, "scope": { "enum": ["config", "logs"] } } }, "pluginLogicalFile": { "type": "object", "required": ["key", "directoryKey", "label", "kind"], "additionalProperties": false, "properties": { "key": { "$ref": "#/$defs/logicalKey" }, "directoryKey": { "$ref": "#/$defs/logicalKey" }, "label": { "type": "string", "minLength": 1, "maxLength": 80 }, "kind": { "enum": ["config", "log"] }, "streamKey": { "$ref": "#/$defs/logicalKey" }, "editable": { "type": "boolean" } } }, "pluginConfigField": { "type": "object", "required": ["key", "fileKey", "configKey", "label", "description", "control", "restartImpact"], "additionalProperties": false, "properties": { "key": { "$ref": "#/$defs/logicalKey" }, "fileKey": { "$ref": "#/$defs/logicalKey" }, "configKey": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9_.-]*$", "maxLength": 120 }, "label": { "type": "string", "minLength": 1, "maxLength": 80 }, "description": { "type": "string", "minLength": 1, "maxLength": 240 }, "control": { "enum": ["text", "number", "boolean", "port"] }, "minimum": { "type": "integer", "minimum": 0, "maximum": 65535 }, "maximum": { "type": "integer", "minimum": 0, "maximum": 65535 }, "defaultValue": { "type": "string", "maxLength": 120 }, "restartImpact": { "enum": ["none", "restart-required"] } } }, "pluginAssetFile": { "type": "object", "required": ["path"], "additionalProperties": false, "properties": { "path": { "$ref": "#/$defs/relativePathRef" }, "mode": { "type": "integer", "enum": [384, 448] } } }, "pluginCreateField": { "type": "object", "required": ["key", "label", "type"], "additionalProperties": false, "properties": { "key": { "type": "string", "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "maxLength": 80 }, "label": { "type": "string", "minLength": 1, "maxLength": 60 }, "type": { "enum": ["text", "number", "boolean", "select", "port"] }, "required": { "type": "boolean" }, "defaultValue": { "type": "string", "maxLength": 256 }, "options": { "type": "array", "maxItems": 32, "uniqueItems": true, "items": { "type": "string", "minLength": 1, "maxLength": 120 } }, "configKey": { "type": "string", "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "maxLength": 80 } } }, "gameClientBridgeManifest": { "type": "object", "required": ["commands", "snapshots", "commandRetentionSeconds", "maxCommands"], "additionalProperties": false, "properties": { "commands": { "type": "array", "items": { "$ref": "#/$defs/gameClientBridgeCommand" }, "maxItems": 128 }, "snapshots": { "type": "array", "items": { "$ref": "#/$defs/gameClientBridgeSnapshot" }, "maxItems": 128 }, "queryTemplates": { "type": "array", "items": { "$ref": "#/$defs/gameClientBridgeQueryTemplate" }, "maxItems": 128 }, "logProjections": { "type": "array", "items": { "$ref": "#/$defs/gameClientBridgeLogProjection" }, "maxItems": 128 }, "lifecycleProjections": { "type": "array", "items": { "$ref": "#/$defs/gameClientBridgeLifecycleProjection" }, "maxItems": 64 }, "dataPacks": { "type": "array", "items": { "$ref": "#/$defs/gameClientBridgeDataPack" }, "maxItems": 64 }, "commandRetentionSeconds": { "type": "integer", "minimum": 1, "maximum": 31536000 }, "maxCommands": { "type": "integer", "minimum": 1, "maximum": 100000 }, "pages": { "type": "array", "items": { "$ref": "#/$defs/gameClientBridgePageContract" }, "maxItems": 64 }, "features": { "type": "array", "items": { "$ref": "#/$defs/gameClientBridgeFeature" }, "maxItems": 128 }, "companion": { "$ref": "#/$defs/gameClientBridgeCompanion" } } }, "gameClientBridgeCompanion": { "type": "object", "required": ["profileKey", "configTemplateKey", "configSchemaRef", "configFormat", "platformBaseUrlSource", "registrationProof", "proofMaterialSource", "proofMaterialEnv", "sessionMode", "tlsPolicy", "heartbeatIntervalSeconds", "commandPollIntervalSeconds", "requestTimeoutSeconds"], "additionalProperties": false, "properties": { "profileKey": { "$ref": "#/$defs/logicalKey" }, "configTemplateKey": { "$ref": "#/$defs/logicalKey" }, "configSchemaRef": { "$ref": "#/$defs/relativeJsonRef" }, "configFormat": { "const": "yaml" }, "platformBaseUrlSource": { "const": "run-control" }, "registrationProof": { "const": "hmac-sha256" }, "proofMaterialSource": { "const": "component-package" }, "proofMaterialEnv": { "type": "string", "pattern": "^[A-Z][A-Z0-9_]{2,63}$" }, "sessionMode": { "const": "component-session" }, "tlsPolicy": { "const": "verify-system-roots" }, "heartbeatIntervalSeconds": { "type": "integer", "minimum": 5, "maximum": 300 }, "commandPollIntervalSeconds": { "type": "integer", "minimum": 1, "maximum": 60 }, "requestTimeoutSeconds": { "type": "integer", "minimum": 1, "maximum": 60 } } }, "gameClientBridgeCommand": { "type": "object", "required": ["type", "title", "permission", "payloadSchemaRef", "timeoutSeconds", "maxPayloadBytes"], "additionalProperties": false, "properties": { "type": { "type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$" }, "title": { "type": "string", "minLength": 1, "maxLength": 80 }, "permission": { "$ref": "#/$defs/pluginPermission" }, "payloadSchemaRef": { "$ref": "#/$defs/relativeJsonRef" }, "resultSchemaRef": { "$ref": "#/$defs/relativeJsonRef" }, "timeoutSeconds": { "type": "integer", "minimum": 1, "maximum": 3600 }, "maxPayloadBytes": { "type": "integer", "minimum": 1, "maximum": 65536 } } }, "gameClientBridgeSnapshot": { "type": "object", "required": ["type", "schemaVersion", "schemaRef", "keepForSeconds", "maxRecords"], "additionalProperties": false, "properties": { "type": { "type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$" }, "schemaVersion": { "type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$" }, "schemaRef": { "$ref": "#/$defs/relativeJsonRef" }, "keepForSeconds": { "type": "integer", "minimum": 1, "maximum": 2678400 }, "maxRecords": { "type": "integer", "minimum": 1, "maximum": 10000 } } }, "gameClientBridgeQueryTemplate": { "type": "object", "required": ["key", "title", "permission", "engine", "transportKey", "targetKey", "parameterSchemaRef", "resultSchemaRef", "maxRows", "timeoutSeconds"], "additionalProperties": false, "properties": { "key": { "type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$" }, "title": { "type": "string", "minLength": 1, "maxLength": 80 }, "permission": { "$ref": "#/$defs/pluginPermission" }, "engine": { "const": "sqlite" }, "transportKey": { "$ref": "#/$defs/logicalKey" }, "targetKey": { "$ref": "#/$defs/logicalKey" }, "parameterSchemaRef": { "$ref": "#/$defs/relativeJsonRef" }, "resultSchemaRef": { "$ref": "#/$defs/relativeJsonRef" }, "sqlRef": { "$ref": "#/$defs/relativeSqlRef" }, "maxRows": { "type": "integer", "minimum": 1, "maximum": 500 }, "timeoutSeconds": { "type": "integer", "minimum": 1, "maximum": 60 }, "pollIntervalSeconds": { "type": "integer", "minimum": 0, "maximum": 86400 }, "projections": { "type": "array", "items": { "$ref": "#/$defs/gameClientBridgeQueryProjection" }, "uniqueItems": true, "maxItems": 4 } } }, "gameClientBridgeQueryProjection": { "type": "object", "required": ["collection", "rowPath", "upsertKeys"], "additionalProperties": false, "properties": { "collection": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9._-]{0,119}$" }, "rowPath": { "const": "rows" }, "matchField": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9._-]{0,79}$" }, "matchValue": { "type": "string", "minLength": 1, "maxLength": 120 }, "upsertKeys": { "type": "array", "items": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9._-]{0,79}$" }, "uniqueItems": true, "minItems": 1, "maxItems": 8 }, "fieldMappings": { "type": "object", "maxProperties": 64, "propertyNames": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9._-]{0,79}$" }, "additionalProperties": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9._-]{0,79}$" } }, "fixedValues": { "type": "object", "maxProperties": 64, "propertyNames": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9._-]{0,79}$" }, "additionalProperties": { "type": "string", "maxLength": 4096 } }, "observedAtField": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9._-]{0,79}$" } } }, "gameClientBridgeLogProjection": { "type": "object", "required": ["key", "streamKeys", "steps", "correlationFields", "maxInterveningLines", "target"], "additionalProperties": false, "properties": { "key": { "type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$" }, "streamKeys": { "type": "array", "items": { "type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/-]{0,159}$" }, "uniqueItems": true, "minItems": 1, "maxItems": 64 }, "steps": { "type": "array", "items": { "$ref": "#/$defs/gameClientBridgeLogProjectionStep" }, "minItems": 1, "maxItems": 64 }, "correlationFields": { "type": "array", "items": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9_]{0,79}$" }, "uniqueItems": true, "minItems": 1, "maxItems": 64 }, "maxInterveningLines": { "type": "integer", "minimum": 0, "maximum": 100000 }, "target": { "$ref": "#/$defs/gameClientBridgeLogProjectionTarget" }, "presence": { "$ref": "#/$defs/gameClientBridgeLogProjectionPresence" } } }, "gameClientBridgeLogProjectionStep": { "type": "object", "required": ["pattern"], "additionalProperties": false, "properties": { "pattern": { "type": "string", "minLength": 1, "maxLength": 16384 } } }, "gameClientBridgeLogProjectionTarget": { "type": "object", "required": ["collection", "upsertKeys", "captureMappings"], "additionalProperties": false, "properties": { "collection": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9._-]{0,119}$" }, "upsertKeys": { "type": "array", "items": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9._-]{0,79}$" }, "uniqueItems": true, "minItems": 1, "maxItems": 8 }, "captureMappings": { "type": "object", "minProperties": 1, "maxProperties": 64, "propertyNames": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9._-]{0,79}$" }, "additionalProperties": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9_]{0,79}$" } }, "hashMappings": { "type": "object", "maxProperties": 64, "propertyNames": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9._-]{0,79}$" }, "additionalProperties": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9_]{0,79}$" } }, "fixedValues": { "type": "object", "maxProperties": 64, "propertyNames": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9._-]{0,79}$" }, "additionalProperties": { "type": "string", "maxLength": 4096 } }, "observedAtField": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9._-]{0,79}$" } } }, "gameClientBridgeLogProjectionPresence": { "type": "object", "required": ["timestampField", "activeWindowSeconds"], "additionalProperties": false, "properties": { "timestampField": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9._-]{0,79}$" }, "activeWindowSeconds": { "type": "integer", "minimum": 1, "maximum": 31536000 }, "activityTarget": { "$ref": "#/$defs/gameClientBridgeLogProjectionTarget" } } }, "gameClientBridgeLifecycleProjection": { "type": "object", "required": ["key", "capabilities", "target"], "additionalProperties": false, "properties": { "key": { "type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$" }, "capabilities": { "type": "array", "items": { "$ref": "#/$defs/runCapability" }, "uniqueItems": true, "minItems": 1, "maxItems": 16 }, "processStates": { "type": "array", "items": { "enum": ["running", "stopped", "not-started", "exited"] }, "uniqueItems": true, "maxItems": 8 }, "target": { "$ref": "#/$defs/gameClientBridgeBulkProjectionTarget" } } }, "gameClientBridgeBulkProjectionTarget": { "type": "object", "required": ["collection", "matchField", "matchValue", "fixedValues"], "additionalProperties": false, "properties": { "collection": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9._-]{0,119}$" }, "matchField": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9._-]{0,79}$" }, "matchValue": { "type": "string", "minLength": 1, "maxLength": 120 }, "fixedValues": { "type": "object", "minProperties": 1, "maxProperties": 64, "propertyNames": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9._-]{0,79}$" }, "additionalProperties": { "type": "string", "maxLength": 4096 } }, "observedAtField": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9._-]{0,79}$" }, "activityTarget": { "$ref": "#/$defs/gameClientBridgeBulkActivityTarget" } } }, "gameClientBridgeBulkActivityTarget": { "type": "object", "required": ["collection", "upsertKeys", "rowMappings"], "additionalProperties": false, "properties": { "collection": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9._-]{0,119}$" }, "upsertKeys": { "type": "array", "items": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9._-]{0,79}$" }, "uniqueItems": true, "minItems": 1, "maxItems": 8 }, "rowMappings": { "type": "object", "minProperties": 1, "maxProperties": 64, "propertyNames": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9._-]{0,79}$" }, "additionalProperties": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9._-]{0,79}$" } }, "fixedValues": { "type": "object", "maxProperties": 64, "propertyNames": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9._-]{0,79}$" }, "additionalProperties": { "type": "string", "maxLength": 4096 } }, "observedAtField": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9._-]{0,79}$" } } }, "gameClientBridgeDataPack": { "type": "object", "required": ["key", "databaseUserVersion", "logParserRefs", "configMapRefs"], "additionalProperties": false, "properties": { "key": { "$ref": "#/$defs/logicalKey" }, "databaseUserVersion": { "type": "integer", "minimum": 1 }, "logParserRefs": { "type": "array", "items": { "$ref": "#/$defs/relativeJsonRef" }, "uniqueItems": true, "minItems": 1 }, "configMapRefs": { "type": "array", "items": { "$ref": "#/$defs/relativeJsonRef" }, "uniqueItems": true, "minItems": 1 }, "dataRefs": { "type": "array", "items": { "$ref": "#/$defs/relativeJsonRef" }, "uniqueItems": true } } }, "gameClientBridgePageContract": { "type": "object", "required": ["pageKey"], "additionalProperties": false, "properties": { "pageKey": { "type": "string", "pattern": "^[a-z0-9][a-z0-9-]*$" }, "commandTypes": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }, "snapshotTypes": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }, "queryTemplateKeys": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }, "featureKeys": { "type": "array", "items": { "type": "string" }, "uniqueItems": true } } }, "gameClientBridgeFeature": { "type": "object", "required": ["key", "title", "permission"], "additionalProperties": false, "properties": { "key": { "type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$" }, "title": { "type": "string", "minLength": 1, "maxLength": 80 }, "permission": { "$ref": "#/$defs/pluginPermission" }, "requiredHandlers": { "type": "array", "items": { "type": "string" }, "uniqueItems": true, "maxItems": 64 }, "requiredEventProducers": { "type": "array", "items": { "type": "string" }, "uniqueItems": true, "maxItems": 64 } } }, "productionLifecycleOperation": { "enum": ["install", "enable", "disable", "upgrade", "rollback", "retire", "dependency-check"] }, "relativeJsonRef": { "type": "string", "pattern": "^(?!/)(?![A-Za-z]:)(?!.*://)(?!.*\\.\\.)[a-zA-Z0-9_./-]+\\.json$" }, "relativeSqlRef": { "type": "string", "pattern": "^(?!/)(?![A-Za-z]:)(?!.*://)(?!.*\\.\\.)[a-zA-Z0-9_./-]+\\.sql$" }, "runCapability": { "enum": [ "process.install", "process.start", "process.stop", "process.restart", "process.status", "deployment.plan.v1", "config.write", "files.list", "files.read", "files.write", "files.patch", "logs.read", "remote.ftp.read", "remote.ftp.write", "remote.rsync.read", "remote.rsync.write", "remote.run.files.read", "remote.run.files.write", "remote.run.process.start", "remote.run.process.stop", "remote.run.db.mysql.query", "remote.run.db.mysql.execute", "remote.run.db.sqlite.query", "remote.run.db.sqlite.execute", "remote.run.logs.transfer", "remote.run.rcon.command", "remote.run.program.command", "client-manager.deploy", "client-manager.control", "client-manager.update", "client-manager.rollback", "client-manager.uninstall", "artifacts.read", "artifacts.write", "ai.invoke" ] }, "pluginPermission": { "enum": [ "server.create", "server.read", "server.lifecycle", "server.files.read", "server.files.write", "server.logs.read", "server.artifacts.read", "server.artifacts.write", "server.remote.access", "server.run.distribution", "server.dependencies.manage", "server.client-manager.manage", "server.game-client.read", "server.game-client.command", "server.game-client.maintenance", "ai.invoke" ] }, "bridgeAction": { "enum": [ "server.instances.read", "jobs.dispatch", "logs.query", "artifacts.open", "files.request", "remote.access.request", "run.distribution.request", "dependencies.request", "logs.backfill.request", "client-manager.request", "plugin-lifecycle.request", "ai.invoke" ] }, "remoteAccessMethod": { "enum": ["ftp", "rsync", "run"] }, "remoteDatabaseEngine": { "enum": ["mysql", "sqlite"] }, "logicalKey": { "type": "string", "pattern": "^[a-z0-9][a-z0-9._/-]*$", "maxLength": 120 }, "runtimePlatform": { "enum": ["windows", "linux", "darwin"] }, "runtimeArch": { "enum": ["amd64", "arm64"] }, "runtimeTarget": { "type": "object", "required": ["os", "arch"], "additionalProperties": false, "properties": { "os": { "$ref": "#/$defs/runtimePlatform" }, "arch": { "$ref": "#/$defs/runtimeArch" } } }, "runtimeDiscoveryProbe": { "type": "object", "required": ["key", "kind", "targetKey"], "additionalProperties": false, "properties": { "key": { "$ref": "#/$defs/logicalKey" }, "kind": { "enum": ["file.exists", "command.version", "service.status", "port.open", "steam.app", "docker.container"] }, "targetKey": { "$ref": "#/$defs/logicalKey" }, "required": { "type": "boolean" }, "expected": { "type": "string", "maxLength": 120 }, "platforms": { "type": "array", "items": { "$ref": "#/$defs/runtimePlatform" }, "uniqueItems": true } } }, "runtimeLifecycleProfile": { "type": "object", "required": ["key", "mode", "capabilities"], "additionalProperties": false, "properties": { "key": { "$ref": "#/$defs/logicalKey" }, "mode": { "enum": ["local-process", "hosted-ftp-rcon", "ftp-only", "custom-client"] }, "capabilities": { "type": "array", "items": { "$ref": "#/$defs/runCapability" }, "uniqueItems": true, "minItems": 1 }, "actionRefs": { "type": "object", "additionalProperties": false, "properties": { "install": { "$ref": "#/$defs/relativeJsonRef" }, "start": { "$ref": "#/$defs/relativeJsonRef" }, "stop": { "$ref": "#/$defs/relativeJsonRef" }, "restart": { "$ref": "#/$defs/relativeJsonRef" }, "status": { "$ref": "#/$defs/relativeJsonRef" } } }, "transportKeys": { "type": "array", "items": { "$ref": "#/$defs/logicalKey" }, "uniqueItems": true }, "clientManagerRef": { "$ref": "#/$defs/logicalKey" }, "dllExtensionRefs": { "type": "array", "items": { "$ref": "#/$defs/logicalKey" }, "uniqueItems": true, "maxItems": 16 }, "platforms": { "type": "array", "items": { "$ref": "#/$defs/runtimePlatform" }, "uniqueItems": true } } }, "runtimeDependencyProbe": { "type": "object", "required": ["key", "kind", "targetKey"], "additionalProperties": false, "properties": { "key": { "$ref": "#/$defs/logicalKey" }, "kind": { "enum": ["command.version", "service.exists", "port.available", "steam.app", "java.version", "docker.available", "package.installed", "file.exists"] }, "targetKey": { "$ref": "#/$defs/logicalKey" }, "required": { "type": "boolean" }, "minimumVersion": { "type": "string", "maxLength": 80 }, "platforms": { "type": "array", "items": { "$ref": "#/$defs/runtimePlatform" }, "uniqueItems": true } } }, "runtimeInstallStep": { "type": "object", "required": ["type", "targetKey"], "additionalProperties": false, "properties": { "type": { "enum": ["package", "verified-download", "steamcmd-app", "manual"] }, "targetKey": { "$ref": "#/$defs/logicalKey" }, "packageManager": { "enum": ["winget", "choco", "scoop", "apt", "yum", "dnf", "pacman", "zypper", "brew", "steamcmd", "manual"] }, "packageName": { "type": "string", "pattern": "^[a-zA-Z0-9_.:+@/-]+$", "maxLength": 120 }, "version": { "type": "string", "maxLength": 80 }, "downloadRef": { "type": "string", "pattern": "^https://[a-zA-Z0-9._~:/?#\\[\\]@!$&'()*+,;=%-]+$", "maxLength": 240 }, "checksum": { "type": "string", "pattern": "^sha256:[a-fA-F0-9]{64}$" } }, "allOf": [ { "if": { "properties": { "type": { "const": "package" } }, "required": ["type"] }, "then": { "required": ["packageManager", "packageName"], "properties": { "packageManager": { "enum": ["winget", "choco", "scoop", "apt", "yum", "dnf", "pacman", "zypper", "brew"] } } } }, { "if": { "properties": { "type": { "const": "verified-download" } }, "required": ["type"] }, "then": { "required": ["downloadRef", "checksum"] } }, { "if": { "properties": { "type": { "const": "steamcmd-app" } }, "required": ["type"] }, "then": { "required": ["packageName"], "properties": { "packageManager": { "const": "steamcmd" }, "packageName": { "type": "string", "pattern": "^[0-9]{1,12}$" } } } } ] }, "runtimeInstallPlan": { "type": "object", "required": ["key", "title", "steps"], "additionalProperties": false, "properties": { "key": { "$ref": "#/$defs/logicalKey" }, "title": { "type": "string", "minLength": 1, "maxLength": 80 }, "platforms": { "type": "array", "items": { "$ref": "#/$defs/runtimePlatform" }, "uniqueItems": true }, "steps": { "type": "array", "items": { "$ref": "#/$defs/runtimeInstallStep" }, "minItems": 1, "maxItems": 64 } } }, "runtimeServerConfigMapping": { "type": "object", "required": ["fieldKey", "configKey", "valueType"], "additionalProperties": false, "properties": { "fieldKey": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9._/-]*$", "maxLength": 80 }, "configKey": { "$ref": "#/$defs/logicalKey" }, "valueType": { "enum": ["text", "integer", "number", "boolean", "port"] }, "required": { "type": "boolean" } } }, "runtimeServerDiscoveryMarker": { "type": "object", "required": ["key", "kind", "targetKey"], "additionalProperties": false, "properties": { "key": { "$ref": "#/$defs/logicalKey" }, "kind": { "enum": ["file.exists", "command.version", "port.open", "steam.app"] }, "targetKey": { "$ref": "#/$defs/logicalKey" }, "expected": { "type": "string", "maxLength": 120 }, "required": { "type": "boolean" } } }, "runtimeServerVerificationCheck": { "type": "object", "required": ["key", "kind", "targetKey"], "additionalProperties": false, "properties": { "key": { "$ref": "#/$defs/logicalKey" }, "kind": { "enum": ["executable.present", "version.matches", "port.bound", "config.readable", "process.healthy"] }, "targetKey": { "$ref": "#/$defs/logicalKey" }, "required": { "type": "boolean" } } }, "runtimeServerDeploymentProfile": { "type": "object", "required": ["key", "version", "supportedTargets", "steamAppId", "executableKey", "installRootKey", "configKey", "configFormat", "configMappings", "discoveryMarkers", "verificationChecks"], "additionalProperties": false, "properties": { "key": { "$ref": "#/$defs/logicalKey" }, "version": { "type": "string", "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+(?:-[0-9A-Za-z.-]+)?$" }, "supportedTargets": { "type": "array", "items": { "$ref": "#/$defs/runtimeTarget" }, "minItems": 1, "uniqueItems": true }, "steamAppId": { "type": "string", "pattern": "^[0-9]{1,12}$" }, "executableKey": { "$ref": "#/$defs/logicalKey" }, "installRootKey": { "$ref": "#/$defs/logicalKey" }, "configKey": { "$ref": "#/$defs/logicalKey" }, "configFormat": { "enum": ["ini", "json", "yaml", "properties"] }, "prerequisites": { "type": "array", "items": { "$ref": "#/$defs/runtimeServerPrerequisite" }, "maxItems": 16 }, "configMappings": { "type": "array", "items": { "$ref": "#/$defs/runtimeServerConfigMapping" }, "minItems": 1, "maxItems": 32, "uniqueItems": true }, "discoveryMarkers": { "type": "array", "items": { "$ref": "#/$defs/runtimeServerDiscoveryMarker" }, "minItems": 1, "maxItems": 32, "uniqueItems": true }, "verificationChecks": { "type": "array", "items": { "$ref": "#/$defs/runtimeServerVerificationCheck" }, "minItems": 4, "maxItems": 16, "uniqueItems": true } } }, "runtimeServerPrerequisite": { "type": "object", "required": ["key", "kind"], "additionalProperties": false, "properties": { "key": { "$ref": "#/$defs/logicalKey" }, "kind": { "enum": ["steamcmd", "windows-vcredist", "windows-directx"] } } }, "runtimeLogSource": { "type": "object", "required": ["key", "kind", "streamKey"], "additionalProperties": false, "properties": { "key": { "$ref": "#/$defs/logicalKey" }, "kind": { "enum": ["process.stdout", "process.stderr", "file.tail", "ftp.poll", "sql.query", "client-manager"] }, "targetKey": { "$ref": "#/$defs/logicalKey" }, "streamKey": { "$ref": "#/$defs/logicalKey" }, "cursorKind": { "enum": ["sequence", "offset", "fingerprint", "ftp-listing", "sql-cursor"] }, "retentionDays": { "type": "integer", "minimum": 1, "maximum": 365 } } }, "runtimeLogEvent": { "type": "object", "required": ["key", "title", "sourceKey", "eventType", "permission", "schemaRef", "retentionDays", "severity"], "additionalProperties": false, "properties": { "key": { "$ref": "#/$defs/logicalKey" }, "title": { "type": "string", "minLength": 1, "maxLength": 80 }, "sourceKey": { "$ref": "#/$defs/logicalKey" }, "eventType": { "type": "string", "pattern": "^[a-z0-9][a-z0-9._-]{0,119}$" }, "permission": { "$ref": "#/$defs/pluginPermission" }, "schemaRef": { "$ref": "#/$defs/relativeJsonRef" }, "retentionDays": { "type": "integer", "minimum": 1, "maximum": 365 }, "severity": { "enum": ["info", "notice", "warning", "critical"] } } }, "runtimeTransportProfile": { "type": "object", "required": ["key", "kind", "capabilities"], "additionalProperties": false, "properties": { "key": { "$ref": "#/$defs/logicalKey" }, "kind": { "enum": ["file", "ftp", "rsync", "mysql", "sqlite", "rcon", "program"] }, "targetKey": { "$ref": "#/$defs/logicalKey" }, "capabilities": { "type": "array", "items": { "$ref": "#/$defs/runCapability" }, "uniqueItems": true, "minItems": 1 } } }, "relativePathRef": { "type": "string", "pattern": "^(?!/)(?![A-Za-z]:)(?!.*://)(?!.*\\.\\.)[a-zA-Z0-9_./-]+$", "maxLength": 160 }, "clientManagerComponentCapability": { "enum": [ "component.register", "component.heartbeat", "component.health", "component.control", "game-client.bridge", "logs.stream" ] }, "clientManagerLifecycleAction": { "enum": ["start", "stop", "restart", "status", "update", "rollback", "uninstall"] }, "clientManagerArgument": { "type": "string", "pattern": "^[a-zA-Z0-9_./:=@+-]+$", "maxLength": 120 }, "runtimeClientManagerProfile": { "type": "object", "required": ["key", "repository", "supportedTargets", "build", "outputArtifacts"], "additionalProperties": false, "properties": { "key": { "$ref": "#/$defs/logicalKey" }, "displayName": { "type": "string", "minLength": 1, "maxLength": 80 }, "version": { "type": "string", "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+(?:-[0-9A-Za-z.-]+)?$", "maxLength": 40 }, "repository": { "type": "object", "required": ["url", "revisionPolicy"], "additionalProperties": false, "properties": { "url": { "type": "string", "pattern": "^https://[a-zA-Z0-9._~:/?#\\[\\]@!$&'()*+,;=%-]+\\.git$", "maxLength": 240 }, "branch": { "type": "string", "pattern": "^[a-zA-Z0-9._/-]+$", "maxLength": 120 }, "tag": { "type": "string", "pattern": "^[a-zA-Z0-9._/-]+$", "maxLength": 120 }, "revision": { "type": "string", "pattern": "^[a-fA-F0-9]{7,64}$" }, "revisionPolicy": { "enum": ["pinned", "branch", "tag"] } } }, "supportedTargets": { "type": "array", "items": { "$ref": "#/$defs/runtimeTarget" }, "minItems": 1, "uniqueItems": true }, "build": { "type": "object", "required": ["system"], "additionalProperties": false, "properties": { "system": { "enum": ["go", "npm", "cargo", "make"] }, "workspaceRef": { "$ref": "#/$defs/relativePathRef" }, "entryRef": { "$ref": "#/$defs/relativePathRef" } } }, "configTemplates": { "type": "array", "items": { "type": "object", "required": ["key", "templateRef", "outputRef"], "additionalProperties": false, "properties": { "key": { "$ref": "#/$defs/logicalKey" }, "templateRef": { "$ref": "#/$defs/relativePathRef" }, "outputRef": { "$ref": "#/$defs/relativePathRef" } } }, "uniqueItems": true }, "outputArtifacts": { "type": "array", "items": { "$ref": "#/$defs/relativePathRef" }, "minItems": 1, "uniqueItems": true }, "deployment": { "type": "object", "required": ["mode", "executableRef", "requiredRunCapabilities"], "additionalProperties": false, "properties": { "mode": { "const": "run-supervised" }, "executableRef": { "$ref": "#/$defs/relativePathRef" }, "arguments": { "type": "array", "items": { "$ref": "#/$defs/clientManagerArgument" }, "maxItems": 32 }, "autoStart": { "type": "boolean" }, "requiredRunCapabilities": { "type": "array", "items": { "enum": ["client-manager.deploy", "client-manager.control", "client-manager.update", "client-manager.rollback", "client-manager.uninstall"] }, "uniqueItems": true, "minItems": 1 } } }, "lifecycle": { "type": "object", "required": ["actions", "startupTimeoutSeconds", "stopTimeoutSeconds"], "additionalProperties": false, "properties": { "actions": { "type": "array", "items": { "$ref": "#/$defs/clientManagerLifecycleAction" }, "uniqueItems": true, "minItems": 1 }, "startupTimeoutSeconds": { "type": "integer", "minimum": 1, "maximum": 300 }, "stopTimeoutSeconds": { "type": "integer", "minimum": 1, "maximum": 120 } } }, "health": { "type": "object", "required": ["mode", "intervalSeconds", "degradedAfterSeconds", "offlineAfterSeconds", "requiredCapabilities"], "additionalProperties": false, "properties": { "mode": { "enum": ["component-heartbeat", "process"] }, "intervalSeconds": { "type": "integer", "minimum": 5, "maximum": 300 }, "degradedAfterSeconds": { "type": "integer", "minimum": 10, "maximum": 1800 }, "offlineAfterSeconds": { "type": "integer", "minimum": 15, "maximum": 3600 }, "requiredCapabilities": { "type": "array", "items": { "$ref": "#/$defs/clientManagerComponentCapability" }, "uniqueItems": true, "minItems": 1 } } }, "compatibility": { "type": "object", "required": ["allowDowngrade"], "additionalProperties": false, "properties": { "minimumVersion": { "type": "string", "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+(?:-[0-9A-Za-z.-]+)?$", "maxLength": 40 }, "maximumVersion": { "type": "string", "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+(?:-[0-9A-Za-z.-]+)?$", "maxLength": 40 }, "allowDowngrade": { "type": "boolean" } } }, "updatePolicy": { "type": "object", "required": ["strategy", "requireApproval", "healthConfirmationSeconds", "retainPrevious"], "additionalProperties": false, "properties": { "strategy": { "const": "manual-staged" }, "requireApproval": { "const": true }, "healthConfirmationSeconds": { "type": "integer", "minimum": 5, "maximum": 600 }, "retainPrevious": { "const": true } } } }, "allOf": [ { "if": { "required": ["deployment"] }, "then": { "required": ["version", "lifecycle", "health", "updatePolicy"] } } ] }, "runtimeDLLExtensionProfile": { "type": "object", "required": ["key", "displayName", "kind", "activation", "version", "releaseState", "targetKey", "modKey", "dllRef", "supportedTargets", "updateOnStart", "rconPort"], "additionalProperties": false, "properties": { "key": { "$ref": "#/$defs/logicalKey" }, "displayName": { "type": "string", "minLength": 1, "maxLength": 80 }, "kind": { "const": "ue4ss-dll" }, "activation": { "const": "server-start" }, "version": { "type": "string", "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+(?:-[0-9A-Za-z.-]+)?$", "maxLength": 40 }, "releaseState": { "enum": ["unpublished", "ready"] }, "releaseUrl": { "type": "string", "pattern": "^https://[a-zA-Z0-9._~:/\\[\\]@!$&'()*+,;=%-]+\\.dll$", "maxLength": 240 }, "checksum": { "type": "string", "pattern": "^sha256:[a-fA-F0-9]{64}$" }, "sizeBytes": { "type": "integer", "minimum": 1, "maximum": 134217728 }, "targetKey": { "$ref": "#/$defs/logicalKey" }, "modKey": { "type": "string", "pattern": "^[a-z0-9][a-z0-9_-]{0,79}$" }, "dllRef": { "type": "string", "pattern": "^ue4ss/Mods/[a-z0-9][a-z0-9_-]{0,79}/dlls/main\\.dll$", "maxLength": 160 }, "scumExecutableChecksum": { "type": "string", "pattern": "^sha256:[a-fA-F0-9]{64}$" }, "ue4ssAbi": { "type": "string", "pattern": "^[A-Za-z0-9._-]{1,80}$" }, "supportedTargets": { "type": "array", "items": { "$ref": "#/$defs/runtimeTarget" }, "minItems": 1, "maxItems": 1, "uniqueItems": true }, "updateOnStart": { "const": true }, "rconPort": { "type": "integer", "minimum": 1024, "maximum": 65535 } }, "allOf": [ { "if": { "properties": { "releaseState": { "const": "ready" } }, "required": ["releaseState"] }, "then": { "required": ["releaseUrl", "checksum", "sizeBytes", "scumExecutableChecksum", "ue4ssAbi"] } } ] }, "aiPurpose": { "enum": [ "config.read", "config.generate", "config.suggest", "logs.diagnose", "files.suggest" ] } } }