{ "$schema": "../../manifests/game-plugin.manifest.schema.json", "id": "game.scum", "name": "SCUM Server", "description": "First-party SCUM game server operations plugin with platform-mediated lifecycle and companion bridge support.", "version": "0.1.1", "kind": "game-plugin", "tags": [ "scum", "survival", "dedicated-server", "game-operations", "companion-client" ], "server": { "type": "scum", "displayName": "SCUM Dedicated Server", "supportedOS": [ "windows", "linux" ], "createFormSchema": "schemas/create-form.schema.json", "createFields": [ { "key": "serverName", "label": "SCUM 服务器名称", "type": "text", "required": true, "configKey": "serverName" }, { "key": "gamePort", "label": "游戏端口", "type": "port", "required": true, "defaultValue": "7777", "configKey": "gamePort" }, { "key": "queryPort", "label": "查询端口", "type": "port", "required": true, "defaultValue": "27015", "configKey": "queryPort" }, { "key": "maxPlayers", "label": "最大玩家数", "type": "number", "required": true, "defaultValue": "64", "configKey": "maxPlayers" } ] }, "capabilities": [ "process.install", "process.start", "process.stop", "process.restart", "process.status", "deployment.scum.v1", "files.list", "files.read", "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.logs.transfer", "client-manager.deploy", "client-manager.control", "client-manager.update", "client-manager.rollback", "client-manager.uninstall", "artifacts.read", "artifacts.write", "ai.invoke" ], "remoteAccess": { "methods": [ "ftp", "rsync", "run" ], "runCapabilities": [ "remote.run.files.read", "remote.run.files.write", "remote.run.process.start", "remote.run.process.stop", "remote.run.logs.transfer" ], "logTransfer": true }, "bridge": { "actions": [ "server.instances.read", "jobs.dispatch", "logs.query", "artifacts.open", "files.request", "remote.access.request", "ai.invoke", "run.distribution.request", "dependencies.request", "logs.backfill.request", "client-manager.request", "plugin-lifecycle.request" ] }, "gameClientBridge": { "commands": [ { "type": "config.read", "title": "Read SCUM configuration", "permission": "server.game-client.read", "approvalLevel": "none", "payloadSchemaRef": "schemas/bridge/config-read.payload.schema.json", "resultSchemaRef": "schemas/bridge/config-read.result.schema.json", "timeoutSeconds": 30, "maxPayloadBytes": 1024 }, { "type": "config.patch", "title": "Patch SCUM configuration", "permission": "server.game-client.maintenance", "approvalLevel": "platform-admin", "payloadSchemaRef": "schemas/bridge/config-patch.payload.schema.json", "resultSchemaRef": "schemas/bridge/config-patch.result.schema.json", "timeoutSeconds": 60, "maxPayloadBytes": 4096 }, { "type": "announcement.send", "title": "Send SCUM announcement", "permission": "server.game-client.command", "approvalLevel": "operator", "payloadSchemaRef": "schemas/bridge/announcement.payload.schema.json", "resultSchemaRef": "schemas/bridge/announcement.result.schema.json", "timeoutSeconds": 60, "maxPayloadBytes": 4096 }, { "type": "companion.diagnostics", "title": "Collect companion diagnostics", "permission": "server.game-client.read", "approvalLevel": "none", "payloadSchemaRef": "schemas/bridge/diagnostics.payload.schema.json", "resultSchemaRef": "schemas/bridge/diagnostics.result.schema.json", "timeoutSeconds": 30, "maxPayloadBytes": 2048 }, { "type": "player.lookup", "title": "Look up SCUM player", "permission": "server.game-client.read", "approvalLevel": "none", "payloadSchemaRef": "schemas/bridge/player-lookup.payload.schema.json", "resultSchemaRef": "schemas/bridge/player-lookup.result.schema.json", "timeoutSeconds": 30, "maxPayloadBytes": 4096 }, { "type": "reward.deliver", "title": "Deliver SCUM reward", "permission": "server.game-client.command", "approvalLevel": "operator", "payloadSchemaRef": "schemas/bridge/reward-deliver.payload.schema.json", "resultSchemaRef": "schemas/bridge/reward-deliver.result.schema.json", "timeoutSeconds": 60, "maxPayloadBytes": 4096 }, { "type": "player.notify", "title": "Notify SCUM player about approved gift", "permission": "server.game-client.command", "approvalLevel": "operator", "payloadSchemaRef": "schemas/bridge/player-notify.payload.schema.json", "resultSchemaRef": "schemas/bridge/player-notify.result.schema.json", "timeoutSeconds": 60, "maxPayloadBytes": 2048 }, { "type": "vehicle.spawn", "title": "Spawn catalogued SCUM vehicle", "permission": "server.game-client.command", "approvalLevel": "operator", "payloadSchemaRef": "schemas/bridge/vehicle-spawn.payload.schema.json", "resultSchemaRef": "schemas/bridge/vehicle-spawn.result.schema.json", "timeoutSeconds": 60, "maxPayloadBytes": 1024 }, { "type": "event.start", "title": "Start SCUM event", "permission": "server.game-client.command", "approvalLevel": "operator", "payloadSchemaRef": "schemas/bridge/event-start.payload.schema.json", "resultSchemaRef": "schemas/bridge/event-start.result.schema.json", "timeoutSeconds": 60, "maxPayloadBytes": 4096 }, { "type": "restart.prepare", "title": "Prepare SCUM restart", "permission": "server.game-client.maintenance", "approvalLevel": "operator", "payloadSchemaRef": "schemas/bridge/restart-prepare.payload.schema.json", "resultSchemaRef": "schemas/bridge/restart-prepare.result.schema.json", "timeoutSeconds": 120, "maxPayloadBytes": 4096 }, { "type": "maintenance.prepare", "title": "Prepare SCUM maintenance", "permission": "server.game-client.maintenance", "approvalLevel": "platform-admin", "payloadSchemaRef": "schemas/bridge/maintenance-prepare.payload.schema.json", "resultSchemaRef": "schemas/bridge/maintenance-prepare.result.schema.json", "timeoutSeconds": 120, "maxPayloadBytes": 4096 }, { "type": "game-state.patch", "title": "Patch SCUM player state", "permission": "server.game-client.maintenance", "approvalLevel": "platform-admin", "payloadSchemaRef": "schemas/bridge/game-state-patch.payload.schema.json", "resultSchemaRef": "schemas/bridge/game-state-patch.result.schema.json", "timeoutSeconds": 120, "maxPayloadBytes": 4096 } ], "snapshots": [ { "type": "companion.health", "schemaVersion": "1", "schemaRef": "schemas/bridge/companion-health.snapshot.schema.json", "keepForSeconds": 604800, "maxRecords": 1000 }, { "type": "semantic.events", "schemaVersion": "1", "schemaRef": "schemas/bridge/semantic-events.snapshot.schema.json", "keepForSeconds": 604800, "maxRecords": 1000 }, { "type": "online.sessions", "schemaVersion": "1", "schemaRef": "schemas/bridge/online-sessions.snapshot.schema.json", "keepForSeconds": 86400, "maxRecords": 1000 }, { "type": "players", "schemaVersion": "1", "schemaRef": "schemas/bridge/players.snapshot.schema.json", "keepForSeconds": 86400, "maxRecords": 1000 }, { "type": "player.state", "schemaVersion": "1", "schemaRef": "schemas/bridge/player-state.snapshot.schema.json", "keepForSeconds": 86400, "maxRecords": 1000 }, { "type": "squads", "schemaVersion": "1", "schemaRef": "schemas/bridge/squads.snapshot.schema.json", "keepForSeconds": 86400, "maxRecords": 1000 }, { "type": "vehicles", "schemaVersion": "1", "schemaRef": "schemas/bridge/vehicles.snapshot.schema.json", "keepForSeconds": 86400, "maxRecords": 1000 }, { "type": "flags", "schemaVersion": "1", "schemaRef": "schemas/bridge/flags.snapshot.schema.json", "keepForSeconds": 86400, "maxRecords": 1000 } ], "commandRetentionSeconds": 604800, "maxCommands": 1000, "features": [ { "key": "config.manage", "title": "SCUM configuration", "permission": "server.game-client.read", "requiredHandlers": ["config.read", "config.patch"] }, { "key": "player.intelligence", "title": "SCUM player intelligence", "permission": "server.game-client.read", "requiredHandlers": ["player.lookup"], "requiredEventProducers": ["semantic.events"] }, { "key": "reward.delivery", "title": "SCUM reward delivery", "permission": "server.game-client.command", "requiredHandlers": ["reward.deliver", "player.notify"] }, { "key": "state.patch", "title": "SCUM player state patch", "permission": "server.game-client.maintenance", "requiredHandlers": ["game-state.patch"] }, { "key": "vehicle.spawn", "title": "SCUM catalogued vehicle spawn", "permission": "server.game-client.command", "requiredHandlers": ["vehicle.spawn"] }, { "key": "trajectory.collect", "title": "SCUM trajectories", "permission": "server.game-client.read", "requiredEventProducers": ["semantic.events"] } ], "pages": [ { "pageKey": "files-config", "commandTypes": [ "announcement.send", "companion.diagnostics", "player.lookup", "reward.deliver", "vehicle.spawn", "event.start", "restart.prepare", "maintenance.prepare" ], "snapshotTypes": ["companion.health", "online.sessions", "players", "squads", "vehicles", "flags"], "featureKeys": ["config.manage", "player.intelligence", "reward.delivery", "state.patch", "vehicle.spawn", "trajectory.collect"] } ], "companion": { "profileKey": "scum-client-manager", "configTemplateKey": "client-config", "configSchemaRef": "schemas/companion/config.schema.json", "configFormat": "yaml", "platformBaseUrlSource": "run-control", "registrationProof": "hmac-sha256", "proofMaterialSource": "component-package", "proofMaterialEnv": "SCUM_COMPONENT_PROOF", "sessionMode": "component-session", "tlsPolicy": "verify-system-roots", "heartbeatIntervalSeconds": 30, "commandPollIntervalSeconds": 5, "requestTimeoutSeconds": 15 } }, "permissions": [ "server.create", "server.read", "server.lifecycle", "server.files.read", "server.files.write", "server.logs.read", "server.artifacts.read", "server.artifacts.write", "server.remote.access", "ai.invoke", "server.run.distribution", "server.dependencies.manage", "server.client-manager.manage", "server.game-client.read", "server.game-client.command", "server.game-client.maintenance" ], "actions": { "install": "actions/install.json", "start": "actions/start.json", "stop": "actions/stop.json", "restart": "actions/restart.json", "status": "actions/status.json" }, "productionLifecycle": { "operations": ["install", "enable", "disable", "upgrade", "rollback", "retire", "dependency-check"], "dependencyPolicy": "required", "approvalRequired": ["disable", "rollback", "retire"] }, "pages": [{ "key": "files-config", "title": "文件、配置与玩家档案", "path": "/files-config", "bundleKey": "scum-server-plugin", "bundleVersion": "1.0.2", "bundleIntegritySha256": "sha256:3b39507d1471f8d62d25001a11b43c664dbb5a5bef91ed6944b512e6e60099a7", "permissions": ["server.read", "server.files.read", "server.files.write", "server.logs.read", "server.game-client.read", "server.game-client.command", "server.game-client.maintenance", "ai.invoke"], "bridgeActions": ["server.instances.read", "files.request", "logs.query", "ai.invoke"], "featureKeys": ["config.manage", "player.intelligence", "reward.delivery", "state.patch", "vehicle.spawn", "trajectory.collect"] }], "fileWorkspace": { "defaultDirectoryKey": "scum-config", "directories": [{ "key": "scum-config", "label": "服务器配置", "scope": "config" }, { "key": "scum-logs", "label": "日志文件", "scope": "logs" }], "files": [{ "key": "scum-server-settings", "directoryKey": "scum-config", "label": "ServerSettings.ini", "kind": "config", "editable": true }, { "key": "scum-server-log", "directoryKey": "scum-logs", "label": "SCUM Server.log", "kind": "log", "streamKey": "scum.server" }, { "key": "scum-chat-log", "directoryKey": "scum-logs", "label": "SCUM Chat.log", "kind": "log", "streamKey": "scum.chat" }], "configFields": [{ "key": "server-name", "fileKey": "scum-server-settings", "configKey": "ServerName", "label": "服务器名称", "description": "显示在服务器浏览器与玩家连接界面。", "control": "text", "defaultValue": "SCUM Server", "restartImpact": "restart-required" }, { "key": "game-port", "fileKey": "scum-server-settings", "configKey": "GamePort", "label": "游戏端口", "description": "玩家连接所使用的游戏端口。", "control": "port", "minimum": 1, "maximum": 65535, "defaultValue": "7777", "restartImpact": "restart-required" }, { "key": "query-port", "fileKey": "scum-server-settings", "configKey": "QueryPort", "label": "查询端口", "description": "服务器查询和状态发现所使用的端口。", "control": "port", "minimum": 1, "maximum": 65535, "defaultValue": "27015", "restartImpact": "restart-required" }, { "key": "max-players", "fileKey": "scum-server-settings", "configKey": "MaxPlayers", "label": "最大玩家数", "description": "允许同时进入服务器的玩家上限。", "control": "number", "minimum": 1, "maximum": 128, "defaultValue": "64", "restartImpact": "restart-required" }, { "key": "welcome-message", "fileKey": "scum-server-settings", "configKey": "WelcomeMessage", "label": "欢迎消息", "description": "登录成功后由已声明的服务器扩展显示给玩家。", "control": "text", "defaultValue": "", "restartImpact": "none" }] }, "ai": { "purposes": [ "config.suggest", "logs.diagnose" ], "mediation": "platform", "configWritePolicy": "review-required" }, "mapTrajectories": { "mapId": "scum-island", "mapVersion": "0.9", "worldMinX": -500000, "worldMinY": -500000, "worldMaxX": 500000, "worldMaxY": 500000, "imageWidth": 2048, "imageHeight": 2048, "precision": 1, "sampleDistance": 4, "sampleIntervalSeconds": 20, "retentionSeconds": 604800 }, "runtimeProfiles": { "discovery": [ { "key": "steamcmd", "kind": "command.version", "targetKey": "steamcmd", "required": true }, { "key": "scum-install", "kind": "file.exists", "targetKey": "server/install-root", "required": true, "platforms": [ "windows" ] } ], "lifecycleProfiles": [ { "key": "run-local", "mode": "local-process", "capabilities": [ "process.install", "process.start", "process.stop", "process.restart", "process.status", "remote.run.process.start", "remote.run.process.stop" ], "actionRefs": { "install": "actions/install.json", "start": "actions/start.json", "stop": "actions/stop.json", "restart": "actions/restart.json", "status": "actions/status.json" }, "transportKeys": [ "server-files" ], "platforms": [ "windows" ] }, { "key": "scum-client", "mode": "custom-client", "capabilities": [ "client-manager.deploy", "client-manager.control", "logs.read" ], "clientManagerRef": "scum-client-manager", "platforms": [ "windows" ] } ], "dependencyProbes": [ { "key": "steamcmd", "kind": "command.version", "targetKey": "steamcmd", "required": true, "platforms": [ "windows", "linux" ] }, { "key": "sqlite", "kind": "package.installed", "targetKey": "sqlite-driver", "required": false, "platforms": [ "windows", "linux" ] } ], "installPlans": [ { "key": "install-scum-server", "title": "Install SCUM Dedicated Server", "platforms": [ "windows" ], "steps": [ { "type": "steamcmd-app", "targetKey": "server/install-root", "packageManager": "steamcmd", "packageName": "3792580" } ] }, { "key": "install-steamcmd-linux", "title": "Install SteamCMD", "platforms": [ "linux" ], "steps": [ { "type": "package", "targetKey": "steamcmd", "packageManager": "apt", "packageName": "steamcmd" } ] } ], "serverDeployments": [ { "key": "scum-steamcmd-windows", "version": "1.0.0", "supportedTargets": [ { "os": "windows", "arch": "amd64" } ], "steamAppId": "3792580", "executableKey": "scum/server-executable", "installRootKey": "server/install-root", "configKey": "scum/server-settings", "configFormat": "ini", "prerequisites": [ { "key": "steamcmd", "kind": "steamcmd" }, { "key": "vcredist-2012-x86", "kind": "windows-vcredist" }, { "key": "vcredist-2012-x64", "kind": "windows-vcredist" }, { "key": "vcredist-2013-x86", "kind": "windows-vcredist" }, { "key": "vcredist-2013-x64", "kind": "windows-vcredist" }, { "key": "vcredist-2015-2022-x86", "kind": "windows-vcredist" }, { "key": "vcredist-2015-2022-x64", "kind": "windows-vcredist" }, { "key": "directx-jun2010", "kind": "windows-directx" } ], "configMappings": [ { "fieldKey": "serverName", "configKey": "server-settings.server-name", "valueType": "text", "required": true }, { "fieldKey": "gamePort", "configKey": "server-settings.game-port", "valueType": "port", "required": true }, { "fieldKey": "queryPort", "configKey": "server-settings.query-port", "valueType": "port", "required": true }, { "fieldKey": "maxPlayers", "configKey": "server-settings.max-players", "valueType": "integer", "required": true } ], "discoveryMarkers": [ { "key": "scum-executable", "kind": "file.exists", "targetKey": "scum/server-executable", "required": true }, { "key": "scum-version", "kind": "command.version", "targetKey": "scum/server-executable", "required": true }, { "key": "scum-steam-app", "kind": "steam.app", "targetKey": "server/install-root", "expected": "3792580", "required": true }, { "key": "scum-config", "kind": "file.exists", "targetKey": "scum/server-settings", "expected": "ServerSettings.ini", "required": true }, { "key": "scum-game-port", "kind": "port.open", "targetKey": "game-port", "required": true }, { "key": "scum-query-port", "kind": "port.open", "targetKey": "query-port", "required": true } ], "verificationChecks": [ { "key": "executable", "kind": "executable.present", "targetKey": "scum/server-executable", "required": true }, { "key": "version", "kind": "version.matches", "targetKey": "scum/server-executable", "required": true }, { "key": "game-port", "kind": "port.bound", "targetKey": "game-port", "required": true }, { "key": "config", "kind": "config.readable", "targetKey": "scum/server-settings", "required": true }, { "key": "process", "kind": "process.healthy", "targetKey": "scum/server-executable", "required": true } ] } ], "logSources": [ { "key": "scum-chat-events", "kind": "file.tail", "targetKey": "logs/chat", "streamKey": "scum.chat", "cursorKind": "fingerprint", "retentionDays": 90 }, { "key": "scum-server-events", "kind": "file.tail", "targetKey": "logs/server", "streamKey": "scum.server", "cursorKind": "fingerprint", "retentionDays": 90 }, { "key": "scum-login-events", "kind": "file.tail", "targetKey": "logs/login", "streamKey": "scum.login", "cursorKind": "fingerprint", "retentionDays": 90 }, { "key": "scum-kill-events", "kind": "file.tail", "targetKey": "logs/kill", "streamKey": "scum.kill", "cursorKind": "fingerprint", "retentionDays": 90 }, { "key": "scum-trade-events", "kind": "file.tail", "targetKey": "logs/trade", "streamKey": "scum.trade", "cursorKind": "fingerprint", "retentionDays": 90 }, { "key": "scum-admin-events", "kind": "file.tail", "targetKey": "logs/admin", "streamKey": "scum.admin", "cursorKind": "fingerprint", "retentionDays": 90 }, { "key": "scum-performance-events", "kind": "file.tail", "targetKey": "logs/performance", "streamKey": "scum.performance", "cursorKind": "fingerprint", "retentionDays": 30 }, { "key": "scum-client-events", "kind": "client-manager", "targetKey": "scum-client-manager", "streamKey": "scum.client", "cursorKind": "sequence", "retentionDays": 30 } ], "logEvents": [ { "key": "scum-player-position", "title": "SCUM player position", "sourceKey": "scum-client-events", "eventType": "player.position", "permission": "server.logs.read", "schemaRef": "schemas/log-events/player-position.event.schema.json", "retentionDays": 7, "severity": "info" }, { "key": "scum-vehicle-position", "title": "SCUM vehicle position", "sourceKey": "scum-client-events", "eventType": "vehicle.position", "permission": "server.logs.read", "schemaRef": "schemas/log-events/vehicle-position.event.schema.json", "retentionDays": 7, "severity": "info" }, { "key": "scum-player-vehicle-enter", "title": "SCUM player vehicle enter", "sourceKey": "scum-client-events", "eventType": "player.vehicle.enter", "permission": "server.logs.read", "schemaRef": "schemas/log-events/player-vehicle-enter.event.schema.json", "retentionDays": 7, "severity": "info" }, { "key": "scum-player-vehicle-leave", "title": "SCUM player vehicle leave", "sourceKey": "scum-client-events", "eventType": "player.vehicle.leave", "permission": "server.logs.read", "schemaRef": "schemas/log-events/player-vehicle-leave.event.schema.json", "retentionDays": 7, "severity": "info" }, { "key": "scum-chat", "title": "SCUM chat message", "sourceKey": "scum-chat-events", "eventType": "scum.chat", "permission": "server.logs.read", "schemaRef": "schemas/log-events/chat.event.schema.json", "retentionDays": 90, "severity": "info" }, { "key": "scum-login", "title": "SCUM player login", "sourceKey": "scum-login-events", "eventType": "scum.login", "permission": "server.logs.read", "schemaRef": "schemas/log-events/login.event.schema.json", "retentionDays": 90, "severity": "info" }, { "key": "scum-logout", "title": "SCUM player logout", "sourceKey": "scum-login-events", "eventType": "scum.logout", "permission": "server.logs.read", "schemaRef": "schemas/log-events/logout.event.schema.json", "retentionDays": 90, "severity": "info" }, { "key": "scum-kill", "title": "SCUM player kill", "sourceKey": "scum-kill-events", "eventType": "scum.kill", "permission": "server.logs.read", "schemaRef": "schemas/log-events/kill.event.schema.json", "retentionDays": 90, "severity": "info" }, { "key": "scum-trade", "title": "SCUM trade activity", "sourceKey": "scum-trade-events", "eventType": "scum.trade", "permission": "server.logs.read", "schemaRef": "schemas/log-events/trade.event.schema.json", "retentionDays": 90, "severity": "info" }, { "key": "scum-mine", "title": "SCUM mine activity", "sourceKey": "scum-server-events", "eventType": "scum.mine", "permission": "server.logs.read", "schemaRef": "schemas/log-events/mine.event.schema.json", "retentionDays": 90, "severity": "warning" }, { "key": "scum-unlock", "title": "SCUM unlock activity", "sourceKey": "scum-server-events", "eventType": "scum.unlock", "permission": "server.logs.read", "schemaRef": "schemas/log-events/unlock.event.schema.json", "retentionDays": 90, "severity": "warning" }, { "key": "scum-admin", "title": "SCUM admin activity", "sourceKey": "scum-admin-events", "eventType": "scum.admin", "permission": "server.logs.read", "schemaRef": "schemas/log-events/admin.event.schema.json", "retentionDays": 90, "severity": "warning" }, { "key": "scum-performance", "title": "SCUM server performance", "sourceKey": "scum-performance-events", "eventType": "scum.performance", "permission": "server.logs.read", "schemaRef": "schemas/log-events/performance.event.schema.json", "retentionDays": 30, "severity": "info" } ], "transportProfiles": [ { "key": "server-files", "kind": "file", "targetKey": "server-root", "capabilities": [ "remote.run.files.read", "remote.run.files.write" ] }, { "key": "ftp", "kind": "ftp", "targetKey": "ftp-root", "capabilities": [ "remote.ftp.read", "remote.ftp.write" ] }, { "key": "rsync", "kind": "rsync", "targetKey": "rsync-root", "capabilities": [ "remote.rsync.read", "remote.rsync.write" ] } ], "clientManagers": [ { "key": "scum-client-manager", "displayName": "SCUM Client Manager", "version": "1.0.0", "repository": { "url": "https://github.com/F88888/scum_client.git", "revisionPolicy": "branch", "branch": "main" }, "supportedTargets": [ { "os": "windows", "arch": "amd64" } ], "build": { "system": "go", "entryRef": "main.go" }, "configTemplates": [ { "key": "client-config", "templateRef": "config.yaml.example", "outputRef": "config.yaml" } ], "outputArtifacts": [ "scum_client.exe" ], "deployment": { "mode": "run-supervised", "executableRef": "scum_client.exe", "autoStart": true, "requiredRunCapabilities": [ "client-manager.deploy", "client-manager.control", "client-manager.update", "client-manager.rollback", "client-manager.uninstall" ] }, "lifecycle": { "actions": ["start", "stop", "restart", "status", "update", "rollback", "uninstall"], "startupTimeoutSeconds": 60, "stopTimeoutSeconds": 30 }, "health": { "mode": "component-heartbeat", "intervalSeconds": 30, "degradedAfterSeconds": 90, "offlineAfterSeconds": 120, "requiredCapabilities": ["component.register", "component.heartbeat", "component.health", "component.control", "game-client.bridge", "logs.stream"] }, "compatibility": { "minimumVersion": "1.0.0", "allowDowngrade": false }, "updatePolicy": { "strategy": "manual-staged", "requireApproval": true, "healthConfirmationSeconds": 60, "retainPrevious": true } } ] } }