package tools import ( "strconv" "strings" ) // patterns.go — доменные эмиттеры probe-паттернов разрешений для omnichannel-mcp. // // Канонический паттерн несёт алиас сервера и ресурс, чтобы мультисерверная // политика оператора могла различать стенды: // // server= app= // server= app= file= // server= version= // server= release // // «always» не эмитим: каждая разрушительная операция должна получать отдельный // ask/allow у оператора (как в proxmox-модуле). // effectiveServer возвращает алиас сервера для паттерна: явный аргумент либо // default из конфига. Без конфига — "default". func effectiveServer(args map[string]any) string { if s := getString(args, "server", ""); s != "" { return s } if m := manager(); m != nil { if cfg, _, err := m.Config(configPathArg(args)); err == nil && cfg.Default != "" { return cfg.Default } } return "default" } func serverPart(args map[string]any) string { return "server=" + effectiveServer(args) } // appPatterns — паттерн ресурса-приложения (deploy/restart/down/migrate/...). func appPatterns(args map[string]any) ([]string, []string) { parts := []string{serverPart(args)} if id := getInt(args, "app_id", 0); id > 0 { parts = append(parts, "app="+strconv.Itoa(id)) } return []string{strings.Join(parts, " ")}, nil } // envPatterns — паттерн env-файла (set_env/restore_env_version). func envPatterns(args map[string]any) ([]string, []string) { parts := []string{serverPart(args)} if id := getInt(args, "app_id", 0); id > 0 { parts = append(parts, "app="+strconv.Itoa(id)) } if fn := getString(args, "filename", ""); fn != "" { parts = append(parts, "file="+fn) } return []string{strings.Join(parts, " ")}, nil } // versionPatterns — паттерн версии конфигурации (restore_compose). func versionPatterns(args map[string]any) ([]string, []string) { parts := []string{serverPart(args)} if id := getInt(args, "version_id", 0); id > 0 { parts = append(parts, "version="+strconv.Itoa(id)) } return []string{strings.Join(parts, " ")}, nil } // releasePatterns — паттерн операций релиза/развёртывания. func releasePatterns(args map[string]any) ([]string, []string) { return []string{serverPart(args) + " release"}, nil }