Move game log processing into SCUM companion

This commit is contained in:
npc0-hue
2026-09-02 10:18:27 +08:00
parent 7d9c1b7e9e
commit 40ac46ba17
14 changed files with 328 additions and 232 deletions
@@ -12,9 +12,10 @@ import (
"browser.local/platform/validator"
)
const gameClientBridgeCapability = "game-client.bridge"
const gameClientBridgeLogStreamCapability = "logs.stream"
const gameClientBridgeCapability = "game-client.bridge"
func (svc *CoreService) ClaimGameClientBridgeCommands(request domain.GameClientBridgeClaimRequest) ([]domain.GameClientBridgeCommand, error) {
if err := validator.ValidateGameClientBridgeClaimRequest(request); err != nil {
return nil, err
@@ -128,6 +129,9 @@ func (svc *CoreService) UploadGameClientBridgeSnapshot(request domain.GameClient
return domain.CopyGameClientBridgeSnapshot(snapshot), nil
}
// AuthorizeGameClientBridgeLogStream authenticates a component session and
// returns only its bound server identity. Log entries are forwarded verbatim;
// this method intentionally performs no content inspection or transformation.
func (svc *CoreService) AuthorizeGameClientBridgeLogStream(request domain.GameClientBridgeLogStreamRequest) (domain.ServerInstance, error) {
if err := validator.ValidateGameClientBridgeLogStreamRequest(request); err != nil {
return domain.ServerInstance{}, err
-11
View File
@@ -222,7 +222,6 @@ type Core interface {
SubscribeLogEvents(string) (LogEventSubscription, error)
SubscribeLogEventsForSession(string, string) (LogEventSubscription, error)
IngestLogBatch(domain.LogBatchIngest) (domain.LogBatchIngestResult, error)
RelayLiveLogBatch(domain.LogBatchIngest) (domain.LogBatchIngestResult, error)
GetRunLogStreamProgress(domain.RunLogStreamProgress) (domain.RunLogStreamProgressResult, error)
QueryLogStream(domain.LogStreamCursorQuery) (domain.LogStreamCursorResult, error)
SeedPlatformAdmin(string, string) error
@@ -247,8 +246,6 @@ type CoreService struct {
bridgeSeq uint64
logStore LogBodyStore
logIngestMu [64]sync.Mutex
logProjectionMu sync.Mutex
logProjectionStates map[string]map[string]pluginLogSequenceState
logEventMu sync.Mutex
logEventSubscribers map[uint64]logEventSubscriber
logEventSubscriberSeq uint64
@@ -296,7 +293,6 @@ func newCoreServiceWithLogStore(store repo.Store, logStore LogBodyStore, now fun
controlStreamWaiters: map[string][]chan domain.RunControlEvent{},
jobWaiters: map[string][]chan struct{}{},
logStore: logStore,
logProjectionStates: map[string]map[string]pluginLogSequenceState{},
logEventSubscribers: map[uint64]logEventSubscriber{},
artifactStore: artifactStore,
artifactTransfers: map[string]domain.ArtifactTransferSession{},
@@ -2162,13 +2158,6 @@ func (svc *CoreService) DispatchFileOperationForSession(sessionID string, reques
if request.ExpectedConfigVersion > 0 && request.ExpectedConfigVersion != instance.ConfigVersion {
return domain.FileOperationDispatchResult{}, validationError("expectedConfigVersion must match server instance")
}
user, err := svc.GetCurrentUser(sessionID)
if err != nil {
return domain.FileOperationDispatchResult{}, err
}
if err := svc.requireCompleteRuntimeBindings(user.ID, instance.ID, "file.operation.denied"); err != nil {
return domain.FileOperationDispatchResult{}, err
}
content := request.Content
if request.Operation == domain.FileOperationWrite && content == "" && strings.HasPrefix(request.InputRef, "artifact://") {
artifactID := strings.TrimPrefix(request.InputRef, "artifact://")