okami.mom/albedo

git clone https://git.nkp.pet/okami.mom/albedo

Aly Raffaufrefactor(cli): reuse generated wire and settings contracts7aba059

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