{ "$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.7", "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.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.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, "protectedRequest": { "kind": "rcon", "transportKey": "scum-management", "targetKey": "scum-management", "textField": "requestText", "maxTextBytes": 2048 } }, { "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": "none", "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": "none", "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": "none", "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": "none", "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": "none", "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": "none", "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": "none", "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": [ { "key": "scum.player.profile", "title": "Read SCUM player profile, economy, squad, and position facts", "permission": "server.game-client.read", "engine": "sqlite", "transportKey": "scum-database", "targetKey": "scum-database", "parameterSchemaRef": "schemas/bridge/queries/scum-player-profile.parameters.schema.json", "resultSchemaRef": "schemas/bridge/queries/scum-player-profile.result.schema.json", "sqlRef": "sql/scum-db-v57/users.sql", "pollIntervalSeconds": 3, "rowTarget": { "collection": "scum_users", "upsertKeys": ["steamId"], "writeMode": "merge", "columnMappings": { "userProfileId": "userProfileId", "steamId": "steamId", "gamePlayerId": "gamePlayerId", "displayName": "displayName", "squadId": "squadId", "squadName": "squadName", "famePoints": "famePoints", "normalBalance": "normalBalance", "goldBalance": "goldBalance", "x": "x", "y": "y", "z": "z", "lastLoginTime": "lastLoginTime", "lastSaveTime": "lastSaveTime" } }, "maxRows": 500, "timeoutSeconds": 15 }, { "key": "scum.squads", "title": "Read SCUM squad records", "permission": "server.game-client.read", "engine": "sqlite", "transportKey": "scum-database", "targetKey": "scum-database", "parameterSchemaRef": "schemas/bridge/queries/scum-squads.parameters.schema.json", "resultSchemaRef": "schemas/bridge/queries/scum-squads.result.schema.json", "sqlRef": "sql/scum-db-v57/squads.sql", "pollIntervalSeconds": 1800, "rowTarget": { "collection": "scum_squads", "upsertKeys": ["squadId"], "writeMode": "replace", "columnMappings": { "squadId": "squadId", "name": "name", "leaderProfileId": "leaderProfileId", "leaderPlayerId": "leaderPlayerId", "memberCount": "memberCount", "score": "score", "memberLimit": "memberLimit", "message": "message", "info": "info", "lastMemberLoginTime": "lastMemberLoginTime" } }, "maxRows": 500, "timeoutSeconds": 15 }, { "key": "scum.squad-members", "title": "Read SCUM squad membership records", "permission": "server.game-client.read", "engine": "sqlite", "transportKey": "scum-database", "targetKey": "scum-database", "parameterSchemaRef": "schemas/bridge/queries/scum-squad-members.parameters.schema.json", "resultSchemaRef": "schemas/bridge/queries/scum-squad-members.result.schema.json", "sqlRef": "sql/scum-db-v57/squad-members.sql", "pollIntervalSeconds": 1800, "rowTarget": { "collection": "scum_squad_members", "upsertKeys": ["squadId", "steamId"], "writeMode": "replace", "columnMappings": { "squadId": "squadId", "userProfileId": "userProfileId", "gamePlayerId": "gamePlayerId", "steamId": "steamId", "displayName": "displayName", "rank": "rank", "isLeader": "isLeader" } }, "maxRows": 500, "timeoutSeconds": 15 }, { "key": "scum.vehicles", "title": "Read SCUM vehicle records and coordinates", "permission": "server.game-client.read", "engine": "sqlite", "transportKey": "scum-database", "targetKey": "scum-database", "parameterSchemaRef": "schemas/bridge/queries/scum-vehicles.parameters.schema.json", "resultSchemaRef": "schemas/bridge/queries/scum-vehicles.result.schema.json", "sqlRef": "sql/scum-db-v57/vehicles.sql", "pollIntervalSeconds": 3, "rowTarget": { "collection": "scum_vehicles", "upsertKeys": ["vehicleId"], "writeMode": "replace", "columnMappings": { "vehicleId": "vehicleId", "entityId": "entityId", "className": "className", "label": "label", "x": "x", "y": "y", "z": "z", "lastAccessTime": "lastAccessTime", "isFunctional": "isFunctional" } }, "maxRows": 500, "timeoutSeconds": 15 }, { "key": "scum.flags", "title": "Read SCUM flag and ownership records", "permission": "server.game-client.read", "engine": "sqlite", "transportKey": "scum-database", "targetKey": "scum-database", "parameterSchemaRef": "schemas/bridge/queries/scum-flags.parameters.schema.json", "resultSchemaRef": "schemas/bridge/queries/scum-flags.result.schema.json", "sqlRef": "sql/scum-db-v57/flags.sql", "pollIntervalSeconds": 1800, "rowTarget": { "collection": "scum_flags", "upsertKeys": ["flagId"], "writeMode": "replace", "columnMappings": { "flagId": "flagId", "entityId": "entityId", "baseId": "baseId", "ownerProfileId": "ownerProfileId", "ownerPlayerId": "ownerPlayerId", "ownerSquadId": "ownerSquadId", "ownerSquadName": "ownerSquadName", "overtakerProfileId": "overtakerProfileId", "overtakeEndTime": "overtakeEndTime", "ownershipConfidence": "ownershipConfidence", "x": "x", "y": "y", "z": "z" } }, "maxRows": 500, "timeoutSeconds": 15 }, { "key": "scum.positions", "title": "Read SCUM player, vehicle, base, and flag coordinates", "permission": "server.game-client.read", "engine": "sqlite", "transportKey": "scum-database", "targetKey": "scum-database", "parameterSchemaRef": "schemas/bridge/queries/scum-positions.parameters.schema.json", "resultSchemaRef": "schemas/bridge/queries/scum-positions.result.schema.json", "sqlRef": "sql/scum-db-v57/map-points.sql", "pollIntervalSeconds": 3, "rowTarget": { "collection": "scum_map_points", "upsertKeys": ["subjectType", "subjectId"], "writeMode": "replace", "columnMappings": { "subjectType": "subjectType", "subjectId": "subjectId", "userProfileId": "userProfileId", "gamePlayerId": "gamePlayerId", "vehicleId": "vehicleId", "entityId": "entityId", "baseId": "baseId", "x": "x", "y": "y", "z": "z", "observedAt": "observedAt" } }, "maxRows": 500, "timeoutSeconds": 15 }, { "key": "scum.tasks", "title": "Read SCUM v57 quest and task records", "permission": "server.game-client.read", "engine": "sqlite", "transportKey": "scum-database", "targetKey": "scum-database", "parameterSchemaRef": "schemas/bridge/queries/scum-tasks.parameters.schema.json", "resultSchemaRef": "schemas/bridge/queries/scum-tasks.result.schema.json", "sqlRef": "sql/scum-db-v57/tasks.sql", "pollIntervalSeconds": 1800, "rowTarget": { "collection": "scum_tasks", "upsertKeys": ["taskRecordId"], "writeMode": "replace", "columnMappings": { "taskRecordId": "taskRecordId", "taskKind": "taskKind", "userProfileId": "userProfileId", "mapId": "mapId", "trackingDataSetId": "trackingDataSetId", "dataAssetPath": "dataAssetPath", "sequenceIndex": "sequenceIndex", "isTracked": "isTracked", "state": "state", "completionDeadline": "completionDeadline" } }, "maxRows": 500, "timeoutSeconds": 15 }, { "key": "scum.events", "title": "Read SCUM v57 native event rounds and statistics", "permission": "server.game-client.read", "engine": "sqlite", "transportKey": "scum-database", "targetKey": "scum-database", "parameterSchemaRef": "schemas/bridge/queries/scum-events.parameters.schema.json", "resultSchemaRef": "schemas/bridge/queries/scum-events.result.schema.json", "sqlRef": "sql/scum-db-v57/events.sql", "pollIntervalSeconds": 1800, "rowTarget": { "collection": "scum_native_event_rounds", "upsertKeys": ["eventRecordId"], "writeMode": "replace", "columnMappings": { "eventRecordId": "eventRecordId", "eventId": "eventId", "roundId": "roundId", "userProfileId": "userProfileId", "startTime": "startTime", "endTime": "endTime", "state": "state", "score": "score", "enemyKills": "enemyKills", "teamKills": "teamKills", "deaths": "deaths", "assists": "assists", "headshots": "headshots" } }, "maxRows": 500, "timeoutSeconds": 15 }, { "key": "scum.native-timed-gifts", "title": "Read SCUM v57 native timed gift completion records", "permission": "server.game-client.read", "engine": "sqlite", "transportKey": "scum-database", "targetKey": "scum-database", "parameterSchemaRef": "schemas/bridge/queries/scum-native-timed-gifts.parameters.schema.json", "resultSchemaRef": "schemas/bridge/queries/scum-native-timed-gifts.result.schema.json", "sqlRef": "sql/scum-db-v57/native-timed-gifts.sql", "pollIntervalSeconds": 1800, "rowTarget": { "collection": "scum_timed_gift_events", "upsertKeys": ["timedGiftId"], "writeMode": "replace", "columnMappings": { "timedGiftId": "timedGiftId", "userProfileId": "userProfileId", "mapId": "mapId", "spawnTime": "spawnTime", "spawnAt": "spawnAt" } }, "maxRows": 500, "timeoutSeconds": 15 } ], "logProjections": [ { "key": "scum.battleye.login", "streamKeys": ["scum.console.stdout"], "steps": [ { "pattern": "Player \"(?P[^\"]+)\" reported as player (?P\\d+)" }, { "pattern": "Player (?P\\d+) SteamID \\(assumed\\): (?P\\d+)" } ], "correlationFields": ["slot"], "maxInterveningLines": 8, "target": { "collection": "scum_users", "upsertKeys": ["steamId"], "captureMappings": { "steamId": "steamId", "displayName": "displayName", "slot": "slot" }, "fixedValues": { "online": "true", "source": "process.stdout" }, "observedAtField": "lastLoginObservedAt" }, "presence": { "timestampField": "lastLoginObservedAt", "activeWindowSeconds": 600, "activityTarget": { "collection": "scum_activity_events", "upsertKeys": ["steamId", "observedAt"], "captureMappings": { "steamId": "steamId", "displayName": "displayName" }, "fixedValues": { "eventType": "login", "source": "process.stdout" }, "observedAtField": "observedAt" }, "announcement": { "profileKey": "scum-client-manager", "commandType": "announcement.send", "textField": "requestText", "newTextTemplate": "#announce 欢迎新玩家 {{displayName}} 加入服务器!", "returningTextTemplate": "#announce 欢迎 {{displayName}} 继续游戏!" } } } ], "dataPacks": [ { "key": "scum-db-v57", "databaseUserVersion": 57, "logParserRefs": ["data-packs/scum-db-v57/log-parsers.json"], "configMapRefs": ["data-packs/scum-db-v57/config-maps.json"], "dataRefs": ["data-packs/scum-db-v57/gift-items.json", "data-packs/scum-db-v57/map-geometry.json"] } ], "operationTemplates": [ { "key": "player.fame.set", "title": "Set SCUM player fame through RCON", "permission": "server.game-client.command", "approvalLevel": "operator", "kind": "rcon", "transportKey": "scum-management", "targetKey": "scum-management", "payloadSchemaRef": "schemas/bridge/player-fame-set.payload.schema.json", "resultSchemaRef": "schemas/bridge/player-rcon-set.result.schema.json", "confirmationSchemaRef": "schemas/bridge/player-fame-set.confirmation.schema.json", "timeoutSeconds": 60, "maxPayloadBytes": 2048, "safety": { "requiresApproval": true, "requiresConfirmation": true } }, { "key": "player.currency.normal.set", "title": "Set SCUM normal currency through RCON", "permission": "server.game-client.command", "approvalLevel": "operator", "kind": "rcon", "transportKey": "scum-management", "targetKey": "scum-management", "payloadSchemaRef": "schemas/bridge/player-currency-set.payload.schema.json", "resultSchemaRef": "schemas/bridge/player-rcon-set.result.schema.json", "confirmationSchemaRef": "schemas/bridge/player-currency-set.confirmation.schema.json", "timeoutSeconds": 60, "maxPayloadBytes": 2048, "safety": { "requiresApproval": true, "requiresConfirmation": true } }, { "key": "player.currency.gold.set", "title": "Set SCUM gold currency through RCON", "permission": "server.game-client.command", "approvalLevel": "operator", "kind": "rcon", "transportKey": "scum-management", "targetKey": "scum-management", "payloadSchemaRef": "schemas/bridge/player-currency-set.payload.schema.json", "resultSchemaRef": "schemas/bridge/player-rcon-set.result.schema.json", "confirmationSchemaRef": "schemas/bridge/player-currency-set.confirmation.schema.json", "timeoutSeconds": 60, "maxPayloadBytes": 2048, "safety": { "requiresApproval": true, "requiresConfirmation": true } }, { "key": "player.notify", "title": "Notify SCUM player through RCON chat", "permission": "server.game-client.command", "approvalLevel": "operator", "kind": "rcon", "transportKey": "scum-management", "targetKey": "scum-management", "payloadSchemaRef": "schemas/bridge/player-notify.payload.schema.json", "resultSchemaRef": "schemas/bridge/player-notify.result.schema.json", "confirmationSchemaRef": "schemas/bridge/player-notify.confirmation.schema.json", "timeoutSeconds": 60, "maxPayloadBytes": 2048, "safety": { "requiresApproval": true, "requiresConfirmation": true } }, { "key": "reward.deliver", "title": "Deliver approved SCUM reward through typed command workflow", "permission": "server.game-client.command", "approvalLevel": "operator", "kind": "rcon", "transportKey": "scum-management", "targetKey": "scum-management", "payloadSchemaRef": "schemas/bridge/reward-deliver.payload.schema.json", "resultSchemaRef": "schemas/bridge/reward-deliver.result.schema.json", "confirmationSchemaRef": "schemas/bridge/reward-deliver.confirmation.schema.json", "timeoutSeconds": 60, "maxPayloadBytes": 4096, "safety": { "requiresApproval": true, "requiresConfirmation": true } }, { "key": "player.attribute.855.set", "title": "Set SCUM DB-only player attribute 855", "permission": "server.game-client.maintenance", "approvalLevel": "platform-admin", "kind": "sqlite-mutation", "transportKey": "scum-database", "targetKey": "scum-database", "payloadSchemaRef": "schemas/bridge/player-attribute-855-set.payload.schema.json", "resultSchemaRef": "schemas/bridge/player-attribute-855-set.result.schema.json", "confirmationSchemaRef": "schemas/bridge/player-attribute-855-set.confirmation.schema.json", "timeoutSeconds": 120, "maxPayloadBytes": 4096, "maxRowsAffected": 1, "mutation": { "fieldKey": "855", "tableKey": "prisoner", "identityKey": "user_profile_id", "valueKey": "value", "confirmationQueryKey": "scum.player.profile", "allowedValueType": "integer", "minValue": 0, "maxValue": 100000 }, "safety": { "requiresApproval": true, "requiresOfflinePlayer": true, "requiresMaintenanceWindow": true, "requiresBeforeValue": true, "requiresConfirmation": true, "backupRequired": true } } ], "commandRetentionSeconds": 604800, "maxCommands": 1000, "features": [ { "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": "players", "snapshotTypes": [ "players", "online.sessions" ], "queryTemplateKeys": [ "scum.player.profile", "scum.positions" ], "operationKeys": [ "player.fame.set", "player.currency.normal.set", "player.currency.gold.set", "player.notify", "player.attribute.855.set" ], "featureKeys": [ "player.intelligence", "state.patch" ] }, { "pageKey": "squads", "snapshotTypes": [ "squads", "flags" ], "queryTemplateKeys": [ "scum.squads", "scum.squad-members", "scum.flags" ], "featureKeys": [ "player.intelligence" ] }, { "pageKey": "live-map", "snapshotTypes": [ "players", "vehicles", "flags" ], "queryTemplateKeys": [ "scum.player.profile", "scum.vehicles", "scum.flags", "scum.positions" ], "featureKeys": [ "trajectory.collect" ] }, { "pageKey": "gifts", "snapshotTypes": [ "players" ], "queryTemplateKeys": [ "scum.native-timed-gifts" ], "commandTypes": [ "reward.deliver" ], "operationKeys": [ "reward.deliver", "player.notify" ], "featureKeys": [ "reward.delivery" ] }, { "pageKey": "workflows", "queryTemplateKeys": [ "scum.player.profile", "scum.squads", "scum.squad-members", "scum.vehicles", "scum.flags", "scum.positions", "scum.tasks", "scum.events", "scum.native-timed-gifts" ], "commandTypes": [ "event.start" ], "featureKeys": [ "player.intelligence" ] } ], "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" }, "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 }, { "path": "assets/map/scum-map-overview.jpg", "mode": 384 }, { "path": "sql/scum-db-v57/users.sql", "mode": 384 }, { "path": "sql/scum-db-v57/squads.sql", "mode": 384 }, { "path": "sql/scum-db-v57/squad-members.sql", "mode": 384 }, { "path": "sql/scum-db-v57/vehicles.sql", "mode": 384 }, { "path": "sql/scum-db-v57/flags.sql", "mode": 384 }, { "path": "sql/scum-db-v57/map-points.sql", "mode": 384 }, { "path": "sql/scum-db-v57/tasks.sql", "mode": 384 }, { "path": "sql/scum-db-v57/events.sql", "mode": 384 }, { "path": "sql/scum-db-v57/native-timed-gifts.sql", "mode": 384 }, { "path": "data-packs/scum-db-v57/config-maps.json", "mode": 384 }, { "path": "data-packs/scum-db-v57/log-parsers.json", "mode": 384 }, { "path": "data-packs/scum-db-v57/gift-items.json", "mode": 384 }, { "path": "data-packs/scum-db-v57/map-geometry.json", "mode": 384 } ], "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.3", "bundleIntegritySha256": "sha256:3488b316d909e597024f8f31c7bc96ab8019f643d74a528dc442d3df0dc3d54e", "permissions": [ "server.read", "server.remote.access", "server.game-client.read", "server.game-client.command", "server.game-client.maintenance" ], "bridgeActions": [ "server.instances.read", "remote.access.request" ], "featureKeys": [ "player.intelligence", "state.patch" ] }, { "key": "squads", "title": "队伍管理", "path": "/squads", "bundleKey": "scum-server-plugin", "bundleVersion": "1.0.3", "bundleIntegritySha256": "sha256:3488b316d909e597024f8f31c7bc96ab8019f643d74a528dc442d3df0dc3d54e", "permissions": [ "server.read", "server.remote.access", "server.game-client.read" ], "bridgeActions": [ "server.instances.read", "remote.access.request" ], "featureKeys": [ "player.intelligence" ] }, { "key": "live-map", "title": "实时地图", "path": "/live-map", "bundleKey": "scum-server-plugin", "bundleVersion": "1.0.3", "bundleIntegritySha256": "sha256:3488b316d909e597024f8f31c7bc96ab8019f643d74a528dc442d3df0dc3d54e", "permissions": [ "server.read", "server.remote.access", "server.game-client.read" ], "bridgeActions": [ "server.instances.read", "remote.access.request" ], "featureKeys": [ "trajectory.collect" ] }, { "key": "gifts", "title": "礼包管理", "path": "/gifts", "bundleKey": "scum-server-plugin", "bundleVersion": "1.0.3", "bundleIntegritySha256": "sha256:3488b316d909e597024f8f31c7bc96ab8019f643d74a528dc442d3df0dc3d54e", "permissions": [ "server.read", "server.remote.access", "server.game-client.read", "server.game-client.command" ], "bridgeActions": [ "server.instances.read", "remote.access.request" ], "featureKeys": [ "reward.delivery" ] }, { "key": "workflows", "title": "活动管理", "path": "/activity", "bundleKey": "scum-server-plugin", "bundleVersion": "1.0.3", "bundleIntegritySha256": "sha256:3488b316d909e597024f8f31c7bc96ab8019f643d74a528dc442d3df0dc3d54e", "permissions": [ "server.read", "server.remote.access", "server.game-client.read", "server.game-client.command" ], "bridgeActions": [ "server.instances.read", "remote.access.request" ], "featureKeys": [ "player.intelligence" ] } ], "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.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 } } ] } }