{ "$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.6", "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": "7779", "configKey": "gamePort" }, { "key": "queryPort", "label": "查询端口", "type": "port", "required": true, "defaultValue": "27015", "configKey": "queryPort" }, { "key": "maxPlayers", "label": "最大玩家数", "type": "number", "required": true, "defaultValue": "128", "configKey": "maxPlayers" } ] }, "capabilities": [ "process.install", "process.start", "process.stop", "process.restart", "process.status", "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.db.sqlite.probe", "remote.run.db.sqlite.query", "remote.run.process.start", "remote.run.process.stop", "remote.run.logs.transfer", "remote.run.protected.sql", "remote.run.protected.rcon", "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" ], "remoteAccess": { "methods": [ "ftp", "rsync", "run" ], "runCapabilities": [ "remote.run.files.read", "remote.run.files.write", "remote.run.db.sqlite.probe", "remote.run.db.sqlite.query", "remote.run.process.start", "remote.run.process.stop", "remote.run.logs.transfer", "remote.run.protected.sql", "remote.run.protected.rcon", "remote.run.program.command" ], "databaseEngines": [ "sqlite" ], "logTransfer": true }, "bridge": { "actions": [ "server.instances.read", "jobs.dispatch", "artifacts.open", "remote.access.request", "ai.invoke", "run.distribution.request", "dependencies.request", "client-manager.request", "plugin-lifecycle.request" ] }, "gameClientBridge": { "commands": [ { "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 } ], "queryTemplates": [], "operationTemplates": [], "commandRetentionSeconds": 604800, "maxCommands": 1000, "features": [ { "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" ] } ], "pages": [ { "pageKey": "players", "snapshotTypes": [ "players", "online.sessions" ], "featureKeys": [] }, { "pageKey": "squads", "snapshotTypes": [ "squads", "flags" ], "featureKeys": [] }, { "pageKey": "live-map", "snapshotTypes": [ "players", "vehicles", "flags" ], "featureKeys": [] }, { "pageKey": "gifts", "snapshotTypes": [ "players" ], "featureKeys": [] } ], "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 } }, "scumLiveData": { "schemaVersion": "1", "probe": { "capability": "remote.run.db.sqlite.probe", "targetKey": "scum-database", "bounds": { "maxObjects": 256, "maxColumnsPerObject": 128, "maxIndexesPerObject": 64, "maxForeignKeys": 64, "maxCardinalityReads": 64, "maxSampleRows": 3, "timeoutMs": 5000, "maxResultBytes": 524288 } }, "capabilityGates": [ { "capability": "schema-probe", "gate": "disabled", "adapterVersion": "scum-live-data-v0", "evidenceStatus": "missing", "safeReason": "等待当前绑定的 Run 证明通用只读 schema probe 可用。" }, { "capability": "players.read", "gate": "disabled", "adapterVersion": "scum-live-data-v0", "evidenceStatus": "missing", "safeReason": "等待当前服务 schema evidence 与版本化 adapter 匹配。" }, { "capability": "player-details.read", "gate": "disabled", "adapterVersion": "scum-live-data-v0", "evidenceStatus": "missing", "safeReason": "等待当前服务玩家详情 join 与字段含义验证。" }, { "capability": "squads.read", "gate": "disabled", "adapterVersion": "scum-live-data-v0", "evidenceStatus": "missing", "safeReason": "等待当前服务队伍表与 rank/leader 含义验证。" }, { "capability": "squad-members.read", "gate": "disabled", "adapterVersion": "scum-live-data-v0", "evidenceStatus": "missing", "safeReason": "等待当前服务队伍成员 join 唯一性验证。" }, { "capability": "vehicles.read", "gate": "disabled", "adapterVersion": "scum-live-data-v0", "evidenceStatus": "missing", "safeReason": "等待当前服务载具 identity、ownership 和坐标验证。" }, { "capability": "flags.read", "gate": "disabled", "adapterVersion": "scum-live-data-v0", "evidenceStatus": "missing", "safeReason": "等待当前服务旗子 ownership 与 territory 关系验证。" }, { "capability": "positions.read", "gate": "disabled", "adapterVersion": "scum-live-data-v0", "evidenceStatus": "missing", "safeReason": "等待当前服务坐标范围、cadence 和 map transform 验证。" }, { "capability": "profile-xml.write", "gate": "disabled", "adapterVersion": "scum-live-data-v0", "evidenceStatus": "missing", "safeReason": "等待真实 XML 来源、字段名、backup 和离线安全证据验证。" }, { "capability": "economy-command.write", "gate": "disabled", "adapterVersion": "scum-live-data-v0", "evidenceStatus": "missing", "safeReason": "等待 Fame/currency command 与 readback confirmation 验证。" }, { "capability": "gift-command.write", "gate": "disabled", "adapterVersion": "scum-live-data-v0", "evidenceStatus": "missing", "safeReason": "等待 gift item catalog、transport 和 conclusive receipt 验证。" } ] }, "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" }, "assetFiles": [ { "path": "actions/install.json", "mode": 384 }, { "path": "actions/start.json", "mode": 384 }, { "path": "actions/stop.json", "mode": 384 }, { "path": "actions/restart.json", "mode": 384 }, { "path": "actions/status.json", "mode": 384 }, { "path": "bin/scum-install-update.cmd", "mode": 448 }, { "path": "bin/scum-start.cmd", "mode": 448 } ], "productionLifecycle": { "operations": [ "install", "enable", "disable", "upgrade", "rollback", "retire", "dependency-check" ], "dependencyPolicy": "required", "approvalRequired": [ "disable", "rollback", "retire" ] }, "pages": [ { "key": "players", "title": "用户管理", "path": "/players", "bundleKey": "scum-server-plugin", "bundleVersion": "1.0.4", "bundleIntegritySha256": "sha256:8b57e66b529dd35cd277ee2e5b839d8844c557b690f1d57db3ec026c26b713dc", "permissions": [ "server.read", "server.game-client.read", "server.game-client.command", "server.game-client.maintenance" ], "bridgeActions": [ "server.instances.read" ], "featureKeys": [] }, { "key": "squads", "title": "队伍管理", "path": "/squads", "bundleKey": "scum-server-plugin", "bundleVersion": "1.0.4", "bundleIntegritySha256": "sha256:8b57e66b529dd35cd277ee2e5b839d8844c557b690f1d57db3ec026c26b713dc", "permissions": [ "server.read", "server.game-client.read" ], "bridgeActions": [ "server.instances.read" ], "featureKeys": [] }, { "key": "live-map", "title": "实时地图", "path": "/live-map", "bundleKey": "scum-server-plugin", "bundleVersion": "1.0.4", "bundleIntegritySha256": "sha256:8b57e66b529dd35cd277ee2e5b839d8844c557b690f1d57db3ec026c26b713dc", "permissions": [ "server.read", "server.game-client.read" ], "bridgeActions": [ "server.instances.read" ], "featureKeys": [] }, { "key": "gifts", "title": "礼包管理", "path": "/gifts", "bundleKey": "scum-server-plugin", "bundleVersion": "1.0.4", "bundleIntegritySha256": "sha256:8b57e66b529dd35cd277ee2e5b839d8844c557b690f1d57db3ec026c26b713dc", "permissions": [ "server.read", "server.game-client.read", "server.game-client.command" ], "bridgeActions": [ "server.instances.read" ], "featureKeys": [] } ], "ai": { "purposes": [ "config.suggest" ], "mediation": "platform", "configWritePolicy": "review-required" }, "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" } ] } ], "logSources": [ { "key": "scum-console-stdout", "kind": "process.stdout", "targetKey": "scum/server-process", "streamKey": "scum.console.stdout", "cursorKind": "sequence", "retentionDays": 30 }, { "key": "scum-console-stderr", "kind": "process.stderr", "targetKey": "scum/server-process", "streamKey": "scum.console.stderr", "cursorKind": "sequence", "retentionDays": 30 }, { "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" ] }, { "key": "scum-database", "kind": "sqlite", "targetKey": "scum-database", "capabilities": [ "remote.run.db.sqlite.probe", "remote.run.db.sqlite.query", "remote.run.protected.sql" ] }, { "key": "scum-management", "kind": "rcon", "targetKey": "scum-management", "capabilities": [ "remote.run.protected.rcon" ] }, { "key": "scum-program", "kind": "program", "targetKey": "scum-program", "capabilities": [ "remote.run.program.command" ] } ], "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" ] }, "updatePolicy": { "strategy": "manual-staged", "requireApproval": true, "healthConfirmationSeconds": 60, "retainPrevious": true } } ] } }