Move SCUM lifecycle ownership to plugin

This commit is contained in:
npc0-hue
2026-08-01 09:36:12 +08:00
parent bca4f935ba
commit d1249fca85
49 changed files with 795 additions and 566 deletions
+21
View File
@@ -371,6 +371,7 @@ type GamePluginManifestBody struct {
Capabilities []string `json:"capabilities"`
Permissions []string `json:"permissions"`
Actions PluginLifecycleActionsBody `json:"actions"`
AssetFiles []PluginAssetFileBody `json:"assetFiles,omitempty"`
Pages []GamePluginPageBody `json:"pages,omitempty"`
FileWorkspace PluginFileWorkspaceBody `json:"fileWorkspace,omitempty"`
AI GamePluginManifestAIBody `json:"ai,omitempty"`
@@ -384,6 +385,13 @@ type GamePluginManifestBody struct {
type GamePluginManifestRegistrationRequest struct {
ManifestRef string `json:"manifestRef"`
Manifest GamePluginManifestBody `json:"manifest"`
AssetFiles []PluginAssetFileBody `json:"assetFiles,omitempty"`
}
type PluginAssetFileBody struct {
Path string `json:"path"`
Content string `json:"content,omitempty"`
Mode int `json:"mode,omitempty"`
}
type GamePluginCreateRequest struct {
@@ -996,6 +1004,7 @@ func (request AIProviderUpdateRequest) ToDomain(id string, status domain.AIProvi
func (request GamePluginManifestRegistrationRequest) ToDomain() domain.GamePluginManifestRegistration {
return domain.GamePluginManifestRegistration{
ManifestRef: request.ManifestRef,
AssetFiles: pluginAssetFilesToDomain(request.AssetFiles),
Manifest: domain.GamePluginManifest{
ID: request.Manifest.ID,
Name: request.Manifest.Name,
@@ -1008,6 +1017,7 @@ func (request GamePluginManifestRegistrationRequest) ToDomain() domain.GamePlugi
Capabilities: domain.CopyStringSlice(request.Manifest.Capabilities),
Permissions: domain.CopyStringSlice(request.Manifest.Permissions),
Actions: request.Manifest.Actions.ToDomain(),
AssetFiles: pluginAssetFilesToDomain(request.Manifest.AssetFiles),
Pages: pagesToDomain(request.Manifest.Pages),
FileWorkspace: fileWorkspaceToDomain(request.Manifest.FileWorkspace),
AI: request.Manifest.AI.ToDomain(),
@@ -1020,6 +1030,17 @@ func (request GamePluginManifestRegistrationRequest) ToDomain() domain.GamePlugi
}
}
func pluginAssetFilesToDomain(files []PluginAssetFileBody) []domain.PluginAssetFile {
if files == nil {
return nil
}
out := make([]domain.PluginAssetFile, len(files))
for i, file := range files {
out[i] = domain.PluginAssetFile{Path: file.Path, Content: file.Content, Mode: file.Mode}
}
return out
}
func mapTrajectoryDeclarationToDomain(value *GameMapTrajectoryDeclarationBody) *domain.GameMapTrajectoryDeclaration {
if value == nil {
return nil