diff --git a/agent/internal/httpapi/uiconfig.go b/agent/internal/httpapi/uiconfig.go index b9c281d..b2b4d6a 100644 --- a/agent/internal/httpapi/uiconfig.go +++ b/agent/internal/httpapi/uiconfig.go @@ -70,13 +70,28 @@ func (s *Server) handleConfigUIState(w http.ResponseWriter, r *http.Request) { } root, _ := readUIRootConfig(s.agentCfg.ConfigPath) + // Force templates/instances-only view. + // templates = union(current templates, built-in templates) + tplKeys := map[string]bool{} + for k := range root.Templates { + tplKeys[k] = true + } + for k := range uiTemplates() { + tplKeys[k] = true + } + mergedTpls := make([]string, 0, len(tplKeys)) + for k := range tplKeys { + mergedTpls = append(mergedTpls, k) + } + sort.Strings(mergedTpls) + resp := map[string]any{ "ok": true, "global": root.Global, "queue": root.Queue, "instances": root.Instances, - "templates": sortedKeys(uiTemplates()), + "templates": mergedTpls, } writeJSON(w, http.StatusOK, resp) } @@ -145,7 +160,18 @@ func (s *Server) planUIConfig(req uiPlanRequest) (uiPlanResponse, error) { } warnings := []string{} - tpls := uiTemplates() + + // Allow both built-in templates and templates already present in the current config. + // Merge rule: keep existing templates as-is; add built-in templates if missing. + tpls := map[string]any{} + for k, v := range cur.Templates { + tpls[k] = v + } + for k, v := range uiTemplates() { + if _, ok := tpls[k]; !ok { + tpls[k] = v + } + } seen := map[string]bool{} for i := range req.Instances { @@ -239,6 +265,11 @@ func readUIRootConfig(path string) (uiRootConfig, error) { b, err := os.ReadFile(path) if err != nil { if os.IsNotExist(err) { + // Return a well-formed empty state. + out.Instances = []UIInstance{} + out.Global = map[string]any{} + out.Queue = map[string]any{} + out.Templates = map[string]any{} return out, nil } return out, err @@ -253,6 +284,9 @@ func readUIRootConfig(path string) (uiRootConfig, error) { if out.Queue == nil { out.Queue = map[string]any{} } + if out.Templates == nil { + out.Templates = map[string]any{} + } return out, nil } diff --git a/agent/rk3588-agent b/agent/rk3588-agent index 259128d..621365c 100644 Binary files a/agent/rk3588-agent and b/agent/rk3588-agent differ