okami.mom/albedo
git clone https://git.nkp.pet/okami.mom/albedo
7aba059
main
1package daemon 2 3import ( 4"context" 5 6"albedo/cli/internal/daemon/protocol" 7) 8 9type ExtensionSummary struct { 10Name ,Description ,Quarantined ,SessionETag ,GlobalETag string 11Tools ,PythonModules ,Requires ,Plugins []string 12Enabled ,Context ,Overridden ,GlobalEnabled bool 13} 14type ExtensionSelectionRequest struct { 15Name ,Scope ,ETag string 16Enabled * bool 17} 18 19func ListExtensions (ctx context.Context ,conn * Connection ,session string ) ([]ExtensionSummary ,error ) { 20catalog ,err := GetCapabilityCatalog (ctx ,conn ,session ) 21if err != nil { 22return nil ,err 23 } 24configuration ,err := GetSessionConfiguration (ctx ,conn ,session ) 25if err != nil { 26return nil ,err 27 } 28settings ,err := GetSettings (ctx ,conn ) 29if err != nil { 30return nil ,err 31 } 32result := []ExtensionSummary {} 33for _ ,candidate := range catalog .Candidates { 34if candidate .Kind != "extensions" { 35continue 36 } 37quarantine := "" 38if candidate .Quarantined { 39quarantine = value (candidate .Diagnostic ) 40 } 41item := ExtensionSummary {Name :candidate .ID ,Description :value (candidate .Description ),Quarantined :quarantine ,Enabled :candidate .EffectiveEnabled ,Overridden :candidate .SessionOverride != nil ,GlobalEnabled :candidate .GlobalPreference == nil || * candidate .GlobalPreference ,Requires :candidate .Dependencies ,SessionETag :configuration .ETag ,GlobalETag :settings .ETags ["extensions" ]} 42if candidate .Extension != nil { 43item .Context = candidate .Extension .Context 44item .Tools = candidate .Extension .Tools 45item .PythonModules = candidate .Extension .PythonModules 46item .Plugins = candidate .Extension .Plugins 47 } 48result = append (result ,item ) 49 } 50return result ,nil 51} 52func SelectExtension (ctx context.Context ,conn * Connection ,session string ,request ExtensionSelectionRequest ) ([]ExtensionSummary ,error ) { 53if request .Scope == "global" { 54var change protocol.ExtensionSettingsChange 55err := patchSettingsGroup (ctx ,conn ,"extensions" ,request .ETag ,struct { 56Defaults map [string ]* bool `json:"defaults"` 57 }{map [string ]* bool {request .Name :request .Enabled }},& change ) 58if err != nil { 59return nil ,err 60 } 61 }else { 62if _ ,err := setSelection (ctx ,conn ,session ,"extensions" ,request .Name ,"" ,request .Scope ,request .ETag ,request .Enabled );err != nil { 63return nil ,err 64 } 65 } 66return ListExtensions (ctx ,conn ,session ) 67}