diff --git a/backend/cmd/app/main.go b/backend/cmd/app/main.go index 3b77a3e0..b437ba3f 100644 --- a/backend/cmd/app/main.go +++ b/backend/cmd/app/main.go @@ -65,8 +65,7 @@ func main() { // 初始化插件管理器 _, err = bootstrap.BootstrapPlugin(ctx, deps, cfg, r) if err != nil { - logger.ErrorF(ctx, "BootstrapPlugin failed: %s", err.Error()) - return + logger.WarnF(ctx, "BootstrapPlugin failed, continue without plugin runtime: %s", err.Error()) } // 配置 HTTP 路由 diff --git a/backend/cmd/capability_gen/main.go b/backend/cmd/capability_gen/main.go new file mode 100644 index 00000000..1ecc1fb6 --- /dev/null +++ b/backend/cmd/capability_gen/main.go @@ -0,0 +1,640 @@ +package main + +import ( + "errors" + "flag" + "fmt" + "os" + "path/filepath" + "regexp" + "sort" + "strings" + + "github.com/getkin/kin-openapi/openapi3" + "gopkg.in/yaml.v3" +) + +type stringListFlag []string + +func (s *stringListFlag) String() string { + return strings.Join(*s, ",") +} + +func (s *stringListFlag) Set(v string) error { + v = strings.TrimSpace(v) + if v == "" { + return nil + } + for _, p := range strings.Split(v, ",") { + p = strings.TrimSpace(p) + if p != "" { + *s = append(*s, p) + } + } + return nil +} + +type capabilityFile struct { + Version int `yaml:"version"` + Capabilities []capabilityEntry `yaml:"capabilities"` +} + +type capabilityEntry struct { + CapabilityID string `yaml:"capability_id"` + Module string `yaml:"module"` + Title string `yaml:"title"` + Description string `yaml:"description,omitempty"` + Categories []string `yaml:"categories,omitempty"` + Intents []string `yaml:"intents,omitempty"` + ToolScopes []string `yaml:"tool_scopes,omitempty"` + Policy capabilityPolicy `yaml:"policy"` + Docs []string `yaml:"docs,omitempty"` + Protocols []protocolEntry `yaml:"protocols"` +} + +type capabilityPolicy struct { + Prefer string `yaml:"prefer,omitempty"` + Fallback []string `yaml:"fallback,omitempty"` +} + +type protocolEntry struct { + Channel string `yaml:"channel"` + Endpoint string `yaml:"endpoint,omitempty"` + Method string `yaml:"method,omitempty"` + RPC string `yaml:"rpc,omitempty"` + SchemaRef string `yaml:"schema_ref,omitempty"` + AuthType string `yaml:"auth_type,omitempty"` + ToolScope string `yaml:"tool_scope,omitempty"` +} + +type config struct { + OpenAPIFiles []string + ProtoInputs []string + GinSources []string + Out string + Prefix string + AuthType string + APIPrefix string + DryRun bool +} + +func main() { + var openapiInputs stringListFlag + var protoInputs stringListFlag + var ginSources stringListFlag + cfg := config{} + flag.Var(&openapiInputs, "openapi", "OpenAPI json/yaml file (repeatable or comma-separated)") + flag.Var(&protoInputs, "proto", "Proto file or directory (repeatable or comma-separated)") + flag.Var(&ginSources, "gin-src", "Go source directory/file for Gin routes (repeatable or comma-separated)") + flag.StringVar(&cfg.Out, "out", "backend/config/platform_capabilities/generated.auto.yaml", "output capability yaml path") + flag.StringVar(&cfg.Prefix, "prefix", "com.corex", "capability_id prefix") + flag.StringVar(&cfg.AuthType, "auth", "tenant_jwt", "default auth_type") + flag.StringVar(&cfg.APIPrefix, "api-prefix", "/api/v1", "api prefix for generated Gin routes") + flag.BoolVar(&cfg.DryRun, "dry-run", false, "print YAML to stdout instead of writing file") + flag.Parse() + + cfg.OpenAPIFiles = openapiInputs + cfg.ProtoInputs = protoInputs + cfg.GinSources = ginSources + + if len(cfg.OpenAPIFiles) == 0 && len(cfg.ProtoInputs) == 0 && len(cfg.GinSources) == 0 { + fatalf("at least one --openapi, --proto or --gin-src is required") + } + + entries, err := buildCapabilities(cfg) + if err != nil { + fatalf("build capabilities failed: %v", err) + } + if len(entries) == 0 { + fatalf("no capabilities generated") + } + sort.Slice(entries, func(i, j int) bool { return entries[i].CapabilityID < entries[j].CapabilityID }) + + out := capabilityFile{Version: 1, Capabilities: entries} + raw, err := yaml.Marshal(out) + if err != nil { + fatalf("marshal yaml failed: %v", err) + } + + if cfg.DryRun { + fmt.Printf("%s", raw) + return + } + if err := os.MkdirAll(filepath.Dir(cfg.Out), 0o755); err != nil { + fatalf("create output dir failed: %v", err) + } + if err := os.WriteFile(cfg.Out, raw, 0o644); err != nil { + fatalf("write output failed: %v", err) + } + fmt.Printf("generated %d capabilities -> %s\n", len(entries), cfg.Out) +} + +func buildCapabilities(cfg config) ([]capabilityEntry, error) { + entries := make([]capabilityEntry, 0, 256) + seen := map[string]struct{}{} + seenRoute := map[string]struct{}{} + + for _, path := range cfg.OpenAPIFiles { + opEntries, err := genFromOpenAPI(path, cfg.Prefix, cfg.AuthType) + if err != nil { + return nil, err + } + for _, e := range opEntries { + if _, ok := seen[e.CapabilityID]; ok { + continue + } + seen[e.CapabilityID] = struct{}{} + entries = append(entries, e) + if len(e.Protocols) > 0 { + rk := strings.ToUpper(strings.TrimSpace(e.Protocols[0].Method)) + " " + strings.TrimSpace(e.Protocols[0].Endpoint) + seenRoute[rk] = struct{}{} + } + } + } + + protoFiles, err := collectProtoFiles(cfg.ProtoInputs) + if err != nil { + return nil, err + } + for _, path := range protoFiles { + psEntries, err := genFromProto(path, cfg.Prefix, cfg.AuthType) + if err != nil { + return nil, err + } + for _, e := range psEntries { + if _, ok := seen[e.CapabilityID]; ok { + continue + } + seen[e.CapabilityID] = struct{}{} + entries = append(entries, e) + } + } + + ginFiles, err := collectGoFiles(cfg.GinSources) + if err != nil { + return nil, err + } + for _, path := range ginFiles { + ginEntries, gerr := genFromGinSource(path, cfg.Prefix, cfg.AuthType, cfg.APIPrefix, seenRoute) + if gerr != nil { + return nil, gerr + } + for _, e := range ginEntries { + if _, ok := seen[e.CapabilityID]; ok { + continue + } + seen[e.CapabilityID] = struct{}{} + entries = append(entries, e) + if len(e.Protocols) > 0 { + rk := strings.ToUpper(strings.TrimSpace(e.Protocols[0].Method)) + " " + strings.TrimSpace(e.Protocols[0].Endpoint) + seenRoute[rk] = struct{}{} + } + } + } + + return entries, nil +} + +func genFromOpenAPI(path, prefix, auth string) ([]capabilityEntry, error) { + ldr := &openapi3.Loader{IsExternalRefsAllowed: true} + doc, err := ldr.LoadFromFile(path) + if err != nil { + return nil, fmt.Errorf("load openapi %s: %w", path, err) + } + + entries := make([]capabilityEntry, 0, len(doc.Paths)*2) + for p, item := range doc.Paths { + ops := map[string]*openapi3.Operation{ + "GET": item.Get, + "POST": item.Post, + "PUT": item.Put, + "PATCH": item.Patch, + "DELETE": item.Delete, + "OPTIONS": item.Options, + "HEAD": item.Head, + } + for method, op := range ops { + if op == nil { + continue + } + module := moduleFromPath(p) + action := "invoke" + if op.OperationID != "" { + action = slug(op.OperationID) + } else { + action = slug(method + "_" + p) + } + id := joinID(prefix, "rest", module, action) + title := strings.TrimSpace(op.Summary) + if title == "" { + title = method + " " + p + } + desc := strings.TrimSpace(op.Description) + if desc == "" { + desc = "Generated from OpenAPI" + } + scope := module + ".api" + if module == "core" { + scope = "core.api" + } + entries = append(entries, capabilityEntry{ + CapabilityID: id, + Module: module, + Title: title, + Description: desc, + Categories: []string{module, "openapi", "generated"}, + Intents: []string{module + "." + action}, + ToolScopes: []string{scope}, + Policy: capabilityPolicy{Prefer: "rest"}, + Docs: []string{path}, + Protocols: []protocolEntry{{ + Channel: "rest", + Endpoint: p, + Method: method, + SchemaRef: path + "#/paths/" + escapeJSONPointer(p) + "/" + strings.ToLower(method), + AuthType: auth, + ToolScope: scope, + }}, + }) + } + } + return entries, nil +} + +var ( + rePkg = regexp.MustCompile(`(?m)^\s*package\s+([a-zA-Z0-9_.]+)\s*;`) + reService = regexp.MustCompile(`^\s*service\s+([A-Za-z0-9_]+)\s*\{`) + reRPC = regexp.MustCompile(`^\s*rpc\s+([A-Za-z0-9_]+)\s*\(`) + reCloseObj = regexp.MustCompile(`^\s*}\s*;?\s*$`) +) + +func genFromProto(path, prefix, auth string) ([]capabilityEntry, error) { + raw, err := os.ReadFile(path) + if err != nil { + return nil, fmt.Errorf("read proto %s: %w", path, err) + } + content := string(raw) + pkg := "powerx.core.v1" + if m := rePkg.FindStringSubmatch(content); len(m) == 2 { + pkg = strings.TrimSpace(m[1]) + } + module := moduleFromPackage(pkg) + scope := module + ".grpc" + + lines := strings.Split(content, "\n") + entries := make([]capabilityEntry, 0, 64) + inService := false + service := "" + for _, line := range lines { + if !inService { + if m := reService.FindStringSubmatch(line); len(m) == 2 { + inService = true + service = m[1] + } + continue + } + if reCloseObj.MatchString(line) { + inService = false + service = "" + continue + } + m := reRPC.FindStringSubmatch(line) + if len(m) != 2 { + continue + } + rpc := m[1] + action := slug(rpc) + endpoint := pkg + "." + service + id := joinID(prefix, "grpc", module, slug(service), action) + title := service + "." + rpc + entries = append(entries, capabilityEntry{ + CapabilityID: id, + Module: module, + Title: title, + Description: "Generated from proto", + Categories: []string{module, "grpc", "generated"}, + Intents: []string{module + "." + action}, + ToolScopes: []string{scope}, + Policy: capabilityPolicy{Prefer: "grpc"}, + Docs: []string{path}, + Protocols: []protocolEntry{{ + Channel: "grpc", + Endpoint: endpoint, + RPC: rpc, + SchemaRef: path + "#" + service, + AuthType: auth, + ToolScope: scope, + }}, + }) + } + return entries, nil +} + +func collectProtoFiles(inputs []string) ([]string, error) { + if len(inputs) == 0 { + return nil, nil + } + files := make([]string, 0, 64) + seen := map[string]struct{}{} + for _, in := range inputs { + if in == "" { + continue + } + st, err := os.Stat(in) + if err != nil { + return nil, fmt.Errorf("stat %s: %w", in, err) + } + if !st.IsDir() { + if strings.HasSuffix(strings.ToLower(in), ".proto") { + abs, _ := filepath.Abs(in) + if _, ok := seen[abs]; !ok { + seen[abs] = struct{}{} + files = append(files, in) + } + } + continue + } + err = filepath.WalkDir(in, func(path string, d os.DirEntry, walkErr error) error { + if walkErr != nil { + return walkErr + } + if d.IsDir() { + return nil + } + if !strings.HasSuffix(strings.ToLower(path), ".proto") { + return nil + } + abs, _ := filepath.Abs(path) + if _, ok := seen[abs]; ok { + return nil + } + seen[abs] = struct{}{} + files = append(files, path) + return nil + }) + if err != nil { + return nil, err + } + } + sort.Strings(files) + return files, nil +} + +func collectGoFiles(inputs []string) ([]string, error) { + if len(inputs) == 0 { + return nil, nil + } + files := make([]string, 0, 128) + seen := map[string]struct{}{} + for _, in := range inputs { + if in == "" { + continue + } + st, err := os.Stat(in) + if err != nil { + return nil, fmt.Errorf("stat %s: %w", in, err) + } + if !st.IsDir() { + if strings.HasSuffix(strings.ToLower(in), ".go") { + abs, _ := filepath.Abs(in) + if _, ok := seen[abs]; !ok { + seen[abs] = struct{}{} + files = append(files, in) + } + } + continue + } + err = filepath.WalkDir(in, func(path string, d os.DirEntry, walkErr error) error { + if walkErr != nil { + return walkErr + } + if d.IsDir() { + return nil + } + if !strings.HasSuffix(strings.ToLower(path), ".go") { + return nil + } + abs, _ := filepath.Abs(path) + if _, ok := seen[abs]; ok { + return nil + } + seen[abs] = struct{}{} + files = append(files, path) + return nil + }) + if err != nil { + return nil, err + } + } + sort.Strings(files) + return files, nil +} + +var ( + reGroupAssign = regexp.MustCompile(`^\s*([A-Za-z_][A-Za-z0-9_]*)\s*:=\s*([A-Za-z_][A-Za-z0-9_]*)\.Group\("([^"]+)"\)`) + reRouteCall = regexp.MustCompile(`^\s*([A-Za-z_][A-Za-z0-9_]*)\.(GET|POST|PUT|PATCH|DELETE|OPTIONS|HEAD|Any)\("([^"]+)"`) +) + +func genFromGinSource(path, prefix, auth, apiPrefix string, seenRoute map[string]struct{}) ([]capabilityEntry, error) { + raw, err := os.ReadFile(path) + if err != nil { + return nil, fmt.Errorf("read go source %s: %w", path, err) + } + lines := strings.Split(string(raw), "\n") + groupBase := map[string]string{ + "publicGroup": "", + "protectedGroup": "", + "group": "", + } + out := make([]capabilityEntry, 0, 32) + for _, line := range lines { + if m := reGroupAssign.FindStringSubmatch(line); len(m) == 4 { + child := strings.TrimSpace(m[1]) + parent := strings.TrimSpace(m[2]) + p := strings.TrimSpace(m[3]) + groupBase[child] = cleanPath(joinPath(groupBase[parent], p)) + continue + } + m := reRouteCall.FindStringSubmatch(line) + if len(m) != 4 { + continue + } + target := strings.TrimSpace(m[1]) + method := strings.ToUpper(strings.TrimSpace(m[2])) + localPath := strings.TrimSpace(m[3]) + if method == "ANY" { + continue + } + base := groupBase[target] + full := cleanPath(joinPath(apiPrefix, base, localPath)) + if !strings.HasPrefix(full, "/api/") { + continue + } + routeKey := method + " " + full + if _, ok := seenRoute[routeKey]; ok { + continue + } + module := moduleFromPath(full) + action := slug(method + "_" + full) + scope := module + ".api" + if module == "core" { + scope = "core.api" + } + id := joinID(prefix, "rest", module, "gin", action) + out = append(out, capabilityEntry{ + CapabilityID: id, + Module: module, + Title: method + " " + full, + Description: "Generated from Gin route source", + Categories: []string{module, "gin", "generated"}, + Intents: []string{module + "." + action}, + ToolScopes: []string{scope}, + Policy: capabilityPolicy{Prefer: "rest"}, + Docs: []string{path}, + Protocols: []protocolEntry{{ + Channel: "rest", + Endpoint: full, + Method: method, + SchemaRef: path + "#source", + AuthType: auth, + ToolScope: scope, + }}, + }) + } + return out, nil +} + +func joinPath(parts ...string) string { + out := "" + for _, p := range parts { + p = strings.TrimSpace(p) + if p == "" { + continue + } + if out == "" { + out = p + continue + } + out = strings.TrimRight(out, "/") + "/" + strings.TrimLeft(p, "/") + } + return out +} + +func cleanPath(p string) string { + p = strings.TrimSpace(p) + if p == "" { + return "/" + } + if !strings.HasPrefix(p, "/") { + p = "/" + p + } + for strings.Contains(p, "//") { + p = strings.ReplaceAll(p, "//", "/") + } + return p +} + +func moduleFromPath(path string) string { + parts := strings.Split(strings.Trim(path, "/"), "/") + for i, p := range parts { + if p == "api" { + if i+1 < len(parts) && strings.HasPrefix(parts[i+1], "v") { + i++ + } + if i+1 < len(parts) { + n := slug(parts[i+1]) + if n != "" { + return n + } + } + } + } + for _, p := range parts { + n := slug(p) + if n != "" { + return n + } + } + return "core" +} + +func moduleFromPackage(pkg string) string { + parts := strings.Split(strings.TrimSpace(pkg), ".") + if len(parts) >= 2 { + m := slug(parts[1]) + if m != "" { + return m + } + } + if len(parts) > 0 { + m := slug(parts[0]) + if m != "" { + return m + } + } + return "core" +} + +func joinID(parts ...string) string { + clean := make([]string, 0, len(parts)) + for _, p := range parts { + p = strings.Trim(strings.TrimSpace(p), ".") + if p == "" { + continue + } + clean = append(clean, p) + } + if len(clean) == 0 { + return "generated.capability" + } + return strings.Join(clean, ".") +} + +var slugRe = regexp.MustCompile(`[^a-z0-9]+`) + +func slug(in string) string { + in = strings.ToLower(strings.TrimSpace(in)) + if in == "" { + return "" + } + in = strings.ReplaceAll(in, "{", "") + in = strings.ReplaceAll(in, "}", "") + in = strings.ReplaceAll(in, ":", "_") + in = slugRe.ReplaceAllString(in, "_") + in = strings.Trim(in, "_") + for strings.Contains(in, "__") { + in = strings.ReplaceAll(in, "__", "_") + } + return in +} + +func escapeJSONPointer(path string) string { + p := strings.TrimPrefix(path, "/") + p = strings.ReplaceAll(p, "~", "~0") + p = strings.ReplaceAll(p, "/", "~1") + return p +} + +func fatalf(format string, args ...interface{}) { + _, _ = fmt.Fprintf(os.Stderr, format+"\n", args...) + os.Exit(1) +} + +func ensure(err error) { + if err != nil { + fatalf("%v", err) + } +} + +func check(errs ...error) error { + list := make([]error, 0, len(errs)) + for _, err := range errs { + if err != nil { + list = append(list, err) + } + } + if len(list) == 0 { + return nil + } + return errors.Join(list...) +} diff --git a/backend/config/config.go b/backend/config/config.go index 34903873..4bb48ca4 100644 --- a/backend/config/config.go +++ b/backend/config/config.go @@ -1,6 +1,7 @@ package config import ( + "bufio" "fmt" agentCfg "github.com/ArtisanCloud/PowerX/internal/server/agent/config" grpcCfg "github.com/ArtisanCloud/PowerX/internal/server/grpc" @@ -21,6 +22,8 @@ var GlobalConfig *Config // 初始化全局配置 func InitGlobalConfig(configPath string) error { + loadDotEnvCandidates(configPath) + data, err := os.ReadFile(configPath) if err != nil { return fmt.Errorf("读取配置文件失败: %w", err) @@ -30,6 +33,7 @@ func InitGlobalConfig(configPath string) error { if err := yaml.Unmarshal(data, &config); err != nil { return fmt.Errorf("解析配置文件失败: %w", err) } + loadFromEnv(&config) // AI: default fill + global snapshot (read-only) config.AI.SetDefaults() @@ -103,6 +107,7 @@ type Config struct { Database dbCfg.DatabaseConfig `yaml:"database"` // 数据库配置 Cache cacheCfg.CacheConfig `yaml:"cache"` // 缓存配置 LogConfig logCfg.LogConfig `yaml:"log"` // 输出配置 + Audit AuditConfig `yaml:"audit"` // 审计配置 AI agentCfg.AIConfig `yaml:"ai"` Agent agentCfg.AgentConfig `yaml:"agent"` // 智能体工具注册/限流等 Plugin PluginAggregateConfig `yaml:"plugin"` @@ -111,6 +116,25 @@ type Config struct { Tenants TenantConfig `yaml:"tenants"` } +// AuditConfig controls audit persistence and sink behaviour. +type AuditConfig struct { + PersistToDB bool `yaml:"persist_to_db"` + EnableGORMCallbacks bool `yaml:"enable_gorm_callbacks"` + File AuditFileSinkConfig `yaml:"file"` +} + +type AuditFileSinkConfig struct { + Enable bool `yaml:"enable"` + Dir string `yaml:"dir"` + FilePrefix string `yaml:"file_prefix"` + MaxSize int `yaml:"max_size"` + MaxBackups int `yaml:"max_backups"` + MaxAge int `yaml:"max_age"` + Compress bool `yaml:"compress"` + UseUTC bool `yaml:"use_utc"` + IncludeMeta bool `yaml:"include_meta"` +} + const DefaultSystemVersion = "v1.0.0" func (c *Config) EffectiveSystemVersion() string { @@ -521,6 +545,9 @@ func Load(configPath string) (*Config, error) { // 1. 加载默认配置 cfg := GetDefaults() + // 1.1 预加载 .env(仅在当前进程变量未设置时写入) + loadDotEnvCandidates(configPath) + // 2. 从YAML文件加载(如果存在) if configPath != "" { if err := loadFromYAML(cfg, configPath); err != nil { @@ -539,6 +566,71 @@ func Load(configPath string) (*Config, error) { return cfg, nil } +func loadDotEnvCandidates(configPath string) { + candidates := make([]string, 0, 6) + if configPath != "" { + if absCfg, err := filepath.Abs(configPath); err == nil { + cfgDir := filepath.Dir(absCfg) + candidates = append(candidates, filepath.Join(cfgDir, ".env")) + candidates = append(candidates, filepath.Join(filepath.Dir(cfgDir), ".env")) + } + } + candidates = append(candidates, ".env", "backend/.env") + + seen := map[string]struct{}{} + for _, p := range candidates { + if strings.TrimSpace(p) == "" { + continue + } + absPath := p + if !filepath.IsAbs(p) { + if wd, err := os.Getwd(); err == nil { + absPath = filepath.Join(wd, p) + } + } + absPath = filepath.Clean(absPath) + if _, ok := seen[absPath]; ok { + continue + } + seen[absPath] = struct{}{} + _ = loadDotEnvFile(absPath) + } +} + +func loadDotEnvFile(path string) error { + f, err := os.Open(path) + if err != nil { + return err + } + defer f.Close() + + scanner := bufio.NewScanner(f) + for scanner.Scan() { + line := strings.TrimSpace(scanner.Text()) + if line == "" || strings.HasPrefix(line, "#") { + continue + } + if strings.HasPrefix(line, "export ") { + line = strings.TrimSpace(strings.TrimPrefix(line, "export ")) + } + idx := strings.Index(line, "=") + if idx <= 0 { + continue + } + key := strings.TrimSpace(line[:idx]) + val := strings.TrimSpace(line[idx+1:]) + if key == "" { + continue + } + val = strings.Trim(val, `"'`) + // 保留已存在环境变量优先级;.env 仅补缺省 + if _, exists := os.LookupEnv(key); !exists { + _ = os.Setenv(key, val) + } + } + return scanner.Err() +} + // loadFromEnv 从环境变量加载配置 func loadFromEnv(cfg *Config) { // Server配置 @@ -748,6 +840,45 @@ func loadFromEnv(cfg *Config) { // LogConfig配置 - 使用外部logger配置 // 这里可以根据需要添加对LogConfig字段的环境变量支持 // 例如:cfg.LogConfig.Level, cfg.LogConfig.Format 等 + if v := os.Getenv("CORE_X_AUDIT_PERSIST_TO_DB"); v != "" { + cfg.Audit.PersistToDB = strings.EqualFold(v, "true") || v == "1" + } + if v := os.Getenv("CORE_X_AUDIT_ENABLE_GORM_CALLBACKS"); v != "" { + cfg.Audit.EnableGORMCallbacks = strings.EqualFold(v, "true") || v == "1" + } + if v := os.Getenv("CORE_X_AUDIT_FILE_ENABLE"); v != "" { + cfg.Audit.File.Enable = strings.EqualFold(v, "true") || v == "1" + } + if v := os.Getenv("CORE_X_AUDIT_FILE_DIR"); v != "" { + cfg.Audit.File.Dir = v + } + if v := os.Getenv("CORE_X_AUDIT_FILE_PREFIX"); v != "" { + cfg.Audit.File.FilePrefix = v + } + if v := os.Getenv("CORE_X_AUDIT_FILE_MAX_SIZE"); v != "" { + if n, err := strconv.Atoi(v); err == nil && n > 0 { + cfg.Audit.File.MaxSize = n + } + } + if v := os.Getenv("CORE_X_AUDIT_FILE_MAX_BACKUPS"); v != "" { + if n, err := strconv.Atoi(v); err == nil && n >= 0 { + cfg.Audit.File.MaxBackups = n + } + } + if v := os.Getenv("CORE_X_AUDIT_FILE_MAX_AGE"); v != "" { + if n, err := strconv.Atoi(v); err == nil && n >= 0 { + cfg.Audit.File.MaxAge = n + } + } + if v := os.Getenv("CORE_X_AUDIT_FILE_COMPRESS"); v != "" { + cfg.Audit.File.Compress = strings.EqualFold(v, "true") || v == "1" + } + if v := os.Getenv("CORE_X_AUDIT_FILE_USE_UTC"); v != "" { + cfg.Audit.File.UseUTC = strings.EqualFold(v, "true") || v == "1" + } + if v := os.Getenv("CORE_X_AUDIT_FILE_INCLUDE_META"); v != "" { + cfg.Audit.File.IncludeMeta = strings.EqualFold(v, "true") || v == "1" + } // FeatureGate配置 if license := os.Getenv("CORE_X_FEATURE_GATE_LICENSE_KEY"); license != "" { diff --git a/backend/config/defaults.go b/backend/config/defaults.go index 8763eccf..6605ed14 100644 --- a/backend/config/defaults.go +++ b/backend/config/defaults.go @@ -52,6 +52,21 @@ func GetDefaults() *Config { HttpDebug: false, Debug: true, }, + Audit: AuditConfig{ + PersistToDB: false, + EnableGORMCallbacks: false, + File: AuditFileSinkConfig{ + Enable: true, + Dir: "logs/audit", + FilePrefix: "audit_event", + MaxSize: 100, + MaxBackups: 30, + MaxAge: 30, + Compress: true, + UseUTC: false, + IncludeMeta: true, + }, + }, Auth: AuthConfig{ JWTSecret: "K8mN2pQ7rS9tU4vW6xY1zA3bC5dE8fG0", Issuer: "powerx-auth", diff --git a/backend/config/platform_capabilities/generated.auto.yaml b/backend/config/platform_capabilities/generated.auto.yaml new file mode 100644 index 00000000..0a681c9f --- /dev/null +++ b/backend/config/platform_capabilities/generated.auto.yaml @@ -0,0 +1,13641 @@ +version: 1 +capabilities: + - capability_id: com.corex.grpc.agent.agentinvokeservice.invoke + module: agent + title: AgentInvokeService.Invoke + description: Generated from proto + categories: + - agent + - grpc + - generated + intents: + - agent.invoke + tool_scopes: + - agent.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent/v1/agent_api.proto + protocols: + - channel: grpc + endpoint: powerx.agent.v1.AgentInvokeService + rpc: Invoke + schema_ref: api/grpc/contracts/powerx/agent/v1/agent_api.proto#AgentInvokeService + auth_type: tenant_jwt + tool_scope: agent.grpc + - capability_id: com.corex.grpc.agent.agentlifecycleservice.activateagent + module: agent + title: AgentLifecycleService.ActivateAgent + description: Generated from proto + categories: + - agent + - grpc + - generated + intents: + - agent.activateagent + tool_scopes: + - agent.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto + protocols: + - channel: grpc + endpoint: powerx.agent.v1.AgentLifecycleService + rpc: ActivateAgent + schema_ref: api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto#AgentLifecycleService + auth_type: tenant_jwt + tool_scope: agent.grpc + - capability_id: com.corex.grpc.agent.agentlifecycleservice.getagent + module: agent + title: AgentLifecycleService.GetAgent + description: Generated from proto + categories: + - agent + - grpc + - generated + intents: + - agent.getagent + tool_scopes: + - agent.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto + protocols: + - channel: grpc + endpoint: powerx.agent.v1.AgentLifecycleService + rpc: GetAgent + schema_ref: api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto#AgentLifecycleService + auth_type: tenant_jwt + tool_scope: agent.grpc + - capability_id: com.corex.grpc.agent.agentlifecycleservice.gethealthsummary + module: agent + title: AgentLifecycleService.GetHealthSummary + description: Generated from proto + categories: + - agent + - grpc + - generated + intents: + - agent.gethealthsummary + tool_scopes: + - agent.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto + protocols: + - channel: grpc + endpoint: powerx.agent.v1.AgentLifecycleService + rpc: GetHealthSummary + schema_ref: api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto#AgentLifecycleService + auth_type: tenant_jwt + tool_scope: agent.grpc + - capability_id: com.corex.grpc.agent.agentlifecycleservice.getsubscription + module: agent + title: AgentLifecycleService.GetSubscription + description: Generated from proto + categories: + - agent + - grpc + - generated + intents: + - agent.getsubscription + tool_scopes: + - agent.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto + protocols: + - channel: grpc + endpoint: powerx.agent.v1.AgentLifecycleService + rpc: GetSubscription + schema_ref: api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto#AgentLifecycleService + auth_type: tenant_jwt + tool_scope: agent.grpc + - capability_id: com.corex.grpc.agent.agentlifecycleservice.listhealthsnapshots + module: agent + title: AgentLifecycleService.ListHealthSnapshots + description: Generated from proto + categories: + - agent + - grpc + - generated + intents: + - agent.listhealthsnapshots + tool_scopes: + - agent.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto + protocols: + - channel: grpc + endpoint: powerx.agent.v1.AgentLifecycleService + rpc: ListHealthSnapshots + schema_ref: api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto#AgentLifecycleService + auth_type: tenant_jwt + tool_scope: agent.grpc + - capability_id: com.corex.grpc.agent.agentlifecycleservice.listlifecycleevents + module: agent + title: AgentLifecycleService.ListLifecycleEvents + description: Generated from proto + categories: + - agent + - grpc + - generated + intents: + - agent.listlifecycleevents + tool_scopes: + - agent.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto + protocols: + - channel: grpc + endpoint: powerx.agent.v1.AgentLifecycleService + rpc: ListLifecycleEvents + schema_ref: api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto#AgentLifecycleService + auth_type: tenant_jwt + tool_scope: agent.grpc + - capability_id: com.corex.grpc.agent.agentlifecycleservice.pauseagent + module: agent + title: AgentLifecycleService.PauseAgent + description: Generated from proto + categories: + - agent + - grpc + - generated + intents: + - agent.pauseagent + tool_scopes: + - agent.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto + protocols: + - channel: grpc + endpoint: powerx.agent.v1.AgentLifecycleService + rpc: PauseAgent + schema_ref: api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto#AgentLifecycleService + auth_type: tenant_jwt + tool_scope: agent.grpc + - capability_id: com.corex.grpc.agent.agentlifecycleservice.registeragent + module: agent + title: AgentLifecycleService.RegisterAgent + description: Generated from proto + categories: + - agent + - grpc + - generated + intents: + - agent.registeragent + tool_scopes: + - agent.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto + protocols: + - channel: grpc + endpoint: powerx.agent.v1.AgentLifecycleService + rpc: RegisterAgent + schema_ref: api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto#AgentLifecycleService + auth_type: tenant_jwt + tool_scope: agent.grpc + - capability_id: com.corex.grpc.agent.agentlifecycleservice.registermanifest + module: agent + title: AgentLifecycleService.RegisterManifest + description: Generated from proto + categories: + - agent + - grpc + - generated + intents: + - agent.registermanifest + tool_scopes: + - agent.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto + protocols: + - channel: grpc + endpoint: powerx.agent.v1.AgentLifecycleService + rpc: RegisterManifest + schema_ref: api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto#AgentLifecycleService + auth_type: tenant_jwt + tool_scope: agent.grpc + - capability_id: com.corex.grpc.agent.agentlifecycleservice.resumeagent + module: agent + title: AgentLifecycleService.ResumeAgent + description: Generated from proto + categories: + - agent + - grpc + - generated + intents: + - agent.resumeagent + tool_scopes: + - agent.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto + protocols: + - channel: grpc + endpoint: powerx.agent.v1.AgentLifecycleService + rpc: ResumeAgent + schema_ref: api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto#AgentLifecycleService + auth_type: tenant_jwt + tool_scope: agent.grpc + - capability_id: com.corex.grpc.agent.agentlifecycleservice.retireagent + module: agent + title: AgentLifecycleService.RetireAgent + description: Generated from proto + categories: + - agent + - grpc + - generated + intents: + - agent.retireagent + tool_scopes: + - agent.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto + protocols: + - channel: grpc + endpoint: powerx.agent.v1.AgentLifecycleService + rpc: RetireAgent + schema_ref: api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto#AgentLifecycleService + auth_type: tenant_jwt + tool_scope: agent.grpc + - capability_id: com.corex.grpc.agent.agentlifecycleservice.revokeagentshare + module: agent + title: AgentLifecycleService.RevokeAgentShare + description: Generated from proto + categories: + - agent + - grpc + - generated + intents: + - agent.revokeagentshare + tool_scopes: + - agent.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto + protocols: + - channel: grpc + endpoint: powerx.agent.v1.AgentLifecycleService + rpc: RevokeAgentShare + schema_ref: api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto#AgentLifecycleService + auth_type: tenant_jwt + tool_scope: agent.grpc + - capability_id: com.corex.grpc.agent.agentlifecycleservice.runsandbox + module: agent + title: AgentLifecycleService.RunSandbox + description: Generated from proto + categories: + - agent + - grpc + - generated + intents: + - agent.runsandbox + tool_scopes: + - agent.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto + protocols: + - channel: grpc + endpoint: powerx.agent.v1.AgentLifecycleService + rpc: RunSandbox + schema_ref: api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto#AgentLifecycleService + auth_type: tenant_jwt + tool_scope: agent.grpc + - capability_id: com.corex.grpc.agent.agentlifecycleservice.scaleagent + module: agent + title: AgentLifecycleService.ScaleAgent + description: Generated from proto + categories: + - agent + - grpc + - generated + intents: + - agent.scaleagent + tool_scopes: + - agent.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto + protocols: + - channel: grpc + endpoint: powerx.agent.v1.AgentLifecycleService + rpc: ScaleAgent + schema_ref: api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto#AgentLifecycleService + auth_type: tenant_jwt + tool_scope: agent.grpc + - capability_id: com.corex.grpc.agent.agentlifecycleservice.shareagent + module: agent + title: AgentLifecycleService.ShareAgent + description: Generated from proto + categories: + - agent + - grpc + - generated + intents: + - agent.shareagent + tool_scopes: + - agent.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto + protocols: + - channel: grpc + endpoint: powerx.agent.v1.AgentLifecycleService + rpc: ShareAgent + schema_ref: api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto#AgentLifecycleService + auth_type: tenant_jwt + tool_scope: agent.grpc + - capability_id: com.corex.grpc.agent.agentlifecycleservice.updatesubscription + module: agent + title: AgentLifecycleService.UpdateSubscription + description: Generated from proto + categories: + - agent + - grpc + - generated + intents: + - agent.updatesubscription + tool_scopes: + - agent.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto + protocols: + - channel: grpc + endpoint: powerx.agent.v1.AgentLifecycleService + rpc: UpdateSubscription + schema_ref: api/grpc/contracts/powerx/agent/v1/agent_lifecycle.proto#AgentLifecycleService + auth_type: tenant_jwt + tool_scope: agent.grpc + - capability_id: com.corex.grpc.agent.agentsessionservice.createsession + module: agent + title: AgentSessionService.CreateSession + description: Generated from proto + categories: + - agent + - grpc + - generated + intents: + - agent.createsession + tool_scopes: + - agent.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent/v1/agent_api.proto + protocols: + - channel: grpc + endpoint: powerx.agent.v1.AgentSessionService + rpc: CreateSession + schema_ref: api/grpc/contracts/powerx/agent/v1/agent_api.proto#AgentSessionService + auth_type: tenant_jwt + tool_scope: agent.grpc + - capability_id: com.corex.grpc.agent.agentsessionservice.listmessages + module: agent + title: AgentSessionService.ListMessages + description: Generated from proto + categories: + - agent + - grpc + - generated + intents: + - agent.listmessages + tool_scopes: + - agent.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent/v1/agent_api.proto + protocols: + - channel: grpc + endpoint: powerx.agent.v1.AgentSessionService + rpc: ListMessages + schema_ref: api/grpc/contracts/powerx/agent/v1/agent_api.proto#AgentSessionService + auth_type: tenant_jwt + tool_scope: agent.grpc + - capability_id: com.corex.grpc.agent.agentstreamservice.simulate + module: agent + title: AgentStreamService.Simulate + description: Generated from proto + categories: + - agent + - grpc + - generated + intents: + - agent.simulate + tool_scopes: + - agent.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent/v1/stream.proto + protocols: + - channel: grpc + endpoint: powerx.agent.v1.AgentStreamService + rpc: Simulate + schema_ref: api/grpc/contracts/powerx/agent/v1/stream.proto#AgentStreamService + auth_type: tenant_jwt + tool_scope: agent.grpc + - capability_id: com.corex.grpc.agent.agentstreamservice.stream + module: agent + title: AgentStreamService.Stream + description: Generated from proto + categories: + - agent + - grpc + - generated + intents: + - agent.stream + tool_scopes: + - agent.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent/v1/stream.proto + protocols: + - channel: grpc + endpoint: powerx.agent.v1.AgentStreamService + rpc: Stream + schema_ref: api/grpc/contracts/powerx/agent/v1/stream.proto#AgentStreamService + auth_type: tenant_jwt + tool_scope: agent.grpc + - capability_id: com.corex.grpc.agent_model_hub.agentmodelhubservice.enforcequotaaction + module: agent_model_hub + title: AgentModelHubService.EnforceQuotaAction + description: Generated from proto + categories: + - agent_model_hub + - grpc + - generated + intents: + - agent_model_hub.enforcequotaaction + tool_scopes: + - agent_model_hub.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent_model_hub/v1/agent_model_hub.proto + protocols: + - channel: grpc + endpoint: powerx.agent_model_hub.v1.AgentModelHubService + rpc: EnforceQuotaAction + schema_ref: api/grpc/contracts/powerx/agent_model_hub/v1/agent_model_hub.proto#AgentModelHubService + auth_type: tenant_jwt + tool_scope: agent_model_hub.grpc + - capability_id: com.corex.grpc.agent_model_hub.agentmodelhubservice.getquotasnapshot + module: agent_model_hub + title: AgentModelHubService.GetQuotaSnapshot + description: Generated from proto + categories: + - agent_model_hub + - grpc + - generated + intents: + - agent_model_hub.getquotasnapshot + tool_scopes: + - agent_model_hub.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent_model_hub/v1/agent_model_hub.proto + protocols: + - channel: grpc + endpoint: powerx.agent_model_hub.v1.AgentModelHubService + rpc: GetQuotaSnapshot + schema_ref: api/grpc/contracts/powerx/agent_model_hub/v1/agent_model_hub.proto#AgentModelHubService + auth_type: tenant_jwt + tool_scope: agent_model_hub.grpc + - capability_id: com.corex.grpc.agent_model_hub.agentmodelhubservice.pauseconnectorinstance + module: agent_model_hub + title: AgentModelHubService.PauseConnectorInstance + description: Generated from proto + categories: + - agent_model_hub + - grpc + - generated + intents: + - agent_model_hub.pauseconnectorinstance + tool_scopes: + - agent_model_hub.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent_model_hub/v1/agent_model_hub.proto + protocols: + - channel: grpc + endpoint: powerx.agent_model_hub.v1.AgentModelHubService + rpc: PauseConnectorInstance + schema_ref: api/grpc/contracts/powerx/agent_model_hub/v1/agent_model_hub.proto#AgentModelHubService + auth_type: tenant_jwt + tool_scope: agent_model_hub.grpc + - capability_id: com.corex.grpc.agent_model_hub.agentmodelhubservice.publishprovider + module: agent_model_hub + title: AgentModelHubService.PublishProvider + description: Generated from proto + categories: + - agent_model_hub + - grpc + - generated + intents: + - agent_model_hub.publishprovider + tool_scopes: + - agent_model_hub.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent_model_hub/v1/agent_model_hub.proto + protocols: + - channel: grpc + endpoint: powerx.agent_model_hub.v1.AgentModelHubService + rpc: PublishProvider + schema_ref: api/grpc/contracts/powerx/agent_model_hub/v1/agent_model_hub.proto#AgentModelHubService + auth_type: tenant_jwt + tool_scope: agent_model_hub.grpc + - capability_id: com.corex.grpc.agent_model_hub.agentmodelhubservice.registerprovider + module: agent_model_hub + title: AgentModelHubService.RegisterProvider + description: Generated from proto + categories: + - agent_model_hub + - grpc + - generated + intents: + - agent_model_hub.registerprovider + tool_scopes: + - agent_model_hub.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent_model_hub/v1/agent_model_hub.proto + protocols: + - channel: grpc + endpoint: powerx.agent_model_hub.v1.AgentModelHubService + rpc: RegisterProvider + schema_ref: api/grpc/contracts/powerx/agent_model_hub/v1/agent_model_hub.proto#AgentModelHubService + auth_type: tenant_jwt + tool_scope: agent_model_hub.grpc + - capability_id: com.corex.grpc.agent_model_hub.agentmodelhubservice.reportusage + module: agent_model_hub + title: AgentModelHubService.ReportUsage + description: Generated from proto + categories: + - agent_model_hub + - grpc + - generated + intents: + - agent_model_hub.reportusage + tool_scopes: + - agent_model_hub.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent_model_hub/v1/agent_model_hub.proto + protocols: + - channel: grpc + endpoint: powerx.agent_model_hub.v1.AgentModelHubService + rpc: ReportUsage + schema_ref: api/grpc/contracts/powerx/agent_model_hub/v1/agent_model_hub.proto#AgentModelHubService + auth_type: tenant_jwt + tool_scope: agent_model_hub.grpc + - capability_id: com.corex.grpc.agent_model_hub.agentmodelhubservice.rollbackroutingpolicy + module: agent_model_hub + title: AgentModelHubService.RollbackRoutingPolicy + description: Generated from proto + categories: + - agent_model_hub + - grpc + - generated + intents: + - agent_model_hub.rollbackroutingpolicy + tool_scopes: + - agent_model_hub.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent_model_hub/v1/agent_model_hub.proto + protocols: + - channel: grpc + endpoint: powerx.agent_model_hub.v1.AgentModelHubService + rpc: RollbackRoutingPolicy + schema_ref: api/grpc/contracts/powerx/agent_model_hub/v1/agent_model_hub.proto#AgentModelHubService + auth_type: tenant_jwt + tool_scope: agent_model_hub.grpc + - capability_id: com.corex.grpc.agent_model_hub.agentmodelhubservice.routetask + module: agent_model_hub + title: AgentModelHubService.RouteTask + description: Generated from proto + categories: + - agent_model_hub + - grpc + - generated + intents: + - agent_model_hub.routetask + tool_scopes: + - agent_model_hub.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent_model_hub/v1/agent_model_hub.proto + protocols: + - channel: grpc + endpoint: powerx.agent_model_hub.v1.AgentModelHubService + rpc: RouteTask + schema_ref: api/grpc/contracts/powerx/agent_model_hub/v1/agent_model_hub.proto#AgentModelHubService + auth_type: tenant_jwt + tool_scope: agent_model_hub.grpc + - capability_id: com.corex.grpc.agent_model_hub.agentmodelhubservice.togglesafemode + module: agent_model_hub + title: AgentModelHubService.ToggleSafeMode + description: Generated from proto + categories: + - agent_model_hub + - grpc + - generated + intents: + - agent_model_hub.togglesafemode + tool_scopes: + - agent_model_hub.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent_model_hub/v1/agent_model_hub.proto + protocols: + - channel: grpc + endpoint: powerx.agent_model_hub.v1.AgentModelHubService + rpc: ToggleSafeMode + schema_ref: api/grpc/contracts/powerx/agent_model_hub/v1/agent_model_hub.proto#AgentModelHubService + auth_type: tenant_jwt + tool_scope: agent_model_hub.grpc + - capability_id: com.corex.grpc.agent_model_hub.agentmodelhubservice.updateroutingpolicystatus + module: agent_model_hub + title: AgentModelHubService.UpdateRoutingPolicyStatus + description: Generated from proto + categories: + - agent_model_hub + - grpc + - generated + intents: + - agent_model_hub.updateroutingpolicystatus + tool_scopes: + - agent_model_hub.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent_model_hub/v1/agent_model_hub.proto + protocols: + - channel: grpc + endpoint: powerx.agent_model_hub.v1.AgentModelHubService + rpc: UpdateRoutingPolicyStatus + schema_ref: api/grpc/contracts/powerx/agent_model_hub/v1/agent_model_hub.proto#AgentModelHubService + auth_type: tenant_jwt + tool_scope: agent_model_hub.grpc + - capability_id: com.corex.grpc.agent_model_hub.agentmodelhubservice.upsertconnectorinstance + module: agent_model_hub + title: AgentModelHubService.UpsertConnectorInstance + description: Generated from proto + categories: + - agent_model_hub + - grpc + - generated + intents: + - agent_model_hub.upsertconnectorinstance + tool_scopes: + - agent_model_hub.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent_model_hub/v1/agent_model_hub.proto + protocols: + - channel: grpc + endpoint: powerx.agent_model_hub.v1.AgentModelHubService + rpc: UpsertConnectorInstance + schema_ref: api/grpc/contracts/powerx/agent_model_hub/v1/agent_model_hub.proto#AgentModelHubService + auth_type: tenant_jwt + tool_scope: agent_model_hub.grpc + - capability_id: com.corex.grpc.agent_model_hub.agentmodelhubservice.upsertroutingpolicy + module: agent_model_hub + title: AgentModelHubService.UpsertRoutingPolicy + description: Generated from proto + categories: + - agent_model_hub + - grpc + - generated + intents: + - agent_model_hub.upsertroutingpolicy + tool_scopes: + - agent_model_hub.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent_model_hub/v1/agent_model_hub.proto + protocols: + - channel: grpc + endpoint: powerx.agent_model_hub.v1.AgentModelHubService + rpc: UpsertRoutingPolicy + schema_ref: api/grpc/contracts/powerx/agent_model_hub/v1/agent_model_hub.proto#AgentModelHubService + auth_type: tenant_jwt + tool_scope: agent_model_hub.grpc + - capability_id: com.corex.grpc.agent_model_hub.agentmodelhubservice.validateprovider + module: agent_model_hub + title: AgentModelHubService.ValidateProvider + description: Generated from proto + categories: + - agent_model_hub + - grpc + - generated + intents: + - agent_model_hub.validateprovider + tool_scopes: + - agent_model_hub.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/agent_model_hub/v1/agent_model_hub.proto + protocols: + - channel: grpc + endpoint: powerx.agent_model_hub.v1.AgentModelHubService + rpc: ValidateProvider + schema_ref: api/grpc/contracts/powerx/agent_model_hub/v1/agent_model_hub.proto#AgentModelHubService + auth_type: tenant_jwt + tool_scope: agent_model_hub.grpc + - capability_id: com.corex.grpc.ai.embeddingservice.embed + module: ai + title: EmbeddingService.Embed + description: Generated from proto + categories: + - ai + - grpc + - generated + intents: + - ai.embed + tool_scopes: + - ai.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/ai/v1/multimodal.proto + protocols: + - channel: grpc + endpoint: powerx.ai.v1.EmbeddingService + rpc: Embed + schema_ref: api/grpc/contracts/powerx/ai/v1/multimodal.proto#EmbeddingService + auth_type: tenant_jwt + tool_scope: ai.grpc + - capability_id: com.corex.grpc.ai.multimodalservice.invoke + module: ai + title: MultimodalService.Invoke + description: Generated from proto + categories: + - ai + - grpc + - generated + intents: + - ai.invoke + tool_scopes: + - ai.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/ai/v1/multimodal.proto + protocols: + - channel: grpc + endpoint: powerx.ai.v1.MultimodalService + rpc: Invoke + schema_ref: api/grpc/contracts/powerx/ai/v1/multimodal.proto#MultimodalService + auth_type: tenant_jwt + tool_scope: ai.grpc + - capability_id: com.corex.grpc.ai.multimodalservice.stream + module: ai + title: MultimodalService.Stream + description: Generated from proto + categories: + - ai + - grpc + - generated + intents: + - ai.stream + tool_scopes: + - ai.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/ai/v1/multimodal.proto + protocols: + - channel: grpc + endpoint: powerx.ai.v1.MultimodalService + rpc: Stream + schema_ref: api/grpc/contracts/powerx/ai/v1/multimodal.proto#MultimodalService + auth_type: tenant_jwt + tool_scope: ai.grpc + - capability_id: com.corex.grpc.ai.multimodalsessionservice.appendmessage + module: ai + title: MultimodalSessionService.AppendMessage + description: Generated from proto + categories: + - ai + - grpc + - generated + intents: + - ai.appendmessage + tool_scopes: + - ai.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/ai/v1/multimodal.proto + protocols: + - channel: grpc + endpoint: powerx.ai.v1.MultimodalSessionService + rpc: AppendMessage + schema_ref: api/grpc/contracts/powerx/ai/v1/multimodal.proto#MultimodalSessionService + auth_type: tenant_jwt + tool_scope: ai.grpc + - capability_id: com.corex.grpc.ai.multimodalsessionservice.createsession + module: ai + title: MultimodalSessionService.CreateSession + description: Generated from proto + categories: + - ai + - grpc + - generated + intents: + - ai.createsession + tool_scopes: + - ai.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/ai/v1/multimodal.proto + protocols: + - channel: grpc + endpoint: powerx.ai.v1.MultimodalSessionService + rpc: CreateSession + schema_ref: api/grpc/contracts/powerx/ai/v1/multimodal.proto#MultimodalSessionService + auth_type: tenant_jwt + tool_scope: ai.grpc + - capability_id: com.corex.grpc.auth.stsservice.exchange + module: auth + title: STSService.Exchange + description: Generated from proto + categories: + - auth + - grpc + - generated + intents: + - auth.exchange + tool_scopes: + - auth.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/auth/sts/v1/sts.proto + protocols: + - channel: grpc + endpoint: powerx.auth.sts.v1.STSService + rpc: Exchange + schema_ref: api/grpc/contracts/powerx/auth/sts/v1/sts.proto#STSService + auth_type: tenant_jwt + tool_scope: auth.grpc + - capability_id: com.corex.grpc.auth.stsservice.introspect + module: auth + title: STSService.Introspect + description: Generated from proto + categories: + - auth + - grpc + - generated + intents: + - auth.introspect + tool_scopes: + - auth.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/auth/sts/v1/sts.proto + protocols: + - channel: grpc + endpoint: powerx.auth.sts.v1.STSService + rpc: Introspect + schema_ref: api/grpc/contracts/powerx/auth/sts/v1/sts.proto#STSService + auth_type: tenant_jwt + tool_scope: auth.grpc + - capability_id: com.corex.grpc.capability.capabilitydiscoveryservice.getsnapshot + module: capability + title: CapabilityDiscoveryService.GetSnapshot + description: Generated from proto + categories: + - capability + - grpc + - generated + intents: + - capability.getsnapshot + tool_scopes: + - capability.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/capability/registry/v1/registry.proto + protocols: + - channel: grpc + endpoint: powerx.capability.registry.v1.CapabilityDiscoveryService + rpc: GetSnapshot + schema_ref: api/grpc/contracts/powerx/capability/registry/v1/registry.proto#CapabilityDiscoveryService + auth_type: tenant_jwt + tool_scope: capability.grpc + - capability_id: com.corex.grpc.capability.capabilitydiscoveryservice.listsnapshots + module: capability + title: CapabilityDiscoveryService.ListSnapshots + description: Generated from proto + categories: + - capability + - grpc + - generated + intents: + - capability.listsnapshots + tool_scopes: + - capability.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/capability/registry/v1/registry.proto + protocols: + - channel: grpc + endpoint: powerx.capability.registry.v1.CapabilityDiscoveryService + rpc: ListSnapshots + schema_ref: api/grpc/contracts/powerx/capability/registry/v1/registry.proto#CapabilityDiscoveryService + auth_type: tenant_jwt + tool_scope: capability.grpc + - capability_id: com.corex.grpc.capability.capabilityregistryservice.createcapability + module: capability + title: CapabilityRegistryService.CreateCapability + description: Generated from proto + categories: + - capability + - grpc + - generated + intents: + - capability.createcapability + tool_scopes: + - capability.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/capability/registry/v1/registry.proto + protocols: + - channel: grpc + endpoint: powerx.capability.registry.v1.CapabilityRegistryService + rpc: CreateCapability + schema_ref: api/grpc/contracts/powerx/capability/registry/v1/registry.proto#CapabilityRegistryService + auth_type: tenant_jwt + tool_scope: capability.grpc + - capability_id: com.corex.grpc.capability.capabilityregistryservice.deprecatecapability + module: capability + title: CapabilityRegistryService.DeprecateCapability + description: Generated from proto + categories: + - capability + - grpc + - generated + intents: + - capability.deprecatecapability + tool_scopes: + - capability.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/capability/v1/capability_contract.proto + protocols: + - channel: grpc + endpoint: powerx.capability.v1.CapabilityRegistryService + rpc: DeprecateCapability + schema_ref: api/grpc/contracts/powerx/capability/v1/capability_contract.proto#CapabilityRegistryService + auth_type: tenant_jwt + tool_scope: capability.grpc + - capability_id: com.corex.grpc.capability.capabilityregistryservice.disablecapability + module: capability + title: CapabilityRegistryService.DisableCapability + description: Generated from proto + categories: + - capability + - grpc + - generated + intents: + - capability.disablecapability + tool_scopes: + - capability.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/capability/registry/v1/registry.proto + protocols: + - channel: grpc + endpoint: powerx.capability.registry.v1.CapabilityRegistryService + rpc: DisableCapability + schema_ref: api/grpc/contracts/powerx/capability/registry/v1/registry.proto#CapabilityRegistryService + auth_type: tenant_jwt + tool_scope: capability.grpc + - capability_id: com.corex.grpc.capability.capabilityregistryservice.getcapability + module: capability + title: CapabilityRegistryService.GetCapability + description: Generated from proto + categories: + - capability + - grpc + - generated + intents: + - capability.getcapability + tool_scopes: + - capability.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/capability/registry/v1/registry.proto + protocols: + - channel: grpc + endpoint: powerx.capability.registry.v1.CapabilityRegistryService + rpc: GetCapability + schema_ref: api/grpc/contracts/powerx/capability/registry/v1/registry.proto#CapabilityRegistryService + auth_type: tenant_jwt + tool_scope: capability.grpc + - capability_id: com.corex.grpc.capability.capabilityregistryservice.getversionpolicy + module: capability + title: CapabilityRegistryService.GetVersionPolicy + description: Generated from proto + categories: + - capability + - grpc + - generated + intents: + - capability.getversionpolicy + tool_scopes: + - capability.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/capability/v1/capability_contract.proto + protocols: + - channel: grpc + endpoint: powerx.capability.v1.CapabilityRegistryService + rpc: GetVersionPolicy + schema_ref: api/grpc/contracts/powerx/capability/v1/capability_contract.proto#CapabilityRegistryService + auth_type: tenant_jwt + tool_scope: capability.grpc + - capability_id: com.corex.grpc.capability.capabilityregistryservice.listcapabilities + module: capability + title: CapabilityRegistryService.ListCapabilities + description: Generated from proto + categories: + - capability + - grpc + - generated + intents: + - capability.listcapabilities + tool_scopes: + - capability.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/capability/v1/capability_contract.proto + protocols: + - channel: grpc + endpoint: powerx.capability.v1.CapabilityRegistryService + rpc: ListCapabilities + schema_ref: api/grpc/contracts/powerx/capability/v1/capability_contract.proto#CapabilityRegistryService + auth_type: tenant_jwt + tool_scope: capability.grpc + - capability_id: com.corex.grpc.capability.capabilityregistryservice.listtransportprofiles + module: capability + title: CapabilityRegistryService.ListTransportProfiles + description: Generated from proto + categories: + - capability + - grpc + - generated + intents: + - capability.listtransportprofiles + tool_scopes: + - capability.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/capability/v1/capability_contract.proto + protocols: + - channel: grpc + endpoint: powerx.capability.v1.CapabilityRegistryService + rpc: ListTransportProfiles + schema_ref: api/grpc/contracts/powerx/capability/v1/capability_contract.proto#CapabilityRegistryService + auth_type: tenant_jwt + tool_scope: capability.grpc + - capability_id: com.corex.grpc.capability.capabilityregistryservice.publishcapability + module: capability + title: CapabilityRegistryService.PublishCapability + description: Generated from proto + categories: + - capability + - grpc + - generated + intents: + - capability.publishcapability + tool_scopes: + - capability.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/capability/v1/capability_contract.proto + protocols: + - channel: grpc + endpoint: powerx.capability.v1.CapabilityRegistryService + rpc: PublishCapability + schema_ref: api/grpc/contracts/powerx/capability/v1/capability_contract.proto#CapabilityRegistryService + auth_type: tenant_jwt + tool_scope: capability.grpc + - capability_id: com.corex.grpc.capability.capabilityregistryservice.streamupdates + module: capability + title: CapabilityRegistryService.StreamUpdates + description: Generated from proto + categories: + - capability + - grpc + - generated + intents: + - capability.streamupdates + tool_scopes: + - capability.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/capability/registry/v1/registry.proto + protocols: + - channel: grpc + endpoint: powerx.capability.registry.v1.CapabilityRegistryService + rpc: StreamUpdates + schema_ref: api/grpc/contracts/powerx/capability/registry/v1/registry.proto#CapabilityRegistryService + auth_type: tenant_jwt + tool_scope: capability.grpc + - capability_id: com.corex.grpc.capability.capabilityregistryservice.updatecapability + module: capability + title: CapabilityRegistryService.UpdateCapability + description: Generated from proto + categories: + - capability + - grpc + - generated + intents: + - capability.updatecapability + tool_scopes: + - capability.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/capability/registry/v1/registry.proto + protocols: + - channel: grpc + endpoint: powerx.capability.registry.v1.CapabilityRegistryService + rpc: UpdateCapability + schema_ref: api/grpc/contracts/powerx/capability/registry/v1/registry.proto#CapabilityRegistryService + auth_type: tenant_jwt + tool_scope: capability.grpc + - capability_id: com.corex.grpc.capability.capabilityregistryservice.upsertcapability + module: capability + title: CapabilityRegistryService.UpsertCapability + description: Generated from proto + categories: + - capability + - grpc + - generated + intents: + - capability.upsertcapability + tool_scopes: + - capability.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/capability/v1/capability_contract.proto + protocols: + - channel: grpc + endpoint: powerx.capability.v1.CapabilityRegistryService + rpc: UpsertCapability + schema_ref: api/grpc/contracts/powerx/capability/v1/capability_contract.proto#CapabilityRegistryService + auth_type: tenant_jwt + tool_scope: capability.grpc + - capability_id: com.corex.grpc.capability.capabilityregistryservice.upsertversionpolicy + module: capability + title: CapabilityRegistryService.UpsertVersionPolicy + description: Generated from proto + categories: + - capability + - grpc + - generated + intents: + - capability.upsertversionpolicy + tool_scopes: + - capability.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/capability/v1/capability_contract.proto + protocols: + - channel: grpc + endpoint: powerx.capability.v1.CapabilityRegistryService + rpc: UpsertVersionPolicy + schema_ref: api/grpc/contracts/powerx/capability/v1/capability_contract.proto#CapabilityRegistryService + auth_type: tenant_jwt + tool_scope: capability.grpc + - capability_id: com.corex.grpc.capability.capabilityroutersandboxservice.simulate + module: capability + title: CapabilityRouterSandboxService.Simulate + description: Generated from proto + categories: + - capability + - grpc + - generated + intents: + - capability.simulate + tool_scopes: + - capability.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/capability/registry/v1/registry.proto + protocols: + - channel: grpc + endpoint: powerx.capability.registry.v1.CapabilityRouterSandboxService + rpc: Simulate + schema_ref: api/grpc/contracts/powerx/capability/registry/v1/registry.proto#CapabilityRouterSandboxService + auth_type: tenant_jwt + tool_scope: capability.grpc + - capability_id: com.corex.grpc.capability.capabilityrouterservice.invoke + module: capability + title: CapabilityRouterService.Invoke + description: Generated from proto + categories: + - capability + - grpc + - generated + intents: + - capability.invoke + tool_scopes: + - capability.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/capability/registry/v1/registry.proto + protocols: + - channel: grpc + endpoint: powerx.capability.registry.v1.CapabilityRouterService + rpc: Invoke + schema_ref: api/grpc/contracts/powerx/capability/registry/v1/registry.proto#CapabilityRouterService + auth_type: tenant_jwt + tool_scope: capability.grpc + - capability_id: com.corex.grpc.capability.capabilityrouterservice.reporthealth + module: capability + title: CapabilityRouterService.ReportHealth + description: Generated from proto + categories: + - capability + - grpc + - generated + intents: + - capability.reporthealth + tool_scopes: + - capability.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/capability/registry/v1/registry.proto + protocols: + - channel: grpc + endpoint: powerx.capability.registry.v1.CapabilityRouterService + rpc: ReportHealth + schema_ref: api/grpc/contracts/powerx/capability/registry/v1/registry.proto#CapabilityRouterService + auth_type: tenant_jwt + tool_scope: capability.grpc + - capability_id: com.corex.grpc.capability.capabilityrouterservice.streaminvoke + module: capability + title: CapabilityRouterService.StreamInvoke + description: Generated from proto + categories: + - capability + - grpc + - generated + intents: + - capability.streaminvoke + tool_scopes: + - capability.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/capability/registry/v1/registry.proto + protocols: + - channel: grpc + endpoint: powerx.capability.registry.v1.CapabilityRouterService + rpc: StreamInvoke + schema_ref: api/grpc/contracts/powerx/capability/registry/v1/registry.proto#CapabilityRouterService + auth_type: tenant_jwt + tool_scope: capability.grpc + - capability_id: com.corex.grpc.event_fabric.authorizationservice.evaluate + module: event_fabric + title: AuthorizationService.Evaluate + description: Generated from proto + categories: + - event_fabric + - grpc + - generated + intents: + - event_fabric.evaluate + tool_scopes: + - event_fabric.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/event_fabric/v1/authorization.proto + protocols: + - channel: grpc + endpoint: powerx.event_fabric.v1.AuthorizationService + rpc: Evaluate + schema_ref: api/grpc/contracts/powerx/event_fabric/v1/authorization.proto#AuthorizationService + auth_type: tenant_jwt + tool_scope: event_fabric.grpc + - capability_id: com.corex.grpc.event_fabric.authorizationservice.getgrantsnapshot + module: event_fabric + title: AuthorizationService.GetGrantSnapshot + description: Generated from proto + categories: + - event_fabric + - grpc + - generated + intents: + - event_fabric.getgrantsnapshot + tool_scopes: + - event_fabric.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/event_fabric/v1/authorization.proto + protocols: + - channel: grpc + endpoint: powerx.event_fabric.v1.AuthorizationService + rpc: GetGrantSnapshot + schema_ref: api/grpc/contracts/powerx/event_fabric/v1/authorization.proto#AuthorizationService + auth_type: tenant_jwt + tool_scope: event_fabric.grpc + - capability_id: com.corex.grpc.event_fabric.authorizationservice.invalidategrantcache + module: event_fabric + title: AuthorizationService.InvalidateGrantCache + description: Generated from proto + categories: + - event_fabric + - grpc + - generated + intents: + - event_fabric.invalidategrantcache + tool_scopes: + - event_fabric.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/event_fabric/v1/authorization.proto + protocols: + - channel: grpc + endpoint: powerx.event_fabric.v1.AuthorizationService + rpc: InvalidateGrantCache + schema_ref: api/grpc/contracts/powerx/event_fabric/v1/authorization.proto#AuthorizationService + auth_type: tenant_jwt + tool_scope: event_fabric.grpc + - capability_id: com.corex.grpc.event_fabric.eventdeliveryservice.ackdelivery + module: event_fabric + title: EventDeliveryService.AckDelivery + description: Generated from proto + categories: + - event_fabric + - grpc + - generated + intents: + - event_fabric.ackdelivery + tool_scopes: + - event_fabric.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto + protocols: + - channel: grpc + endpoint: powerx.event_fabric.v1.EventDeliveryService + rpc: AckDelivery + schema_ref: api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto#EventDeliveryService + auth_type: tenant_jwt + tool_scope: event_fabric.grpc + - capability_id: com.corex.grpc.event_fabric.eventdeliveryservice.nackdelivery + module: event_fabric + title: EventDeliveryService.NackDelivery + description: Generated from proto + categories: + - event_fabric + - grpc + - generated + intents: + - event_fabric.nackdelivery + tool_scopes: + - event_fabric.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto + protocols: + - channel: grpc + endpoint: powerx.event_fabric.v1.EventDeliveryService + rpc: NackDelivery + schema_ref: api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto#EventDeliveryService + auth_type: tenant_jwt + tool_scope: event_fabric.grpc + - capability_id: com.corex.grpc.event_fabric.eventdeliveryservice.publishevent + module: event_fabric + title: EventDeliveryService.PublishEvent + description: Generated from proto + categories: + - event_fabric + - grpc + - generated + intents: + - event_fabric.publishevent + tool_scopes: + - event_fabric.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto + protocols: + - channel: grpc + endpoint: powerx.event_fabric.v1.EventDeliveryService + rpc: PublishEvent + schema_ref: api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto#EventDeliveryService + auth_type: tenant_jwt + tool_scope: event_fabric.grpc + - capability_id: com.corex.grpc.event_fabric.eventdlqservice.listmessages + module: event_fabric + title: EventDlqService.ListMessages + description: Generated from proto + categories: + - event_fabric + - grpc + - generated + intents: + - event_fabric.listmessages + tool_scopes: + - event_fabric.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto + protocols: + - channel: grpc + endpoint: powerx.event_fabric.v1.EventDlqService + rpc: ListMessages + schema_ref: api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto#EventDlqService + auth_type: tenant_jwt + tool_scope: event_fabric.grpc + - capability_id: com.corex.grpc.event_fabric.eventdlqservice.purgemessages + module: event_fabric + title: EventDlqService.PurgeMessages + description: Generated from proto + categories: + - event_fabric + - grpc + - generated + intents: + - event_fabric.purgemessages + tool_scopes: + - event_fabric.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto + protocols: + - channel: grpc + endpoint: powerx.event_fabric.v1.EventDlqService + rpc: PurgeMessages + schema_ref: api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto#EventDlqService + auth_type: tenant_jwt + tool_scope: event_fabric.grpc + - capability_id: com.corex.grpc.event_fabric.eventdlqservice.replaymessages + module: event_fabric + title: EventDlqService.ReplayMessages + description: Generated from proto + categories: + - event_fabric + - grpc + - generated + intents: + - event_fabric.replaymessages + tool_scopes: + - event_fabric.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto + protocols: + - channel: grpc + endpoint: powerx.event_fabric.v1.EventDlqService + rpc: ReplayMessages + schema_ref: api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto#EventDlqService + auth_type: tenant_jwt + tool_scope: event_fabric.grpc + - capability_id: com.corex.grpc.event_fabric.eventreplayservice.cancelreplaytask + module: event_fabric + title: EventReplayService.CancelReplayTask + description: Generated from proto + categories: + - event_fabric + - grpc + - generated + intents: + - event_fabric.cancelreplaytask + tool_scopes: + - event_fabric.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto + protocols: + - channel: grpc + endpoint: powerx.event_fabric.v1.EventReplayService + rpc: CancelReplayTask + schema_ref: api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto#EventReplayService + auth_type: tenant_jwt + tool_scope: event_fabric.grpc + - capability_id: com.corex.grpc.event_fabric.eventreplayservice.createreplaytask + module: event_fabric + title: EventReplayService.CreateReplayTask + description: Generated from proto + categories: + - event_fabric + - grpc + - generated + intents: + - event_fabric.createreplaytask + tool_scopes: + - event_fabric.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto + protocols: + - channel: grpc + endpoint: powerx.event_fabric.v1.EventReplayService + rpc: CreateReplayTask + schema_ref: api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto#EventReplayService + auth_type: tenant_jwt + tool_scope: event_fabric.grpc + - capability_id: com.corex.grpc.event_fabric.eventreplayservice.getreplaytask + module: event_fabric + title: EventReplayService.GetReplayTask + description: Generated from proto + categories: + - event_fabric + - grpc + - generated + intents: + - event_fabric.getreplaytask + tool_scopes: + - event_fabric.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto + protocols: + - channel: grpc + endpoint: powerx.event_fabric.v1.EventReplayService + rpc: GetReplayTask + schema_ref: api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto#EventReplayService + auth_type: tenant_jwt + tool_scope: event_fabric.grpc + - capability_id: com.corex.grpc.event_fabric.eventsubscriberservice.subscribe + module: event_fabric + title: EventSubscriberService.Subscribe + description: Generated from proto + categories: + - event_fabric + - grpc + - generated + intents: + - event_fabric.subscribe + tool_scopes: + - event_fabric.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto + protocols: + - channel: grpc + endpoint: powerx.event_fabric.v1.EventSubscriberService + rpc: Subscribe + schema_ref: api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto#EventSubscriberService + auth_type: tenant_jwt + tool_scope: event_fabric.grpc + - capability_id: com.corex.grpc.event_fabric.topicaclservice.canaccess + module: event_fabric + title: TopicAclService.CanAccess + description: Generated from proto + categories: + - event_fabric + - grpc + - generated + intents: + - event_fabric.canaccess + tool_scopes: + - event_fabric.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto + protocols: + - channel: grpc + endpoint: powerx.event_fabric.v1.TopicAclService + rpc: CanAccess + schema_ref: api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto#TopicAclService + auth_type: tenant_jwt + tool_scope: event_fabric.grpc + - capability_id: com.corex.grpc.event_fabric.topicaclservice.grantbindings + module: event_fabric + title: TopicAclService.GrantBindings + description: Generated from proto + categories: + - event_fabric + - grpc + - generated + intents: + - event_fabric.grantbindings + tool_scopes: + - event_fabric.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto + protocols: + - channel: grpc + endpoint: powerx.event_fabric.v1.TopicAclService + rpc: GrantBindings + schema_ref: api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto#TopicAclService + auth_type: tenant_jwt + tool_scope: event_fabric.grpc + - capability_id: com.corex.grpc.event_fabric.topicaclservice.listbindings + module: event_fabric + title: TopicAclService.ListBindings + description: Generated from proto + categories: + - event_fabric + - grpc + - generated + intents: + - event_fabric.listbindings + tool_scopes: + - event_fabric.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto + protocols: + - channel: grpc + endpoint: powerx.event_fabric.v1.TopicAclService + rpc: ListBindings + schema_ref: api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto#TopicAclService + auth_type: tenant_jwt + tool_scope: event_fabric.grpc + - capability_id: com.corex.grpc.event_fabric.topicaclservice.revokebindings + module: event_fabric + title: TopicAclService.RevokeBindings + description: Generated from proto + categories: + - event_fabric + - grpc + - generated + intents: + - event_fabric.revokebindings + tool_scopes: + - event_fabric.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto + protocols: + - channel: grpc + endpoint: powerx.event_fabric.v1.TopicAclService + rpc: RevokeBindings + schema_ref: api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto#TopicAclService + auth_type: tenant_jwt + tool_scope: event_fabric.grpc + - capability_id: com.corex.grpc.event_fabric.topicdirectoryservice.createtopic + module: event_fabric + title: TopicDirectoryService.CreateTopic + description: Generated from proto + categories: + - event_fabric + - grpc + - generated + intents: + - event_fabric.createtopic + tool_scopes: + - event_fabric.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto + protocols: + - channel: grpc + endpoint: powerx.event_fabric.v1.TopicDirectoryService + rpc: CreateTopic + schema_ref: api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto#TopicDirectoryService + auth_type: tenant_jwt + tool_scope: event_fabric.grpc + - capability_id: com.corex.grpc.event_fabric.topicdirectoryservice.listtopics + module: event_fabric + title: TopicDirectoryService.ListTopics + description: Generated from proto + categories: + - event_fabric + - grpc + - generated + intents: + - event_fabric.listtopics + tool_scopes: + - event_fabric.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto + protocols: + - channel: grpc + endpoint: powerx.event_fabric.v1.TopicDirectoryService + rpc: ListTopics + schema_ref: api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto#TopicDirectoryService + auth_type: tenant_jwt + tool_scope: event_fabric.grpc + - capability_id: com.corex.grpc.event_fabric.topicdirectoryservice.updatelifecycle + module: event_fabric + title: TopicDirectoryService.UpdateLifecycle + description: Generated from proto + categories: + - event_fabric + - grpc + - generated + intents: + - event_fabric.updatelifecycle + tool_scopes: + - event_fabric.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto + protocols: + - channel: grpc + endpoint: powerx.event_fabric.v1.TopicDirectoryService + rpc: UpdateLifecycle + schema_ref: api/grpc/contracts/powerx/event_fabric/v1/event_fabric.proto#TopicDirectoryService + auth_type: tenant_jwt + tool_scope: event_fabric.grpc + - capability_id: com.corex.grpc.iam.memberservice.batchgetmembers + module: iam + title: MemberService.BatchGetMembers + description: Generated from proto + categories: + - iam + - grpc + - generated + intents: + - iam.batchgetmembers + tool_scopes: + - iam.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/iam/v1/member.proto + protocols: + - channel: grpc + endpoint: powerx.iam.v1.MemberService + rpc: BatchGetMembers + schema_ref: api/grpc/contracts/powerx/iam/v1/member.proto#MemberService + auth_type: tenant_jwt + tool_scope: iam.grpc + - capability_id: com.corex.grpc.iam.memberservice.getmember + module: iam + title: MemberService.GetMember + description: Generated from proto + categories: + - iam + - grpc + - generated + intents: + - iam.getmember + tool_scopes: + - iam.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/iam/v1/member.proto + protocols: + - channel: grpc + endpoint: powerx.iam.v1.MemberService + rpc: GetMember + schema_ref: api/grpc/contracts/powerx/iam/v1/member.proto#MemberService + auth_type: tenant_jwt + tool_scope: iam.grpc + - capability_id: com.corex.grpc.iam.memberservice.listmembers + module: iam + title: MemberService.ListMembers + description: Generated from proto + categories: + - iam + - grpc + - generated + intents: + - iam.listmembers + tool_scopes: + - iam.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/iam/v1/member.proto + protocols: + - channel: grpc + endpoint: powerx.iam.v1.MemberService + rpc: ListMembers + schema_ref: api/grpc/contracts/powerx/iam/v1/member.proto#MemberService + auth_type: tenant_jwt + tool_scope: iam.grpc + - capability_id: com.corex.grpc.iam.teamservice.getteam + module: iam + title: TeamService.GetTeam + description: Generated from proto + categories: + - iam + - grpc + - generated + intents: + - iam.getteam + tool_scopes: + - iam.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/iam/v1/team.proto + protocols: + - channel: grpc + endpoint: powerx.iam.v1.TeamService + rpc: GetTeam + schema_ref: api/grpc/contracts/powerx/iam/v1/team.proto#TeamService + auth_type: tenant_jwt + tool_scope: iam.grpc + - capability_id: com.corex.grpc.iam.teamservice.listmemberteams + module: iam + title: TeamService.ListMemberTeams + description: Generated from proto + categories: + - iam + - grpc + - generated + intents: + - iam.listmemberteams + tool_scopes: + - iam.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/iam/v1/team.proto + protocols: + - channel: grpc + endpoint: powerx.iam.v1.TeamService + rpc: ListMemberTeams + schema_ref: api/grpc/contracts/powerx/iam/v1/team.proto#TeamService + auth_type: tenant_jwt + tool_scope: iam.grpc + - capability_id: com.corex.grpc.iam.teamservice.listteammembers + module: iam + title: TeamService.ListTeamMembers + description: Generated from proto + categories: + - iam + - grpc + - generated + intents: + - iam.listteammembers + tool_scopes: + - iam.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/iam/v1/team.proto + protocols: + - channel: grpc + endpoint: powerx.iam.v1.TeamService + rpc: ListTeamMembers + schema_ref: api/grpc/contracts/powerx/iam/v1/team.proto#TeamService + auth_type: tenant_jwt + tool_scope: iam.grpc + - capability_id: com.corex.grpc.iam.teamservice.listteams + module: iam + title: TeamService.ListTeams + description: Generated from proto + categories: + - iam + - grpc + - generated + intents: + - iam.listteams + tool_scopes: + - iam.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/iam/v1/team.proto + protocols: + - channel: grpc + endpoint: powerx.iam.v1.TeamService + rpc: ListTeams + schema_ref: api/grpc/contracts/powerx/iam/v1/team.proto#TeamService + auth_type: tenant_jwt + tool_scope: iam.grpc + - capability_id: com.corex.grpc.integration.integrationgatewayadminservice.changelifecycle + module: integration + title: IntegrationGatewayAdminService.ChangeLifecycle + description: Generated from proto + categories: + - integration + - grpc + - generated + intents: + - integration.changelifecycle + tool_scopes: + - integration.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/integration_gateway/v1/integration_gateway.proto + protocols: + - channel: grpc + endpoint: powerx.integration.gateway.v1.IntegrationGatewayAdminService + rpc: ChangeLifecycle + schema_ref: api/grpc/contracts/powerx/integration_gateway/v1/integration_gateway.proto#IntegrationGatewayAdminService + auth_type: tenant_jwt + tool_scope: integration.grpc + - capability_id: com.corex.grpc.integration.integrationgatewayadminservice.createroute + module: integration + title: IntegrationGatewayAdminService.CreateRoute + description: Generated from proto + categories: + - integration + - grpc + - generated + intents: + - integration.createroute + tool_scopes: + - integration.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/integration_gateway/v1/integration_gateway.proto + protocols: + - channel: grpc + endpoint: powerx.integration.gateway.v1.IntegrationGatewayAdminService + rpc: CreateRoute + schema_ref: api/grpc/contracts/powerx/integration_gateway/v1/integration_gateway.proto#IntegrationGatewayAdminService + auth_type: tenant_jwt + tool_scope: integration.grpc + - capability_id: com.corex.grpc.integration.integrationgatewayadminservice.getroute + module: integration + title: IntegrationGatewayAdminService.GetRoute + description: Generated from proto + categories: + - integration + - grpc + - generated + intents: + - integration.getroute + tool_scopes: + - integration.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/integration_gateway/v1/integration_gateway.proto + protocols: + - channel: grpc + endpoint: powerx.integration.gateway.v1.IntegrationGatewayAdminService + rpc: GetRoute + schema_ref: api/grpc/contracts/powerx/integration_gateway/v1/integration_gateway.proto#IntegrationGatewayAdminService + auth_type: tenant_jwt + tool_scope: integration.grpc + - capability_id: com.corex.grpc.integration.integrationgatewayadminservice.listroutes + module: integration + title: IntegrationGatewayAdminService.ListRoutes + description: Generated from proto + categories: + - integration + - grpc + - generated + intents: + - integration.listroutes + tool_scopes: + - integration.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/integration_gateway/v1/integration_gateway.proto + protocols: + - channel: grpc + endpoint: powerx.integration.gateway.v1.IntegrationGatewayAdminService + rpc: ListRoutes + schema_ref: api/grpc/contracts/powerx/integration_gateway/v1/integration_gateway.proto#IntegrationGatewayAdminService + auth_type: tenant_jwt + tool_scope: integration.grpc + - capability_id: com.corex.grpc.integration.integrationgatewayadminservice.listrouteversions + module: integration + title: IntegrationGatewayAdminService.ListRouteVersions + description: Generated from proto + categories: + - integration + - grpc + - generated + intents: + - integration.listrouteversions + tool_scopes: + - integration.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/integration_gateway/v1/integration_gateway.proto + protocols: + - channel: grpc + endpoint: powerx.integration.gateway.v1.IntegrationGatewayAdminService + rpc: ListRouteVersions + schema_ref: api/grpc/contracts/powerx/integration_gateway/v1/integration_gateway.proto#IntegrationGatewayAdminService + auth_type: tenant_jwt + tool_scope: integration.grpc + - capability_id: com.corex.grpc.integration.integrationgatewayadminservice.updateroute + module: integration + title: IntegrationGatewayAdminService.UpdateRoute + description: Generated from proto + categories: + - integration + - grpc + - generated + intents: + - integration.updateroute + tool_scopes: + - integration.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/integration_gateway/v1/integration_gateway.proto + protocols: + - channel: grpc + endpoint: powerx.integration.gateway.v1.IntegrationGatewayAdminService + rpc: UpdateRoute + schema_ref: api/grpc/contracts/powerx/integration_gateway/v1/integration_gateway.proto#IntegrationGatewayAdminService + auth_type: tenant_jwt + tool_scope: integration.grpc + - capability_id: com.corex.grpc.integration.integrationgatewayservice.getcapability + module: integration + title: IntegrationGatewayService.GetCapability + description: Generated from proto + categories: + - integration + - grpc + - generated + intents: + - integration.getcapability + tool_scopes: + - integration.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/integration_gateway/v1/integration_gateway.proto + protocols: + - channel: grpc + endpoint: powerx.integration.gateway.v1.IntegrationGatewayService + rpc: GetCapability + schema_ref: api/grpc/contracts/powerx/integration_gateway/v1/integration_gateway.proto#IntegrationGatewayService + auth_type: tenant_jwt + tool_scope: integration.grpc + - capability_id: com.corex.grpc.integration.integrationgatewayservice.invokecapability + module: integration + title: IntegrationGatewayService.InvokeCapability + description: Generated from proto + categories: + - integration + - grpc + - generated + intents: + - integration.invokecapability + tool_scopes: + - integration.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/integration_gateway/v1/integration_gateway.proto + protocols: + - channel: grpc + endpoint: powerx.integration.gateway.v1.IntegrationGatewayService + rpc: InvokeCapability + schema_ref: api/grpc/contracts/powerx/integration_gateway/v1/integration_gateway.proto#IntegrationGatewayService + auth_type: tenant_jwt + tool_scope: integration.grpc + - capability_id: com.corex.grpc.integration.integrationgatewayservice.listcapabilities + module: integration + title: IntegrationGatewayService.ListCapabilities + description: Generated from proto + categories: + - integration + - grpc + - generated + intents: + - integration.listcapabilities + tool_scopes: + - integration.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/integration_gateway/v1/integration_gateway.proto + protocols: + - channel: grpc + endpoint: powerx.integration.gateway.v1.IntegrationGatewayService + rpc: ListCapabilities + schema_ref: api/grpc/contracts/powerx/integration_gateway/v1/integration_gateway.proto#IntegrationGatewayService + auth_type: tenant_jwt + tool_scope: integration.grpc + - capability_id: com.corex.grpc.integration.integrationgatewayservice.listcapabilitysyncjobs + module: integration + title: IntegrationGatewayService.ListCapabilitySyncJobs + description: Generated from proto + categories: + - integration + - grpc + - generated + intents: + - integration.listcapabilitysyncjobs + tool_scopes: + - integration.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/integration_gateway/v1/integration_gateway.proto + protocols: + - channel: grpc + endpoint: powerx.integration.gateway.v1.IntegrationGatewayService + rpc: ListCapabilitySyncJobs + schema_ref: api/grpc/contracts/powerx/integration_gateway/v1/integration_gateway.proto#IntegrationGatewayService + auth_type: tenant_jwt + tool_scope: integration.grpc + - capability_id: com.corex.grpc.integration.integrationgatewayservice.listworkflowtemplates + module: integration + title: IntegrationGatewayService.ListWorkflowTemplates + description: Generated from proto + categories: + - integration + - grpc + - generated + intents: + - integration.listworkflowtemplates + tool_scopes: + - integration.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/integration_gateway/v1/integration_gateway.proto + protocols: + - channel: grpc + endpoint: powerx.integration.gateway.v1.IntegrationGatewayService + rpc: ListWorkflowTemplates + schema_ref: api/grpc/contracts/powerx/integration_gateway/v1/integration_gateway.proto#IntegrationGatewayService + auth_type: tenant_jwt + tool_scope: integration.grpc + - capability_id: com.corex.grpc.integration.integrationgatewayservice.streaminvocation + module: integration + title: IntegrationGatewayService.StreamInvocation + description: Generated from proto + categories: + - integration + - grpc + - generated + intents: + - integration.streaminvocation + tool_scopes: + - integration.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/integration_gateway/v1/integration_gateway.proto + protocols: + - channel: grpc + endpoint: powerx.integration.gateway.v1.IntegrationGatewayService + rpc: StreamInvocation + schema_ref: api/grpc/contracts/powerx/integration_gateway/v1/integration_gateway.proto#IntegrationGatewayService + auth_type: tenant_jwt + tool_scope: integration.grpc + - capability_id: com.corex.grpc.integration.integrationgatewaytenantservice.getroute + module: integration + title: IntegrationGatewayTenantService.GetRoute + description: Generated from proto + categories: + - integration + - grpc + - generated + intents: + - integration.getroute + tool_scopes: + - integration.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/integration_gateway/v1/integration_gateway.proto + protocols: + - channel: grpc + endpoint: powerx.integration.gateway.v1.IntegrationGatewayTenantService + rpc: GetRoute + schema_ref: api/grpc/contracts/powerx/integration_gateway/v1/integration_gateway.proto#IntegrationGatewayTenantService + auth_type: tenant_jwt + tool_scope: integration.grpc + - capability_id: com.corex.grpc.integration.integrationgatewaytenantservice.invokeroute + module: integration + title: IntegrationGatewayTenantService.InvokeRoute + description: Generated from proto + categories: + - integration + - grpc + - generated + intents: + - integration.invokeroute + tool_scopes: + - integration.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/integration_gateway/v1/integration_gateway.proto + protocols: + - channel: grpc + endpoint: powerx.integration.gateway.v1.IntegrationGatewayTenantService + rpc: InvokeRoute + schema_ref: api/grpc/contracts/powerx/integration_gateway/v1/integration_gateway.proto#IntegrationGatewayTenantService + auth_type: tenant_jwt + tool_scope: integration.grpc + - capability_id: com.corex.grpc.integration.integrationgatewaytenantservice.listroutes + module: integration + title: IntegrationGatewayTenantService.ListRoutes + description: Generated from proto + categories: + - integration + - grpc + - generated + intents: + - integration.listroutes + tool_scopes: + - integration.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/integration_gateway/v1/integration_gateway.proto + protocols: + - channel: grpc + endpoint: powerx.integration.gateway.v1.IntegrationGatewayTenantService + rpc: ListRoutes + schema_ref: api/grpc/contracts/powerx/integration_gateway/v1/integration_gateway.proto#IntegrationGatewayTenantService + auth_type: tenant_jwt + tool_scope: integration.grpc + - capability_id: com.corex.grpc.knowledge.knowledgespaceadminservice.applyevent + module: knowledge + title: KnowledgeSpaceAdminService.ApplyEvent + description: Generated from proto + categories: + - knowledge + - grpc + - generated + intents: + - knowledge.applyevent + tool_scopes: + - knowledge.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto + protocols: + - channel: grpc + endpoint: powerx.knowledge.v1.KnowledgeSpaceAdminService + rpc: ApplyEvent + schema_ref: api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto#KnowledgeSpaceAdminService + auth_type: tenant_jwt + tool_scope: knowledge.grpc + - capability_id: com.corex.grpc.knowledge.knowledgespaceadminservice.closefeedbackcase + module: knowledge + title: KnowledgeSpaceAdminService.CloseFeedbackCase + description: Generated from proto + categories: + - knowledge + - grpc + - generated + intents: + - knowledge.closefeedbackcase + tool_scopes: + - knowledge.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto + protocols: + - channel: grpc + endpoint: powerx.knowledge.v1.KnowledgeSpaceAdminService + rpc: CloseFeedbackCase + schema_ref: api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto#KnowledgeSpaceAdminService + auth_type: tenant_jwt + tool_scope: knowledge.grpc + - capability_id: com.corex.grpc.knowledge.knowledgespaceadminservice.createknowledgespace + module: knowledge + title: KnowledgeSpaceAdminService.CreateKnowledgeSpace + description: Generated from proto + categories: + - knowledge + - grpc + - generated + intents: + - knowledge.createknowledgespace + tool_scopes: + - knowledge.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto + protocols: + - channel: grpc + endpoint: powerx.knowledge.v1.KnowledgeSpaceAdminService + rpc: CreateKnowledgeSpace + schema_ref: api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto#KnowledgeSpaceAdminService + auth_type: tenant_jwt + tool_scope: knowledge.grpc + - capability_id: com.corex.grpc.knowledge.knowledgespaceadminservice.escalatefeedbackcase + module: knowledge + title: KnowledgeSpaceAdminService.EscalateFeedbackCase + description: Generated from proto + categories: + - knowledge + - grpc + - generated + intents: + - knowledge.escalatefeedbackcase + tool_scopes: + - knowledge.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto + protocols: + - channel: grpc + endpoint: powerx.knowledge.v1.KnowledgeSpaceAdminService + rpc: EscalateFeedbackCase + schema_ref: api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto#KnowledgeSpaceAdminService + auth_type: tenant_jwt + tool_scope: knowledge.grpc + - capability_id: com.corex.grpc.knowledge.knowledgespaceadminservice.exportfeedbackcases + module: knowledge + title: KnowledgeSpaceAdminService.ExportFeedbackCases + description: Generated from proto + categories: + - knowledge + - grpc + - generated + intents: + - knowledge.exportfeedbackcases + tool_scopes: + - knowledge.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto + protocols: + - channel: grpc + endpoint: powerx.knowledge.v1.KnowledgeSpaceAdminService + rpc: ExportFeedbackCases + schema_ref: api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto#KnowledgeSpaceAdminService + auth_type: tenant_jwt + tool_scope: knowledge.grpc + - capability_id: com.corex.grpc.knowledge.knowledgespaceadminservice.getdeltareport + module: knowledge + title: KnowledgeSpaceAdminService.GetDeltaReport + description: Generated from proto + categories: + - knowledge + - grpc + - generated + intents: + - knowledge.getdeltareport + tool_scopes: + - knowledge.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto + protocols: + - channel: grpc + endpoint: powerx.knowledge.v1.KnowledgeSpaceAdminService + rpc: GetDeltaReport + schema_ref: api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto#KnowledgeSpaceAdminService + auth_type: tenant_jwt + tool_scope: knowledge.grpc + - capability_id: com.corex.grpc.knowledge.knowledgespaceadminservice.hotupdateindex + module: knowledge + title: KnowledgeSpaceAdminService.HotUpdateIndex + description: Generated from proto + categories: + - knowledge + - grpc + - generated + intents: + - knowledge.hotupdateindex + tool_scopes: + - knowledge.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto + protocols: + - channel: grpc + endpoint: powerx.knowledge.v1.KnowledgeSpaceAdminService + rpc: HotUpdateIndex + schema_ref: api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto#KnowledgeSpaceAdminService + auth_type: tenant_jwt + tool_scope: knowledge.grpc + - capability_id: com.corex.grpc.knowledge.knowledgespaceadminservice.listdecaytasks + module: knowledge + title: KnowledgeSpaceAdminService.ListDecayTasks + description: Generated from proto + categories: + - knowledge + - grpc + - generated + intents: + - knowledge.listdecaytasks + tool_scopes: + - knowledge.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto + protocols: + - channel: grpc + endpoint: powerx.knowledge.v1.KnowledgeSpaceAdminService + rpc: ListDecayTasks + schema_ref: api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto#KnowledgeSpaceAdminService + auth_type: tenant_jwt + tool_scope: knowledge.grpc + - capability_id: com.corex.grpc.knowledge.knowledgespaceadminservice.listfeedbackcases + module: knowledge + title: KnowledgeSpaceAdminService.ListFeedbackCases + description: Generated from proto + categories: + - knowledge + - grpc + - generated + intents: + - knowledge.listfeedbackcases + tool_scopes: + - knowledge.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto + protocols: + - channel: grpc + endpoint: powerx.knowledge.v1.KnowledgeSpaceAdminService + rpc: ListFeedbackCases + schema_ref: api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto#KnowledgeSpaceAdminService + auth_type: tenant_jwt + tool_scope: knowledge.grpc + - capability_id: com.corex.grpc.knowledge.knowledgespaceadminservice.listfusionstrategies + module: knowledge + title: KnowledgeSpaceAdminService.ListFusionStrategies + description: Generated from proto + categories: + - knowledge + - grpc + - generated + intents: + - knowledge.listfusionstrategies + tool_scopes: + - knowledge.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto + protocols: + - channel: grpc + endpoint: powerx.knowledge.v1.KnowledgeSpaceAdminService + rpc: ListFusionStrategies + schema_ref: api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto#KnowledgeSpaceAdminService + auth_type: tenant_jwt + tool_scope: knowledge.grpc + - capability_id: com.corex.grpc.knowledge.knowledgespaceadminservice.promoterelease + module: knowledge + title: KnowledgeSpaceAdminService.PromoteRelease + description: Generated from proto + categories: + - knowledge + - grpc + - generated + intents: + - knowledge.promoterelease + tool_scopes: + - knowledge.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto + protocols: + - channel: grpc + endpoint: powerx.knowledge.v1.KnowledgeSpaceAdminService + rpc: PromoteRelease + schema_ref: api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto#KnowledgeSpaceAdminService + auth_type: tenant_jwt + tool_scope: knowledge.grpc + - capability_id: com.corex.grpc.knowledge.knowledgespaceadminservice.publishdeltajob + module: knowledge + title: KnowledgeSpaceAdminService.PublishDeltaJob + description: Generated from proto + categories: + - knowledge + - grpc + - generated + intents: + - knowledge.publishdeltajob + tool_scopes: + - knowledge.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto + protocols: + - channel: grpc + endpoint: powerx.knowledge.v1.KnowledgeSpaceAdminService + rpc: PublishDeltaJob + schema_ref: api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto#KnowledgeSpaceAdminService + auth_type: tenant_jwt + tool_scope: knowledge.grpc + - capability_id: com.corex.grpc.knowledge.knowledgespaceadminservice.publishfusionstrategy + module: knowledge + title: KnowledgeSpaceAdminService.PublishFusionStrategy + description: Generated from proto + categories: + - knowledge + - grpc + - generated + intents: + - knowledge.publishfusionstrategy + tool_scopes: + - knowledge.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto + protocols: + - channel: grpc + endpoint: powerx.knowledge.v1.KnowledgeSpaceAdminService + rpc: PublishFusionStrategy + schema_ref: api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto#KnowledgeSpaceAdminService + auth_type: tenant_jwt + tool_scope: knowledge.grpc + - capability_id: com.corex.grpc.knowledge.knowledgespaceadminservice.publishrelease + module: knowledge + title: KnowledgeSpaceAdminService.PublishRelease + description: Generated from proto + categories: + - knowledge + - grpc + - generated + intents: + - knowledge.publishrelease + tool_scopes: + - knowledge.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto + protocols: + - channel: grpc + endpoint: powerx.knowledge.v1.KnowledgeSpaceAdminService + rpc: PublishRelease + schema_ref: api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto#KnowledgeSpaceAdminService + auth_type: tenant_jwt + tool_scope: knowledge.grpc + - capability_id: com.corex.grpc.knowledge.knowledgespaceadminservice.refreshagentweights + module: knowledge + title: KnowledgeSpaceAdminService.RefreshAgentWeights + description: Generated from proto + categories: + - knowledge + - grpc + - generated + intents: + - knowledge.refreshagentweights + tool_scopes: + - knowledge.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto + protocols: + - channel: grpc + endpoint: powerx.knowledge.v1.KnowledgeSpaceAdminService + rpc: RefreshAgentWeights + schema_ref: api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto#KnowledgeSpaceAdminService + auth_type: tenant_jwt + tool_scope: knowledge.grpc + - capability_id: com.corex.grpc.knowledge.knowledgespaceadminservice.reprocessfeedbackcase + module: knowledge + title: KnowledgeSpaceAdminService.ReprocessFeedbackCase + description: Generated from proto + categories: + - knowledge + - grpc + - generated + intents: + - knowledge.reprocessfeedbackcase + tool_scopes: + - knowledge.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto + protocols: + - channel: grpc + endpoint: powerx.knowledge.v1.KnowledgeSpaceAdminService + rpc: ReprocessFeedbackCase + schema_ref: api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto#KnowledgeSpaceAdminService + auth_type: tenant_jwt + tool_scope: knowledge.grpc + - capability_id: com.corex.grpc.knowledge.knowledgespaceadminservice.restoredecaytask + module: knowledge + title: KnowledgeSpaceAdminService.RestoreDecayTask + description: Generated from proto + categories: + - knowledge + - grpc + - generated + intents: + - knowledge.restoredecaytask + tool_scopes: + - knowledge.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto + protocols: + - channel: grpc + endpoint: powerx.knowledge.v1.KnowledgeSpaceAdminService + rpc: RestoreDecayTask + schema_ref: api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto#KnowledgeSpaceAdminService + auth_type: tenant_jwt + tool_scope: knowledge.grpc + - capability_id: com.corex.grpc.knowledge.knowledgespaceadminservice.retireknowledgespace + module: knowledge + title: KnowledgeSpaceAdminService.RetireKnowledgeSpace + description: Generated from proto + categories: + - knowledge + - grpc + - generated + intents: + - knowledge.retireknowledgespace + tool_scopes: + - knowledge.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto + protocols: + - channel: grpc + endpoint: powerx.knowledge.v1.KnowledgeSpaceAdminService + rpc: RetireKnowledgeSpace + schema_ref: api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto#KnowledgeSpaceAdminService + auth_type: tenant_jwt + tool_scope: knowledge.grpc + - capability_id: com.corex.grpc.knowledge.knowledgespaceadminservice.retryevent + module: knowledge + title: KnowledgeSpaceAdminService.RetryEvent + description: Generated from proto + categories: + - knowledge + - grpc + - generated + intents: + - knowledge.retryevent + tool_scopes: + - knowledge.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto + protocols: + - channel: grpc + endpoint: powerx.knowledge.v1.KnowledgeSpaceAdminService + rpc: RetryEvent + schema_ref: api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto#KnowledgeSpaceAdminService + auth_type: tenant_jwt + tool_scope: knowledge.grpc + - capability_id: com.corex.grpc.knowledge.knowledgespaceadminservice.rollbackdelta + module: knowledge + title: KnowledgeSpaceAdminService.RollbackDelta + description: Generated from proto + categories: + - knowledge + - grpc + - generated + intents: + - knowledge.rollbackdelta + tool_scopes: + - knowledge.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto + protocols: + - channel: grpc + endpoint: powerx.knowledge.v1.KnowledgeSpaceAdminService + rpc: RollbackDelta + schema_ref: api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto#KnowledgeSpaceAdminService + auth_type: tenant_jwt + tool_scope: knowledge.grpc + - capability_id: com.corex.grpc.knowledge.knowledgespaceadminservice.rollbackfeedbackcase + module: knowledge + title: KnowledgeSpaceAdminService.RollbackFeedbackCase + description: Generated from proto + categories: + - knowledge + - grpc + - generated + intents: + - knowledge.rollbackfeedbackcase + tool_scopes: + - knowledge.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto + protocols: + - channel: grpc + endpoint: powerx.knowledge.v1.KnowledgeSpaceAdminService + rpc: RollbackFeedbackCase + schema_ref: api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto#KnowledgeSpaceAdminService + auth_type: tenant_jwt + tool_scope: knowledge.grpc + - capability_id: com.corex.grpc.knowledge.knowledgespaceadminservice.rollbackfusionstrategy + module: knowledge + title: KnowledgeSpaceAdminService.RollbackFusionStrategy + description: Generated from proto + categories: + - knowledge + - grpc + - generated + intents: + - knowledge.rollbackfusionstrategy + tool_scopes: + - knowledge.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto + protocols: + - channel: grpc + endpoint: powerx.knowledge.v1.KnowledgeSpaceAdminService + rpc: RollbackFusionStrategy + schema_ref: api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto#KnowledgeSpaceAdminService + auth_type: tenant_jwt + tool_scope: knowledge.grpc + - capability_id: com.corex.grpc.knowledge.knowledgespaceadminservice.rollbackrelease + module: knowledge + title: KnowledgeSpaceAdminService.RollbackRelease + description: Generated from proto + categories: + - knowledge + - grpc + - generated + intents: + - knowledge.rollbackrelease + tool_scopes: + - knowledge.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto + protocols: + - channel: grpc + endpoint: powerx.knowledge.v1.KnowledgeSpaceAdminService + rpc: RollbackRelease + schema_ref: api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto#KnowledgeSpaceAdminService + auth_type: tenant_jwt + tool_scope: knowledge.grpc + - capability_id: com.corex.grpc.knowledge.knowledgespaceadminservice.rundecayscan + module: knowledge + title: KnowledgeSpaceAdminService.RunDecayScan + description: Generated from proto + categories: + - knowledge + - grpc + - generated + intents: + - knowledge.rundecayscan + tool_scopes: + - knowledge.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto + protocols: + - channel: grpc + endpoint: powerx.knowledge.v1.KnowledgeSpaceAdminService + rpc: RunDecayScan + schema_ref: api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto#KnowledgeSpaceAdminService + auth_type: tenant_jwt + tool_scope: knowledge.grpc + - capability_id: com.corex.grpc.knowledge.knowledgespaceadminservice.startdeltajob + module: knowledge + title: KnowledgeSpaceAdminService.StartDeltaJob + description: Generated from proto + categories: + - knowledge + - grpc + - generated + intents: + - knowledge.startdeltajob + tool_scopes: + - knowledge.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto + protocols: + - channel: grpc + endpoint: powerx.knowledge.v1.KnowledgeSpaceAdminService + rpc: StartDeltaJob + schema_ref: api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto#KnowledgeSpaceAdminService + auth_type: tenant_jwt + tool_scope: knowledge.grpc + - capability_id: com.corex.grpc.knowledge.knowledgespaceadminservice.submitfeedback + module: knowledge + title: KnowledgeSpaceAdminService.SubmitFeedback + description: Generated from proto + categories: + - knowledge + - grpc + - generated + intents: + - knowledge.submitfeedback + tool_scopes: + - knowledge.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto + protocols: + - channel: grpc + endpoint: powerx.knowledge.v1.KnowledgeSpaceAdminService + rpc: SubmitFeedback + schema_ref: api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto#KnowledgeSpaceAdminService + auth_type: tenant_jwt + tool_scope: knowledge.grpc + - capability_id: com.corex.grpc.knowledge.knowledgespaceadminservice.triggeringestion + module: knowledge + title: KnowledgeSpaceAdminService.TriggerIngestion + description: Generated from proto + categories: + - knowledge + - grpc + - generated + intents: + - knowledge.triggeringestion + tool_scopes: + - knowledge.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto + protocols: + - channel: grpc + endpoint: powerx.knowledge.v1.KnowledgeSpaceAdminService + rpc: TriggerIngestion + schema_ref: api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto#KnowledgeSpaceAdminService + auth_type: tenant_jwt + tool_scope: knowledge.grpc + - capability_id: com.corex.grpc.knowledge.knowledgespaceadminservice.updateknowledgespace + module: knowledge + title: KnowledgeSpaceAdminService.UpdateKnowledgeSpace + description: Generated from proto + categories: + - knowledge + - grpc + - generated + intents: + - knowledge.updateknowledgespace + tool_scopes: + - knowledge.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto + protocols: + - channel: grpc + endpoint: powerx.knowledge.v1.KnowledgeSpaceAdminService + rpc: UpdateKnowledgeSpace + schema_ref: api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto#KnowledgeSpaceAdminService + auth_type: tenant_jwt + tool_scope: knowledge.grpc + - capability_id: com.corex.grpc.knowledge.knowledgespaceadminservice.upsertreleasepolicy + module: knowledge + title: KnowledgeSpaceAdminService.UpsertReleasePolicy + description: Generated from proto + categories: + - knowledge + - grpc + - generated + intents: + - knowledge.upsertreleasepolicy + tool_scopes: + - knowledge.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto + protocols: + - channel: grpc + endpoint: powerx.knowledge.v1.KnowledgeSpaceAdminService + rpc: UpsertReleasePolicy + schema_ref: api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto#KnowledgeSpaceAdminService + auth_type: tenant_jwt + tool_scope: knowledge.grpc + - capability_id: com.corex.grpc.knowledge.knowledgespaceqabridgeservice.planretrieval + module: knowledge + title: KnowledgeSpaceQABridgeService.PlanRetrieval + description: Generated from proto + categories: + - knowledge + - grpc + - generated + intents: + - knowledge.planretrieval + tool_scopes: + - knowledge.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto + protocols: + - channel: grpc + endpoint: powerx.knowledge.v1.KnowledgeSpaceQABridgeService + rpc: PlanRetrieval + schema_ref: api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto#KnowledgeSpaceQABridgeService + auth_type: tenant_jwt + tool_scope: knowledge.grpc + - capability_id: com.corex.grpc.knowledge.knowledgespaceqabridgeservice.upsertmemorysnapshot + module: knowledge + title: KnowledgeSpaceQABridgeService.UpsertMemorySnapshot + description: Generated from proto + categories: + - knowledge + - grpc + - generated + intents: + - knowledge.upsertmemorysnapshot + tool_scopes: + - knowledge.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto + protocols: + - channel: grpc + endpoint: powerx.knowledge.v1.KnowledgeSpaceQABridgeService + rpc: UpsertMemorySnapshot + schema_ref: api/grpc/contracts/powerx/knowledge/v1/knowledge_space.proto#KnowledgeSpaceQABridgeService + auth_type: tenant_jwt + tool_scope: knowledge.grpc + - capability_id: com.corex.grpc.media.mediaassetadminservice.createmediaasset + module: media + title: MediaAssetAdminService.CreateMediaAsset + description: Generated from proto + categories: + - media + - grpc + - generated + intents: + - media.createmediaasset + tool_scopes: + - media.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/media/v1/media_asset.proto + protocols: + - channel: grpc + endpoint: powerx.media.v1.MediaAssetAdminService + rpc: CreateMediaAsset + schema_ref: api/grpc/contracts/powerx/media/v1/media_asset.proto#MediaAssetAdminService + auth_type: tenant_jwt + tool_scope: media.grpc + - capability_id: com.corex.grpc.media.mediaassetadminservice.deletemediaasset + module: media + title: MediaAssetAdminService.DeleteMediaAsset + description: Generated from proto + categories: + - media + - grpc + - generated + intents: + - media.deletemediaasset + tool_scopes: + - media.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/media/v1/media_asset.proto + protocols: + - channel: grpc + endpoint: powerx.media.v1.MediaAssetAdminService + rpc: DeleteMediaAsset + schema_ref: api/grpc/contracts/powerx/media/v1/media_asset.proto#MediaAssetAdminService + auth_type: tenant_jwt + tool_scope: media.grpc + - capability_id: com.corex.grpc.media.mediaassetadminservice.getmediaasset + module: media + title: MediaAssetAdminService.GetMediaAsset + description: Generated from proto + categories: + - media + - grpc + - generated + intents: + - media.getmediaasset + tool_scopes: + - media.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/media/v1/media_asset.proto + protocols: + - channel: grpc + endpoint: powerx.media.v1.MediaAssetAdminService + rpc: GetMediaAsset + schema_ref: api/grpc/contracts/powerx/media/v1/media_asset.proto#MediaAssetAdminService + auth_type: tenant_jwt + tool_scope: media.grpc + - capability_id: com.corex.grpc.media.mediaassetadminservice.listmediaassets + module: media + title: MediaAssetAdminService.ListMediaAssets + description: Generated from proto + categories: + - media + - grpc + - generated + intents: + - media.listmediaassets + tool_scopes: + - media.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/media/v1/media_asset.proto + protocols: + - channel: grpc + endpoint: powerx.media.v1.MediaAssetAdminService + rpc: ListMediaAssets + schema_ref: api/grpc/contracts/powerx/media/v1/media_asset.proto#MediaAssetAdminService + auth_type: tenant_jwt + tool_scope: media.grpc + - capability_id: com.corex.grpc.media.mediaassetadminservice.presignmediaasset + module: media + title: MediaAssetAdminService.PresignMediaAsset + description: Generated from proto + categories: + - media + - grpc + - generated + intents: + - media.presignmediaasset + tool_scopes: + - media.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/media/v1/media_asset.proto + protocols: + - channel: grpc + endpoint: powerx.media.v1.MediaAssetAdminService + rpc: PresignMediaAsset + schema_ref: api/grpc/contracts/powerx/media/v1/media_asset.proto#MediaAssetAdminService + auth_type: tenant_jwt + tool_scope: media.grpc + - capability_id: com.corex.grpc.media.mediaassetadminservice.updatemediaasset + module: media + title: MediaAssetAdminService.UpdateMediaAsset + description: Generated from proto + categories: + - media + - grpc + - generated + intents: + - media.updatemediaasset + tool_scopes: + - media.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/media/v1/media_asset.proto + protocols: + - channel: grpc + endpoint: powerx.media.v1.MediaAssetAdminService + rpc: UpdateMediaAsset + schema_ref: api/grpc/contracts/powerx/media/v1/media_asset.proto#MediaAssetAdminService + auth_type: tenant_jwt + tool_scope: media.grpc + - capability_id: com.corex.grpc.plugin.controlservice.upserttenantcredentials + module: plugin + title: ControlService.UpsertTenantCredentials + description: Generated from proto + categories: + - plugin + - grpc + - generated + intents: + - plugin.upserttenantcredentials + tool_scopes: + - plugin.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/plugin/control/v1/control.proto + protocols: + - channel: grpc + endpoint: powerx.plugin.control.v1.ControlService + rpc: UpsertTenantCredentials + schema_ref: api/grpc/contracts/powerx/plugin/control/v1/control.proto#ControlService + auth_type: tenant_jwt + tool_scope: plugin.grpc + - capability_id: com.corex.grpc.plugin_release.pluginreleaseservice.createreleasecandidate + module: plugin_release + title: PluginReleaseService.CreateReleaseCandidate + description: Generated from proto + categories: + - plugin_release + - grpc + - generated + intents: + - plugin_release.createreleasecandidate + tool_scopes: + - plugin_release.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/plugin_release/v1/plugin_release.proto + protocols: + - channel: grpc + endpoint: powerx.plugin_release.v1.PluginReleaseService + rpc: CreateReleaseCandidate + schema_ref: api/grpc/contracts/powerx/plugin_release/v1/plugin_release.proto#PluginReleaseService + auth_type: tenant_jwt + tool_scope: plugin_release.grpc + - capability_id: com.corex.grpc.plugin_release.pluginreleaseservice.finalizedeployment + module: plugin_release + title: PluginReleaseService.FinalizeDeployment + description: Generated from proto + categories: + - plugin_release + - grpc + - generated + intents: + - plugin_release.finalizedeployment + tool_scopes: + - plugin_release.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/plugin_release/v1/plugin_release.proto + protocols: + - channel: grpc + endpoint: powerx.plugin_release.v1.PluginReleaseService + rpc: FinalizeDeployment + schema_ref: api/grpc/contracts/powerx/plugin_release/v1/plugin_release.proto#PluginReleaseService + auth_type: tenant_jwt + tool_scope: plugin_release.grpc + - capability_id: com.corex.grpc.plugin_release.pluginreleaseservice.generatereleaseplan + module: plugin_release + title: PluginReleaseService.GenerateReleasePlan + description: Generated from proto + categories: + - plugin_release + - grpc + - generated + intents: + - plugin_release.generatereleaseplan + tool_scopes: + - plugin_release.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/plugin_release/v1/plugin_release.proto + protocols: + - channel: grpc + endpoint: powerx.plugin_release.v1.PluginReleaseService + rpc: GenerateReleasePlan + schema_ref: api/grpc/contracts/powerx/plugin_release/v1/plugin_release.proto#PluginReleaseService + auth_type: tenant_jwt + tool_scope: plugin_release.grpc + - capability_id: com.corex.grpc.plugin_release.pluginreleaseservice.getlocalinstallsession + module: plugin_release + title: PluginReleaseService.GetLocalInstallSession + description: Generated from proto + categories: + - plugin_release + - grpc + - generated + intents: + - plugin_release.getlocalinstallsession + tool_scopes: + - plugin_release.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/plugin_release/v1/plugin_release.proto + protocols: + - channel: grpc + endpoint: powerx.plugin_release.v1.PluginReleaseService + rpc: GetLocalInstallSession + schema_ref: api/grpc/contracts/powerx/plugin_release/v1/plugin_release.proto#PluginReleaseService + auth_type: tenant_jwt + tool_scope: plugin_release.grpc + - capability_id: com.corex.grpc.plugin_release.pluginreleaseservice.importofflinepackage + module: plugin_release + title: PluginReleaseService.ImportOfflinePackage + description: Generated from proto + categories: + - plugin_release + - grpc + - generated + intents: + - plugin_release.importofflinepackage + tool_scopes: + - plugin_release.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/plugin_release/v1/plugin_release.proto + protocols: + - channel: grpc + endpoint: powerx.plugin_release.v1.PluginReleaseService + rpc: ImportOfflinePackage + schema_ref: api/grpc/contracts/powerx/plugin_release/v1/plugin_release.proto#PluginReleaseService + auth_type: tenant_jwt + tool_scope: plugin_release.grpc + - capability_id: com.corex.grpc.plugin_release.pluginreleaseservice.pushhotreload + module: plugin_release + title: PluginReleaseService.PushHotReload + description: Generated from proto + categories: + - plugin_release + - grpc + - generated + intents: + - plugin_release.pushhotreload + tool_scopes: + - plugin_release.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/plugin_release/v1/plugin_release.proto + protocols: + - channel: grpc + endpoint: powerx.plugin_release.v1.PluginReleaseService + rpc: PushHotReload + schema_ref: api/grpc/contracts/powerx/plugin_release/v1/plugin_release.proto#PluginReleaseService + auth_type: tenant_jwt + tool_scope: plugin_release.grpc + - capability_id: com.corex.grpc.plugin_release.pluginreleaseservice.runqualitygates + module: plugin_release + title: PluginReleaseService.RunQualityGates + description: Generated from proto + categories: + - plugin_release + - grpc + - generated + intents: + - plugin_release.runqualitygates + tool_scopes: + - plugin_release.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/plugin_release/v1/plugin_release.proto + protocols: + - channel: grpc + endpoint: powerx.plugin_release.v1.PluginReleaseService + rpc: RunQualityGates + schema_ref: api/grpc/contracts/powerx/plugin_release/v1/plugin_release.proto#PluginReleaseService + auth_type: tenant_jwt + tool_scope: plugin_release.grpc + - capability_id: com.corex.grpc.plugin_release.pluginreleaseservice.startlocalinstall + module: plugin_release + title: PluginReleaseService.StartLocalInstall + description: Generated from proto + categories: + - plugin_release + - grpc + - generated + intents: + - plugin_release.startlocalinstall + tool_scopes: + - plugin_release.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/plugin_release/v1/plugin_release.proto + protocols: + - channel: grpc + endpoint: powerx.plugin_release.v1.PluginReleaseService + rpc: StartLocalInstall + schema_ref: api/grpc/contracts/powerx/plugin_release/v1/plugin_release.proto#PluginReleaseService + auth_type: tenant_jwt + tool_scope: plugin_release.grpc + - capability_id: com.corex.grpc.plugin_release.pluginreleaseservice.stoplocalinstall + module: plugin_release + title: PluginReleaseService.StopLocalInstall + description: Generated from proto + categories: + - plugin_release + - grpc + - generated + intents: + - plugin_release.stoplocalinstall + tool_scopes: + - plugin_release.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/plugin_release/v1/plugin_release.proto + protocols: + - channel: grpc + endpoint: powerx.plugin_release.v1.PluginReleaseService + rpc: StopLocalInstall + schema_ref: api/grpc/contracts/powerx/plugin_release/v1/plugin_release.proto#PluginReleaseService + auth_type: tenant_jwt + tool_scope: plugin_release.grpc + - capability_id: com.corex.grpc.plugin_release.pluginreleaseservice.submitmarketplacelisting + module: plugin_release + title: PluginReleaseService.SubmitMarketplaceListing + description: Generated from proto + categories: + - plugin_release + - grpc + - generated + intents: + - plugin_release.submitmarketplacelisting + tool_scopes: + - plugin_release.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/plugin_release/v1/plugin_release.proto + protocols: + - channel: grpc + endpoint: powerx.plugin_release.v1.PluginReleaseService + rpc: SubmitMarketplaceListing + schema_ref: api/grpc/contracts/powerx/plugin_release/v1/plugin_release.proto#PluginReleaseService + auth_type: tenant_jwt + tool_scope: plugin_release.grpc + - capability_id: com.corex.grpc.plugin_release.pluginreleaseservice.triggercanary + module: plugin_release + title: PluginReleaseService.TriggerCanary + description: Generated from proto + categories: + - plugin_release + - grpc + - generated + intents: + - plugin_release.triggercanary + tool_scopes: + - plugin_release.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/plugin_release/v1/plugin_release.proto + protocols: + - channel: grpc + endpoint: powerx.plugin_release.v1.PluginReleaseService + rpc: TriggerCanary + schema_ref: api/grpc/contracts/powerx/plugin_release/v1/plugin_release.proto#PluginReleaseService + auth_type: tenant_jwt + tool_scope: plugin_release.grpc + - capability_id: com.corex.grpc.plugin_release.pluginreleaseservice.uploadofflinepackage + module: plugin_release + title: PluginReleaseService.UploadOfflinePackage + description: Generated from proto + categories: + - plugin_release + - grpc + - generated + intents: + - plugin_release.uploadofflinepackage + tool_scopes: + - plugin_release.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/plugin_release/v1/plugin_release.proto + protocols: + - channel: grpc + endpoint: powerx.plugin_release.v1.PluginReleaseService + rpc: UploadOfflinePackage + schema_ref: api/grpc/contracts/powerx/plugin_release/v1/plugin_release.proto#PluginReleaseService + auth_type: tenant_jwt + tool_scope: plugin_release.grpc + - capability_id: com.corex.grpc.scheduler.schedulerservice.createjob + module: scheduler + title: SchedulerService.CreateJob + description: Generated from proto + categories: + - scheduler + - grpc + - generated + intents: + - scheduler.createjob + tool_scopes: + - scheduler.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/scheduler/v1/scheduler.proto + protocols: + - channel: grpc + endpoint: powerx.scheduler.v1.SchedulerService + rpc: CreateJob + schema_ref: api/grpc/contracts/powerx/scheduler/v1/scheduler.proto#SchedulerService + auth_type: tenant_jwt + tool_scope: scheduler.grpc + - capability_id: com.corex.grpc.scheduler.schedulerservice.getjob + module: scheduler + title: SchedulerService.GetJob + description: Generated from proto + categories: + - scheduler + - grpc + - generated + intents: + - scheduler.getjob + tool_scopes: + - scheduler.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/scheduler/v1/scheduler.proto + protocols: + - channel: grpc + endpoint: powerx.scheduler.v1.SchedulerService + rpc: GetJob + schema_ref: api/grpc/contracts/powerx/scheduler/v1/scheduler.proto#SchedulerService + auth_type: tenant_jwt + tool_scope: scheduler.grpc + - capability_id: com.corex.grpc.scheduler.schedulerservice.listjobs + module: scheduler + title: SchedulerService.ListJobs + description: Generated from proto + categories: + - scheduler + - grpc + - generated + intents: + - scheduler.listjobs + tool_scopes: + - scheduler.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/scheduler/v1/scheduler.proto + protocols: + - channel: grpc + endpoint: powerx.scheduler.v1.SchedulerService + rpc: ListJobs + schema_ref: api/grpc/contracts/powerx/scheduler/v1/scheduler.proto#SchedulerService + auth_type: tenant_jwt + tool_scope: scheduler.grpc + - capability_id: com.corex.grpc.scheduler.schedulerservice.pausejob + module: scheduler + title: SchedulerService.PauseJob + description: Generated from proto + categories: + - scheduler + - grpc + - generated + intents: + - scheduler.pausejob + tool_scopes: + - scheduler.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/scheduler/v1/scheduler.proto + protocols: + - channel: grpc + endpoint: powerx.scheduler.v1.SchedulerService + rpc: PauseJob + schema_ref: api/grpc/contracts/powerx/scheduler/v1/scheduler.proto#SchedulerService + auth_type: tenant_jwt + tool_scope: scheduler.grpc + - capability_id: com.corex.grpc.scheduler.schedulerservice.resumejob + module: scheduler + title: SchedulerService.ResumeJob + description: Generated from proto + categories: + - scheduler + - grpc + - generated + intents: + - scheduler.resumejob + tool_scopes: + - scheduler.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/scheduler/v1/scheduler.proto + protocols: + - channel: grpc + endpoint: powerx.scheduler.v1.SchedulerService + rpc: ResumeJob + schema_ref: api/grpc/contracts/powerx/scheduler/v1/scheduler.proto#SchedulerService + auth_type: tenant_jwt + tool_scope: scheduler.grpc + - capability_id: com.corex.grpc.scheduler.schedulerservice.triggerjob + module: scheduler + title: SchedulerService.TriggerJob + description: Generated from proto + categories: + - scheduler + - grpc + - generated + intents: + - scheduler.triggerjob + tool_scopes: + - scheduler.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/scheduler/v1/scheduler.proto + protocols: + - channel: grpc + endpoint: powerx.scheduler.v1.SchedulerService + rpc: TriggerJob + schema_ref: api/grpc/contracts/powerx/scheduler/v1/scheduler.proto#SchedulerService + auth_type: tenant_jwt + tool_scope: scheduler.grpc + - capability_id: com.corex.grpc.scheduler.schedulerservice.updatejob + module: scheduler + title: SchedulerService.UpdateJob + description: Generated from proto + categories: + - scheduler + - grpc + - generated + intents: + - scheduler.updatejob + tool_scopes: + - scheduler.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/scheduler/v1/scheduler.proto + protocols: + - channel: grpc + endpoint: powerx.scheduler.v1.SchedulerService + rpc: UpdateJob + schema_ref: api/grpc/contracts/powerx/scheduler/v1/scheduler.proto#SchedulerService + auth_type: tenant_jwt + tool_scope: scheduler.grpc + - capability_id: com.corex.grpc.setting.settingaiservice.getactiveprofile + module: setting + title: SettingAIService.GetActiveProfile + description: Generated from proto + categories: + - setting + - grpc + - generated + intents: + - setting.getactiveprofile + tool_scopes: + - setting.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/setting/ai_setting.proto + protocols: + - channel: grpc + endpoint: powerx.setting.ai.v1.SettingAIService + rpc: GetActiveProfile + schema_ref: api/grpc/contracts/powerx/setting/ai_setting.proto#SettingAIService + auth_type: tenant_jwt + tool_scope: setting.grpc + - capability_id: com.corex.grpc.setting.settingaiservice.listcredentials + module: setting + title: SettingAIService.ListCredentials + description: Generated from proto + categories: + - setting + - grpc + - generated + intents: + - setting.listcredentials + tool_scopes: + - setting.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/setting/ai_setting.proto + protocols: + - channel: grpc + endpoint: powerx.setting.ai.v1.SettingAIService + rpc: ListCredentials + schema_ref: api/grpc/contracts/powerx/setting/ai_setting.proto#SettingAIService + auth_type: tenant_jwt + tool_scope: setting.grpc + - capability_id: com.corex.grpc.setting.settingaiservice.listmodels + module: setting + title: SettingAIService.ListModels + description: Generated from proto + categories: + - setting + - grpc + - generated + intents: + - setting.listmodels + tool_scopes: + - setting.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/setting/ai_setting.proto + protocols: + - channel: grpc + endpoint: powerx.setting.ai.v1.SettingAIService + rpc: ListModels + schema_ref: api/grpc/contracts/powerx/setting/ai_setting.proto#SettingAIService + auth_type: tenant_jwt + tool_scope: setting.grpc + - capability_id: com.corex.grpc.setting.settingaiservice.listprofiles + module: setting + title: SettingAIService.ListProfiles + description: Generated from proto + categories: + - setting + - grpc + - generated + intents: + - setting.listprofiles + tool_scopes: + - setting.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/setting/ai_setting.proto + protocols: + - channel: grpc + endpoint: powerx.setting.ai.v1.SettingAIService + rpc: ListProfiles + schema_ref: api/grpc/contracts/powerx/setting/ai_setting.proto#SettingAIService + auth_type: tenant_jwt + tool_scope: setting.grpc + - capability_id: com.corex.grpc.setting.settingaiservice.listproviders + module: setting + title: SettingAIService.ListProviders + description: Generated from proto + categories: + - setting + - grpc + - generated + intents: + - setting.listproviders + tool_scopes: + - setting.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/setting/ai_setting.proto + protocols: + - channel: grpc + endpoint: powerx.setting.ai.v1.SettingAIService + rpc: ListProviders + schema_ref: api/grpc/contracts/powerx/setting/ai_setting.proto#SettingAIService + auth_type: tenant_jwt + tool_scope: setting.grpc + - capability_id: com.corex.grpc.setting.settingaiservice.savesettings + module: setting + title: SettingAIService.SaveSettings + description: Generated from proto + categories: + - setting + - grpc + - generated + intents: + - setting.savesettings + tool_scopes: + - setting.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/setting/ai_setting.proto + protocols: + - channel: grpc + endpoint: powerx.setting.ai.v1.SettingAIService + rpc: SaveSettings + schema_ref: api/grpc/contracts/powerx/setting/ai_setting.proto#SettingAIService + auth_type: tenant_jwt + tool_scope: setting.grpc + - capability_id: com.corex.grpc.setting.settingaiservice.setactiveprofile + module: setting + title: SettingAIService.SetActiveProfile + description: Generated from proto + categories: + - setting + - grpc + - generated + intents: + - setting.setactiveprofile + tool_scopes: + - setting.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/setting/ai_setting.proto + protocols: + - channel: grpc + endpoint: powerx.setting.ai.v1.SettingAIService + rpc: SetActiveProfile + schema_ref: api/grpc/contracts/powerx/setting/ai_setting.proto#SettingAIService + auth_type: tenant_jwt + tool_scope: setting.grpc + - capability_id: com.corex.grpc.setting.settingaiservice.testconnection + module: setting + title: SettingAIService.TestConnection + description: Generated from proto + categories: + - setting + - grpc + - generated + intents: + - setting.testconnection + tool_scopes: + - setting.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/setting/ai_setting.proto + protocols: + - channel: grpc + endpoint: powerx.setting.ai.v1.SettingAIService + rpc: TestConnection + schema_ref: api/grpc/contracts/powerx/setting/ai_setting.proto#SettingAIService + auth_type: tenant_jwt + tool_scope: setting.grpc + - capability_id: com.corex.grpc.setting.settingaiservice.testquickcall + module: setting + title: SettingAIService.TestQuickCall + description: Generated from proto + categories: + - setting + - grpc + - generated + intents: + - setting.testquickcall + tool_scopes: + - setting.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/setting/ai_setting.proto + protocols: + - channel: grpc + endpoint: powerx.setting.ai.v1.SettingAIService + rpc: TestQuickCall + schema_ref: api/grpc/contracts/powerx/setting/ai_setting.proto#SettingAIService + auth_type: tenant_jwt + tool_scope: setting.grpc + - capability_id: com.corex.grpc.workflow.workflowservice.archivedefinition + module: workflow + title: WorkflowService.ArchiveDefinition + description: Generated from proto + categories: + - workflow + - grpc + - generated + intents: + - workflow.archivedefinition + tool_scopes: + - workflow.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/workflow/v1/workflow.proto + protocols: + - channel: grpc + endpoint: powerx.workflow.v1.WorkflowService + rpc: ArchiveDefinition + schema_ref: api/grpc/contracts/powerx/workflow/v1/workflow.proto#WorkflowService + auth_type: tenant_jwt + tool_scope: workflow.grpc + - capability_id: com.corex.grpc.workflow.workflowservice.controlinstance + module: workflow + title: WorkflowService.ControlInstance + description: Generated from proto + categories: + - workflow + - grpc + - generated + intents: + - workflow.controlinstance + tool_scopes: + - workflow.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/workflow/v1/workflow.proto + protocols: + - channel: grpc + endpoint: powerx.workflow.v1.WorkflowService + rpc: ControlInstance + schema_ref: api/grpc/contracts/powerx/workflow/v1/workflow.proto#WorkflowService + auth_type: tenant_jwt + tool_scope: workflow.grpc + - capability_id: com.corex.grpc.workflow.workflowservice.createdefinition + module: workflow + title: WorkflowService.CreateDefinition + description: Generated from proto + categories: + - workflow + - grpc + - generated + intents: + - workflow.createdefinition + tool_scopes: + - workflow.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/workflow/v1/workflow.proto + protocols: + - channel: grpc + endpoint: powerx.workflow.v1.WorkflowService + rpc: CreateDefinition + schema_ref: api/grpc/contracts/powerx/workflow/v1/workflow.proto#WorkflowService + auth_type: tenant_jwt + tool_scope: workflow.grpc + - capability_id: com.corex.grpc.workflow.workflowservice.exportinstances + module: workflow + title: WorkflowService.ExportInstances + description: Generated from proto + categories: + - workflow + - grpc + - generated + intents: + - workflow.exportinstances + tool_scopes: + - workflow.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/workflow/v1/workflow.proto + protocols: + - channel: grpc + endpoint: powerx.workflow.v1.WorkflowService + rpc: ExportInstances + schema_ref: api/grpc/contracts/powerx/workflow/v1/workflow.proto#WorkflowService + auth_type: tenant_jwt + tool_scope: workflow.grpc + - capability_id: com.corex.grpc.workflow.workflowservice.getdefinition + module: workflow + title: WorkflowService.GetDefinition + description: Generated from proto + categories: + - workflow + - grpc + - generated + intents: + - workflow.getdefinition + tool_scopes: + - workflow.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/workflow/v1/workflow.proto + protocols: + - channel: grpc + endpoint: powerx.workflow.v1.WorkflowService + rpc: GetDefinition + schema_ref: api/grpc/contracts/powerx/workflow/v1/workflow.proto#WorkflowService + auth_type: tenant_jwt + tool_scope: workflow.grpc + - capability_id: com.corex.grpc.workflow.workflowservice.getinstance + module: workflow + title: WorkflowService.GetInstance + description: Generated from proto + categories: + - workflow + - grpc + - generated + intents: + - workflow.getinstance + tool_scopes: + - workflow.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/workflow/v1/workflow.proto + protocols: + - channel: grpc + endpoint: powerx.workflow.v1.WorkflowService + rpc: GetInstance + schema_ref: api/grpc/contracts/powerx/workflow/v1/workflow.proto#WorkflowService + auth_type: tenant_jwt + tool_scope: workflow.grpc + - capability_id: com.corex.grpc.workflow.workflowservice.listdefinitions + module: workflow + title: WorkflowService.ListDefinitions + description: Generated from proto + categories: + - workflow + - grpc + - generated + intents: + - workflow.listdefinitions + tool_scopes: + - workflow.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/workflow/v1/workflow.proto + protocols: + - channel: grpc + endpoint: powerx.workflow.v1.WorkflowService + rpc: ListDefinitions + schema_ref: api/grpc/contracts/powerx/workflow/v1/workflow.proto#WorkflowService + auth_type: tenant_jwt + tool_scope: workflow.grpc + - capability_id: com.corex.grpc.workflow.workflowservice.listinstances + module: workflow + title: WorkflowService.ListInstances + description: Generated from proto + categories: + - workflow + - grpc + - generated + intents: + - workflow.listinstances + tool_scopes: + - workflow.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/workflow/v1/workflow.proto + protocols: + - channel: grpc + endpoint: powerx.workflow.v1.WorkflowService + rpc: ListInstances + schema_ref: api/grpc/contracts/powerx/workflow/v1/workflow.proto#WorkflowService + auth_type: tenant_jwt + tool_scope: workflow.grpc + - capability_id: com.corex.grpc.workflow.workflowservice.publishdefinition + module: workflow + title: WorkflowService.PublishDefinition + description: Generated from proto + categories: + - workflow + - grpc + - generated + intents: + - workflow.publishdefinition + tool_scopes: + - workflow.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/workflow/v1/workflow.proto + protocols: + - channel: grpc + endpoint: powerx.workflow.v1.WorkflowService + rpc: PublishDefinition + schema_ref: api/grpc/contracts/powerx/workflow/v1/workflow.proto#WorkflowService + auth_type: tenant_jwt + tool_scope: workflow.grpc + - capability_id: com.corex.grpc.workflow.workflowservice.startinstance + module: workflow + title: WorkflowService.StartInstance + description: Generated from proto + categories: + - workflow + - grpc + - generated + intents: + - workflow.startinstance + tool_scopes: + - workflow.grpc + policy: + prefer: grpc + docs: + - api/grpc/contracts/powerx/workflow/v1/workflow.proto + protocols: + - channel: grpc + endpoint: powerx.workflow.v1.WorkflowService + rpc: StartInstance + schema_ref: api/grpc/contracts/powerx/workflow/v1/workflow.proto#WorkflowService + auth_type: tenant_jwt + tool_scope: workflow.grpc + - capability_id: com.corex.rest.admin.gin.delete_api_v1_admin_agents_uuid + module: admin + title: DELETE /api/v1/admin/agents/:uuid + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.delete_api_v1_admin_agents_uuid + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agents/:uuid + method: DELETE + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.delete_api_v1_admin_agents_uuid_ai_setting + module: admin + title: DELETE /api/v1/admin/agents/:uuid/ai-setting + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.delete_api_v1_admin_agents_uuid_ai_setting + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agents/:uuid/ai-setting + method: DELETE + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.delete_api_v1_admin_iam_departments_id + module: admin + title: DELETE /api/v1/admin/iam/departments/:id + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.delete_api_v1_admin_iam_departments_id + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/iam/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/iam/departments/:id + method: DELETE + schema_ref: internal/transport/http/admin/iam/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.delete_api_v1_admin_iam_members_id + module: admin + title: DELETE /api/v1/admin/iam/members/:id + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.delete_api_v1_admin_iam_members_id + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/iam/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/iam/members/:id + method: DELETE + schema_ref: internal/transport/http/admin/iam/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.delete_api_v1_admin_iam_roles_id + module: admin + title: DELETE /api/v1/admin/iam/roles/:id + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.delete_api_v1_admin_iam_roles_id + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/iam/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/iam/roles/:id + method: DELETE + schema_ref: internal/transport/http/admin/iam/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.delete_api_v1_admin_iam_roles_id_bindings_binding_id + module: admin + title: DELETE /api/v1/admin/iam/roles/:id/bindings/:binding_id + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.delete_api_v1_admin_iam_roles_id_bindings_binding_id + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/iam/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/iam/roles/:id/bindings/:binding_id + method: DELETE + schema_ref: internal/transport/http/admin/iam/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.delete_api_v1_admin_integration_api_keys_key_id + module: admin + title: DELETE /api/v1/admin/integration/api-keys/:key_id + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.delete_api_v1_admin_integration_api_keys_key_id + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/integration_gateway/handler.go + protocols: + - channel: rest + endpoint: /api/v1/admin/integration/api-keys/:key_id + method: DELETE + schema_ref: internal/transport/http/admin/integration_gateway/handler.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.delete_api_v1_admin_knowledge_spaces_spaceid_ingestion_jobs_jobid + module: admin + title: DELETE /api/v1/admin/knowledge-spaces/:spaceId/ingestion-jobs/:jobId + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.delete_api_v1_admin_knowledge_spaces_spaceid_ingestion_jobs_jobid + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/:spaceId/ingestion-jobs/:jobId + method: DELETE + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.delete_api_v1_admin_media_assets_uuid + module: admin + title: DELETE /api/v1/admin/media/assets/:uuid + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.delete_api_v1_admin_media_assets_uuid + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/media/router.go + protocols: + - channel: rest + endpoint: /api/v1/admin/media/assets/:uuid + method: DELETE + schema_ref: internal/transport/http/admin/media/router.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.delete_api_v1_admin_notifications_uuid + module: admin + title: DELETE /api/v1/admin/notifications/:uuid + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.delete_api_v1_admin_notifications_uuid + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/notifications/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/notifications/:uuid + method: DELETE + schema_ref: internal/transport/http/admin/notifications/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.delete_api_v1_admin_plugins_id_tenant_config + module: admin + title: DELETE /api/v1/admin/plugins/:id/tenant_config + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.delete_api_v1_admin_plugins_id_tenant_config + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/plugins/:id/tenant_config + method: DELETE + schema_ref: internal/transport/http/admin/plugin/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.delete_api_v1_admin_system_settings_system_key + module: admin + title: DELETE /api/v1/admin/system/settings/system/:key + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.delete_api_v1_admin_system_settings_system_key + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/system/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/system/settings/system/:key + method: DELETE + schema_ref: internal/transport/http/admin/system/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.delete_api_v1_admin_system_settings_tenant_key + module: admin + title: DELETE /api/v1/admin/system/settings/tenant/:key + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.delete_api_v1_admin_system_settings_tenant_key + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/system/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/system/settings/tenant/:key + method: DELETE + schema_ref: internal/transport/http/admin/system/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.delete_api_v1_admin_system_users_id + module: admin + title: DELETE /api/v1/admin/system/users/:id + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.delete_api_v1_admin_system_users_id + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/system/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/system/users/:id + method: DELETE + schema_ref: internal/transport/http/admin/system/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.delete_api_v1_admin_tenants_id + module: admin + title: DELETE /api/v1/admin/tenants/:id + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.delete_api_v1_admin_tenants_id + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/tenants/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/tenants/:id + method: DELETE + schema_ref: internal/transport/http/admin/tenants/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_agent_lifecycle_agents + module: admin + title: GET /api/v1/admin/agent/lifecycle/agents + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_agent_lifecycle_agents + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agentlifecycle/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agent/lifecycle/agents + method: GET + schema_ref: internal/transport/http/admin/agentlifecycle/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_agent_lifecycle_agents_agent_id + module: admin + title: GET /api/v1/admin/agent/lifecycle/agents/:agent_id + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_agent_lifecycle_agents_agent_id + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agentlifecycle/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agent/lifecycle/agents/:agent_id + method: GET + schema_ref: internal/transport/http/admin/agentlifecycle/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_agent_lifecycle_agents_agent_id_health_history + module: admin + title: GET /api/v1/admin/agent/lifecycle/agents/:agent_id/health/history + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_agent_lifecycle_agents_agent_id_health_history + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agentlifecycle/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agent/lifecycle/agents/:agent_id/health/history + method: GET + schema_ref: internal/transport/http/admin/agentlifecycle/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_agent_lifecycle_agents_agent_id_health_summary + module: admin + title: GET /api/v1/admin/agent/lifecycle/agents/:agent_id/health/summary + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_agent_lifecycle_agents_agent_id_health_summary + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agentlifecycle/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agent/lifecycle/agents/:agent_id/health/summary + method: GET + schema_ref: internal/transport/http/admin/agentlifecycle/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_agent_lifecycle_agents_agent_id_subscription + module: admin + title: GET /api/v1/admin/agent/lifecycle/agents/:agent_id/subscription + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_agent_lifecycle_agents_agent_id_subscription + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agentlifecycle/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agent/lifecycle/agents/:agent_id/subscription + method: GET + schema_ref: internal/transport/http/admin/agentlifecycle/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_agents_models + module: admin + title: GET /api/v1/admin/agents/models + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_agents_models + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agents/models + method: GET + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_agents_providers + module: admin + title: GET /api/v1/admin/agents/providers + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_agents_providers + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agents/providers + method: GET + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_agents_settings_active + module: admin + title: GET /api/v1/admin/agents/settings/active + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_agents_settings_active + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agents/settings/active + method: GET + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_agents_settings_credentials + module: admin + title: GET /api/v1/admin/agents/settings/credentials + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_agents_settings_credentials + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agents/settings/credentials + method: GET + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_agents_settings_profiles + module: admin + title: GET /api/v1/admin/agents/settings/profiles + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_agents_settings_profiles + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agents/settings/profiles + method: GET + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_agents_tenant_forms_form_id + module: admin + title: GET /api/v1/admin/agents/tenant/forms/:form_id + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_agents_tenant_forms_form_id + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agents/tenant/forms/:form_id + method: GET + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_agents_uuid + module: admin + title: GET /api/v1/admin/agents/:uuid + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_agents_uuid + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agents/:uuid + method: GET + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_agents_uuid_ai_setting + module: admin + title: GET /api/v1/admin/agents/:uuid/ai-setting + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_agents_uuid_ai_setting + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agents/:uuid/ai-setting + method: GET + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_auth_me_context + module: admin + title: GET /api/v1/admin/user/auth/me/context + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_auth_me_context + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/user/auth/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/user/auth/me/context + method: GET + schema_ref: internal/transport/http/admin/user/auth/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_auth_me_departments + module: admin + title: GET /api/v1/admin/user/auth/me/departments + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_auth_me_departments + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/user/auth/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/user/auth/me/departments + method: GET + schema_ref: internal/transport/http/admin/user/auth/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_auth_me_tenants + module: admin + title: GET /api/v1/admin/user/auth/me/tenants + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_auth_me_tenants + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/user/auth/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/user/auth/me/tenants + method: GET + schema_ref: internal/transport/http/admin/user/auth/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_capabilities_capabilityid + module: admin + title: GET /api/v1/admin/capabilities/:capabilityId + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_capabilities_capabilityid + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/capability_registry/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/capabilities/:capabilityId + method: GET + schema_ref: internal/transport/http/admin/capability_registry/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_capabilities_sources + module: admin + title: GET /api/v1/admin/capabilities/sources + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_capabilities_sources + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/capability_registry/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/capabilities/sources + method: GET + schema_ref: internal/transport/http/admin/capability_registry/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_capability_sync_jobs + module: admin + title: GET /api/v1/admin/capability-sync/jobs + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_capability_sync_jobs + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/capability_registry/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/capability-sync/jobs + method: GET + schema_ref: internal/transport/http/admin/capability_registry/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_event_fabric_acl + module: admin + title: GET /api/v1/admin/event-fabric/acl + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_event_fabric_acl + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/event-fabric/acl + method: GET + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_event_fabric_acl_principal_matrix + module: admin + title: GET /api/v1/admin/event-fabric/acl/principal-matrix + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_event_fabric_acl_principal_matrix + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/event-fabric/acl/principal-matrix + method: GET + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_event_fabric_acl_topic_matrix + module: admin + title: GET /api/v1/admin/event-fabric/acl/topic-matrix + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_event_fabric_acl_topic_matrix + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/event-fabric/acl/topic-matrix + method: GET + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_event_fabric_cron_jobs + module: admin + title: GET /api/v1/admin/event-fabric/cron/jobs + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_event_fabric_cron_jobs + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/event-fabric/cron/jobs + method: GET + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_event_fabric_dlq_messages + module: admin + title: GET /api/v1/admin/event-fabric/dlq/messages + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_event_fabric_dlq_messages + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/event-fabric/dlq/messages + method: GET + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_event_fabric_overview + module: admin + title: GET /api/v1/admin/event-fabric/overview + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_event_fabric_overview + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/event-fabric/overview + method: GET + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_event_fabric_replay_tasks_task_id + module: admin + title: GET /api/v1/admin/event-fabric/replay/tasks/:task_id + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_event_fabric_replay_tasks_task_id + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/event-fabric/replay/tasks/:task_id + method: GET + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_event_fabric_retry_tasks_delivery_id + module: admin + title: GET /api/v1/admin/event-fabric/retry/tasks/:delivery_id + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_event_fabric_retry_tasks_delivery_id + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/event-fabric/retry/tasks/:delivery_id + method: GET + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_event_fabric_task_queue_messages + module: admin + title: GET /api/v1/admin/event-fabric/task-queue/messages + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_event_fabric_task_queue_messages + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/event-fabric/task-queue/messages + method: GET + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_event_fabric_task_queue_stats + module: admin + title: GET /api/v1/admin/event-fabric/task-queue/stats + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_event_fabric_task_queue_stats + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/event-fabric/task-queue/stats + method: GET + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_event_fabric_topics + module: admin + title: GET /api/v1/admin/event-fabric/topics + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_event_fabric_topics + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/event-fabric/topics + method: GET + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_gateway_meta + module: admin + title: GET /api/v1/admin/gateway/meta + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_gateway_meta + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/integration_gateway/handler.go + protocols: + - channel: rest + endpoint: /api/v1/admin/gateway/meta + method: GET + schema_ref: internal/transport/http/admin/integration_gateway/handler.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_iam_departments_tree + module: admin + title: GET /api/v1/admin/iam/departments/tree + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_iam_departments_tree + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/iam/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/iam/departments/tree + method: GET + schema_ref: internal/transport/http/admin/iam/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_iam_members_id + module: admin + title: GET /api/v1/admin/iam/members/:id + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_iam_members_id + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/iam/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/iam/members/:id + method: GET + schema_ref: internal/transport/http/admin/iam/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_iam_permissions_catalog + module: admin + title: GET /api/v1/admin/iam/permissions/catalog + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_iam_permissions_catalog + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/iam/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/iam/permissions/catalog + method: GET + schema_ref: internal/transport/http/admin/iam/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_iam_roles_id + module: admin + title: GET /api/v1/admin/iam/roles/:id + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_iam_roles_id + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/iam/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/iam/roles/:id + method: GET + schema_ref: internal/transport/http/admin/iam/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_iam_roles_id_permissions + module: admin + title: GET /api/v1/admin/iam/roles/:id/permissions + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_iam_roles_id_permissions + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/iam/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/iam/roles/:id/permissions + method: GET + schema_ref: internal/transport/http/admin/iam/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_iam_roles_id_permissions_ids + module: admin + title: GET /api/v1/admin/iam/roles/:id/permissions/ids + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_iam_roles_id_permissions_ids + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/iam/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/iam/roles/:id/permissions/ids + method: GET + schema_ref: internal/transport/http/admin/iam/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_iam_roles_me_check + module: admin + title: GET /api/v1/admin/iam/roles/me/check + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_iam_roles_me_check + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/iam/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/iam/roles/me/check + method: GET + schema_ref: internal/transport/http/admin/iam/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_iam_users_members + module: admin + title: GET /api/v1/admin/iam/users/members + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_iam_users_members + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/iam/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/iam/users/members + method: GET + schema_ref: internal/transport/http/admin/iam/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_iam_users_user_id_member + module: admin + title: GET /api/v1/admin/iam/users/:user_id/member + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_iam_users_user_id_member + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/iam/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/iam/users/:user_id/member + method: GET + schema_ref: internal/transport/http/admin/iam/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_integration_api_key_profiles + module: admin + title: GET /api/v1/admin/integration/api-key-profiles + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_integration_api_key_profiles + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/integration_gateway/handler.go + protocols: + - channel: rest + endpoint: /api/v1/admin/integration/api-key-profiles + method: GET + schema_ref: internal/transport/http/admin/integration_gateway/handler.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_integration_api_key_profiles_profile_id_permissions + module: admin + title: GET /api/v1/admin/integration/api-key-profiles/:profile_id/permissions + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_integration_api_key_profiles_profile_id_permissions + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/integration_gateway/handler.go + protocols: + - channel: rest + endpoint: /api/v1/admin/integration/api-key-profiles/:profile_id/permissions + method: GET + schema_ref: internal/transport/http/admin/integration_gateway/handler.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_integration_api_keys + module: admin + title: GET /api/v1/admin/integration/api-keys + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_integration_api_keys + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/integration_gateway/handler.go + protocols: + - channel: rest + endpoint: /api/v1/admin/integration/api-keys + method: GET + schema_ref: internal/transport/http/admin/integration_gateway/handler.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_integration_api_keys_key_id + module: admin + title: GET /api/v1/admin/integration/api-keys/:key_id + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_integration_api_keys_key_id + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/integration_gateway/handler.go + protocols: + - channel: rest + endpoint: /api/v1/admin/integration/api-keys/:key_id + method: GET + schema_ref: internal/transport/http/admin/integration_gateway/handler.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_integration_permissions_catalog + module: admin + title: GET /api/v1/admin/integration/permissions/catalog + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_integration_permissions_catalog + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/integration_gateway/handler.go + protocols: + - channel: rest + endpoint: /api/v1/admin/integration/permissions/catalog + method: GET + schema_ref: internal/transport/http/admin/integration_gateway/handler.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_integration_routes + module: admin + title: GET /api/v1/admin/integration/routes + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_integration_routes + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/integration_gateway/handler.go + protocols: + - channel: rest + endpoint: /api/v1/admin/integration/routes + method: GET + schema_ref: internal/transport/http/admin/integration_gateway/handler.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_integration_routes_route_id + module: admin + title: GET /api/v1/admin/integration/routes/:route_id + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_integration_routes_route_id + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/integration_gateway/handler.go + protocols: + - channel: rest + endpoint: /api/v1/admin/integration/routes/:route_id + method: GET + schema_ref: internal/transport/http/admin/integration_gateway/handler.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_integration_routes_route_id_versions + module: admin + title: GET /api/v1/admin/integration/routes/:route_id/versions + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_integration_routes_route_id_versions + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/integration_gateway/handler.go + protocols: + - channel: rest + endpoint: /api/v1/admin/integration/routes/:route_id/versions + method: GET + schema_ref: internal/transport/http/admin/integration_gateway/handler.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_knowledge_sources_connectors + module: admin + title: GET /api/v1/admin/knowledge-sources/connectors + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_knowledge_sources_connectors + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-sources/connectors + method: GET + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_knowledge_sources_connectors_connectorid + module: admin + title: GET /api/v1/admin/knowledge-sources/connectors/:connectorId + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_knowledge_sources_connectors_connectorid + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-sources/connectors/:connectorId + method: GET + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_knowledge_sources_credentials + module: admin + title: GET /api/v1/admin/knowledge-sources/credentials + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_knowledge_sources_credentials + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-sources/credentials + method: GET + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_knowledge_spaces_spaceid + module: admin + title: GET /api/v1/admin/knowledge-spaces/:spaceId + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_knowledge_spaces_spaceid + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/:spaceId + method: GET + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_knowledge_spaces_spaceid_corpus_check_jobs_jobid + module: admin + title: GET /api/v1/admin/knowledge-spaces/:spaceId/corpus-check/jobs/:jobId + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_knowledge_spaces_spaceid_corpus_check_jobs_jobid + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/:spaceId/corpus-check/jobs/:jobId + method: GET + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_knowledge_spaces_spaceid_feedback + module: admin + title: GET /api/v1/admin/knowledge-spaces/:spaceId/feedback + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_knowledge_spaces_spaceid_feedback + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/:spaceId/feedback + method: GET + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_knowledge_spaces_spaceid_feedback_export + module: admin + title: GET /api/v1/admin/knowledge-spaces/:spaceId/feedback/export + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_knowledge_spaces_spaceid_feedback_export + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/:spaceId/feedback/export + method: GET + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_knowledge_spaces_spaceid_fusion_strategies + module: admin + title: GET /api/v1/admin/knowledge-spaces/:spaceId/fusion-strategies + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_knowledge_spaces_spaceid_fusion_strategies + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/:spaceId/fusion-strategies + method: GET + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_knowledge_spaces_spaceid_ingestion_jobs + module: admin + title: GET /api/v1/admin/knowledge-spaces/:spaceId/ingestion-jobs + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_knowledge_spaces_spaceid_ingestion_jobs + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/:spaceId/ingestion-jobs + method: GET + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_knowledge_spaces_spaceid_ingestion_jobs_jobid + module: admin + title: GET /api/v1/admin/knowledge-spaces/:spaceId/ingestion-jobs/:jobId + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_knowledge_spaces_spaceid_ingestion_jobs_jobid + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/:spaceId/ingestion-jobs/:jobId + method: GET + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_knowledge_spaces_spaceid_ingestion_jobs_jobid_chunks + module: admin + title: GET /api/v1/admin/knowledge-spaces/:spaceId/ingestion-jobs/:jobId/chunks + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_knowledge_spaces_spaceid_ingestion_jobs_jobid_chunks + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/:spaceId/ingestion-jobs/:jobId/chunks + method: GET + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_knowledge_spaces_spaceid_ingestion_jobs_jobid_pages_pagenumber_image + module: admin + title: GET /api/v1/admin/knowledge-spaces/:spaceId/ingestion-jobs/:jobId/pages/:pageNumber/image + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_knowledge_spaces_spaceid_ingestion_jobs_jobid_pages_pagenumber_image + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/:spaceId/ingestion-jobs/:jobId/pages/:pageNumber/image + method: GET + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_knowledge_spaces_spaceid_sources + module: admin + title: GET /api/v1/admin/knowledge-spaces/:spaceId/sources + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_knowledge_spaces_spaceid_sources + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/:spaceId/sources + method: GET + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_knowledge_spaces_spaceid_sources_sync_jobs_jobid + module: admin + title: GET /api/v1/admin/knowledge-spaces/:spaceId/sources/sync-jobs/:jobId + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_knowledge_spaces_spaceid_sources_sync_jobs_jobid + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/:spaceId/sources/sync-jobs/:jobId + method: GET + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_knowledge_spaces_spaceid_strategy_validate + module: admin + title: GET /api/v1/admin/knowledge-spaces/:spaceId/strategy/validate + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_knowledge_spaces_spaceid_strategy_validate + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/:spaceId/strategy/validate + method: GET + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_knowledge_spaces_spaceid_vector_index + module: admin + title: GET /api/v1/admin/knowledge-spaces/:spaceId/vector-index + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_knowledge_spaces_spaceid_vector_index + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/:spaceId/vector-index + method: GET + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_media_assets_uuid + module: admin + title: GET /api/v1/admin/media/assets/:uuid + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_media_assets_uuid + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/media/router.go + protocols: + - channel: rest + endpoint: /api/v1/admin/media/assets/:uuid + method: GET + schema_ref: internal/transport/http/admin/media/router.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_media_assets_uuid_resource + module: admin + title: GET /api/v1/admin/media/assets/:uuid/resource + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_media_assets_uuid_resource + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/media/router.go + protocols: + - channel: rest + endpoint: /api/v1/admin/media/assets/:uuid/resource + method: GET + schema_ref: internal/transport/http/admin/media/router.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_notifications_uuid + module: admin + title: GET /api/v1/admin/notifications/:uuid + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_notifications_uuid + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/notifications/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/notifications/:uuid + method: GET + schema_ref: internal/transport/http/admin/notifications/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_platform_capabilities + module: admin + title: GET /api/v1/admin/platform-capabilities + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_platform_capabilities + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/capability_registry/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/platform-capabilities + method: GET + schema_ref: internal/transport/http/admin/capability_registry/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_platform_capabilities_modulekey + module: admin + title: GET /api/v1/admin/platform-capabilities/:moduleKey + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_platform_capabilities_modulekey + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/capability_registry/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/platform-capabilities/:moduleKey + method: GET + schema_ref: internal/transport/http/admin/capability_registry/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_plugins + module: admin + title: GET /api/v1/admin/plugins/ + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_plugins + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/plugins/ + method: GET + schema_ref: internal/transport/http/admin/plugin/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_plugins_id + module: admin + title: GET /api/v1/admin/plugins/:id + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_plugins_id + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/plugins/:id + method: GET + schema_ref: internal/transport/http/admin/plugin/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_plugins_id_credentials + module: admin + title: GET /api/v1/admin/plugins/:id/credentials + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_plugins_id_credentials + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/plugins/:id/credentials + method: GET + schema_ref: internal/transport/http/admin/plugin/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_plugins_id_logs + module: admin + title: GET /api/v1/admin/plugins/:id/logs + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_plugins_id_logs + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/plugins/:id/logs + method: GET + schema_ref: internal/transport/http/admin/plugin/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_plugins_id_status + module: admin + title: GET /api/v1/admin/plugins/:id/status + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_plugins_id_status + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/plugins/:id/status + method: GET + schema_ref: internal/transport/http/admin/plugin/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_plugins_id_tenant_config + module: admin + title: GET /api/v1/admin/plugins/:id/tenant_config + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_plugins_id_tenant_config + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/plugins/:id/tenant_config + method: GET + schema_ref: internal/transport/http/admin/plugin/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_plugins_marketplace_plugins + module: admin + title: GET /api/v1/admin/plugins/marketplace/plugins + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_plugins_marketplace_plugins + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/plugins/marketplace/plugins + method: GET + schema_ref: internal/transport/http/admin/plugin/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_plugins_menus + module: admin + title: GET /api/v1/admin/plugins/menus + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_plugins_menus + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/plugins/menus + method: GET + schema_ref: internal/transport/http/admin/plugin/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_system_settings_effective_key + module: admin + title: GET /api/v1/admin/system/settings/effective/:key + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_system_settings_effective_key + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/system/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/system/settings/effective/:key + method: GET + schema_ref: internal/transport/http/admin/system/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_system_settings_system + module: admin + title: GET /api/v1/admin/system/settings/system + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_system_settings_system + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/system/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/system/settings/system + method: GET + schema_ref: internal/transport/http/admin/system/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_system_settings_system_key + module: admin + title: GET /api/v1/admin/system/settings/system/:key + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_system_settings_system_key + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/system/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/system/settings/system/:key + method: GET + schema_ref: internal/transport/http/admin/system/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_system_settings_tenant + module: admin + title: GET /api/v1/admin/system/settings/tenant + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_system_settings_tenant + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/system/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/system/settings/tenant + method: GET + schema_ref: internal/transport/http/admin/system/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_system_settings_tenant_key + module: admin + title: GET /api/v1/admin/system/settings/tenant/:key + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_system_settings_tenant_key + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/system/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/system/settings/tenant/:key + method: GET + schema_ref: internal/transport/http/admin/system/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_system_users_id + module: admin + title: GET /api/v1/admin/system/users/:id + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_system_users_id + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/system/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/system/users/:id + method: GET + schema_ref: internal/transport/http/admin/system/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_tenants_id + module: admin + title: GET /api/v1/admin/tenants/:id + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_tenants_id + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/tenants/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/tenants/:id + method: GET + schema_ref: internal/transport/http/admin/tenants/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_workflow_templates + module: admin + title: GET /api/v1/admin/workflow-templates + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_workflow_templates + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/capability_registry/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/workflow-templates + method: GET + schema_ref: internal/transport/http/admin/capability_registry/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_workflows_definitions + module: admin + title: GET /api/v1/admin/workflows/definitions + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_workflows_definitions + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/workflow/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/workflows/definitions + method: GET + schema_ref: internal/transport/http/admin/workflow/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_workflows_definitions_definitionid + module: admin + title: GET /api/v1/admin/workflows/definitions/:definitionId + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_workflows_definitions_definitionid + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/workflow/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/workflows/definitions/:definitionId + method: GET + schema_ref: internal/transport/http/admin/workflow/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_workflows_instances_export + module: admin + title: GET /api/v1/admin/workflows/instances/export + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_workflows_instances_export + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/workflow/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/workflows/instances/export + method: GET + schema_ref: internal/transport/http/admin/workflow/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.get_api_v1_admin_workflows_instances_instanceid + module: admin + title: GET /api/v1/admin/workflows/instances/:instanceId + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.get_api_v1_admin_workflows_instances_instanceid + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/workflow/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/workflows/instances/:instanceId + method: GET + schema_ref: internal/transport/http/admin/workflow/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.patch_api_v1_admin_agents_uuid + module: admin + title: PATCH /api/v1/admin/agents/:uuid + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.patch_api_v1_admin_agents_uuid + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agents/:uuid + method: PATCH + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.patch_api_v1_admin_event_fabric_topics_topic_id_lifecycle + module: admin + title: PATCH /api/v1/admin/event-fabric/topics/:topic_id/lifecycle + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.patch_api_v1_admin_event_fabric_topics_topic_id_lifecycle + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/event-fabric/topics/:topic_id/lifecycle + method: PATCH + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.patch_api_v1_admin_iam_departments_id + module: admin + title: PATCH /api/v1/admin/iam/departments/:id + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.patch_api_v1_admin_iam_departments_id + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/iam/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/iam/departments/:id + method: PATCH + schema_ref: internal/transport/http/admin/iam/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.patch_api_v1_admin_iam_members_id + module: admin + title: PATCH /api/v1/admin/iam/members/:id + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.patch_api_v1_admin_iam_members_id + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/iam/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/iam/members/:id + method: PATCH + schema_ref: internal/transport/http/admin/iam/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.patch_api_v1_admin_iam_permissions_id + module: admin + title: PATCH /api/v1/admin/iam/permissions/:id + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.patch_api_v1_admin_iam_permissions_id + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/iam/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/iam/permissions/:id + method: PATCH + schema_ref: internal/transport/http/admin/iam/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.patch_api_v1_admin_iam_roles_id + module: admin + title: PATCH /api/v1/admin/iam/roles/:id + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.patch_api_v1_admin_iam_roles_id + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/iam/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/iam/roles/:id + method: PATCH + schema_ref: internal/transport/http/admin/iam/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.patch_api_v1_admin_integration_api_key_profiles_profile_id + module: admin + title: PATCH /api/v1/admin/integration/api-key-profiles/:profile_id + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.patch_api_v1_admin_integration_api_key_profiles_profile_id + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/integration_gateway/handler.go + protocols: + - channel: rest + endpoint: /api/v1/admin/integration/api-key-profiles/:profile_id + method: PATCH + schema_ref: internal/transport/http/admin/integration_gateway/handler.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.patch_api_v1_admin_integration_routes_route_id + module: admin + title: PATCH /api/v1/admin/integration/routes/:route_id + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.patch_api_v1_admin_integration_routes_route_id + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/integration_gateway/handler.go + protocols: + - channel: rest + endpoint: /api/v1/admin/integration/routes/:route_id + method: PATCH + schema_ref: internal/transport/http/admin/integration_gateway/handler.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.patch_api_v1_admin_knowledge_sources_connectors_connectorid + module: admin + title: PATCH /api/v1/admin/knowledge-sources/connectors/:connectorId + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.patch_api_v1_admin_knowledge_sources_connectors_connectorid + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-sources/connectors/:connectorId + method: PATCH + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.patch_api_v1_admin_knowledge_spaces_spaceid + module: admin + title: PATCH /api/v1/admin/knowledge-spaces/:spaceId + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.patch_api_v1_admin_knowledge_spaces_spaceid + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/:spaceId + method: PATCH + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.patch_api_v1_admin_knowledge_spaces_spaceid_ingestion_jobs_jobid_chunks_chunkid + module: admin + title: PATCH /api/v1/admin/knowledge-spaces/:spaceId/ingestion-jobs/:jobId/chunks/:chunkId + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.patch_api_v1_admin_knowledge_spaces_spaceid_ingestion_jobs_jobid_chunks_chunkid + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/:spaceId/ingestion-jobs/:jobId/chunks/:chunkId + method: PATCH + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.patch_api_v1_admin_media_assets_uuid + module: admin + title: PATCH /api/v1/admin/media/assets/:uuid + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.patch_api_v1_admin_media_assets_uuid + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/media/router.go + protocols: + - channel: rest + endpoint: /api/v1/admin/media/assets/:uuid + method: PATCH + schema_ref: internal/transport/http/admin/media/router.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.patch_api_v1_admin_notifications_uuid_read + module: admin + title: PATCH /api/v1/admin/notifications/:uuid/read + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.patch_api_v1_admin_notifications_uuid_read + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/notifications/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/notifications/:uuid/read + method: PATCH + schema_ref: internal/transport/http/admin/notifications/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.patch_api_v1_admin_system_users_id + module: admin + title: PATCH /api/v1/admin/system/users/:id + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.patch_api_v1_admin_system_users_id + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/system/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/system/users/:id + method: PATCH + schema_ref: internal/transport/http/admin/system/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.patch_api_v1_admin_system_users_id_add_to_tenant + module: admin + title: PATCH /api/v1/admin/system/users/:id/add-to-tenant + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.patch_api_v1_admin_system_users_id_add_to_tenant + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/system/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/system/users/:id/add-to-tenant + method: PATCH + schema_ref: internal/transport/http/admin/system/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_agent_lifecycle_agents + module: admin + title: POST /api/v1/admin/agent/lifecycle/agents + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_agent_lifecycle_agents + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agentlifecycle/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agent/lifecycle/agents + method: POST + schema_ref: internal/transport/http/admin/agentlifecycle/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_agent_lifecycle_agents_agent_id_activate + module: admin + title: POST /api/v1/admin/agent/lifecycle/agents/:agent_id/activate + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_agent_lifecycle_agents_agent_id_activate + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agentlifecycle/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agent/lifecycle/agents/:agent_id/activate + method: POST + schema_ref: internal/transport/http/admin/agentlifecycle/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_agent_lifecycle_agents_agent_id_pause + module: admin + title: POST /api/v1/admin/agent/lifecycle/agents/:agent_id/pause + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_agent_lifecycle_agents_agent_id_pause + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agentlifecycle/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agent/lifecycle/agents/:agent_id/pause + method: POST + schema_ref: internal/transport/http/admin/agentlifecycle/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_agent_lifecycle_agents_agent_id_resume + module: admin + title: POST /api/v1/admin/agent/lifecycle/agents/:agent_id/resume + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_agent_lifecycle_agents_agent_id_resume + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agentlifecycle/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agent/lifecycle/agents/:agent_id/resume + method: POST + schema_ref: internal/transport/http/admin/agentlifecycle/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_agent_lifecycle_agents_agent_id_retire + module: admin + title: POST /api/v1/admin/agent/lifecycle/agents/:agent_id/retire + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_agent_lifecycle_agents_agent_id_retire + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agentlifecycle/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agent/lifecycle/agents/:agent_id/retire + method: POST + schema_ref: internal/transport/http/admin/agentlifecycle/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_agent_lifecycle_agents_agent_id_sandbox + module: admin + title: POST /api/v1/admin/agent/lifecycle/agents/:agent_id/sandbox + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_agent_lifecycle_agents_agent_id_sandbox + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agentlifecycle/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agent/lifecycle/agents/:agent_id/sandbox + method: POST + schema_ref: internal/transport/http/admin/agentlifecycle/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_agent_lifecycle_agents_agent_id_scale + module: admin + title: POST /api/v1/admin/agent/lifecycle/agents/:agent_id/scale + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_agent_lifecycle_agents_agent_id_scale + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agentlifecycle/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agent/lifecycle/agents/:agent_id/scale + method: POST + schema_ref: internal/transport/http/admin/agentlifecycle/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_agent_lifecycle_autoreg_manifests + module: admin + title: POST /api/v1/admin/agent/lifecycle/autoreg/manifests + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_agent_lifecycle_autoreg_manifests + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agentlifecycle/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agent/lifecycle/autoreg/manifests + method: POST + schema_ref: internal/transport/http/admin/agentlifecycle/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_agents_settings_active + module: admin + title: POST /api/v1/admin/agents/settings/active + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_agents_settings_active + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agents/settings/active + method: POST + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_agents_settings_save + module: admin + title: POST /api/v1/admin/agents/settings/save + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_agents_settings_save + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agents/settings/save + method: POST + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_agents_shares_share_id_revoke + module: admin + title: POST /api/v1/admin/agents/shares/:share_id/revoke + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_agents_shares_share_id_revoke + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agents/shares/:share_id/revoke + method: POST + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_agents_tenant_forms_form_id_approve + module: admin + title: POST /api/v1/admin/agents/tenant/forms/:form_id/approve + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_agents_tenant_forms_form_id_approve + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agents/tenant/forms/:form_id/approve + method: POST + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_agents_tenant_forms_form_id_reject + module: admin + title: POST /api/v1/admin/agents/tenant/forms/:form_id/reject + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_agents_tenant_forms_form_id_reject + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agents/tenant/forms/:form_id/reject + method: POST + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_agents_test_call + module: admin + title: POST /api/v1/admin/agents/test/call + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_agents_test_call + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agents/test/call + method: POST + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_agents_test_connection + module: admin + title: POST /api/v1/admin/agents/test/connection + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_agents_test_connection + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agents/test/connection + method: POST + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_agents_uuid_disable + module: admin + title: POST /api/v1/admin/agents/:uuid/disable + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_agents_uuid_disable + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agents/:uuid/disable + method: POST + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_agents_uuid_enable + module: admin + title: POST /api/v1/admin/agents/:uuid/enable + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_agents_uuid_enable + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agents/:uuid/enable + method: POST + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_agents_uuid_health_check + module: admin + title: POST /api/v1/admin/agents/:uuid/health-check + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_agents_uuid_health_check + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agents/:uuid/health-check + method: POST + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_agents_uuid_shares + module: admin + title: POST /api/v1/admin/agents/:uuid/shares + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_agents_uuid_shares + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agents/:uuid/shares + method: POST + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_auth_me_switch_tenant + module: admin + title: POST /api/v1/admin/user/auth/me/switch-tenant + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_auth_me_switch_tenant + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/user/auth/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/user/auth/me/switch-tenant + method: POST + schema_ref: internal/transport/http/admin/user/auth/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_event_fabric_acl + module: admin + title: POST /api/v1/admin/event-fabric/acl + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_event_fabric_acl + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/event-fabric/acl + method: POST + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_event_fabric_cron_jobs_job_id_pause + module: admin + title: POST /api/v1/admin/event-fabric/cron/jobs/:job_id/pause + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_event_fabric_cron_jobs_job_id_pause + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/event-fabric/cron/jobs/:job_id/pause + method: POST + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_event_fabric_cron_jobs_job_id_resume + module: admin + title: POST /api/v1/admin/event-fabric/cron/jobs/:job_id/resume + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_event_fabric_cron_jobs_job_id_resume + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/event-fabric/cron/jobs/:job_id/resume + method: POST + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_event_fabric_cron_jobs_job_id_run_now + module: admin + title: POST /api/v1/admin/event-fabric/cron/jobs/:job_id/run-now + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_event_fabric_cron_jobs_job_id_run_now + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/event-fabric/cron/jobs/:job_id/run-now + method: POST + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_event_fabric_dlq_messages_replay + module: admin + title: POST /api/v1/admin/event-fabric/dlq/messages:replay + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_event_fabric_dlq_messages_replay + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/event-fabric/dlq/messages:replay + method: POST + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_event_fabric_pipeline_tasks + module: admin + title: POST /api/v1/admin/event-fabric/pipeline/tasks + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_event_fabric_pipeline_tasks + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/event-fabric/pipeline/tasks + method: POST + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_event_fabric_replay_tasks + module: admin + title: POST /api/v1/admin/event-fabric/replay/tasks + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_event_fabric_replay_tasks + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/event-fabric/replay/tasks + method: POST + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_event_fabric_replay_tasks_task_id_cancel + module: admin + title: POST /api/v1/admin/event-fabric/replay/tasks/:task_id/cancel + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_event_fabric_replay_tasks_task_id_cancel + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/event-fabric/replay/tasks/:task_id/cancel + method: POST + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_event_fabric_retry_tasks + module: admin + title: POST /api/v1/admin/event-fabric/retry/tasks + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_event_fabric_retry_tasks + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/event-fabric/retry/tasks + method: POST + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_event_fabric_topics + module: admin + title: POST /api/v1/admin/event-fabric/topics + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_event_fabric_topics + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/event-fabric/topics + method: POST + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_iam_members_id_force_logout + module: admin + title: POST /api/v1/admin/iam/members/:id/force-logout + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_iam_members_id_force_logout + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/iam/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/iam/members/:id/force-logout + method: POST + schema_ref: internal/transport/http/admin/iam/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_iam_permissions_register + module: admin + title: POST /api/v1/admin/iam/permissions/register + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_iam_permissions_register + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/iam/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/iam/permissions/register + method: POST + schema_ref: internal/transport/http/admin/iam/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_iam_permissions_sync + module: admin + title: POST /api/v1/admin/iam/permissions/sync + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_iam_permissions_sync + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/iam/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/iam/permissions/sync + method: POST + schema_ref: internal/transport/http/admin/iam/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_iam_roles_id_bind_member + module: admin + title: POST /api/v1/admin/iam/roles/:id/bind/member + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_iam_roles_id_bind_member + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/iam/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/iam/roles/:id/bind/member + method: POST + schema_ref: internal/transport/http/admin/iam/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_iam_roles_id_permissions_grant + module: admin + title: POST /api/v1/admin/iam/roles/:id/permissions/grant + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_iam_roles_id_permissions_grant + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/iam/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/iam/roles/:id/permissions/grant + method: POST + schema_ref: internal/transport/http/admin/iam/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_iam_roles_id_permissions_grant_ids + module: admin + title: POST /api/v1/admin/iam/roles/:id/permissions/grant-ids + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_iam_roles_id_permissions_grant_ids + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/iam/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/iam/roles/:id/permissions/grant-ids + method: POST + schema_ref: internal/transport/http/admin/iam/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_iam_roles_id_permissions_revoke_ids + module: admin + title: POST /api/v1/admin/iam/roles/:id/permissions/revoke-ids + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_iam_roles_id_permissions_revoke_ids + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/iam/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/iam/roles/:id/permissions/revoke-ids + method: POST + schema_ref: internal/transport/http/admin/iam/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_iam_users_user_id_member + module: admin + title: POST /api/v1/admin/iam/users/:user_id/member + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_iam_users_user_id_member + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/iam/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/iam/users/:user_id/member + method: POST + schema_ref: internal/transport/http/admin/iam/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_integration_api_key_profiles + module: admin + title: POST /api/v1/admin/integration/api-key-profiles + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_integration_api_key_profiles + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/integration_gateway/handler.go + protocols: + - channel: rest + endpoint: /api/v1/admin/integration/api-key-profiles + method: POST + schema_ref: internal/transport/http/admin/integration_gateway/handler.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_integration_api_keys + module: admin + title: POST /api/v1/admin/integration/api-keys + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_integration_api_keys + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/integration_gateway/handler.go + protocols: + - channel: rest + endpoint: /api/v1/admin/integration/api-keys + method: POST + schema_ref: internal/transport/http/admin/integration_gateway/handler.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_integration_api_keys_key_id_revoke + module: admin + title: POST /api/v1/admin/integration/api-keys/:key_id/revoke + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_integration_api_keys_key_id_revoke + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/integration_gateway/handler.go + protocols: + - channel: rest + endpoint: /api/v1/admin/integration/api-keys/:key_id/revoke + method: POST + schema_ref: internal/transport/http/admin/integration_gateway/handler.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_integration_api_keys_key_id_rotate + module: admin + title: POST /api/v1/admin/integration/api-keys/:key_id/rotate + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_integration_api_keys_key_id_rotate + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/integration_gateway/handler.go + protocols: + - channel: rest + endpoint: /api/v1/admin/integration/api-keys/:key_id/rotate + method: POST + schema_ref: internal/transport/http/admin/integration_gateway/handler.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_integration_routes + module: admin + title: POST /api/v1/admin/integration/routes + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_integration_routes + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/integration_gateway/handler.go + protocols: + - channel: rest + endpoint: /api/v1/admin/integration/routes + method: POST + schema_ref: internal/transport/http/admin/integration_gateway/handler.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_integration_routes_route_id_resume + module: admin + title: POST /api/v1/admin/integration/routes/:route_id/resume + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_integration_routes_route_id_resume + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/integration_gateway/handler.go + protocols: + - channel: rest + endpoint: /api/v1/admin/integration/routes/:route_id/resume + method: POST + schema_ref: internal/transport/http/admin/integration_gateway/handler.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_integration_routes_route_id_retire + module: admin + title: POST /api/v1/admin/integration/routes/:route_id/retire + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_integration_routes_route_id_retire + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/integration_gateway/handler.go + protocols: + - channel: rest + endpoint: /api/v1/admin/integration/routes/:route_id/retire + method: POST + schema_ref: internal/transport/http/admin/integration_gateway/handler.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_integration_routes_route_id_suspend + module: admin + title: POST /api/v1/admin/integration/routes/:route_id/suspend + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_integration_routes_route_id_suspend + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/integration_gateway/handler.go + protocols: + - channel: rest + endpoint: /api/v1/admin/integration/routes/:route_id/suspend + method: POST + schema_ref: internal/transport/http/admin/integration_gateway/handler.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_knowledge_sources_connectors + module: admin + title: POST /api/v1/admin/knowledge-sources/connectors + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_knowledge_sources_connectors + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-sources/connectors + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_knowledge_sources_connectors_connectorid_pause + module: admin + title: POST /api/v1/admin/knowledge-sources/connectors/:connectorId/pause + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_knowledge_sources_connectors_connectorid_pause + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-sources/connectors/:connectorId/pause + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_knowledge_sources_credentials + module: admin + title: POST /api/v1/admin/knowledge-sources/credentials + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_knowledge_sources_credentials + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-sources/credentials + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_knowledge_spaces_spaceid_corpus_check_jobs + module: admin + title: POST /api/v1/admin/knowledge-spaces/:spaceId/corpus-check/jobs + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_knowledge_spaces_spaceid_corpus_check_jobs + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/:spaceId/corpus-check/jobs + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_knowledge_spaces_spaceid_feedback + module: admin + title: POST /api/v1/admin/knowledge-spaces/:spaceId/feedback + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_knowledge_spaces_spaceid_feedback + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/:spaceId/feedback + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_knowledge_spaces_spaceid_feedback_caseid_close + module: admin + title: POST /api/v1/admin/knowledge-spaces/:spaceId/feedback/:caseId/close + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_knowledge_spaces_spaceid_feedback_caseid_close + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/:spaceId/feedback/:caseId/close + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_knowledge_spaces_spaceid_feedback_caseid_escalate + module: admin + title: POST /api/v1/admin/knowledge-spaces/:spaceId/feedback/:caseId/escalate + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_knowledge_spaces_spaceid_feedback_caseid_escalate + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/:spaceId/feedback/:caseId/escalate + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_knowledge_spaces_spaceid_feedback_caseid_reprocess + module: admin + title: POST /api/v1/admin/knowledge-spaces/:spaceId/feedback/:caseId/reprocess + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_knowledge_spaces_spaceid_feedback_caseid_reprocess + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/:spaceId/feedback/:caseId/reprocess + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_knowledge_spaces_spaceid_feedback_caseid_rollback + module: admin + title: POST /api/v1/admin/knowledge-spaces/:spaceId/feedback/:caseId/rollback + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_knowledge_spaces_spaceid_feedback_caseid_rollback + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/:spaceId/feedback/:caseId/rollback + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_knowledge_spaces_spaceid_fusion_strategies + module: admin + title: POST /api/v1/admin/knowledge-spaces/:spaceId/fusion-strategies + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_knowledge_spaces_spaceid_fusion_strategies + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/:spaceId/fusion-strategies + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_knowledge_spaces_spaceid_fusion_strategies_strategyid_rollback + module: admin + title: POST /api/v1/admin/knowledge-spaces/:spaceId/fusion-strategies/:strategyId/rollback + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_knowledge_spaces_spaceid_fusion_strategies_strategyid_rollback + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/:spaceId/fusion-strategies/:strategyId/rollback + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_knowledge_spaces_spaceid_ingestion_jobs + module: admin + title: POST /api/v1/admin/knowledge-spaces/:spaceId/ingestion-jobs + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_knowledge_spaces_spaceid_ingestion_jobs + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/:spaceId/ingestion-jobs + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_knowledge_spaces_spaceid_playground_retrieval + module: admin + title: POST /api/v1/admin/knowledge-spaces/:spaceId/playground/retrieval + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_knowledge_spaces_spaceid_playground_retrieval + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/:spaceId/playground/retrieval + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_knowledge_spaces_spaceid_retire + module: admin + title: POST /api/v1/admin/knowledge-spaces/:spaceId/retire + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_knowledge_spaces_spaceid_retire + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/:spaceId/retire + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_knowledge_spaces_spaceid_sources_sync_jobs + module: admin + title: POST /api/v1/admin/knowledge-spaces/:spaceId/sources/sync-jobs + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_knowledge_spaces_spaceid_sources_sync_jobs + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/:spaceId/sources/sync-jobs + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_knowledge_spaces_spaceid_sources_sync_jobs_jobid_pause + module: admin + title: POST /api/v1/admin/knowledge-spaces/:spaceId/sources/sync-jobs/:jobId/pause + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_knowledge_spaces_spaceid_sources_sync_jobs_jobid_pause + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/:spaceId/sources/sync-jobs/:jobId/pause + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_knowledge_spaces_spaceid_sources_sync_jobs_jobid_run + module: admin + title: POST /api/v1/admin/knowledge-spaces/:spaceId/sources/sync-jobs/:jobId/run + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_knowledge_spaces_spaceid_sources_sync_jobs_jobid_run + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/:spaceId/sources/sync-jobs/:jobId/run + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_knowledge_spaces_spaceid_vector_index_activate + module: admin + title: POST /api/v1/admin/knowledge-spaces/:spaceId/vector-index/activate + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_knowledge_spaces_spaceid_vector_index_activate + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/:spaceId/vector-index/activate + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_knowledge_spaces_strategy_validate + module: admin + title: POST /api/v1/admin/knowledge-spaces/strategy/validate + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_knowledge_spaces_strategy_validate + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/admin/knowledge-spaces/strategy/validate + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_media_assets_uuid_presign + module: admin + title: POST /api/v1/admin/media/assets/:uuid/presign + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_media_assets_uuid_presign + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/media/router.go + protocols: + - channel: rest + endpoint: /api/v1/admin/media/assets/:uuid/presign + method: POST + schema_ref: internal/transport/http/admin/media/router.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_notifications_test + module: admin + title: POST /api/v1/admin/notifications/test + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_notifications_test + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/notifications/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/notifications/test + method: POST + schema_ref: internal/transport/http/admin/notifications/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_notifications_test_queue + module: admin + title: POST /api/v1/admin/notifications/test-queue + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_notifications_test_queue + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/notifications/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/notifications/test-queue + method: POST + schema_ref: internal/transport/http/admin/notifications/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_plugins_id_credentials_rotate + module: admin + title: POST /api/v1/admin/plugins/:id/credentials/rotate + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_plugins_id_credentials_rotate + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/plugins/:id/credentials/rotate + method: POST + schema_ref: internal/transport/http/admin/plugin/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_plugins_id_disable + module: admin + title: POST /api/v1/admin/plugins/:id/disable + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_plugins_id_disable + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/plugins/:id/disable + method: POST + schema_ref: internal/transport/http/admin/plugin/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_plugins_id_enable + module: admin + title: POST /api/v1/admin/plugins/:id/enable + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_plugins_id_enable + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/plugins/:id/enable + method: POST + schema_ref: internal/transport/http/admin/plugin/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_plugins_id_restart + module: admin + title: POST /api/v1/admin/plugins/:id/restart + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_plugins_id_restart + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/plugins/:id/restart + method: POST + schema_ref: internal/transport/http/admin/plugin/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_plugins_id_switch_version + module: admin + title: POST /api/v1/admin/plugins/:id/switch_version + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_plugins_id_switch_version + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/plugins/:id/switch_version + method: POST + schema_ref: internal/transport/http/admin/plugin/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_plugins_id_tenant_enable + module: admin + title: POST /api/v1/admin/plugins/:id/tenant_enable + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_plugins_id_tenant_enable + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/plugins/:id/tenant_enable + method: POST + schema_ref: internal/transport/http/admin/plugin/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_plugins_id_uninstall + module: admin + title: POST /api/v1/admin/plugins/:id/uninstall + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_plugins_id_uninstall + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/plugins/:id/uninstall + method: POST + schema_ref: internal/transport/http/admin/plugin/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_plugins_install_local + module: admin + title: POST /api/v1/admin/plugins/install/local + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_plugins_install_local + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/plugins/install/local + method: POST + schema_ref: internal/transport/http/admin/plugin/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_plugins_install_url + module: admin + title: POST /api/v1/admin/plugins/install/url + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_plugins_install_url + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/plugins/install/url + method: POST + schema_ref: internal/transport/http/admin/plugin/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_router_health + module: admin + title: POST /api/v1/admin/router/health + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_router_health + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/capability_registry/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/router/health + method: POST + schema_ref: internal/transport/http/admin/capability_registry/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_router_invoke + module: admin + title: POST /api/v1/admin/router/invoke + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_router_invoke + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/capability_registry/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/router/invoke + method: POST + schema_ref: internal/transport/http/admin/capability_registry/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_router_sandbox_invoke + module: admin + title: POST /api/v1/admin/router/sandbox/invoke + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_router_sandbox_invoke + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/capability_registry/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/router/sandbox/invoke + method: POST + schema_ref: internal/transport/http/admin/capability_registry/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_system_sts_pluginid + module: admin + title: POST /api/v1/admin/system/sts/:pluginId + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_system_sts_pluginid + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/system/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/system/sts/:pluginId + method: POST + schema_ref: internal/transport/http/admin/system/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_system_users_id_force_logout + module: admin + title: POST /api/v1/admin/system/users/:id/force-logout + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_system_users_id_force_logout + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/system/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/system/users/:id/force-logout + method: POST + schema_ref: internal/transport/http/admin/system/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_system_users_id_members + module: admin + title: POST /api/v1/admin/system/users/:id/members + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_system_users_id_members + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/system/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/system/users/:id/members + method: POST + schema_ref: internal/transport/http/admin/system/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_user_auth_login + module: admin + title: POST /api/v1/admin/user/auth/login + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_user_auth_login + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/user/auth/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/user/auth/login + method: POST + schema_ref: internal/transport/http/admin/user/auth/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_user_auth_logout + module: admin + title: POST /api/v1/admin/user/auth/logout + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_user_auth_logout + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/user/auth/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/user/auth/logout + method: POST + schema_ref: internal/transport/http/admin/user/auth/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_user_auth_refresh + module: admin + title: POST /api/v1/admin/user/auth/refresh + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_user_auth_refresh + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/user/auth/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/user/auth/refresh + method: POST + schema_ref: internal/transport/http/admin/user/auth/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_user_auth_register + module: admin + title: POST /api/v1/admin/user/auth/register + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_user_auth_register + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/user/auth/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/user/auth/register + method: POST + schema_ref: internal/transport/http/admin/user/auth/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_workflow_templates_templateid_upgrade + module: admin + title: POST /api/v1/admin/workflow-templates/:templateId/upgrade + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_workflow_templates_templateid_upgrade + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/capability_registry/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/workflow-templates/:templateId/upgrade + method: POST + schema_ref: internal/transport/http/admin/capability_registry/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_workflows_definitions + module: admin + title: POST /api/v1/admin/workflows/definitions + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_workflows_definitions + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/workflow/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/workflows/definitions + method: POST + schema_ref: internal/transport/http/admin/workflow/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_workflows_definitions_definitionid_publish + module: admin + title: POST /api/v1/admin/workflows/definitions/:definitionId/publish + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_workflows_definitions_definitionid_publish + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/workflow/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/workflows/definitions/:definitionId/publish + method: POST + schema_ref: internal/transport/http/admin/workflow/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_workflows_instances + module: admin + title: POST /api/v1/admin/workflows/instances + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_workflows_instances + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/workflow/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/workflows/instances + method: POST + schema_ref: internal/transport/http/admin/workflow/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.post_api_v1_admin_workflows_instances_instanceid_actions + module: admin + title: POST /api/v1/admin/workflows/instances/:instanceId/actions + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.post_api_v1_admin_workflows_instances_instanceid_actions + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/workflow/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/workflows/instances/:instanceId/actions + method: POST + schema_ref: internal/transport/http/admin/workflow/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.put_api_v1_admin_agent_lifecycle_agents_agent_id_subscription + module: admin + title: PUT /api/v1/admin/agent/lifecycle/agents/:agent_id/subscription + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.put_api_v1_admin_agent_lifecycle_agents_agent_id_subscription + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agentlifecycle/routes.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agent/lifecycle/agents/:agent_id/subscription + method: PUT + schema_ref: internal/transport/http/admin/agentlifecycle/routes.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.put_api_v1_admin_agents_uuid_ai_setting + module: admin + title: PUT /api/v1/admin/agents/:uuid/ai-setting + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.put_api_v1_admin_agents_uuid_ai_setting + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/agents/:uuid/ai-setting + method: PUT + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.put_api_v1_admin_iam_members_id_departments + module: admin + title: PUT /api/v1/admin/iam/members/:id/departments + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.put_api_v1_admin_iam_members_id_departments + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/iam/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/iam/members/:id/departments + method: PUT + schema_ref: internal/transport/http/admin/iam/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.put_api_v1_admin_iam_members_id_restore + module: admin + title: PUT /api/v1/admin/iam/members/:id/restore + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.put_api_v1_admin_iam_members_id_restore + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/iam/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/iam/members/:id/restore + method: PUT + schema_ref: internal/transport/http/admin/iam/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.put_api_v1_admin_iam_members_id_status + module: admin + title: PUT /api/v1/admin/iam/members/:id/status + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.put_api_v1_admin_iam_members_id_status + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/iam/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/iam/members/:id/status + method: PUT + schema_ref: internal/transport/http/admin/iam/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.put_api_v1_admin_iam_permissions_id_status + module: admin + title: PUT /api/v1/admin/iam/permissions/:id/status + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.put_api_v1_admin_iam_permissions_id_status + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/iam/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/iam/permissions/:id/status + method: PUT + schema_ref: internal/transport/http/admin/iam/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.put_api_v1_admin_iam_roles_id_permissions_set_ids + module: admin + title: PUT /api/v1/admin/iam/roles/:id/permissions/set-ids + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.put_api_v1_admin_iam_roles_id_permissions_set_ids + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/iam/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/iam/roles/:id/permissions/set-ids + method: PUT + schema_ref: internal/transport/http/admin/iam/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.put_api_v1_admin_integration_api_key_profiles_profile_id_permissions + module: admin + title: PUT /api/v1/admin/integration/api-key-profiles/:profile_id/permissions + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.put_api_v1_admin_integration_api_key_profiles_profile_id_permissions + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/integration_gateway/handler.go + protocols: + - channel: rest + endpoint: /api/v1/admin/integration/api-key-profiles/:profile_id/permissions + method: PUT + schema_ref: internal/transport/http/admin/integration_gateway/handler.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.put_api_v1_admin_system_settings_system_key + module: admin + title: PUT /api/v1/admin/system/settings/system/:key + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.put_api_v1_admin_system_settings_system_key + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/system/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/system/settings/system/:key + method: PUT + schema_ref: internal/transport/http/admin/system/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.put_api_v1_admin_system_settings_tenant_key + module: admin + title: PUT /api/v1/admin/system/settings/tenant/:key + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.put_api_v1_admin_system_settings_tenant_key + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/system/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/system/settings/tenant/:key + method: PUT + schema_ref: internal/transport/http/admin/system/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.put_api_v1_admin_system_users_id_restore + module: admin + title: PUT /api/v1/admin/system/users/:id/restore + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.put_api_v1_admin_system_users_id_restore + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/system/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/system/users/:id/restore + method: PUT + schema_ref: internal/transport/http/admin/system/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.put_api_v1_admin_system_users_id_status + module: admin + title: PUT /api/v1/admin/system/users/:id/status + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.put_api_v1_admin_system_users_id_status + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/system/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/system/users/:id/status + method: PUT + schema_ref: internal/transport/http/admin/system/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.admin.gin.put_api_v1_admin_tenants_upsert + module: admin + title: PUT /api/v1/admin/tenants/upsert + description: Generated from Gin route source + categories: + - admin + - gin + - generated + intents: + - admin.put_api_v1_admin_tenants_upsert + tool_scopes: + - admin.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/tenants/api.go + protocols: + - channel: rest + endpoint: /api/v1/admin/tenants/upsert + method: PUT + schema_ref: internal/transport/http/admin/tenants/api.go#source + auth_type: tenant_jwt + tool_scope: admin.api + - capability_id: com.corex.rest.agent.gin.post_api_v1_agent_weights_refresh + module: agent + title: POST /api/v1/agent/weights/refresh + description: Generated from Gin route source + categories: + - agent + - gin + - generated + intents: + - agent.post_api_v1_agent_weights_refresh + tool_scopes: + - agent.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/agent/weights/refresh + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: agent.api + - capability_id: com.corex.rest.agents.gin.delete_api_v1_agents_sessions_id + module: agents + title: DELETE /api/v1/agents/sessions/:id + description: Generated from Gin route source + categories: + - agents + - gin + - generated + intents: + - agents.delete_api_v1_agents_sessions_id + tool_scopes: + - agents.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/agents/sessions/:id + method: DELETE + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: agents.api + - capability_id: com.corex.rest.agents.gin.get_api_v1_agents_sessions + module: agents + title: GET /api/v1/agents/sessions + description: Generated from Gin route source + categories: + - agents + - gin + - generated + intents: + - agents.get_api_v1_agents_sessions + tool_scopes: + - agents.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/agents/sessions + method: GET + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: agents.api + - capability_id: com.corex.rest.agents.gin.get_api_v1_agents_sessions_id + module: agents + title: GET /api/v1/agents/sessions/:id + description: Generated from Gin route source + categories: + - agents + - gin + - generated + intents: + - agents.get_api_v1_agents_sessions_id + tool_scopes: + - agents.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/agents/sessions/:id + method: GET + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: agents.api + - capability_id: com.corex.rest.agents.gin.get_api_v1_agents_sessions_id_messages + module: agents + title: GET /api/v1/agents/sessions/:id/messages + description: Generated from Gin route source + categories: + - agents + - gin + - generated + intents: + - agents.get_api_v1_agents_sessions_id_messages + tool_scopes: + - agents.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/agents/sessions/:id/messages + method: GET + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: agents.api + - capability_id: com.corex.rest.agents.gin.get_api_v1_agents_sessions_id_stream_sse + module: agents + title: GET /api/v1/agents/sessions/:id/stream/sse + description: Generated from Gin route source + categories: + - agents + - gin + - generated + intents: + - agents.get_api_v1_agents_sessions_id_stream_sse + tool_scopes: + - agents.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/agents/sessions/:id/stream/sse + method: GET + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: agents.api + - capability_id: com.corex.rest.agents.gin.get_api_v1_agents_status + module: agents + title: GET /api/v1/agents/status + description: Generated from Gin route source + categories: + - agents + - gin + - generated + intents: + - agents.get_api_v1_agents_status + tool_scopes: + - agents.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/agents/status + method: GET + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: agents.api + - capability_id: com.corex.rest.agents.gin.get_api_v1_agents_stream_mock + module: agents + title: GET /api/v1/agents/stream/mock + description: Generated from Gin route source + categories: + - agents + - gin + - generated + intents: + - agents.get_api_v1_agents_stream_mock + tool_scopes: + - agents.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/agents/stream/mock + method: GET + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: agents.api + - capability_id: com.corex.rest.agents.gin.get_api_v1_agents_stream_sse + module: agents + title: GET /api/v1/agents/stream/sse + description: Generated from Gin route source + categories: + - agents + - gin + - generated + intents: + - agents.get_api_v1_agents_stream_sse + tool_scopes: + - agents.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/agents/stream/sse + method: GET + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: agents.api + - capability_id: com.corex.rest.agents.gin.patch_api_v1_agents_sessions_id + module: agents + title: PATCH /api/v1/agents/sessions/:id + description: Generated from Gin route source + categories: + - agents + - gin + - generated + intents: + - agents.patch_api_v1_agents_sessions_id + tool_scopes: + - agents.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/agents/sessions/:id + method: PATCH + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: agents.api + - capability_id: com.corex.rest.agents.gin.post_api_v1_agents_intent + module: agents + title: POST /api/v1/agents/intent/ + description: Generated from Gin route source + categories: + - agents + - gin + - generated + intents: + - agents.post_api_v1_agents_intent + tool_scopes: + - agents.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/agents/intent/ + method: POST + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: agents.api + - capability_id: com.corex.rest.agents.gin.post_api_v1_agents_intent_plan + module: agents + title: POST /api/v1/agents/intent/plan + description: Generated from Gin route source + categories: + - agents + - gin + - generated + intents: + - agents.post_api_v1_agents_intent_plan + tool_scopes: + - agents.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/agents/intent/plan + method: POST + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: agents.api + - capability_id: com.corex.rest.agents.gin.post_api_v1_agents_invoke + module: agents + title: POST /api/v1/agents/invoke + description: Generated from Gin route source + categories: + - agents + - gin + - generated + intents: + - agents.post_api_v1_agents_invoke + tool_scopes: + - agents.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/agents/invoke + method: POST + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: agents.api + - capability_id: com.corex.rest.agents.gin.post_api_v1_agents_sessions + module: agents + title: POST /api/v1/agents/sessions + description: Generated from Gin route source + categories: + - agents + - gin + - generated + intents: + - agents.post_api_v1_agents_sessions + tool_scopes: + - agents.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/agents/sessions + method: POST + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: agents.api + - capability_id: com.corex.rest.agents.gin.post_api_v1_agents_sessions_id_archive + module: agents + title: POST /api/v1/agents/sessions/:id/archive + description: Generated from Gin route source + categories: + - agents + - gin + - generated + intents: + - agents.post_api_v1_agents_sessions_id_archive + tool_scopes: + - agents.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/agents/sessions/:id/archive + method: POST + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: agents.api + - capability_id: com.corex.rest.agents.gin.post_api_v1_agents_sessions_id_invoke + module: agents + title: POST /api/v1/agents/sessions/:id/invoke + description: Generated from Gin route source + categories: + - agents + - gin + - generated + intents: + - agents.post_api_v1_agents_sessions_id_invoke + tool_scopes: + - agents.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent/api.go + protocols: + - channel: rest + endpoint: /api/v1/agents/sessions/:id/invoke + method: POST + schema_ref: internal/transport/http/admin/agent/api.go#source + auth_type: tenant_jwt + tool_scope: agents.api + - capability_id: com.corex.rest.ai.gin.get_api_v1_ai_llm_sessions_session_id_stream + module: ai + title: GET /api/v1/ai/llm/sessions/:session_id/stream + description: Generated from Gin route source + categories: + - ai + - gin + - generated + intents: + - ai.get_api_v1_ai_llm_sessions_session_id_stream + tool_scopes: + - ai.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/ai/routes.go + protocols: + - channel: rest + endpoint: /api/v1/ai/llm/sessions/:session_id/stream + method: GET + schema_ref: internal/transport/http/openapi/ai/routes.go#source + auth_type: tenant_jwt + tool_scope: ai.api + - capability_id: com.corex.rest.ai.gin.get_api_v1_ai_status + module: ai + title: GET /api/v1/ai/status + description: Generated from Gin route source + categories: + - ai + - gin + - generated + intents: + - ai.get_api_v1_ai_status + tool_scopes: + - ai.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/ai/routes.go + protocols: + - channel: rest + endpoint: /api/v1/ai/status + method: GET + schema_ref: internal/transport/http/openapi/ai/routes.go#source + auth_type: tenant_jwt + tool_scope: ai.api + - capability_id: com.corex.rest.ai.gin.post_api_v1_ai_embedding_invoke + module: ai + title: POST /api/v1/ai/embedding/invoke + description: Generated from Gin route source + categories: + - ai + - gin + - generated + intents: + - ai.post_api_v1_ai_embedding_invoke + tool_scopes: + - ai.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/ai/routes.go + protocols: + - channel: rest + endpoint: /api/v1/ai/embedding/invoke + method: POST + schema_ref: internal/transport/http/openapi/ai/routes.go#source + auth_type: tenant_jwt + tool_scope: ai.api + - capability_id: com.corex.rest.ai.gin.post_api_v1_ai_image_invoke + module: ai + title: POST /api/v1/ai/image/invoke + description: Generated from Gin route source + categories: + - ai + - gin + - generated + intents: + - ai.post_api_v1_ai_image_invoke + tool_scopes: + - ai.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/ai/routes.go + protocols: + - channel: rest + endpoint: /api/v1/ai/image/invoke + method: POST + schema_ref: internal/transport/http/openapi/ai/routes.go#source + auth_type: tenant_jwt + tool_scope: ai.api + - capability_id: com.corex.rest.ai.gin.post_api_v1_ai_llm_invoke + module: ai + title: POST /api/v1/ai/llm/invoke + description: Generated from Gin route source + categories: + - ai + - gin + - generated + intents: + - ai.post_api_v1_ai_llm_invoke + tool_scopes: + - ai.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/ai/routes.go + protocols: + - channel: rest + endpoint: /api/v1/ai/llm/invoke + method: POST + schema_ref: internal/transport/http/openapi/ai/routes.go#source + auth_type: tenant_jwt + tool_scope: ai.api + - capability_id: com.corex.rest.ai.gin.post_api_v1_ai_llm_sessions + module: ai + title: POST /api/v1/ai/llm/sessions + description: Generated from Gin route source + categories: + - ai + - gin + - generated + intents: + - ai.post_api_v1_ai_llm_sessions + tool_scopes: + - ai.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/ai/routes.go + protocols: + - channel: rest + endpoint: /api/v1/ai/llm/sessions + method: POST + schema_ref: internal/transport/http/openapi/ai/routes.go#source + auth_type: tenant_jwt + tool_scope: ai.api + - capability_id: com.corex.rest.ai.gin.post_api_v1_ai_llm_sessions_session_id_messages + module: ai + title: POST /api/v1/ai/llm/sessions/:session_id/messages + description: Generated from Gin route source + categories: + - ai + - gin + - generated + intents: + - ai.post_api_v1_ai_llm_sessions_session_id_messages + tool_scopes: + - ai.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/ai/routes.go + protocols: + - channel: rest + endpoint: /api/v1/ai/llm/sessions/:session_id/messages + method: POST + schema_ref: internal/transport/http/openapi/ai/routes.go#source + auth_type: tenant_jwt + tool_scope: ai.api + - capability_id: com.corex.rest.ai.gin.post_api_v1_ai_tts_invoke + module: ai + title: POST /api/v1/ai/tts/invoke + description: Generated from Gin route source + categories: + - ai + - gin + - generated + intents: + - ai.post_api_v1_ai_tts_invoke + tool_scopes: + - ai.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/ai/routes.go + protocols: + - channel: rest + endpoint: /api/v1/ai/tts/invoke + method: POST + schema_ref: internal/transport/http/openapi/ai/routes.go#source + auth_type: tenant_jwt + tool_scope: ai.api + - capability_id: com.corex.rest.ai.gin.post_api_v1_ai_video_invoke + module: ai + title: POST /api/v1/ai/video/invoke + description: Generated from Gin route source + categories: + - ai + - gin + - generated + intents: + - ai.post_api_v1_ai_video_invoke + tool_scopes: + - ai.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/ai/routes.go + protocols: + - channel: rest + endpoint: /api/v1/ai/video/invoke + method: POST + schema_ref: internal/transport/http/openapi/ai/routes.go#source + auth_type: tenant_jwt + tool_scope: ai.api + - capability_id: com.corex.rest.ai.gin.post_api_v1_ai_vlm_invoke + module: ai + title: POST /api/v1/ai/vlm/invoke + description: Generated from Gin route source + categories: + - ai + - gin + - generated + intents: + - ai.post_api_v1_ai_vlm_invoke + tool_scopes: + - ai.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/ai/routes.go + protocols: + - channel: rest + endpoint: /api/v1/ai/vlm/invoke + method: POST + schema_ref: internal/transport/http/openapi/ai/routes.go#source + auth_type: tenant_jwt + tool_scope: ai.api + - capability_id: com.corex.rest.auth.gin.get_api_v1_auth_me_context + module: auth + title: GET /api/v1/auth/me/context + description: Generated from Gin route source + categories: + - auth + - gin + - generated + intents: + - auth.get_api_v1_auth_me_context + tool_scopes: + - auth.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/user/auth/api.go + protocols: + - channel: rest + endpoint: /api/v1/auth/me/context + method: GET + schema_ref: internal/transport/http/admin/user/auth/api.go#source + auth_type: tenant_jwt + tool_scope: auth.api + - capability_id: com.corex.rest.capabilitykey.gin.get_api_v1_capabilitykey_version_policy + module: capabilitykey + title: GET /api/v1/:capabilityKey/version-policy + description: Generated from Gin route source + categories: + - capabilitykey + - gin + - generated + intents: + - capabilitykey.get_api_v1_capabilitykey_version_policy + tool_scopes: + - capabilitykey.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/capability/api.go + protocols: + - channel: rest + endpoint: /api/v1/:capabilityKey/version-policy + method: GET + schema_ref: internal/transport/http/admin/capability/api.go#source + auth_type: tenant_jwt + tool_scope: capabilitykey.api + - capability_id: com.corex.rest.capabilitykey.gin.get_api_v1_capabilitykey_versions_version + module: capabilitykey + title: GET /api/v1/:capabilityKey/versions/:version + description: Generated from Gin route source + categories: + - capabilitykey + - gin + - generated + intents: + - capabilitykey.get_api_v1_capabilitykey_versions_version + tool_scopes: + - capabilitykey.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/capability/api.go + protocols: + - channel: rest + endpoint: /api/v1/:capabilityKey/versions/:version + method: GET + schema_ref: internal/transport/http/admin/capability/api.go#source + auth_type: tenant_jwt + tool_scope: capabilitykey.api + - capability_id: com.corex.rest.capabilitykey.gin.get_api_v1_capabilitykey_versions_version_transports + module: capabilitykey + title: GET /api/v1/:capabilityKey/versions/:version/transports + description: Generated from Gin route source + categories: + - capabilitykey + - gin + - generated + intents: + - capabilitykey.get_api_v1_capabilitykey_versions_version_transports + tool_scopes: + - capabilitykey.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/capability/api.go + protocols: + - channel: rest + endpoint: /api/v1/:capabilityKey/versions/:version/transports + method: GET + schema_ref: internal/transport/http/admin/capability/api.go#source + auth_type: tenant_jwt + tool_scope: capabilitykey.api + - capability_id: com.corex.rest.capabilitykey.gin.post_api_v1_capabilitykey_versions_version_deprecate + module: capabilitykey + title: POST /api/v1/:capabilityKey/versions/:version/deprecate + description: Generated from Gin route source + categories: + - capabilitykey + - gin + - generated + intents: + - capabilitykey.post_api_v1_capabilitykey_versions_version_deprecate + tool_scopes: + - capabilitykey.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/capability/api.go + protocols: + - channel: rest + endpoint: /api/v1/:capabilityKey/versions/:version/deprecate + method: POST + schema_ref: internal/transport/http/admin/capability/api.go#source + auth_type: tenant_jwt + tool_scope: capabilitykey.api + - capability_id: com.corex.rest.capabilitykey.gin.post_api_v1_capabilitykey_versions_version_publish + module: capabilitykey + title: POST /api/v1/:capabilityKey/versions/:version/publish + description: Generated from Gin route source + categories: + - capabilitykey + - gin + - generated + intents: + - capabilitykey.post_api_v1_capabilitykey_versions_version_publish + tool_scopes: + - capabilitykey.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/capability/api.go + protocols: + - channel: rest + endpoint: /api/v1/:capabilityKey/versions/:version/publish + method: POST + schema_ref: internal/transport/http/admin/capability/api.go#source + auth_type: tenant_jwt + tool_scope: capabilitykey.api + - capability_id: com.corex.rest.capabilitykey.gin.post_api_v1_capabilitykey_versions_version_transports_transport_health + module: capabilitykey + title: POST /api/v1/:capabilityKey/versions/:version/transports/:transport/health + description: Generated from Gin route source + categories: + - capabilitykey + - gin + - generated + intents: + - capabilitykey.post_api_v1_capabilitykey_versions_version_transports_transport_health + tool_scopes: + - capabilitykey.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/capability/api.go + protocols: + - channel: rest + endpoint: /api/v1/:capabilityKey/versions/:version/transports/:transport/health + method: POST + schema_ref: internal/transport/http/admin/capability/api.go#source + auth_type: tenant_jwt + tool_scope: capabilitykey.api + - capability_id: com.corex.rest.capabilitykey.gin.put_api_v1_capabilitykey_version_policy + module: capabilitykey + title: PUT /api/v1/:capabilityKey/version-policy + description: Generated from Gin route source + categories: + - capabilitykey + - gin + - generated + intents: + - capabilitykey.put_api_v1_capabilitykey_version_policy + tool_scopes: + - capabilitykey.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/capability/api.go + protocols: + - channel: rest + endpoint: /api/v1/:capabilityKey/version-policy + method: PUT + schema_ref: internal/transport/http/admin/capability/api.go#source + auth_type: tenant_jwt + tool_scope: capabilitykey.api + - capability_id: com.corex.rest.capabilitykey.gin.put_api_v1_capabilitykey_versions_version + module: capabilitykey + title: PUT /api/v1/:capabilityKey/versions/:version + description: Generated from Gin route source + categories: + - capabilitykey + - gin + - generated + intents: + - capabilitykey.put_api_v1_capabilitykey_versions_version + tool_scopes: + - capabilitykey.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/capability/api.go + protocols: + - channel: rest + endpoint: /api/v1/:capabilityKey/versions/:version + method: PUT + schema_ref: internal/transport/http/admin/capability/api.go#source + auth_type: tenant_jwt + tool_scope: capabilitykey.api + - capability_id: com.corex.rest.capabilitykey.gin.put_api_v1_capabilitykey_versions_version_transports + module: capabilitykey + title: PUT /api/v1/:capabilityKey/versions/:version/transports + description: Generated from Gin route source + categories: + - capabilitykey + - gin + - generated + intents: + - capabilitykey.put_api_v1_capabilitykey_versions_version_transports + tool_scopes: + - capabilitykey.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/capability/api.go + protocols: + - channel: rest + endpoint: /api/v1/:capabilityKey/versions/:version/transports + method: PUT + schema_ref: internal/transport/http/admin/capability/api.go#source + auth_type: tenant_jwt + tool_scope: capabilitykey.api + - capability_id: com.corex.rest.connector_platforms.post_connector_platforms_platform_instances + module: connector_platforms + title: Register or update an external platform instance + description: Generated from OpenAPI + categories: + - connector_platforms + - openapi + - generated + intents: + - connector_platforms.post_connector_platforms_platform_instances + tool_scopes: + - connector_platforms.api + policy: + prefer: rest + docs: + - api/openapi/swagger.json + protocols: + - channel: rest + endpoint: /connector-platforms/{platform}/instances + method: POST + schema_ref: api/openapi/swagger.json#/paths/connector-platforms~1{platform}~1instances/post + auth_type: tenant_jwt + tool_scope: connector_platforms.api + - capability_id: com.corex.rest.connector_platforms.post_connector_platforms_platform_instances_instanceid_pause + module: connector_platforms + title: Pause a specific connector instance after errors + description: Generated from OpenAPI + categories: + - connector_platforms + - openapi + - generated + intents: + - connector_platforms.post_connector_platforms_platform_instances_instanceid_pause + tool_scopes: + - connector_platforms.api + policy: + prefer: rest + docs: + - api/openapi/swagger.json + protocols: + - channel: rest + endpoint: /connector-platforms/{platform}/instances/{instanceId}/pause + method: POST + schema_ref: api/openapi/swagger.json#/paths/connector-platforms~1{platform}~1instances~1{instanceId}~1pause/post + auth_type: tenant_jwt + tool_scope: connector_platforms.api + - capability_id: com.corex.rest.discovery.gin.get_api_v1_discovery_tenant_uuid_capabilityid + module: discovery + title: GET /api/v1/discovery/:tenant_uuid/:capabilityId + description: Generated from Gin route source + categories: + - discovery + - gin + - generated + intents: + - discovery.get_api_v1_discovery_tenant_uuid_capabilityid + tool_scopes: + - discovery.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/capability_registry/api.go + protocols: + - channel: rest + endpoint: /api/v1/discovery/:tenant_uuid/:capabilityId + method: GET + schema_ref: internal/transport/http/admin/capability_registry/api.go#source + auth_type: tenant_jwt + tool_scope: discovery.api + - capability_id: com.corex.rest.discovery.gin.post_api_v1_discovery_sync + module: discovery + title: POST /api/v1/discovery/sync + description: Generated from Gin route source + categories: + - discovery + - gin + - generated + intents: + - discovery.post_api_v1_discovery_sync + tool_scopes: + - discovery.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/capability_registry/api.go + protocols: + - channel: rest + endpoint: /api/v1/discovery/sync + method: POST + schema_ref: internal/transport/http/admin/capability_registry/api.go#source + auth_type: tenant_jwt + tool_scope: discovery.api + - capability_id: com.corex.rest.event_fabric.gin.delete_api_v1_event_fabric_dlq_messages + module: event_fabric + title: DELETE /api/v1/event-fabric/dlq/messages + description: Generated from Gin route source + categories: + - event_fabric + - gin + - generated + intents: + - event_fabric.delete_api_v1_event_fabric_dlq_messages + tool_scopes: + - event_fabric.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/event-fabric/dlq/messages + method: DELETE + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: event_fabric.api + - capability_id: com.corex.rest.event_fabric.gin.delete_api_v1_event_fabric_grant_templates_templateid + module: event_fabric + title: DELETE /api/v1/event-fabric/grant-templates/:templateId + description: Generated from Gin route source + categories: + - event_fabric + - gin + - generated + intents: + - event_fabric.delete_api_v1_event_fabric_grant_templates_templateid + tool_scopes: + - event_fabric.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/event-fabric/grant-templates/:templateId + method: DELETE + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: event_fabric.api + - capability_id: com.corex.rest.event_fabric.gin.get_api_v1_event_fabric_acl + module: event_fabric + title: GET /api/v1/event-fabric/acl + description: Generated from Gin route source + categories: + - event_fabric + - gin + - generated + intents: + - event_fabric.get_api_v1_event_fabric_acl + tool_scopes: + - event_fabric.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/event-fabric/acl + method: GET + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: event_fabric.api + - capability_id: com.corex.rest.event_fabric.gin.get_api_v1_event_fabric_audit_authorization + module: event_fabric + title: GET /api/v1/event-fabric/audit/authorization + description: Generated from Gin route source + categories: + - event_fabric + - gin + - generated + intents: + - event_fabric.get_api_v1_event_fabric_audit_authorization + tool_scopes: + - event_fabric.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/event-fabric/audit/authorization + method: GET + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: event_fabric.api + - capability_id: com.corex.rest.event_fabric.gin.get_api_v1_event_fabric_dlq_messages + module: event_fabric + title: GET /api/v1/event-fabric/dlq/messages + description: Generated from Gin route source + categories: + - event_fabric + - gin + - generated + intents: + - event_fabric.get_api_v1_event_fabric_dlq_messages + tool_scopes: + - event_fabric.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/event-fabric/dlq/messages + method: GET + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: event_fabric.api + - capability_id: com.corex.rest.event_fabric.gin.get_api_v1_event_fabric_grant_templates + module: event_fabric + title: GET /api/v1/event-fabric/grant-templates + description: Generated from Gin route source + categories: + - event_fabric + - gin + - generated + intents: + - event_fabric.get_api_v1_event_fabric_grant_templates + tool_scopes: + - event_fabric.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/event-fabric/grant-templates + method: GET + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: event_fabric.api + - capability_id: com.corex.rest.event_fabric.gin.get_api_v1_event_fabric_grants_grantid + module: event_fabric + title: GET /api/v1/event-fabric/grants/:grantId + description: Generated from Gin route source + categories: + - event_fabric + - gin + - generated + intents: + - event_fabric.get_api_v1_event_fabric_grants_grantid + tool_scopes: + - event_fabric.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/event-fabric/grants/:grantId + method: GET + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: event_fabric.api + - capability_id: com.corex.rest.event_fabric.gin.get_api_v1_event_fabric_overview + module: event_fabric + title: GET /api/v1/event-fabric/overview + description: Generated from Gin route source + categories: + - event_fabric + - gin + - generated + intents: + - event_fabric.get_api_v1_event_fabric_overview + tool_scopes: + - event_fabric.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/event-fabric/overview + method: GET + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: event_fabric.api + - capability_id: com.corex.rest.event_fabric.gin.get_api_v1_event_fabric_replay_tasks_task_id + module: event_fabric + title: GET /api/v1/event-fabric/replay/tasks/:task_id + description: Generated from Gin route source + categories: + - event_fabric + - gin + - generated + intents: + - event_fabric.get_api_v1_event_fabric_replay_tasks_task_id + tool_scopes: + - event_fabric.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/event-fabric/replay/tasks/:task_id + method: GET + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: event_fabric.api + - capability_id: com.corex.rest.event_fabric.gin.get_api_v1_event_fabric_topics + module: event_fabric + title: GET /api/v1/event-fabric/topics + description: Generated from Gin route source + categories: + - event_fabric + - gin + - generated + intents: + - event_fabric.get_api_v1_event_fabric_topics + tool_scopes: + - event_fabric.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/event-fabric/topics + method: GET + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: event_fabric.api + - capability_id: com.corex.rest.event_fabric.gin.patch_api_v1_event_fabric_capabilities_capabilityid + module: event_fabric + title: PATCH /api/v1/event-fabric/capabilities/:capabilityId + description: Generated from Gin route source + categories: + - event_fabric + - gin + - generated + intents: + - event_fabric.patch_api_v1_event_fabric_capabilities_capabilityid + tool_scopes: + - event_fabric.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/event-fabric/capabilities/:capabilityId + method: PATCH + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: event_fabric.api + - capability_id: com.corex.rest.event_fabric.gin.patch_api_v1_event_fabric_grant_templates_templateid + module: event_fabric + title: PATCH /api/v1/event-fabric/grant-templates/:templateId + description: Generated from Gin route source + categories: + - event_fabric + - gin + - generated + intents: + - event_fabric.patch_api_v1_event_fabric_grant_templates_templateid + tool_scopes: + - event_fabric.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/event-fabric/grant-templates/:templateId + method: PATCH + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: event_fabric.api + - capability_id: com.corex.rest.event_fabric.gin.patch_api_v1_event_fabric_grants_grantid + module: event_fabric + title: PATCH /api/v1/event-fabric/grants/:grantId + description: Generated from Gin route source + categories: + - event_fabric + - gin + - generated + intents: + - event_fabric.patch_api_v1_event_fabric_grants_grantid + tool_scopes: + - event_fabric.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/event-fabric/grants/:grantId + method: PATCH + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: event_fabric.api + - capability_id: com.corex.rest.event_fabric.gin.patch_api_v1_event_fabric_topics_topic_id_lifecycle + module: event_fabric + title: PATCH /api/v1/event-fabric/topics/:topic_id/lifecycle + description: Generated from Gin route source + categories: + - event_fabric + - gin + - generated + intents: + - event_fabric.patch_api_v1_event_fabric_topics_topic_id_lifecycle + tool_scopes: + - event_fabric.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/event-fabric/topics/:topic_id/lifecycle + method: PATCH + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: event_fabric.api + - capability_id: com.corex.rest.event_fabric.gin.post_api_v1_event_fabric_acl + module: event_fabric + title: POST /api/v1/event-fabric/acl + description: Generated from Gin route source + categories: + - event_fabric + - gin + - generated + intents: + - event_fabric.post_api_v1_event_fabric_acl + tool_scopes: + - event_fabric.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/event-fabric/acl + method: POST + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: event_fabric.api + - capability_id: com.corex.rest.event_fabric.gin.post_api_v1_event_fabric_capabilities + module: event_fabric + title: POST /api/v1/event-fabric/capabilities + description: Generated from Gin route source + categories: + - event_fabric + - gin + - generated + intents: + - event_fabric.post_api_v1_event_fabric_capabilities + tool_scopes: + - event_fabric.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/event-fabric/capabilities + method: POST + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: event_fabric.api + - capability_id: com.corex.rest.event_fabric.gin.post_api_v1_event_fabric_challenges_ticketid_decision + module: event_fabric + title: POST /api/v1/event-fabric/challenges/:ticketId/decision + description: Generated from Gin route source + categories: + - event_fabric + - gin + - generated + intents: + - event_fabric.post_api_v1_event_fabric_challenges_ticketid_decision + tool_scopes: + - event_fabric.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/event-fabric/challenges/:ticketId/decision + method: POST + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: event_fabric.api + - capability_id: com.corex.rest.event_fabric.gin.post_api_v1_event_fabric_dlq_messages_replay + module: event_fabric + title: POST /api/v1/event-fabric/dlq/messages:replay + description: Generated from Gin route source + categories: + - event_fabric + - gin + - generated + intents: + - event_fabric.post_api_v1_event_fabric_dlq_messages_replay + tool_scopes: + - event_fabric.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/event-fabric/dlq/messages:replay + method: POST + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: event_fabric.api + - capability_id: com.corex.rest.event_fabric.gin.post_api_v1_event_fabric_events_publish + module: event_fabric + title: POST /api/v1/event-fabric/events:publish + description: Generated from Gin route source + categories: + - event_fabric + - gin + - generated + intents: + - event_fabric.post_api_v1_event_fabric_events_publish + tool_scopes: + - event_fabric.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/event-fabric/events:publish + method: POST + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: event_fabric.api + - capability_id: com.corex.rest.event_fabric.gin.post_api_v1_event_fabric_grant_templates + module: event_fabric + title: POST /api/v1/event-fabric/grant-templates + description: Generated from Gin route source + categories: + - event_fabric + - gin + - generated + intents: + - event_fabric.post_api_v1_event_fabric_grant_templates + tool_scopes: + - event_fabric.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/event-fabric/grant-templates + method: POST + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: event_fabric.api + - capability_id: com.corex.rest.event_fabric.gin.post_api_v1_event_fabric_grant_templates_templateid_apply + module: event_fabric + title: POST /api/v1/event-fabric/grant-templates/:templateId/apply + description: Generated from Gin route source + categories: + - event_fabric + - gin + - generated + intents: + - event_fabric.post_api_v1_event_fabric_grant_templates_templateid_apply + tool_scopes: + - event_fabric.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/event-fabric/grant-templates/:templateId/apply + method: POST + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: event_fabric.api + - capability_id: com.corex.rest.event_fabric.gin.post_api_v1_event_fabric_grants + module: event_fabric + title: POST /api/v1/event-fabric/grants + description: Generated from Gin route source + categories: + - event_fabric + - gin + - generated + intents: + - event_fabric.post_api_v1_event_fabric_grants + tool_scopes: + - event_fabric.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/event-fabric/grants + method: POST + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: event_fabric.api + - capability_id: com.corex.rest.event_fabric.gin.post_api_v1_event_fabric_grants_cache_invalidate + module: event_fabric + title: POST /api/v1/event-fabric/grants/cache:invalidate + description: Generated from Gin route source + categories: + - event_fabric + - gin + - generated + intents: + - event_fabric.post_api_v1_event_fabric_grants_cache_invalidate + tool_scopes: + - event_fabric.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/event-fabric/grants/cache:invalidate + method: POST + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: event_fabric.api + - capability_id: com.corex.rest.event_fabric.gin.post_api_v1_event_fabric_grants_grantid_revoke + module: event_fabric + title: POST /api/v1/event-fabric/grants/:grantId/revoke + description: Generated from Gin route source + categories: + - event_fabric + - gin + - generated + intents: + - event_fabric.post_api_v1_event_fabric_grants_grantid_revoke + tool_scopes: + - event_fabric.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/event-fabric/grants/:grantId/revoke + method: POST + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: event_fabric.api + - capability_id: com.corex.rest.event_fabric.gin.post_api_v1_event_fabric_replay_tasks + module: event_fabric + title: POST /api/v1/event-fabric/replay/tasks + description: Generated from Gin route source + categories: + - event_fabric + - gin + - generated + intents: + - event_fabric.post_api_v1_event_fabric_replay_tasks + tool_scopes: + - event_fabric.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/event-fabric/replay/tasks + method: POST + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: event_fabric.api + - capability_id: com.corex.rest.event_fabric.gin.post_api_v1_event_fabric_replay_tasks_task_id_cancel + module: event_fabric + title: POST /api/v1/event-fabric/replay/tasks/:task_id/cancel + description: Generated from Gin route source + categories: + - event_fabric + - gin + - generated + intents: + - event_fabric.post_api_v1_event_fabric_replay_tasks_task_id_cancel + tool_scopes: + - event_fabric.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/event-fabric/replay/tasks/:task_id/cancel + method: POST + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: event_fabric.api + - capability_id: com.corex.rest.event_fabric.gin.post_api_v1_event_fabric_topics + module: event_fabric + title: POST /api/v1/event-fabric/topics + description: Generated from Gin route source + categories: + - event_fabric + - gin + - generated + intents: + - event_fabric.post_api_v1_event_fabric_topics + tool_scopes: + - event_fabric.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/event_fabric/routes.go + protocols: + - channel: rest + endpoint: /api/v1/event-fabric/topics + method: POST + schema_ref: internal/transport/http/admin/event_fabric/routes.go#source + auth_type: tenant_jwt + tool_scope: event_fabric.api + - capability_id: com.corex.rest.health.gin.get_api_v1_health + module: health + title: GET /api/v1/health + description: Generated from Gin route source + categories: + - health + - gin + - generated + intents: + - health.get_api_v1_health + tool_scopes: + - health.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/routes.go + protocols: + - channel: rest + endpoint: /api/v1/health + method: GET + schema_ref: internal/transport/http/admin/routes.go#source + auth_type: tenant_jwt + tool_scope: health.api + - capability_id: com.corex.rest.index.gin.get_api_v1_index_versions + module: index + title: GET /api/v1/index/versions + description: Generated from Gin route source + categories: + - index + - gin + - generated + intents: + - index.get_api_v1_index_versions + tool_scopes: + - index.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/profile_handlers.go + protocols: + - channel: rest + endpoint: /api/v1/index/versions + method: GET + schema_ref: internal/transport/http/admin/knowledge_space/profile_handlers.go#source + auth_type: tenant_jwt + tool_scope: index.api + - capability_id: com.corex.rest.index.gin.post_api_v1_index_versions + module: index + title: POST /api/v1/index/versions + description: Generated from Gin route source + categories: + - index + - gin + - generated + intents: + - index.post_api_v1_index_versions + tool_scopes: + - index.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/profile_handlers.go + protocols: + - channel: rest + endpoint: /api/v1/index/versions + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/profile_handlers.go#source + auth_type: tenant_jwt + tool_scope: index.api + - capability_id: com.corex.rest.index.gin.post_api_v1_index_versions_uuid_publish + module: index + title: POST /api/v1/index/versions/:uuid/publish + description: Generated from Gin route source + categories: + - index + - gin + - generated + intents: + - index.post_api_v1_index_versions_uuid_publish + tool_scopes: + - index.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/profile_handlers.go + protocols: + - channel: rest + endpoint: /api/v1/index/versions/:uuid/publish + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/profile_handlers.go#source + auth_type: tenant_jwt + tool_scope: index.api + - capability_id: com.corex.rest.index.gin.post_api_v1_index_versions_uuid_rollback + module: index + title: POST /api/v1/index/versions/:uuid/rollback + description: Generated from Gin route source + categories: + - index + - gin + - generated + intents: + - index.post_api_v1_index_versions_uuid_rollback + tool_scopes: + - index.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/profile_handlers.go + protocols: + - channel: rest + endpoint: /api/v1/index/versions/:uuid/rollback + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/profile_handlers.go#source + auth_type: tenant_jwt + tool_scope: index.api + - capability_id: com.corex.rest.ingestion.gin.get_api_v1_ingestion_versions + module: ingestion + title: GET /api/v1/ingestion/versions + description: Generated from Gin route source + categories: + - ingestion + - gin + - generated + intents: + - ingestion.get_api_v1_ingestion_versions + tool_scopes: + - ingestion.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/profile_handlers.go + protocols: + - channel: rest + endpoint: /api/v1/ingestion/versions + method: GET + schema_ref: internal/transport/http/admin/knowledge_space/profile_handlers.go#source + auth_type: tenant_jwt + tool_scope: ingestion.api + - capability_id: com.corex.rest.ingestion.gin.post_api_v1_ingestion_versions + module: ingestion + title: POST /api/v1/ingestion/versions + description: Generated from Gin route source + categories: + - ingestion + - gin + - generated + intents: + - ingestion.post_api_v1_ingestion_versions + tool_scopes: + - ingestion.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/profile_handlers.go + protocols: + - channel: rest + endpoint: /api/v1/ingestion/versions + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/profile_handlers.go#source + auth_type: tenant_jwt + tool_scope: ingestion.api + - capability_id: com.corex.rest.ingestion.gin.post_api_v1_ingestion_versions_uuid_publish + module: ingestion + title: POST /api/v1/ingestion/versions/:uuid/publish + description: Generated from Gin route source + categories: + - ingestion + - gin + - generated + intents: + - ingestion.post_api_v1_ingestion_versions_uuid_publish + tool_scopes: + - ingestion.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/profile_handlers.go + protocols: + - channel: rest + endpoint: /api/v1/ingestion/versions/:uuid/publish + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/profile_handlers.go#source + auth_type: tenant_jwt + tool_scope: ingestion.api + - capability_id: com.corex.rest.ingestion.gin.post_api_v1_ingestion_versions_uuid_rollback + module: ingestion + title: POST /api/v1/ingestion/versions/:uuid/rollback + description: Generated from Gin route source + categories: + - ingestion + - gin + - generated + intents: + - ingestion.post_api_v1_ingestion_versions_uuid_rollback + tool_scopes: + - ingestion.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/profile_handlers.go + protocols: + - channel: rest + endpoint: /api/v1/ingestion/versions/:uuid/rollback + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/profile_handlers.go#source + auth_type: tenant_jwt + tool_scope: ingestion.api + - capability_id: com.corex.rest.internal.gin.delete_api_v1_internal_dev_plugins_register_sessionid + module: internal + title: DELETE /api/v1/internal/dev/plugins/register/:sessionId + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.delete_api_v1_internal_dev_plugins_register_sessionid + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/dev_hotload/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/dev/plugins/register/:sessionId + method: DELETE + schema_ref: internal/transport/http/admin/dev_hotload/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.delete_api_v1_internal_dev_plugins_sessions + module: internal + title: DELETE /api/v1/internal/dev/plugins/sessions + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.delete_api_v1_internal_dev_plugins_sessions + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/dev_hotload/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/dev/plugins/sessions + method: DELETE + schema_ref: internal/transport/http/admin/dev_hotload/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.delete_api_v1_internal_dev_plugins_sessions_sessionid + module: internal + title: DELETE /api/v1/internal/dev/plugins/sessions/:sessionId + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.delete_api_v1_internal_dev_plugins_sessions_sessionid + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/dev_hotload/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/dev/plugins/sessions/:sessionId + method: DELETE + schema_ref: internal/transport/http/admin/dev_hotload/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.delete_api_v1_internal_plugins_releases_candidateid + module: internal + title: DELETE /api/v1/internal/plugins/releases/:candidateId + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.delete_api_v1_internal_plugins_releases_candidateid + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin_release/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/plugins/releases/:candidateId + method: DELETE + schema_ref: internal/transport/http/admin/plugin_release/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.get_api_v1_internal_dev_plugins_sessionid + module: internal + title: GET /api/v1/internal/dev/plugins/:sessionId + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.get_api_v1_internal_dev_plugins_sessionid + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/dev_hotload/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/dev/plugins/:sessionId + method: GET + schema_ref: internal/transport/http/admin/dev_hotload/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.get_api_v1_internal_dev_plugins_sessions + module: internal + title: GET /api/v1/internal/dev/plugins/sessions + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.get_api_v1_internal_dev_plugins_sessions + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/dev_hotload/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/dev/plugins/sessions + method: GET + schema_ref: internal/transport/http/admin/dev_hotload/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.get_api_v1_internal_dev_plugins_sessions_sessionid + module: internal + title: GET /api/v1/internal/dev/plugins/sessions/:sessionId + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.get_api_v1_internal_dev_plugins_sessions_sessionid + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/dev_hotload/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/dev/plugins/sessions/:sessionId + method: GET + schema_ref: internal/transport/http/admin/dev_hotload/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.get_api_v1_internal_dev_plugins_stream + module: internal + title: GET /api/v1/internal/dev/plugins/stream + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.get_api_v1_internal_dev_plugins_stream + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/dev_hotload/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/dev/plugins/stream + method: GET + schema_ref: internal/transport/http/admin/dev_hotload/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.get_api_v1_internal_plugins_import_id + module: internal + title: GET /api/v1/internal/plugins/import/:id + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.get_api_v1_internal_plugins_import_id + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin_dev/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/plugins/import/:id + method: GET + schema_ref: internal/transport/http/admin/plugin_dev/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.get_api_v1_internal_plugins_releases + module: internal + title: GET /api/v1/internal/plugins/releases + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.get_api_v1_internal_plugins_releases + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin_release/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/plugins/releases + method: GET + schema_ref: internal/transport/http/admin/plugin_release/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.get_api_v1_internal_plugins_releases_candidateid + module: internal + title: GET /api/v1/internal/plugins/releases/:candidateId + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.get_api_v1_internal_plugins_releases_candidateid + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin_release/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/plugins/releases/:candidateId + method: GET + schema_ref: internal/transport/http/admin/plugin_release/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.get_api_v1_internal_plugins_templates + module: internal + title: GET /api/v1/internal/plugins/templates + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.get_api_v1_internal_plugins_templates + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin_dev/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/plugins/templates + method: GET + schema_ref: internal/transport/http/admin/plugin_dev/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.get_api_v1_internal_provider_quotas + module: internal + title: GET /api/v1/internal/provider-quotas + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.get_api_v1_internal_provider_quotas + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent_model_hub/api.go + protocols: + - channel: rest + endpoint: /api/v1/internal/provider-quotas + method: GET + schema_ref: internal/transport/http/admin/agent_model_hub/api.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.get_api_v1_internal_version_governance_board + module: internal + title: GET /api/v1/internal/version/governance/board + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.get_api_v1_internal_version_governance_board + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/version/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/version/governance/board + method: GET + schema_ref: internal/transport/http/admin/version/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.patch_api_v1_internal_plugins_releases_candidateid + module: internal + title: PATCH /api/v1/internal/plugins/releases/:candidateId + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.patch_api_v1_internal_plugins_releases_candidateid + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin_release/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/plugins/releases/:candidateId + method: PATCH + schema_ref: internal/transport/http/admin/plugin_release/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_connector_platforms_platform_instances + module: internal + title: POST /api/v1/internal/connector-platforms/:platform/instances + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_connector_platforms_platform_instances + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent_model_hub/api.go + protocols: + - channel: rest + endpoint: /api/v1/internal/connector-platforms/:platform/instances + method: POST + schema_ref: internal/transport/http/admin/agent_model_hub/api.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_connector_platforms_platform_instances_instanceid_pause + module: internal + title: POST /api/v1/internal/connector-platforms/:platform/instances/:instanceId/pause + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_connector_platforms_platform_instances_instanceid_pause + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent_model_hub/api.go + protocols: + - channel: rest + endpoint: /api/v1/internal/connector-platforms/:platform/instances/:instanceId/pause + method: POST + schema_ref: internal/transport/http/admin/agent_model_hub/api.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_dev_plugins_register + module: internal + title: POST /api/v1/internal/dev/plugins/register + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_dev_plugins_register + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/dev_hotload/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/dev/plugins/register + method: POST + schema_ref: internal/transport/http/admin/dev_hotload/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_dev_plugins_reload + module: internal + title: POST /api/v1/internal/dev/plugins/reload + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_dev_plugins_reload + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/dev_hotload/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/dev/plugins/reload + method: POST + schema_ref: internal/transport/http/admin/dev_hotload/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_model_routing_policies + module: internal + title: POST /api/v1/internal/model-routing/policies + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_model_routing_policies + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent_model_hub/api.go + protocols: + - channel: rest + endpoint: /api/v1/internal/model-routing/policies + method: POST + schema_ref: internal/transport/http/admin/agent_model_hub/api.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_model_routing_policies_status + module: internal + title: POST /api/v1/internal/model-routing/policies/status + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_model_routing_policies_status + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent_model_hub/api.go + protocols: + - channel: rest + endpoint: /api/v1/internal/model-routing/policies/status + method: POST + schema_ref: internal/transport/http/admin/agent_model_hub/api.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_model_routing_rollback + module: internal + title: POST /api/v1/internal/model-routing/rollback + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_model_routing_rollback + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent_model_hub/api.go + protocols: + - channel: rest + endpoint: /api/v1/internal/model-routing/rollback + method: POST + schema_ref: internal/transport/http/admin/agent_model_hub/api.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_model_routing_route + module: internal + title: POST /api/v1/internal/model-routing/route + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_model_routing_route + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent_model_hub/api.go + protocols: + - channel: rest + endpoint: /api/v1/internal/model-routing/route + method: POST + schema_ref: internal/transport/http/admin/agent_model_hub/api.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_model_routing_safe_mode + module: internal + title: POST /api/v1/internal/model-routing/safe-mode + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_model_routing_safe_mode + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent_model_hub/api.go + protocols: + - channel: rest + endpoint: /api/v1/internal/model-routing/safe-mode + method: POST + schema_ref: internal/transport/http/admin/agent_model_hub/api.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_plugins_bootstrap_validate + module: internal + title: POST /api/v1/internal/plugins/bootstrap/validate + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_plugins_bootstrap_validate + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin_dev/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/plugins/bootstrap/validate + method: POST + schema_ref: internal/transport/http/admin/plugin_dev/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_plugins_debug_logs_export + module: internal + title: POST /api/v1/internal/plugins/debug/logs/export + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_plugins_debug_logs_export + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin_dev/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/plugins/debug/logs/export + method: POST + schema_ref: internal/transport/http/admin/plugin_dev/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_plugins_debug_report + module: internal + title: POST /api/v1/internal/plugins/debug/report + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_plugins_debug_report + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin_dev/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/plugins/debug/report + method: POST + schema_ref: internal/transport/http/admin/plugin_dev/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_plugins_environments_check + module: internal + title: POST /api/v1/internal/plugins/environments/check + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_plugins_environments_check + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin_dev/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/plugins/environments/check + method: POST + schema_ref: internal/transport/http/admin/plugin_dev/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_plugins_host_mock + module: internal + title: POST /api/v1/internal/plugins/host/mock + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_plugins_host_mock + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin_dev/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/plugins/host/mock + method: POST + schema_ref: internal/transport/http/admin/plugin_dev/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_plugins_import + module: internal + title: POST /api/v1/internal/plugins/import + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_plugins_import + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin_dev/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/plugins/import + method: POST + schema_ref: internal/transport/http/admin/plugin_dev/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_plugins_local_install + module: internal + title: POST /api/v1/internal/plugins/local/install + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_plugins_local_install + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin_dev/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/plugins/local/install + method: POST + schema_ref: internal/transport/http/admin/plugin_dev/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_plugins_local_reload + module: internal + title: POST /api/v1/internal/plugins/local/reload + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_plugins_local_reload + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin_dev/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/plugins/local/reload + method: POST + schema_ref: internal/transport/http/admin/plugin_dev/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_plugins_releases + module: internal + title: POST /api/v1/internal/plugins/releases + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_plugins_releases + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin_release/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/plugins/releases + method: POST + schema_ref: internal/transport/http/admin/plugin_release/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_plugins_releases_candidateid_artifacts + module: internal + title: POST /api/v1/internal/plugins/releases/:candidateId/artifacts + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_plugins_releases_candidateid_artifacts + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin_release/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/plugins/releases/:candidateId/artifacts + method: POST + schema_ref: internal/transport/http/admin/plugin_release/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_provider_quotas_enforce + module: internal + title: POST /api/v1/internal/provider-quotas/enforce + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_provider_quotas_enforce + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent_model_hub/api.go + protocols: + - channel: rest + endpoint: /api/v1/internal/provider-quotas/enforce + method: POST + schema_ref: internal/transport/http/admin/agent_model_hub/api.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_provider_usage_report + module: internal + title: POST /api/v1/internal/provider-usage/report + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_provider_usage_report + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent_model_hub/api.go + protocols: + - channel: rest + endpoint: /api/v1/internal/provider-usage/report + method: POST + schema_ref: internal/transport/http/admin/agent_model_hub/api.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_providers_providerid_publish + module: internal + title: POST /api/v1/internal/providers/:providerId/publish + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_providers_providerid_publish + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent_model_hub/api.go + protocols: + - channel: rest + endpoint: /api/v1/internal/providers/:providerId/publish + method: POST + schema_ref: internal/transport/http/admin/agent_model_hub/api.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_providers_providerid_rollback + module: internal + title: POST /api/v1/internal/providers/:providerId/rollback + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_providers_providerid_rollback + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent_model_hub/api.go + protocols: + - channel: rest + endpoint: /api/v1/internal/providers/:providerId/rollback + method: POST + schema_ref: internal/transport/http/admin/agent_model_hub/api.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_providers_providerid_rollout + module: internal + title: POST /api/v1/internal/providers/:providerId/rollout + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_providers_providerid_rollout + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent_model_hub/api.go + protocols: + - channel: rest + endpoint: /api/v1/internal/providers/:providerId/rollout + method: POST + schema_ref: internal/transport/http/admin/agent_model_hub/api.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_providers_providerid_validate + module: internal + title: POST /api/v1/internal/providers/:providerId/validate + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_providers_providerid_validate + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent_model_hub/api.go + protocols: + - channel: rest + endpoint: /api/v1/internal/providers/:providerId/validate + method: POST + schema_ref: internal/transport/http/admin/agent_model_hub/api.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_providers_register + module: internal + title: POST /api/v1/internal/providers/register + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_providers_register + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/agent_model_hub/api.go + protocols: + - channel: rest + endpoint: /api/v1/internal/providers/register + method: POST + schema_ref: internal/transport/http/admin/agent_model_hub/api.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_sandbox_dataset_load + module: internal + title: POST /api/v1/internal/sandbox/dataset/load + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_sandbox_dataset_load + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin_sandbox/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/sandbox/dataset/load + method: POST + schema_ref: internal/transport/http/admin/plugin_sandbox/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_sandbox_deploy + module: internal + title: POST /api/v1/internal/sandbox/deploy + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_sandbox_deploy + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin_sandbox/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/sandbox/deploy + method: POST + schema_ref: internal/transport/http/admin/plugin_sandbox/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_sandbox_test_run + module: internal + title: POST /api/v1/internal/sandbox/test/run + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_sandbox_test_run + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin_sandbox/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/sandbox/test/run + method: POST + schema_ref: internal/transport/http/admin/plugin_sandbox/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_version_compat_approve + module: internal + title: POST /api/v1/internal/version/compat/approve + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_version_compat_approve + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/version/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/version/compat/approve + method: POST + schema_ref: internal/transport/http/admin/version/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_version_compat_check + module: internal + title: POST /api/v1/internal/version/compat/check + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_version_compat_check + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/version/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/version/compat/check + method: POST + schema_ref: internal/transport/http/admin/version/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_version_compat_exception + module: internal + title: POST /api/v1/internal/version/compat/exception + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_version_compat_exception + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/version/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/version/compat/exception + method: POST + schema_ref: internal/transport/http/admin/version/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_version_governance_scan + module: internal + title: POST /api/v1/internal/version/governance/scan + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_version_governance_scan + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/version/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/version/governance/scan + method: POST + schema_ref: internal/transport/http/admin/version/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_ws_bus_grant + module: internal + title: POST /api/v1/internal/ws-bus/grant + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_ws_bus_grant + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/runtime/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/ws-bus/grant + method: POST + schema_ref: internal/transport/http/admin/runtime/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.internal.gin.post_api_v1_internal_ws_bus_publish + module: internal + title: POST /api/v1/internal/ws-bus/publish + description: Generated from Gin route source + categories: + - internal + - gin + - generated + intents: + - internal.post_api_v1_internal_ws_bus_publish + tool_scopes: + - internal.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/runtime/routes.go + protocols: + - channel: rest + endpoint: /api/v1/internal/ws-bus/publish + method: POST + schema_ref: internal/transport/http/admin/runtime/routes.go#source + auth_type: tenant_jwt + tool_scope: internal.api + - capability_id: com.corex.rest.knowledge.gin.get_api_v1_knowledge_decay_status + module: knowledge + title: GET /api/v1/knowledge/decay/status + description: Generated from Gin route source + categories: + - knowledge + - gin + - generated + intents: + - knowledge.get_api_v1_knowledge_decay_status + tool_scopes: + - knowledge.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/knowledge/decay/status + method: GET + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: knowledge.api + - capability_id: com.corex.rest.knowledge.gin.get_api_v1_knowledge_delta_reports_jobid + module: knowledge + title: GET /api/v1/knowledge/delta/reports/:jobId + description: Generated from Gin route source + categories: + - knowledge + - gin + - generated + intents: + - knowledge.get_api_v1_knowledge_delta_reports_jobid + tool_scopes: + - knowledge.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/knowledge/delta/reports/:jobId + method: GET + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: knowledge.api + - capability_id: com.corex.rest.knowledge.gin.get_api_v1_knowledge_release_policies + module: knowledge + title: GET /api/v1/knowledge/release/policies + description: Generated from Gin route source + categories: + - knowledge + - gin + - generated + intents: + - knowledge.get_api_v1_knowledge_release_policies + tool_scopes: + - knowledge.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/knowledge/release/policies + method: GET + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: knowledge.api + - capability_id: com.corex.rest.knowledge.gin.get_api_v1_knowledge_release_status + module: knowledge + title: GET /api/v1/knowledge/release/status + description: Generated from Gin route source + categories: + - knowledge + - gin + - generated + intents: + - knowledge.get_api_v1_knowledge_release_status + tool_scopes: + - knowledge.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/knowledge/release/status + method: GET + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: knowledge.api + - capability_id: com.corex.rest.knowledge.gin.post_api_v1_knowledge_decay_restore + module: knowledge + title: POST /api/v1/knowledge/decay/restore + description: Generated from Gin route source + categories: + - knowledge + - gin + - generated + intents: + - knowledge.post_api_v1_knowledge_decay_restore + tool_scopes: + - knowledge.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/knowledge/decay/restore + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: knowledge.api + - capability_id: com.corex.rest.knowledge.gin.post_api_v1_knowledge_decay_tasks + module: knowledge + title: POST /api/v1/knowledge/decay/tasks + description: Generated from Gin route source + categories: + - knowledge + - gin + - generated + intents: + - knowledge.post_api_v1_knowledge_decay_tasks + tool_scopes: + - knowledge.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/knowledge/decay/tasks + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: knowledge.api + - capability_id: com.corex.rest.knowledge.gin.post_api_v1_knowledge_delta_jobs + module: knowledge + title: POST /api/v1/knowledge/delta/jobs + description: Generated from Gin route source + categories: + - knowledge + - gin + - generated + intents: + - knowledge.post_api_v1_knowledge_delta_jobs + tool_scopes: + - knowledge.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/knowledge/delta/jobs + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: knowledge.api + - capability_id: com.corex.rest.knowledge.gin.post_api_v1_knowledge_delta_publish + module: knowledge + title: POST /api/v1/knowledge/delta/publish + description: Generated from Gin route source + categories: + - knowledge + - gin + - generated + intents: + - knowledge.post_api_v1_knowledge_delta_publish + tool_scopes: + - knowledge.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/knowledge/delta/publish + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: knowledge.api + - capability_id: com.corex.rest.knowledge.gin.post_api_v1_knowledge_events_apply + module: knowledge + title: POST /api/v1/knowledge/events/apply + description: Generated from Gin route source + categories: + - knowledge + - gin + - generated + intents: + - knowledge.post_api_v1_knowledge_events_apply + tool_scopes: + - knowledge.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/knowledge/events/apply + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: knowledge.api + - capability_id: com.corex.rest.knowledge.gin.post_api_v1_knowledge_events_retry + module: knowledge + title: POST /api/v1/knowledge/events/retry + description: Generated from Gin route source + categories: + - knowledge + - gin + - generated + intents: + - knowledge.post_api_v1_knowledge_events_retry + tool_scopes: + - knowledge.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/knowledge/events/retry + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: knowledge.api + - capability_id: com.corex.rest.knowledge.gin.post_api_v1_knowledge_index_hot_update + module: knowledge + title: POST /api/v1/knowledge/index/hot-update + description: Generated from Gin route source + categories: + - knowledge + - gin + - generated + intents: + - knowledge.post_api_v1_knowledge_index_hot_update + tool_scopes: + - knowledge.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/knowledge/index/hot-update + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: knowledge.api + - capability_id: com.corex.rest.knowledge.gin.post_api_v1_knowledge_release_policies + module: knowledge + title: POST /api/v1/knowledge/release/policies + description: Generated from Gin route source + categories: + - knowledge + - gin + - generated + intents: + - knowledge.post_api_v1_knowledge_release_policies + tool_scopes: + - knowledge.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/knowledge/release/policies + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: knowledge.api + - capability_id: com.corex.rest.knowledge.gin.post_api_v1_knowledge_release_promote + module: knowledge + title: POST /api/v1/knowledge/release/promote + description: Generated from Gin route source + categories: + - knowledge + - gin + - generated + intents: + - knowledge.post_api_v1_knowledge_release_promote + tool_scopes: + - knowledge.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/knowledge/release/promote + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: knowledge.api + - capability_id: com.corex.rest.knowledge.gin.post_api_v1_knowledge_release_publish + module: knowledge + title: POST /api/v1/knowledge/release/publish + description: Generated from Gin route source + categories: + - knowledge + - gin + - generated + intents: + - knowledge.post_api_v1_knowledge_release_publish + tool_scopes: + - knowledge.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/knowledge/release/publish + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: knowledge.api + - capability_id: com.corex.rest.knowledge.gin.post_api_v1_knowledge_release_rollback + module: knowledge + title: POST /api/v1/knowledge/release/rollback + description: Generated from Gin route source + categories: + - knowledge + - gin + - generated + intents: + - knowledge.post_api_v1_knowledge_release_rollback + tool_scopes: + - knowledge.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/knowledge/release/rollback + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: knowledge.api + - capability_id: com.corex.rest.knowledge.gin.post_api_v1_knowledge_version_rollback + module: knowledge + title: POST /api/v1/knowledge/version/rollback + description: Generated from Gin route source + categories: + - knowledge + - gin + - generated + intents: + - knowledge.post_api_v1_knowledge_version_rollback + tool_scopes: + - knowledge.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/handlers.go + protocols: + - channel: rest + endpoint: /api/v1/knowledge/version/rollback + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/handlers.go#source + auth_type: tenant_jwt + tool_scope: knowledge.api + - capability_id: com.corex.rest.media.gin.delete_api_v1_media_assets_uuid + module: media + title: DELETE /api/v1/media/assets/:uuid + description: Generated from Gin route source + categories: + - media + - gin + - generated + intents: + - media.delete_api_v1_media_assets_uuid + tool_scopes: + - media.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/media/router.go + protocols: + - channel: rest + endpoint: /api/v1/media/assets/:uuid + method: DELETE + schema_ref: internal/transport/http/openapi/media/router.go#source + auth_type: tenant_jwt + tool_scope: media.api + - capability_id: com.corex.rest.media.gin.get_api_v1_media_assets_uuid + module: media + title: GET /api/v1/media/assets/:uuid + description: Generated from Gin route source + categories: + - media + - gin + - generated + intents: + - media.get_api_v1_media_assets_uuid + tool_scopes: + - media.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/media/router.go + protocols: + - channel: rest + endpoint: /api/v1/media/assets/:uuid + method: GET + schema_ref: internal/transport/http/openapi/media/router.go#source + auth_type: tenant_jwt + tool_scope: media.api + - capability_id: com.corex.rest.media.gin.get_api_v1_media_assets_uuid_resource + module: media + title: GET /api/v1/media/assets/:uuid/resource + description: Generated from Gin route source + categories: + - media + - gin + - generated + intents: + - media.get_api_v1_media_assets_uuid_resource + tool_scopes: + - media.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/media/router.go + protocols: + - channel: rest + endpoint: /api/v1/media/assets/:uuid/resource + method: GET + schema_ref: internal/transport/http/openapi/media/router.go#source + auth_type: tenant_jwt + tool_scope: media.api + - capability_id: com.corex.rest.media.gin.get_api_v1_media_uuid_resource + module: media + title: GET /api/v1/media/:uuid/resource + description: Generated from Gin route source + categories: + - media + - gin + - generated + intents: + - media.get_api_v1_media_uuid_resource + tool_scopes: + - media.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/media/router.go + protocols: + - channel: rest + endpoint: /api/v1/media/:uuid/resource + method: GET + schema_ref: internal/transport/http/openapi/media/router.go#source + auth_type: tenant_jwt + tool_scope: media.api + - capability_id: com.corex.rest.media.gin.patch_api_v1_media_assets_uuid + module: media + title: PATCH /api/v1/media/assets/:uuid + description: Generated from Gin route source + categories: + - media + - gin + - generated + intents: + - media.patch_api_v1_media_assets_uuid + tool_scopes: + - media.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/media/router.go + protocols: + - channel: rest + endpoint: /api/v1/media/assets/:uuid + method: PATCH + schema_ref: internal/transport/http/openapi/media/router.go#source + auth_type: tenant_jwt + tool_scope: media.api + - capability_id: com.corex.rest.media.gin.post_api_v1_media_assets_uuid_presign + module: media + title: POST /api/v1/media/assets/:uuid/presign + description: Generated from Gin route source + categories: + - media + - gin + - generated + intents: + - media.post_api_v1_media_assets_uuid_presign + tool_scopes: + - media.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/media/router.go + protocols: + - channel: rest + endpoint: /api/v1/media/assets/:uuid/presign + method: POST + schema_ref: internal/transport/http/openapi/media/router.go#source + auth_type: tenant_jwt + tool_scope: media.api + - capability_id: com.corex.rest.model_routing.post_model_routing_policies + module: model_routing + title: Create or update a routing policy version + description: Generated from OpenAPI + categories: + - model_routing + - openapi + - generated + intents: + - model_routing.post_model_routing_policies + tool_scopes: + - model_routing.api + policy: + prefer: rest + docs: + - api/openapi/swagger.json + protocols: + - channel: rest + endpoint: /model-routing/policies + method: POST + schema_ref: api/openapi/swagger.json#/paths/model-routing~1policies/post + auth_type: tenant_jwt + tool_scope: model_routing.api + - capability_id: com.corex.rest.model_routing.post_model_routing_rollback + module: model_routing + title: Roll back to a previous routing policy version + description: Generated from OpenAPI + categories: + - model_routing + - openapi + - generated + intents: + - model_routing.post_model_routing_rollback + tool_scopes: + - model_routing.api + policy: + prefer: rest + docs: + - api/openapi/swagger.json + protocols: + - channel: rest + endpoint: /model-routing/rollback + method: POST + schema_ref: api/openapi/swagger.json#/paths/model-routing~1rollback/post + auth_type: tenant_jwt + tool_scope: model_routing.api + - capability_id: com.corex.rest.model_routing.post_model_routing_route + module: model_routing + title: Request a routing decision for a task context + description: Generated from OpenAPI + categories: + - model_routing + - openapi + - generated + intents: + - model_routing.post_model_routing_route + tool_scopes: + - model_routing.api + policy: + prefer: rest + docs: + - api/openapi/swagger.json + protocols: + - channel: rest + endpoint: /model-routing/route + method: POST + schema_ref: api/openapi/swagger.json#/paths/model-routing~1route/post + auth_type: tenant_jwt + tool_scope: model_routing.api + - capability_id: com.corex.rest.openapi.gin.get_api_v1_openapi_agents_agent_id_bridge_state + module: openapi + title: GET /api/v1/openapi/agents/:agent_id/bridge/state + description: Generated from Gin route source + categories: + - openapi + - gin + - generated + intents: + - openapi.get_api_v1_openapi_agents_agent_id_bridge_state + tool_scopes: + - openapi.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/agent/routes.go + protocols: + - channel: rest + endpoint: /api/v1/openapi/agents/:agent_id/bridge/state + method: GET + schema_ref: internal/transport/http/openapi/agent/routes.go#source + auth_type: tenant_jwt + tool_scope: openapi.api + - capability_id: com.corex.rest.openapi.gin.get_api_v1_openapi_agents_agent_id_health_history + module: openapi + title: GET /api/v1/openapi/agents/:agent_id/health/history + description: Generated from Gin route source + categories: + - openapi + - gin + - generated + intents: + - openapi.get_api_v1_openapi_agents_agent_id_health_history + tool_scopes: + - openapi.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/agent/routes.go + protocols: + - channel: rest + endpoint: /api/v1/openapi/agents/:agent_id/health/history + method: GET + schema_ref: internal/transport/http/openapi/agent/routes.go#source + auth_type: tenant_jwt + tool_scope: openapi.api + - capability_id: com.corex.rest.openapi.gin.get_api_v1_openapi_agents_agent_id_health_summary + module: openapi + title: GET /api/v1/openapi/agents/:agent_id/health/summary + description: Generated from Gin route source + categories: + - openapi + - gin + - generated + intents: + - openapi.get_api_v1_openapi_agents_agent_id_health_summary + tool_scopes: + - openapi.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/agent/routes.go + protocols: + - channel: rest + endpoint: /api/v1/openapi/agents/:agent_id/health/summary + method: GET + schema_ref: internal/transport/http/openapi/agent/routes.go#source + auth_type: tenant_jwt + tool_scope: openapi.api + - capability_id: com.corex.rest.openapi.gin.get_api_v1_openapi_knowledge_spaces_status + module: openapi + title: GET /api/v1/openapi/knowledge-spaces/status + description: Generated from Gin route source + categories: + - openapi + - gin + - generated + intents: + - openapi.get_api_v1_openapi_knowledge_spaces_status + tool_scopes: + - openapi.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/knowledge_space/routes.go + protocols: + - channel: rest + endpoint: /api/v1/openapi/knowledge-spaces/status + method: GET + schema_ref: internal/transport/http/openapi/knowledge_space/routes.go#source + auth_type: tenant_jwt + tool_scope: openapi.api + - capability_id: com.corex.rest.openapi.gin.post_api_v1_openapi_agents_agent_id_bridge_freeze + module: openapi + title: POST /api/v1/openapi/agents/:agent_id/bridge/freeze + description: Generated from Gin route source + categories: + - openapi + - gin + - generated + intents: + - openapi.post_api_v1_openapi_agents_agent_id_bridge_freeze + tool_scopes: + - openapi.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/agent/routes.go + protocols: + - channel: rest + endpoint: /api/v1/openapi/agents/:agent_id/bridge/freeze + method: POST + schema_ref: internal/transport/http/openapi/agent/routes.go#source + auth_type: tenant_jwt + tool_scope: openapi.api + - capability_id: com.corex.rest.openapi.gin.post_api_v1_openapi_agents_agent_id_bridge_rebalance + module: openapi + title: POST /api/v1/openapi/agents/:agent_id/bridge/rebalance + description: Generated from Gin route source + categories: + - openapi + - gin + - generated + intents: + - openapi.post_api_v1_openapi_agents_agent_id_bridge_rebalance + tool_scopes: + - openapi.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/agent/routes.go + protocols: + - channel: rest + endpoint: /api/v1/openapi/agents/:agent_id/bridge/rebalance + method: POST + schema_ref: internal/transport/http/openapi/agent/routes.go#source + auth_type: tenant_jwt + tool_scope: openapi.api + - capability_id: com.corex.rest.openapi.gin.post_api_v1_openapi_agents_agent_id_bridge_recover + module: openapi + title: POST /api/v1/openapi/agents/:agent_id/bridge/recover + description: Generated from Gin route source + categories: + - openapi + - gin + - generated + intents: + - openapi.post_api_v1_openapi_agents_agent_id_bridge_recover + tool_scopes: + - openapi.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/agent/routes.go + protocols: + - channel: rest + endpoint: /api/v1/openapi/agents/:agent_id/bridge/recover + method: POST + schema_ref: internal/transport/http/openapi/agent/routes.go#source + auth_type: tenant_jwt + tool_scope: openapi.api + - capability_id: com.corex.rest.openapi.gin.post_api_v1_openapi_knowledge_spaces_qa_memory_snapshot + module: openapi + title: POST /api/v1/openapi/knowledge-spaces/qa/memory-snapshot + description: Generated from Gin route source + categories: + - openapi + - gin + - generated + intents: + - openapi.post_api_v1_openapi_knowledge_spaces_qa_memory_snapshot + tool_scopes: + - openapi.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/knowledge_space/routes.go + protocols: + - channel: rest + endpoint: /api/v1/openapi/knowledge-spaces/qa/memory-snapshot + method: POST + schema_ref: internal/transport/http/openapi/knowledge_space/routes.go#source + auth_type: tenant_jwt + tool_scope: openapi.api + - capability_id: com.corex.rest.openapi.gin.post_api_v1_openapi_knowledge_spaces_qa_retrieval_plan + module: openapi + title: POST /api/v1/openapi/knowledge-spaces/qa/retrieval-plan + description: Generated from Gin route source + categories: + - openapi + - gin + - generated + intents: + - openapi.post_api_v1_openapi_knowledge_spaces_qa_retrieval_plan + tool_scopes: + - openapi.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/knowledge_space/routes.go + protocols: + - channel: rest + endpoint: /api/v1/openapi/knowledge-spaces/qa/retrieval-plan + method: POST + schema_ref: internal/transport/http/openapi/knowledge_space/routes.go#source + auth_type: tenant_jwt + tool_scope: openapi.api + - capability_id: com.corex.rest.plugin_release.gin.get_api_v1_plugin_release_candidates_candidateid + module: plugin_release + title: GET /api/v1/plugin-release/candidates/:candidateId + description: Generated from Gin route source + categories: + - plugin_release + - gin + - generated + intents: + - plugin_release.get_api_v1_plugin_release_candidates_candidateid + tool_scopes: + - plugin_release.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin_release/routes.go + protocols: + - channel: rest + endpoint: /api/v1/plugin-release/candidates/:candidateId + method: GET + schema_ref: internal/transport/http/admin/plugin_release/routes.go#source + auth_type: tenant_jwt + tool_scope: plugin_release.api + - capability_id: com.corex.rest.plugin_release.gin.get_api_v1_plugin_release_marketplace_listings + module: plugin_release + title: GET /api/v1/plugin-release/marketplace/listings + description: Generated from Gin route source + categories: + - plugin_release + - gin + - generated + intents: + - plugin_release.get_api_v1_plugin_release_marketplace_listings + tool_scopes: + - plugin_release.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin_release/routes.go + protocols: + - channel: rest + endpoint: /api/v1/plugin-release/marketplace/listings + method: GET + schema_ref: internal/transport/http/admin/plugin_release/routes.go#source + auth_type: tenant_jwt + tool_scope: plugin_release.api + - capability_id: com.corex.rest.plugin_release.gin.post_api_v1_plugin_release_candidates + module: plugin_release + title: POST /api/v1/plugin-release/candidates + description: Generated from Gin route source + categories: + - plugin_release + - gin + - generated + intents: + - plugin_release.post_api_v1_plugin_release_candidates + tool_scopes: + - plugin_release.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin_release/routes.go + protocols: + - channel: rest + endpoint: /api/v1/plugin-release/candidates + method: POST + schema_ref: internal/transport/http/admin/plugin_release/routes.go#source + auth_type: tenant_jwt + tool_scope: plugin_release.api + - capability_id: com.corex.rest.plugin_release.gin.post_api_v1_plugin_release_candidates_candidateid_gates + module: plugin_release + title: POST /api/v1/plugin-release/candidates/:candidateId/gates + description: Generated from Gin route source + categories: + - plugin_release + - gin + - generated + intents: + - plugin_release.post_api_v1_plugin_release_candidates_candidateid_gates + tool_scopes: + - plugin_release.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin_release/routes.go + protocols: + - channel: rest + endpoint: /api/v1/plugin-release/candidates/:candidateId/gates + method: POST + schema_ref: internal/transport/http/admin/plugin_release/routes.go#source + auth_type: tenant_jwt + tool_scope: plugin_release.api + - capability_id: com.corex.rest.plugin_release.gin.post_api_v1_plugin_release_marketplace_listings + module: plugin_release + title: POST /api/v1/plugin-release/marketplace/listings + description: Generated from Gin route source + categories: + - plugin_release + - gin + - generated + intents: + - plugin_release.post_api_v1_plugin_release_marketplace_listings + tool_scopes: + - plugin_release.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin_release/routes.go + protocols: + - channel: rest + endpoint: /api/v1/plugin-release/marketplace/listings + method: POST + schema_ref: internal/transport/http/admin/plugin_release/routes.go#source + auth_type: tenant_jwt + tool_scope: plugin_release.api + - capability_id: com.corex.rest.plugin_release.gin.post_api_v1_plugin_release_marketplace_listings_listingid_reviews + module: plugin_release + title: POST /api/v1/plugin-release/marketplace/listings/:listingId/reviews + description: Generated from Gin route source + categories: + - plugin_release + - gin + - generated + intents: + - plugin_release.post_api_v1_plugin_release_marketplace_listings_listingid_reviews + tool_scopes: + - plugin_release.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin_release/routes.go + protocols: + - channel: rest + endpoint: /api/v1/plugin-release/marketplace/listings/:listingId/reviews + method: POST + schema_ref: internal/transport/http/admin/plugin_release/routes.go#source + auth_type: tenant_jwt + tool_scope: plugin_release.api + - capability_id: com.corex.rest.plugin_release.gin.post_api_v1_plugin_release_offline_packages + module: plugin_release + title: POST /api/v1/plugin-release/offline-packages + description: Generated from Gin route source + categories: + - plugin_release + - gin + - generated + intents: + - plugin_release.post_api_v1_plugin_release_offline_packages + tool_scopes: + - plugin_release.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin_release/routes.go + protocols: + - channel: rest + endpoint: /api/v1/plugin-release/offline-packages + method: POST + schema_ref: internal/transport/http/admin/plugin_release/routes.go#source + auth_type: tenant_jwt + tool_scope: plugin_release.api + - capability_id: com.corex.rest.plugin_release.gin.post_api_v1_plugin_release_plans + module: plugin_release + title: POST /api/v1/plugin-release/plans + description: Generated from Gin route source + categories: + - plugin_release + - gin + - generated + intents: + - plugin_release.post_api_v1_plugin_release_plans + tool_scopes: + - plugin_release.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin_release/routes.go + protocols: + - channel: rest + endpoint: /api/v1/plugin-release/plans + method: POST + schema_ref: internal/transport/http/admin/plugin_release/routes.go#source + auth_type: tenant_jwt + tool_scope: plugin_release.api + - capability_id: com.corex.rest.plugin_release.gin.post_api_v1_plugin_release_plans_planid_deploy_canary + module: plugin_release + title: POST /api/v1/plugin-release/plans/:planId/deploy/canary + description: Generated from Gin route source + categories: + - plugin_release + - gin + - generated + intents: + - plugin_release.post_api_v1_plugin_release_plans_planid_deploy_canary + tool_scopes: + - plugin_release.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin_release/routes.go + protocols: + - channel: rest + endpoint: /api/v1/plugin-release/plans/:planId/deploy/canary + method: POST + schema_ref: internal/transport/http/admin/plugin_release/routes.go#source + auth_type: tenant_jwt + tool_scope: plugin_release.api + - capability_id: com.corex.rest.plugin_release.gin.post_api_v1_plugin_release_plans_planid_deploy_finalize + module: plugin_release + title: POST /api/v1/plugin-release/plans/:planId/deploy/finalize + description: Generated from Gin route source + categories: + - plugin_release + - gin + - generated + intents: + - plugin_release.post_api_v1_plugin_release_plans_planid_deploy_finalize + tool_scopes: + - plugin_release.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin_release/routes.go + protocols: + - channel: rest + endpoint: /api/v1/plugin-release/plans/:planId/deploy/finalize + method: POST + schema_ref: internal/transport/http/admin/plugin_release/routes.go#source + auth_type: tenant_jwt + tool_scope: plugin_release.api + - capability_id: com.corex.rest.plugin_release.gin.post_api_v1_plugin_release_plans_planid_deploy_rollback + module: plugin_release + title: POST /api/v1/plugin-release/plans/:planId/deploy/rollback + description: Generated from Gin route source + categories: + - plugin_release + - gin + - generated + intents: + - plugin_release.post_api_v1_plugin_release_plans_planid_deploy_rollback + tool_scopes: + - plugin_release.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/plugin_release/routes.go + protocols: + - channel: rest + endpoint: /api/v1/plugin-release/plans/:planId/deploy/rollback + method: POST + schema_ref: internal/transport/http/admin/plugin_release/routes.go#source + auth_type: tenant_jwt + tool_scope: plugin_release.api + - capability_id: com.corex.rest.provider_quotas.get_provider_quotas + module: provider_quotas + title: Retrieve quota configuration for a tenant + description: Generated from OpenAPI + categories: + - provider_quotas + - openapi + - generated + intents: + - provider_quotas.get_provider_quotas + tool_scopes: + - provider_quotas.api + policy: + prefer: rest + docs: + - api/openapi/swagger.json + protocols: + - channel: rest + endpoint: /provider-quotas + method: GET + schema_ref: api/openapi/swagger.json#/paths/provider-quotas/get + auth_type: tenant_jwt + tool_scope: provider_quotas.api + - capability_id: com.corex.rest.provider_quotas.post_provider_quotas_enforce + module: provider_quotas + title: Confirm and execute a throttle/degrade/disable action + description: Generated from OpenAPI + categories: + - provider_quotas + - openapi + - generated + intents: + - provider_quotas.post_provider_quotas_enforce + tool_scopes: + - provider_quotas.api + policy: + prefer: rest + docs: + - api/openapi/swagger.json + protocols: + - channel: rest + endpoint: /provider-quotas/enforce + method: POST + schema_ref: api/openapi/swagger.json#/paths/provider-quotas~1enforce/post + auth_type: tenant_jwt + tool_scope: provider_quotas.api + - capability_id: com.corex.rest.provider_usage.post_provider_usage_report + module: provider_usage + title: Ingest batched usage metrics + description: Generated from OpenAPI + categories: + - provider_usage + - openapi + - generated + intents: + - provider_usage.post_provider_usage_report + tool_scopes: + - provider_usage.api + policy: + prefer: rest + docs: + - api/openapi/swagger.json + protocols: + - channel: rest + endpoint: /provider-usage/report + method: POST + schema_ref: api/openapi/swagger.json#/paths/provider-usage~1report/post + auth_type: tenant_jwt + tool_scope: provider_usage.api + - capability_id: com.corex.rest.providers.post_providers_providerid_publish + module: providers + title: Publish a validated provider to target tenants with gray release controls + description: Generated from OpenAPI + categories: + - providers + - openapi + - generated + intents: + - providers.post_providers_providerid_publish + tool_scopes: + - providers.api + policy: + prefer: rest + docs: + - api/openapi/swagger.json + protocols: + - channel: rest + endpoint: /providers/{providerId}/publish + method: POST + schema_ref: api/openapi/swagger.json#/paths/providers~1{providerId}~1publish/post + auth_type: tenant_jwt + tool_scope: providers.api + - capability_id: com.corex.rest.providers.post_providers_providerid_validate + module: providers + title: Trigger automated validation suite for a provider + description: Generated from OpenAPI + categories: + - providers + - openapi + - generated + intents: + - providers.post_providers_providerid_validate + tool_scopes: + - providers.api + policy: + prefer: rest + docs: + - api/openapi/swagger.json + protocols: + - channel: rest + endpoint: /providers/{providerId}/validate + method: POST + schema_ref: api/openapi/swagger.json#/paths/providers~1{providerId}~1validate/post + auth_type: tenant_jwt + tool_scope: providers.api + - capability_id: com.corex.rest.providers.post_providers_register + module: providers + title: Register or update a provider profile (draft state) + description: Generated from OpenAPI + categories: + - providers + - openapi + - generated + intents: + - providers.post_providers_register + tool_scopes: + - providers.api + policy: + prefer: rest + docs: + - api/openapi/swagger.json + protocols: + - channel: rest + endpoint: /providers/register + method: POST + schema_ref: api/openapi/swagger.json#/paths/providers~1register/post + auth_type: tenant_jwt + tool_scope: providers.api + - capability_id: com.corex.rest.rag.gin.get_api_v1_rag_versions + module: rag + title: GET /api/v1/rag/versions + description: Generated from Gin route source + categories: + - rag + - gin + - generated + intents: + - rag.get_api_v1_rag_versions + tool_scopes: + - rag.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/profile_handlers.go + protocols: + - channel: rest + endpoint: /api/v1/rag/versions + method: GET + schema_ref: internal/transport/http/admin/knowledge_space/profile_handlers.go#source + auth_type: tenant_jwt + tool_scope: rag.api + - capability_id: com.corex.rest.rag.gin.post_api_v1_rag_versions + module: rag + title: POST /api/v1/rag/versions + description: Generated from Gin route source + categories: + - rag + - gin + - generated + intents: + - rag.post_api_v1_rag_versions + tool_scopes: + - rag.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/profile_handlers.go + protocols: + - channel: rest + endpoint: /api/v1/rag/versions + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/profile_handlers.go#source + auth_type: tenant_jwt + tool_scope: rag.api + - capability_id: com.corex.rest.rag.gin.post_api_v1_rag_versions_uuid_publish + module: rag + title: POST /api/v1/rag/versions/:uuid/publish + description: Generated from Gin route source + categories: + - rag + - gin + - generated + intents: + - rag.post_api_v1_rag_versions_uuid_publish + tool_scopes: + - rag.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/profile_handlers.go + protocols: + - channel: rest + endpoint: /api/v1/rag/versions/:uuid/publish + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/profile_handlers.go#source + auth_type: tenant_jwt + tool_scope: rag.api + - capability_id: com.corex.rest.rag.gin.post_api_v1_rag_versions_uuid_rollback + module: rag + title: POST /api/v1/rag/versions/:uuid/rollback + description: Generated from Gin route source + categories: + - rag + - gin + - generated + intents: + - rag.post_api_v1_rag_versions_uuid_rollback + tool_scopes: + - rag.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/knowledge_space/profile_handlers.go + protocols: + - channel: rest + endpoint: /api/v1/rag/versions/:uuid/rollback + method: POST + schema_ref: internal/transport/http/admin/knowledge_space/profile_handlers.go#source + auth_type: tenant_jwt + tool_scope: rag.api + - capability_id: com.corex.rest.tenant.gin.delete_api_v1_tenant_plugin_release_local_sessions_sessionid + module: tenant + title: DELETE /api/v1/tenant/plugin-release/local/sessions/:sessionId + description: Generated from Gin route source + categories: + - tenant + - gin + - generated + intents: + - tenant.delete_api_v1_tenant_plugin_release_local_sessions_sessionid + tool_scopes: + - tenant.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/plugin_release/routes.go + protocols: + - channel: rest + endpoint: /api/v1/tenant/plugin-release/local/sessions/:sessionId + method: DELETE + schema_ref: internal/transport/http/openapi/plugin_release/routes.go#source + auth_type: tenant_jwt + tool_scope: tenant.api + - capability_id: com.corex.rest.tenant.gin.get_api_v1_tenant_capabilities + module: tenant + title: GET /api/v1/tenant/capabilities + description: Generated from Gin route source + categories: + - tenant + - gin + - generated + intents: + - tenant.get_api_v1_tenant_capabilities + tool_scopes: + - tenant.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/capability_registry/routes.go + protocols: + - channel: rest + endpoint: /api/v1/tenant/capabilities + method: GET + schema_ref: internal/transport/http/openapi/capability_registry/routes.go#source + auth_type: tenant_jwt + tool_scope: tenant.api + - capability_id: com.corex.rest.tenant.gin.get_api_v1_tenant_integration_routes + module: tenant + title: GET /api/v1/tenant/integration/routes + description: Generated from Gin route source + categories: + - tenant + - gin + - generated + intents: + - tenant.get_api_v1_tenant_integration_routes + tool_scopes: + - tenant.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/integration_gateway/routes.go + protocols: + - channel: rest + endpoint: /api/v1/tenant/integration/routes + method: GET + schema_ref: internal/transport/http/openapi/integration_gateway/routes.go#source + auth_type: tenant_jwt + tool_scope: tenant.api + - capability_id: com.corex.rest.tenant.gin.get_api_v1_tenant_integration_routes_route_slug + module: tenant + title: GET /api/v1/tenant/integration/routes/:route_slug + description: Generated from Gin route source + categories: + - tenant + - gin + - generated + intents: + - tenant.get_api_v1_tenant_integration_routes_route_slug + tool_scopes: + - tenant.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/integration_gateway/routes.go + protocols: + - channel: rest + endpoint: /api/v1/tenant/integration/routes/:route_slug + method: GET + schema_ref: internal/transport/http/openapi/integration_gateway/routes.go#source + auth_type: tenant_jwt + tool_scope: tenant.api + - capability_id: com.corex.rest.tenant.gin.get_api_v1_tenant_invocations_traceid + module: tenant + title: GET /api/v1/tenant/invocations/:traceId + description: Generated from Gin route source + categories: + - tenant + - gin + - generated + intents: + - tenant.get_api_v1_tenant_invocations_traceid + tool_scopes: + - tenant.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/capability_registry/routes.go + protocols: + - channel: rest + endpoint: /api/v1/tenant/invocations/:traceId + method: GET + schema_ref: internal/transport/http/openapi/capability_registry/routes.go#source + auth_type: tenant_jwt + tool_scope: tenant.api + - capability_id: com.corex.rest.tenant.gin.get_api_v1_tenant_offline_imports_jobid + module: tenant + title: GET /api/v1/tenant/offline-imports/:jobId + description: Generated from Gin route source + categories: + - tenant + - gin + - generated + intents: + - tenant.get_api_v1_tenant_offline_imports_jobid + tool_scopes: + - tenant.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/plugin_release/routes.go + protocols: + - channel: rest + endpoint: /api/v1/tenant/offline-imports/:jobId + method: GET + schema_ref: internal/transport/http/openapi/plugin_release/routes.go#source + auth_type: tenant_jwt + tool_scope: tenant.api + - capability_id: com.corex.rest.tenant.gin.get_api_v1_tenant_plugin_release_local_sessions_sessionid + module: tenant + title: GET /api/v1/tenant/plugin-release/local/sessions/:sessionId + description: Generated from Gin route source + categories: + - tenant + - gin + - generated + intents: + - tenant.get_api_v1_tenant_plugin_release_local_sessions_sessionid + tool_scopes: + - tenant.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/plugin_release/routes.go + protocols: + - channel: rest + endpoint: /api/v1/tenant/plugin-release/local/sessions/:sessionId + method: GET + schema_ref: internal/transport/http/openapi/plugin_release/routes.go#source + auth_type: tenant_jwt + tool_scope: tenant.api + - capability_id: com.corex.rest.tenant.gin.post_api_v1_tenant_integration_routes_route_slug_invoke + module: tenant + title: POST /api/v1/tenant/integration/routes/:route_slug/invoke + description: Generated from Gin route source + categories: + - tenant + - gin + - generated + intents: + - tenant.post_api_v1_tenant_integration_routes_route_slug_invoke + tool_scopes: + - tenant.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/integration_gateway/routes.go + protocols: + - channel: rest + endpoint: /api/v1/tenant/integration/routes/:route_slug/invoke + method: POST + schema_ref: internal/transport/http/openapi/integration_gateway/routes.go#source + auth_type: tenant_jwt + tool_scope: tenant.api + - capability_id: com.corex.rest.tenant.gin.post_api_v1_tenant_invocations + module: tenant + title: POST /api/v1/tenant/invocations + description: Generated from Gin route source + categories: + - tenant + - gin + - generated + intents: + - tenant.post_api_v1_tenant_invocations + tool_scopes: + - tenant.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/capability_registry/routes.go + protocols: + - channel: rest + endpoint: /api/v1/tenant/invocations + method: POST + schema_ref: internal/transport/http/openapi/capability_registry/routes.go#source + auth_type: tenant_jwt + tool_scope: tenant.api + - capability_id: com.corex.rest.tenant.gin.post_api_v1_tenant_plugin_release_local_sessions + module: tenant + title: POST /api/v1/tenant/plugin-release/local/sessions + description: Generated from Gin route source + categories: + - tenant + - gin + - generated + intents: + - tenant.post_api_v1_tenant_plugin_release_local_sessions + tool_scopes: + - tenant.api + policy: + prefer: rest + docs: + - internal/transport/http/openapi/plugin_release/routes.go + protocols: + - channel: rest + endpoint: /api/v1/tenant/plugin-release/local/sessions + method: POST + schema_ref: internal/transport/http/openapi/plugin_release/routes.go#source + auth_type: tenant_jwt + tool_scope: tenant.api + - capability_id: com.corex.rest.user.gin.post_api_v1_user_auth_logout + module: user + title: POST /api/v1/user/auth/logout + description: Generated from Gin route source + categories: + - user + - gin + - generated + intents: + - user.post_api_v1_user_auth_logout + tool_scopes: + - user.api + policy: + prefer: rest + docs: + - internal/transport/http/admin/user/auth/api.go + protocols: + - channel: rest + endpoint: /api/v1/user/auth/logout + method: POST + schema_ref: internal/transport/http/admin/user/auth/api.go#source + auth_type: tenant_jwt + tool_scope: user.api diff --git a/backend/etc/config_example.yaml b/backend/etc/config_example.yaml index 5c584d8a..483608da 100644 --- a/backend/etc/config_example.yaml +++ b/backend/etc/config_example.yaml @@ -63,7 +63,7 @@ database: port: 5432 username: postgres password: postgres - database: corex + database: powerx ssl_mode: disable timezone: Asia/Shanghai table_prefix: px_ @@ -119,6 +119,20 @@ log: batch_wait: 1 batch_size: 100 +audit: + persist_to_db: false + enable_gorm_callbacks: false + file: + enable: true + dir: logs/audit + file_prefix: audit_event + max_size: 100 + max_backups: 30 + max_age: 30 + compress: true + use_utc: false + include_meta: true + auth: jwt_secret: K8mN2pQ7rS9tU4vW6xY1zA3bC5dE8fG0 issuer: powerx-auth @@ -478,7 +492,7 @@ plugin: sse_buffer_size: 128 audit_topic: dev.hotload.sessions bootstrap: - templates_index: ./config/plugins/templates/index.yaml + templates_index: ../config/plugins/templates/index.yaml default_template: fullstack-go-nuxt allowlisted_hosts: - git.powerx.io @@ -489,10 +503,10 @@ plugin: host_simulator: enabled: true feature_flag: PX_PLUGIN_HOST_SIMULATOR - config_path: ./config/plugins/debug/host_simulator.yaml + config_path: ../config/plugins/debug/host_simulator.yaml reports: - template: ./config/plugins/debug/report_template.yaml - masking_rules: ./config/security/data_masking_rules.yaml + template: ../config/plugins/debug/report_template.yaml + masking_rules: ../config/security/data_masking_rules.yaml fallback_log_base: "" ticket_bridge: provider: noop @@ -501,7 +515,7 @@ plugin: sandbox: enabled: true feature_flag: plugin-sandbox-suite - data_suite_path: ./config/plugins/debug/data_suite.yaml + data_suite_path: ../config/plugins/debug/data_suite.yaml storage: default_driver: local diff --git a/backend/internal/app/shared/deps.go b/backend/internal/app/shared/deps.go index 1565cacf..06108576 100644 --- a/backend/internal/app/shared/deps.go +++ b/backend/internal/app/shared/deps.go @@ -107,6 +107,10 @@ type auditViolationReporter struct { audit auditService.Service } +type noopAuditRepository struct{} + +func (noopAuditRepository) InsertBatch(context.Context, []dbm.AuditEvent) error { return nil } + func (r auditViolationReporter) Report(ctx context.Context, violation security.Violation) { if r.audit == nil { return @@ -190,13 +194,25 @@ func NewDeps(db *gorm.DB, opts *DepsOptions) *Deps { // --- Audit 初始化 --- sinks := []auditsvc.Sink{&auditsvc.LoggerSink{L: pxlog.GetGlobalLogger()}} + if fileSink, err := auditsvc.NewFileSink(opts.AuditFileSink); err != nil { + pxlog.WarnF(ctx, "[audit] init file sink failed: %v", err) + } else if fileSink != nil { + sinks = append(sinks, fileSink) + } + var auditRepo auditsvc.Repository + if !opts.AuditPersistToDB { + auditRepo = noopAuditRepository{} + } svc := auditsvc.NewService(auditsvc.ServiceOptions{ - DB: db, - Sinks: sinks, - Config: opts.Audit, + DB: db, + Repository: auditRepo, + Sinks: sinks, + Config: opts.Audit, }) - // 注册 GORM 回调 - auditsvc.RegisterAuditCallbacks(db, svc) + // 仅在显式开启时注册 GORM 行级审计回调。 + if opts.AuditEnableGORMCallbacks { + auditsvc.RegisterAuditCallbacks(db, svc) + } aud := auditsvc.NewAuditor(svc) diff --git a/backend/internal/app/shared/options.go b/backend/internal/app/shared/options.go index 689f9096..65921001 100644 --- a/backend/internal/app/shared/options.go +++ b/backend/internal/app/shared/options.go @@ -15,11 +15,14 @@ import ( ) type DepsOptions struct { - AuthUser auth.AuthOptions // 给用户端的 Audience - AuthCustomer auth.AuthOptions // 给客户/插件端的 Audience - Audit auditsvc.AuditOptions // 批量大小、等待等 - Storage mediasvc.StorageOptions - Queue QueueOptions + AuthUser auth.AuthOptions // 给用户端的 Audience + AuthCustomer auth.AuthOptions // 给客户/插件端的 Audience + Audit auditsvc.AuditOptions // 批量大小、等待等 + AuditPersistToDB bool + AuditEnableGORMCallbacks bool + AuditFileSink auditsvc.FileSinkOptions + Storage mediasvc.StorageOptions + Queue QueueOptions // 以后需要别的也放在这里(如默认租户、开关等) EventFabric EventFabricOptions Workflow WorkflowOptions diff --git a/backend/internal/bootstrap/app.go b/backend/internal/bootstrap/app.go index 2bd011a1..71535e36 100644 --- a/backend/internal/bootstrap/app.go +++ b/backend/internal/bootstrap/app.go @@ -197,6 +197,19 @@ func BootstrapApp(ctx context.Context, cfg *config.Config) (*shared.Deps, error) Audit: auditsvc.AuditOptions{ BatchSize: 200, BatchWait: 150 * time.Millisecond, MaxPayloadSize: 16 * 1024, }, + AuditPersistToDB: cfg.Audit.PersistToDB, + AuditEnableGORMCallbacks: cfg.Audit.EnableGORMCallbacks, + AuditFileSink: auditsvc.FileSinkOptions{ + Enable: cfg.Audit.File.Enable, + Dir: cfg.Audit.File.Dir, + FilePrefix: cfg.Audit.File.FilePrefix, + MaxSize: cfg.Audit.File.MaxSize, + MaxBackups: cfg.Audit.File.MaxBackups, + MaxAge: cfg.Audit.File.MaxAge, + Compress: cfg.Audit.File.Compress, + UseUTC: cfg.Audit.File.UseUTC, + IncludeMeta: cfg.Audit.File.IncludeMeta, + }, Storage: mediasvc.StorageOptions{ DefaultDriver: cfg.Storage.DefaultDriver, TTLSeconds: cfg.Storage.TTLSeconds, diff --git a/backend/internal/http/middleware.go b/backend/internal/http/middleware.go index 81c4192d..51f3da6e 100644 --- a/backend/internal/http/middleware.go +++ b/backend/internal/http/middleware.go @@ -16,6 +16,8 @@ import ( "go.uber.org/zap" ) +const requestIDContextKey = "powerx.request_id" + // RecoveryMiddleware 捕获 panic 并返回统一错误 func RecoveryMiddleware() gin.HandlerFunc { return gin.RecoveryWithWriter(gin.DefaultWriter) @@ -30,15 +32,24 @@ func RequestLoggingMiddleware() gin.HandlerFunc { status := c.Writer.Status() tenantUUID := reqctx.GetTenantUUID(c.Request.Context()) traceID := audit.GetTraceID(c.Request.Context()) + requestID, _ := c.Get("request_id") + requestIDStr, _ := requestID.(string) query := sanitizeQuery(c.Request.URL.Query()) + path := c.FullPath() + if strings.TrimSpace(path) == "" { + path = c.Request.URL.Path + } + pluginID := extractPluginIDFromPath(c.Request.URL.Path) logger.Info(c.Request.Context(), "http_request", zap.String("method", c.Request.Method), - zap.String("path", c.FullPath()), + zap.String("path", path), zap.String("query", query), zap.Int("status", status), zap.Int64("latency_ms", latency.Milliseconds()), zap.String("tenant_uuid", tenantUUID), zap.String("trace_id", traceID), + zap.String("request_id", requestIDStr), + zap.String("plugin_id", pluginID), ) } } @@ -114,15 +125,31 @@ func sanitizeQuery(v url.Values) string { // TraceInjectionMiddleware 确保每个请求都有 trace_id(从 header 继承或新建)并注入 context func TraceInjectionMiddleware() gin.HandlerFunc { return func(c *gin.Context) { - traceID := c.GetHeader("X-Trace-ID") + traceID := strings.TrimSpace(c.GetHeader("X-Trace-Id")) + if traceID == "" { + traceID = strings.TrimSpace(c.GetHeader("X-Trace-ID")) + } if traceID == "" { traceID = uuid.NewString() } + requestID := strings.TrimSpace(c.GetHeader("X-Request-Id")) + if requestID == "" { + requestID = strings.TrimSpace(c.GetHeader("X-Request-ID")) + } + if requestID == "" { + requestID = uuid.NewString() + } // 将 trace_id 放进 context 便于以后取 ctx := c.Request.Context() ctx = contextWithTraceID(ctx, traceID) + ctx = context.WithValue(ctx, requestIDContextKey, requestID) c.Request = c.Request.WithContext(ctx) + c.Set("trace_id", traceID) + c.Set("request_id", requestID) + c.Writer.Header().Set("X-Trace-Id", traceID) c.Writer.Header().Set("X-Trace-ID", traceID) + c.Writer.Header().Set("X-Request-Id", requestID) + c.Writer.Header().Set("X-Request-ID", requestID) c.Next() } } @@ -138,3 +165,18 @@ func FeatureInjectionMiddleware() gin.HandlerFunc { c.Next() } } + +func extractPluginIDFromPath(path string) string { + path = strings.TrimSpace(path) + if !strings.HasPrefix(path, "/_p/") { + return "" + } + rest := strings.TrimPrefix(path, "/_p/") + if rest == "" { + return "" + } + if idx := strings.IndexByte(rest, '/'); idx > 0 { + return rest[:idx] + } + return "" +} diff --git a/backend/internal/infra/plugin/manager/host_config.go b/backend/internal/infra/plugin/manager/host_config.go index 772a82c4..a93c0f4b 100644 --- a/backend/internal/infra/plugin/manager/host_config.go +++ b/backend/internal/infra/plugin/manager/host_config.go @@ -35,6 +35,7 @@ func (m *managerImpl) generateHostConfig(man plugin_mgr.Manifest, destRoot strin bindOverride := strings.TrimSpace(envAll["POWERX_HTTP_ADDR"]) envAll["POWERX_PLUGIN_CONFIG_DIR"] = cfgDir selected := mergeEnvWithRuntime(envAll, man.Runtime.Env) + normalizePluginLogEnv(selected) // 若宿主未显式指定 POWERX_HTTP_ADDR,则允许插件根据 PORT 环境变量动态监听 if bindOverride == "" { @@ -102,7 +103,7 @@ func (m *managerImpl) generateHostConfig(man plugin_mgr.Manifest, destRoot strin delete(structured, "server") } } - if lvl := selected["POWERX_LOG_LEVEL"]; lvl != "" { + if lvl := firstNonEmptyMapValue(selected, "POWERX_PLUGIN_LOG_LEVEL", "POWERX_LOG_LEVEL"); lvl != "" { setNestedValue(structured, []string{"server", "log_level"}, lvl) } if devMode, ok := parseBoolish(selected["POWERX_DEV_MODE"]); ok { @@ -122,6 +123,7 @@ func (m *managerImpl) generateHostConfig(man plugin_mgr.Manifest, destRoot strin selected = mergeStringMapMissing(selected, seed.Values) structured = mergeHostSpecMissing(structured, seed.Spec) } + normalizePluginLogEnv(selected) // 插件 API 网关安全配置:默认使用宿主 JWT 模式,需覆盖 seed/旧配置 if cfg := m.opts.CoreConfig; cfg != nil { @@ -231,7 +233,9 @@ func (m *managerImpl) hostEnvForPlugin(p plugin_mgr.Plugin) map[string]string { } } } - return mergeEnvWithRuntime(envAll, requested) + out := mergeEnvWithRuntime(envAll, requested) + normalizePluginLogEnv(out) + return out } func mergeEnvWithRuntime(env map[string]string, runtime map[string]string) map[string]string { @@ -291,9 +295,18 @@ func (m *managerImpl) collectSystemEnv() map[string]string { if cfg.Server.Mode != "" { env["POWERX_SERVER_MODE"] = cfg.Server.Mode } + // 插件日志控制:默认继承宿主 server mode 作为 gin mode(可被环境变量覆盖) + if cfg.Server.Mode != "" { + env["POWERX_PLUGIN_GIN_MODE"] = cfg.Server.Mode + env["POWERX_GIN_MODE"] = cfg.Server.Mode + } if cfg.Server.SecretKey != "" { env["POWERX_SERVER_SECRET_KEY"] = cfg.Server.SecretKey } + if lvl := strings.TrimSpace(cfg.LogConfig.Level); lvl != "" { + env["POWERX_PLUGIN_LOG_LEVEL"] = lvl + env["POWERX_LOG_LEVEL"] = lvl + } dbCfg := cfg.Database driver := strings.TrimSpace(dbCfg.Driver) @@ -368,9 +381,72 @@ func (m *managerImpl) collectSystemEnv() map[string]string { env["POWERX_PLUGIN_REGISTRY_FILE"] = m.opts.RegistryFile } + // 宿主进程显式环境变量优先级最高:用于统一控制插件日志行为。 + // 推荐使用 POWERX_PLUGIN_*,同时兼容 POWERX_*。 + for _, k := range []string{ + "POWERX_PLUGIN_HTTP_LOG", + "POWERX_PLUGIN_GIN_MODE", + "POWERX_PLUGIN_LOG_LEVEL", + "POWERX_HTTP_LOG", + "POWERX_GIN_MODE", + "POWERX_LOG_LEVEL", + } { + if v := strings.TrimSpace(os.Getenv(k)); v != "" { + env[k] = v + } + } + normalizePluginLogEnv(env) + return env } +func normalizePluginLogEnv(env map[string]string) { + if len(env) == 0 { + return + } + httpLog := firstNonEmptyMapValue(env, "POWERX_PLUGIN_HTTP_LOG", "POWERX_HTTP_LOG") + ginMode := normalizeGinModeValue(firstNonEmptyMapValue(env, "POWERX_PLUGIN_GIN_MODE", "POWERX_GIN_MODE")) + logLevel := firstNonEmptyMapValue(env, "POWERX_PLUGIN_LOG_LEVEL", "POWERX_LOG_LEVEL") + + if httpLog != "" { + env["POWERX_PLUGIN_HTTP_LOG"] = httpLog + env["POWERX_HTTP_LOG"] = httpLog + } + if ginMode != "" { + env["POWERX_PLUGIN_GIN_MODE"] = ginMode + env["POWERX_GIN_MODE"] = ginMode + // 兼容只读取 POWERX_SERVER_MODE 的旧插件运行时。 + env["POWERX_SERVER_MODE"] = ginMode + } + if logLevel != "" { + env["POWERX_PLUGIN_LOG_LEVEL"] = logLevel + env["POWERX_LOG_LEVEL"] = logLevel + } +} + +func normalizeGinModeValue(raw string) string { + v := strings.ToLower(strings.TrimSpace(raw)) + switch v { + case "debug", "release", "test": + return v + case "true", "1", "yes", "on": + return "debug" + case "false", "0", "no", "off": + return "release" + default: + return "" + } +} + +func firstNonEmptyMapValue(m map[string]string, keys ...string) string { + for _, k := range keys { + if v := strings.TrimSpace(m[k]); v != "" { + return v + } + } + return "" +} + type databaseSection struct { Driver string DSN string @@ -404,12 +480,14 @@ func (m *managerImpl) buildDatabaseSection(pluginID string) (*databaseSection, e db, cleanup, err := connectAdminDB(dbCfg) if err != nil { - return nil, err + fmt.Printf("[plugin-host-config] plugin=%s db-isolation fallback(shared): connect admin db failed: %v\n", pluginID, err) + return buildSharedDatabaseSection(dbCfg, driver), nil } defer cleanup() if err := ensureSchemaExists(db, driver, schemaName); err != nil { - return nil, err + fmt.Printf("[plugin-host-config] plugin=%s db-isolation fallback(shared): ensure schema failed: %v\n", pluginID, err) + return buildSharedDatabaseSection(dbCfg, driver), nil } section := &databaseSection{ @@ -422,13 +500,15 @@ func (m *managerImpl) buildDatabaseSection(pluginID string) (*databaseSection, e switch driver { case "postgres": if err := ensurePostgresUser(db, dbCfg, section); err != nil { - return nil, err + fmt.Printf("[plugin-host-config] plugin=%s db-isolation fallback(shared): ensure postgres user failed: %v\n", pluginID, err) + return buildSharedDatabaseSection(dbCfg, driver), nil } section.DSN = buildPostgresPluginDSN(dbCfg, section) section.SearchPath = section.Schema case "mysql": if err := ensureMySQLUser(db, section); err != nil { - return nil, err + fmt.Printf("[plugin-host-config] plugin=%s db-isolation fallback(shared): ensure mysql user failed: %v\n", pluginID, err) + return buildSharedDatabaseSection(dbCfg, driver), nil } section.DSN = buildMySQLPluginDSN(dbCfg, section) default: @@ -438,6 +518,19 @@ func (m *managerImpl) buildDatabaseSection(pluginID string) (*databaseSection, e return section, nil } +func buildSharedDatabaseSection(cfg corexdb.DatabaseConfig, driver string) *databaseSection { + section := &databaseSection{ + Driver: strings.TrimSpace(driver), + DSN: makeDatabaseDSN(cfg), + } + if section.Driver == "" { + section.Driver = normalizeDriver(cfg.Driver) + } + section.User = strings.TrimSpace(cfg.UserName) + section.Password = cfg.Password + return section +} + func connectAdminDB(cfg corexdb.DatabaseConfig) (*gorm.DB, func(), error) { db, err := database.Connect(cfg) if err != nil { @@ -639,7 +732,15 @@ func buildPostgresPluginDSN(cfg corexdb.DatabaseConfig, section *databaseSection q.Set("timezone", cfg.Timezone) } u.RawQuery = q.Encode() - return u.String() + dsn := u.String() + if tz := strings.TrimSpace(cfg.Timezone); tz != "" { + encoded := url.QueryEscape(tz) + if encoded != tz { + dsn = strings.Replace(dsn, "timezone="+encoded, "timezone="+tz, 1) + dsn = strings.Replace(dsn, "TimeZone="+encoded, "TimeZone="+tz, 1) + } + } + return dsn } } diff --git a/backend/internal/infra/plugin/manager/install.go b/backend/internal/infra/plugin/manager/install.go index 5c06a3bb..5094eecf 100644 --- a/backend/internal/infra/plugin/manager/install.go +++ b/backend/internal/infra/plugin/manager/install.go @@ -7,7 +7,6 @@ import ( "path/filepath" "github.com/ArtisanCloud/PowerX/pkg/plugin_mgr" - "gopkg.in/yaml.v3" ) // InstallFromFile: 从本地目录安装插件(最小实现) @@ -23,25 +22,20 @@ func (m *managerImpl) InstallFromFile(ctx context.Context, srcDir string, opts p return plugin_mgr.Plugin{}, plugin_mgr.Wrap(plugin_mgr.CodeIOError, err, plugin_mgr.WithOp("install_file")) } - // 1) 读取 manifest - manifestPath := filepath.Join(absSrc, "plugin.yaml") - raw, err := os.ReadFile(manifestPath) + // 1) 读取并合并 manifest(plugin.yaml + catalogs.*) + man, err := loadManifestWithCatalogs(absSrc) if err != nil { - return plugin_mgr.Plugin{}, plugin_mgr.Wrap( - plugin_mgr.CodeMissingFile, err, plugin_mgr.WithOp("install_file"), plugin_mgr.WithPath(manifestPath), - ) - } - var man plugin_mgr.Manifest - if err := yaml.Unmarshal(raw, &man); err != nil { - return plugin_mgr.Plugin{}, plugin_mgr.Wrap( - plugin_mgr.CodeInvalidManifest, err, plugin_mgr.WithOp("install_file"), plugin_mgr.WithPath(manifestPath), - ) + return plugin_mgr.Plugin{}, err } if man.ID == "" || man.Version == "" { return plugin_mgr.Plugin{}, plugin_mgr.NewError( plugin_mgr.CodeInvalidManifest, plugin_mgr.WithOp("install_file"), plugin_mgr.WithMsg("manifest.id or version empty"), ) } + // 安装阶段提前做一次完整校验,避免把坏包复制进 installed 目录。 + if err := NewFSLoader().Validate(ctx, man, absSrc); err != nil { + return plugin_mgr.Plugin{}, err + } // 2) 目标目录:// destRoot := filepath.Join(m.opts.InstalledRoot, man.ID, man.Version) @@ -92,6 +86,9 @@ func (m *managerImpl) InstallFromFile(ctx context.Context, srcDir string, opts p plugin_mgr.WithPath(fmt.Sprintf("%s -> %s", absSrc, destRoot)), ) } + if err := persistMergedManifest(destRoot, man); err != nil { + return plugin_mgr.Plugin{}, err + } // 4) 构造 Descriptor(注意:这里的 Descriptor 类型是 manager 包里的) paths := plugin_mgr.InstalledPaths{ diff --git a/backend/internal/infra/plugin/manager/lifecycle.go b/backend/internal/infra/plugin/manager/lifecycle.go index d8221f33..796c5225 100644 --- a/backend/internal/infra/plugin/manager/lifecycle.go +++ b/backend/internal/infra/plugin/manager/lifecycle.go @@ -232,6 +232,8 @@ func (m *managerImpl) Enable(ctx context.Context, id string) error { } apiURL, _ := url.Parse(apiBaseURL) m.http.MountAPIProxy(p.ID, apiURL, basePath, apiHealthPath) + fmt.Printf("[plugin-enable] plugin=%s api_upstream=%s base_path=%s health=%s\n", + p.ID, apiBaseURL, basePath, apiHealthPath) // ---------- 前端:三种形态 ---------- switch p.Frontend.Admin.Kind { diff --git a/backend/internal/infra/plugin/manager/loader.go b/backend/internal/infra/plugin/manager/loader.go index 09c4fcc0..96398823 100644 --- a/backend/internal/infra/plugin/manager/loader.go +++ b/backend/internal/infra/plugin/manager/loader.go @@ -2,13 +2,12 @@ package manager import ( "context" + "log" "os" "path/filepath" "strings" "time" - "gopkg.in/yaml.v3" - "github.com/ArtisanCloud/PowerX/pkg/plugin_mgr" ) @@ -59,8 +58,9 @@ func (l *FSLoader) Discover(ctx context.Context, installedRoot string) ([]Descri } desc, err := l.LoadDescriptor(ctx, root) if err != nil { - // 跳过坏包;你也可以改为返回错误 - return nil, err + // 跳过坏包,避免单个插件阻断整个平台启动 + log.Printf("[plugin-bootstrap] skip invalid plugin root=%s err=%v", root, err) + continue } out = append(out, desc) } @@ -70,17 +70,12 @@ func (l *FSLoader) Discover(ctx context.Context, installedRoot string) ([]Descri func (l *FSLoader) LoadDescriptor(ctx context.Context, root string) (Descriptor, error) { absRoot, _ := filepath.Abs(root) // ★ 保证根目录是绝对路径 - path := filepath.Join(absRoot, PluginManifestFile) - raw, err := os.ReadFile(path) + m, err := loadManifestWithCatalogs(absRoot) if err != nil { - return Descriptor{}, plugin_mgr.Wrap(plugin_mgr.CodeMissingFile, err, - plugin_mgr.WithOp("load_descriptor"), plugin_mgr.WithPath(path)) + return Descriptor{}, err } - - var m plugin_mgr.Manifest - if err := yaml.Unmarshal(raw, &m); err != nil { - return Descriptor{}, plugin_mgr.Wrap(plugin_mgr.CodeInvalidManifest, err, - plugin_mgr.WithOp("load_descriptor"), plugin_mgr.WithPath(path)) + if err := persistMergedManifest(absRoot, m); err != nil { + log.Printf("[plugin-bootstrap] persist merged manifest failed root=%s err=%v", absRoot, err) } // 组装 Paths(把相对路径转为绝对/规范路径) diff --git a/backend/internal/infra/plugin/manager/manifest_merge.go b/backend/internal/infra/plugin/manager/manifest_merge.go new file mode 100644 index 00000000..473435d3 --- /dev/null +++ b/backend/internal/infra/plugin/manager/manifest_merge.go @@ -0,0 +1,245 @@ +package manager + +import ( + "encoding/json" + "fmt" + "os" + "path/filepath" + "strings" + + "github.com/ArtisanCloud/PowerX/pkg/plugin_mgr" + "gopkg.in/yaml.v3" +) + +func loadManifestWithCatalogs(root string) (plugin_mgr.Manifest, error) { + manifestPath := filepath.Join(root, PluginManifestFile) + raw, err := os.ReadFile(manifestPath) + if err != nil { + return plugin_mgr.Manifest{}, plugin_mgr.Wrap( + plugin_mgr.CodeMissingFile, + err, + plugin_mgr.WithOp("load_manifest"), + plugin_mgr.WithPath(manifestPath), + ) + } + + var m plugin_mgr.Manifest + if err := yaml.Unmarshal(raw, &m); err != nil { + return plugin_mgr.Manifest{}, plugin_mgr.Wrap( + plugin_mgr.CodeInvalidManifest, + err, + plugin_mgr.WithOp("load_manifest"), + plugin_mgr.WithPath(manifestPath), + ) + } + + if isCatalogSpecEmpty(m.Catalogs) { + return m, nil + } + + var merged map[string]interface{} + if err := yaml.Unmarshal(raw, &merged); err != nil { + return plugin_mgr.Manifest{}, plugin_mgr.Wrap( + plugin_mgr.CodeInvalidManifest, + err, + plugin_mgr.WithOp("merge_manifest_catalogs"), + plugin_mgr.WithPath(manifestPath), + ) + } + if merged == nil { + merged = map[string]interface{}{} + } + + if err := applyCatalogSection(root, merged, "capabilities", m.Catalogs.Capabilities, []string{"capabilities"}); err != nil { + return plugin_mgr.Manifest{}, err + } + if err := applyCatalogSection(root, merged, "exposure", m.Catalogs.Exposure, []string{"exposure"}); err != nil { + return plugin_mgr.Manifest{}, err + } + if err := applyCatalogSection(root, merged, "agent_tools", m.Catalogs.AgentTools, []string{"agent_tools"}); err != nil { + return plugin_mgr.Manifest{}, err + } + if err := applyCatalogSection(root, merged, "events", m.Catalogs.Events, []string{"events"}); err != nil { + return plugin_mgr.Manifest{}, err + } + if err := applyCatalogSection(root, merged, "rbac", m.Catalogs.RBAC, []string{"rbac", "permissions", "routes"}); err != nil { + return plugin_mgr.Manifest{}, err + } + + mergedRaw, err := yaml.Marshal(merged) + if err != nil { + return plugin_mgr.Manifest{}, plugin_mgr.Wrap( + plugin_mgr.CodeInvalidManifest, + err, + plugin_mgr.WithOp("merge_manifest_catalogs"), + plugin_mgr.WithPath(manifestPath), + ) + } + + var out plugin_mgr.Manifest + if err := yaml.Unmarshal(mergedRaw, &out); err != nil { + return plugin_mgr.Manifest{}, plugin_mgr.Wrap( + plugin_mgr.CodeInvalidManifest, + err, + plugin_mgr.WithOp("merge_manifest_catalogs"), + plugin_mgr.WithPath(manifestPath), + ) + } + return out, nil +} + +func applyCatalogSection(root string, manifest map[string]interface{}, catalogName, relPath string, keys []string) error { + relPath = strings.TrimSpace(relPath) + if relPath == "" { + return nil + } + if filepath.IsAbs(relPath) { + return plugin_mgr.NewError( + plugin_mgr.CodeInvalidManifest, + plugin_mgr.WithOp("merge_manifest_catalogs"), + plugin_mgr.WithMsg("catalog %s must use relative path: %s", catalogName, relPath), + ) + } + + catalogPath := filepath.Join(root, filepath.Clean(relPath)) + if !strings.HasPrefix(filepath.Clean(catalogPath), filepath.Clean(root)) { + return plugin_mgr.NewError( + plugin_mgr.CodeInvalidManifest, + plugin_mgr.WithOp("merge_manifest_catalogs"), + plugin_mgr.WithMsg("catalog %s path escapes plugin root: %s", catalogName, relPath), + ) + } + raw, err := os.ReadFile(catalogPath) + if err != nil { + return plugin_mgr.Wrap( + plugin_mgr.CodeMissingFile, + err, + plugin_mgr.WithOp("merge_manifest_catalogs"), + plugin_mgr.WithPath(catalogPath), + ) + } + + var catalog map[string]interface{} + if err := yaml.Unmarshal(raw, &catalog); err != nil { + return plugin_mgr.Wrap( + plugin_mgr.CodeInvalidManifest, + err, + plugin_mgr.WithOp("merge_manifest_catalogs"), + plugin_mgr.WithPath(catalogPath), + ) + } + if catalog == nil { + catalog = map[string]interface{}{} + } + + for _, key := range keys { + val, found := findCatalogValue(catalog, key) + if !found || isEmptyValue(val) { + if key == "rbac" { + if _, ok := catalog["resources"]; ok { + val = catalog + found = true + } + } + } + if !found || isEmptyValue(val) { + continue + } + + if existing, ok := manifest[key]; ok && !isEmptyValue(existing) { + return plugin_mgr.NewError( + plugin_mgr.CodeInvalidManifest, + plugin_mgr.WithOp("merge_manifest_catalogs"), + plugin_mgr.WithMsg("catalog conflict on field %q (catalog=%s)", key, catalogName), + ) + } + manifest[key] = val + } + + for _, key := range keys { + if _, ok := manifest[key]; ok { + continue + } + return plugin_mgr.NewError( + plugin_mgr.CodeInvalidManifest, + plugin_mgr.WithOp("merge_manifest_catalogs"), + plugin_mgr.WithMsg("catalog %s missing required field %q", catalogName, key), + ) + } + return nil +} + +func findCatalogValue(catalog map[string]interface{}, key string) (interface{}, bool) { + if v, ok := catalog[key]; ok { + return v, true + } + if root, ok := catalog["manifest"].(map[string]interface{}); ok { + if v, ok := root[key]; ok { + return v, true + } + } + return nil, false +} + +func isCatalogSpecEmpty(c plugin_mgr.CatalogSpec) bool { + return strings.TrimSpace(c.Capabilities) == "" && + strings.TrimSpace(c.Exposure) == "" && + strings.TrimSpace(c.AgentTools) == "" && + strings.TrimSpace(c.Events) == "" && + strings.TrimSpace(c.RBAC) == "" +} + +func isEmptyValue(v interface{}) bool { + if v == nil { + return true + } + switch t := v.(type) { + case string: + return strings.TrimSpace(t) == "" + case []interface{}: + return len(t) == 0 + case map[string]interface{}: + return len(t) == 0 + default: + return fmt.Sprintf("%v", v) == "" + } +} + +func persistMergedManifest(root string, m plugin_mgr.Manifest) error { + yamlRaw, err := yaml.Marshal(m) + if err != nil { + return plugin_mgr.Wrap( + plugin_mgr.CodeInvalidManifest, + err, + plugin_mgr.WithOp("persist_merged_manifest"), + ) + } + yamlPath := filepath.Join(root, "plugin.merged.yaml") + if err := os.WriteFile(yamlPath, yamlRaw, 0o644); err != nil { + return plugin_mgr.Wrap( + plugin_mgr.CodeIOError, + err, + plugin_mgr.WithOp("persist_merged_manifest"), + plugin_mgr.WithPath(yamlPath), + ) + } + + jsonRaw, err := json.MarshalIndent(m, "", " ") + if err != nil { + return plugin_mgr.Wrap( + plugin_mgr.CodeInvalidManifest, + err, + plugin_mgr.WithOp("persist_merged_manifest"), + ) + } + jsonPath := filepath.Join(root, "plugin.merged.json") + if err := os.WriteFile(jsonPath, jsonRaw, 0o644); err != nil { + return plugin_mgr.Wrap( + plugin_mgr.CodeIOError, + err, + plugin_mgr.WithOp("persist_merged_manifest"), + plugin_mgr.WithPath(jsonPath), + ) + } + return nil +} diff --git a/backend/internal/infra/plugin/manager/manifest_merge_test.go b/backend/internal/infra/plugin/manager/manifest_merge_test.go new file mode 100644 index 00000000..b0b2a8d2 --- /dev/null +++ b/backend/internal/infra/plugin/manager/manifest_merge_test.go @@ -0,0 +1,124 @@ +package manager + +import ( + "os" + "path/filepath" + "strings" + "testing" + + "github.com/ArtisanCloud/PowerX/pkg/plugin_mgr" + "github.com/stretchr/testify/require" +) + +func TestLoadManifestWithCatalogs_MergeRBAC(t *testing.T) { + root := t.TempDir() + writeTestFile(t, root, "plugin.yaml", ` +id: com.powerx.plugins.base +name: base +version: 0.8.0 +runtime: + kind: process + entry: backend/bin/plugin +endpoints: + http_base_path: /api/v1 +frontend: + admin: + kind: process +catalogs: + rbac: plugin.d/rbac.yaml +`) + writeTestFile(t, root, "plugin.d/rbac.yaml", ` +rbac: + resources: + - resource: base:template + actions: [read, create, update, delete] +permissions: + - resource: base:template + actions: [read] +routes: + basePath: /api/v1 + rbac: strict +`) + + manifest, err := loadManifestWithCatalogs(root) + require.NoError(t, err) + require.Len(t, manifest.RBAC.Resources, 1) + require.Equal(t, "base:template", manifest.RBAC.Resources[0].Resource) + require.Len(t, manifest.Permissions, 1) + require.NotNil(t, manifest.Routes) + require.Equal(t, "/api/v1", manifest.Routes.BasePath) +} + +func TestLoadManifestWithCatalogs_MergeEvents(t *testing.T) { + root := t.TempDir() + writeTestFile(t, root, "plugin.yaml", ` +id: com.powerx.plugins.base +name: base +version: 0.8.0 +runtime: + kind: process + entry: backend/bin/plugin +endpoints: + http_base_path: /api/v1 +frontend: + admin: + kind: process +catalogs: + events: plugin.d/events.yaml +`) + writeTestFile(t, root, "plugin.d/events.yaml", ` +events: + publish: + - _topic.template.updated + subscribe: + - _topic.template.created +`) + + manifest, err := loadManifestWithCatalogs(root) + require.NoError(t, err) + require.Equal(t, plugin_mgr.EventSpec{ + Publish: []string{"_topic.template.updated"}, + Subscribe: []string{"_topic.template.created"}, + }, manifest.Events) +} + +func TestLoadManifestWithCatalogs_Conflict(t *testing.T) { + root := t.TempDir() + writeTestFile(t, root, "plugin.yaml", ` +id: com.powerx.plugins.base +name: base +version: 0.8.0 +runtime: + kind: process + entry: backend/bin/plugin +endpoints: + http_base_path: /api/v1 +frontend: + admin: + kind: process +rbac: + resources: + - resource: base:template + actions: [read] +catalogs: + rbac: plugin.d/rbac.yaml +`) + writeTestFile(t, root, "plugin.d/rbac.yaml", ` +rbac: + resources: + - resource: base:template + actions: [read, create] +`) + + _, err := loadManifestWithCatalogs(root) + require.Error(t, err) + require.True(t, plugin_mgr.IsCode(err, plugin_mgr.CodeInvalidManifest)) + require.Contains(t, strings.ToLower(err.Error()), "catalog conflict") +} + +func writeTestFile(t *testing.T, root, rel, content string) { + t.Helper() + path := filepath.Join(root, rel) + require.NoError(t, os.MkdirAll(filepath.Dir(path), 0o755)) + require.NoError(t, os.WriteFile(path, []byte(content), 0o644)) +} diff --git a/backend/internal/infra/plugin/manager/migrations.go b/backend/internal/infra/plugin/manager/migrations.go index 2b2ad6f1..f3ba3b8e 100644 --- a/backend/internal/infra/plugin/manager/migrations.go +++ b/backend/internal/infra/plugin/manager/migrations.go @@ -57,6 +57,10 @@ func (m *managerImpl) runPluginMigrate(ctx context.Context, desc Descriptor, opt ) } if fi, err := os.Stat(resolvedEntry); err != nil { + if errors.Is(err, os.ErrNotExist) { + record.LastStatus = plugin_mgr.MigrationStatusFailed + record.LastError = fmt.Sprintf("migration entry %q not found", resolvedEntry) + } return record, plugin_mgr.Wrap( plugin_mgr.CodeMigrationFailed, fmt.Errorf("migration entry %q not found: %w", resolvedEntry, err), diff --git a/backend/internal/infra/plugin/manager/migrations_test.go b/backend/internal/infra/plugin/manager/migrations_test.go new file mode 100644 index 00000000..302efe2e --- /dev/null +++ b/backend/internal/infra/plugin/manager/migrations_test.go @@ -0,0 +1,43 @@ +package manager + +import ( + "context" + "path/filepath" + "testing" + + "github.com/ArtisanCloud/PowerX/pkg/plugin_mgr" +) + +func TestRunPluginMigrate_MissingEntryFailed(t *testing.T) { + t.Parallel() + + root := t.TempDir() + m := &managerImpl{} + desc := Descriptor{ + Manifest: plugin_mgr.Manifest{ + ID: "com.powerx.plugin.demo", + Version: "0.0.1", + Migrations: &plugin_mgr.MigrationsSpec{ + Entry: "backend/bin/migrate", + }, + }, + Paths: plugin_mgr.InstalledPaths{ + Root: root, + MigrationsEntry: filepath.Join(root, "backend/bin/migrate"), + }, + } + + rec, err := m.runPluginMigrate(context.Background(), desc, plugin_mgr.InstallOptions{RunMigrations: true}) + if err == nil { + t.Fatal("runPluginMigrate() expected error when migration entry is missing") + } + if rec == nil { + t.Fatal("runPluginMigrate() returned nil record") + } + if rec.LastStatus != plugin_mgr.MigrationStatusFailed { + t.Fatalf("runPluginMigrate() status = %s, want %s", rec.LastStatus, plugin_mgr.MigrationStatusFailed) + } + if rec.LastError == "" { + t.Fatal("runPluginMigrate() expected skip reason in LastError") + } +} diff --git a/backend/internal/infra/plugin/manager/registry.go b/backend/internal/infra/plugin/manager/registry.go index 1ea22d76..b4b407d6 100644 --- a/backend/internal/infra/plugin/manager/registry.go +++ b/backend/internal/infra/plugin/manager/registry.go @@ -25,6 +25,7 @@ type Registry interface { List(ctx context.Context) []plugin_mgr.Plugin GetVersion(ctx context.Context, id, version string) (plugin_mgr.Plugin, bool) CurrentVersion(ctx context.Context, id string) (string, bool) + ListVersions(ctx context.Context, id string) []string // 判断版本是否已安装 HasVersion(ctx context.Context, id, version string) bool // 设置某插件的 current 指针 @@ -283,6 +284,21 @@ func (r *JSONRegistry) GetVersion(ctx context.Context, id, version string) (plug }, true } +func (r *JSONRegistry) ListVersions(ctx context.Context, id string) []string { + r.mu.RLock() + defer r.mu.RUnlock() + + rec, ok := r.mem.Plugins[id] + if !ok || len(rec.Versions) == 0 { + return nil + } + out := make([]string, 0, len(rec.Versions)) + for ver := range rec.Versions { + out = append(out, ver) + } + return out +} + func cloneHostConfig(hc *plugin_mgr.HostConfig) *plugin_mgr.HostConfig { if hc == nil { return nil diff --git a/backend/internal/infra/plugin/manager/router/router.go b/backend/internal/infra/plugin/manager/router/router.go index f793b84b..26b4e7c1 100644 --- a/backend/internal/infra/plugin/manager/router/router.go +++ b/backend/internal/infra/plugin/manager/router/router.go @@ -1,15 +1,18 @@ package router import ( + "bytes" "crypto/hmac" "crypto/sha256" "encoding/base64" "encoding/json" + "io" "log" "net/http" "net/http/httputil" "net/url" "path/filepath" + "strconv" "strings" "sync" "time" @@ -285,6 +288,8 @@ func (r *DynamicRouter) serveAdmin(c *gin.Context) { // 诊断 req.Header.Set("X-PX-Upstream", up.target.String()) req.Header.Set("X-PX-Client-Path", clientPath) + attachTraceHeaders(c, req) + req.Header.Set("X-PowerX-Plugin-Id", pluginID) } proxy.ModifyResponse = func(resp *http.Response) error { @@ -347,6 +352,17 @@ func (r *DynamicRouter) serveAPIProxy(c *gin.Context) { if clientPath == "" { clientPath = "/" } + if isIdentityAuthClientPath(clientPath) { + hostPath := toHostIdentityAuthPath(clientPath) + if q := c.Request.URL.RawQuery; q != "" { + hostPath += "?" + q + } + log.Printf("[API-REDIRECT] plugin=%s method=%s clientPath=%s -> hostPath=%s", + pluginID, c.Request.Method, clientPath, hostPath) + c.Redirect(http.StatusTemporaryRedirect, hostPath) + c.Abort() + return + } if r.redirectAdminFromAPI(c, pluginID, clientPath) { return } @@ -355,9 +371,19 @@ func (r *DynamicRouter) serveAPIProxy(c *gin.Context) { c.Request.Method, c.Request.URL.Path, pluginID, clientPath) r.mu.RLock() up, ok := r.apis[pluginID] + registered := make([]string, 0, len(r.apis)) + for id := range r.apis { + registered = append(registered, id) + } r.mu.RUnlock() if !ok || up.target == nil { - c.AbortWithStatusJSON(http.StatusNotFound, gin.H{"error": "plugin api not mounted"}) + log.Printf("[API-MISS] plugin=%s registered=%v", pluginID, registered) + c.AbortWithStatusJSON(http.StatusNotFound, gin.H{ + "error": "plugin api upstream unavailable", + "reason": "plugin not mounted into /_p/{id}/api proxy", + "plugin_id": pluginID, + "registered": registered, + }) return } @@ -385,6 +411,38 @@ func (r *DynamicRouter) serveAPIProxy(c *gin.Context) { } proxy := httputil.NewSingleHostReverseProxy(up.target) + proxy.ModifyResponse = func(resp *http.Response) error { + resp.Header.Set("X-PowerX-Upstream-Plugin", pluginID) + resp.Header.Set("X-PowerX-Upstream-Status", http.StatusText(resp.StatusCode)) + if resp.StatusCode < http.StatusBadRequest { + return nil + } + + body, err := io.ReadAll(resp.Body) + if err != nil { + log.Printf("[PROXY-UPSTREAM-ERR] plugin=%s status=%d read_body_err=%v", pluginID, resp.StatusCode, err) + return nil + } + _ = resp.Body.Close() + resp.Body = io.NopCloser(bytes.NewBuffer(body)) + resp.ContentLength = int64(len(body)) + resp.Header.Set("Content-Length", strconv.Itoa(len(body))) + + msg := string(body) + if len(msg) > 1024 { + msg = msg[:1024] + "...(truncated)" + } + log.Printf("[PROXY-UPSTREAM-ERR] plugin=%s method=%s req=%s upstream_status=%d upstream_body=%q", + pluginID, c.Request.Method, c.Request.URL.Path, resp.StatusCode, msg) + return nil + } + proxy.ErrorHandler = func(rw http.ResponseWriter, req *http.Request, err error) { + log.Printf("[PROXY-TRANSPORT-ERR] plugin=%s method=%s req=%s err=%v", + pluginID, c.Request.Method, c.Request.URL.Path, err) + rw.Header().Set("Content-Type", "application/json") + rw.WriteHeader(http.StatusBadGateway) + _, _ = rw.Write([]byte(`{"error":"plugin upstream transport error"}`)) + } origDirector := proxy.Director proxy.Director = func(req *http.Request) { if origDirector != nil { @@ -436,6 +494,8 @@ func (r *DynamicRouter) serveAPIProxy(c *gin.Context) { req.Header.Set("X-PowerX-CTX", ctxB64) req.Header.Set("X-PowerX-CTX-SIG", sig) } + attachTraceHeaders(c, req) + req.Header.Set("X-PowerX-Plugin-Id", pluginID) req.Host = up.target.Host } @@ -606,6 +666,28 @@ func isSubPath(base, child string) bool { return err == nil && !strings.HasPrefix(rel, "..") } +func attachTraceHeaders(c *gin.Context, req *http.Request) { + if c == nil || req == nil { + return + } + traceID := strings.TrimSpace(c.GetHeader("X-Trace-Id")) + if traceID == "" { + traceID = strings.TrimSpace(c.GetHeader("X-Trace-ID")) + } + if traceID != "" { + req.Header.Set("X-Trace-Id", traceID) + req.Header.Set("X-Trace-ID", traceID) + } + requestID := strings.TrimSpace(c.GetHeader("X-Request-Id")) + if requestID == "" { + requestID = strings.TrimSpace(c.GetHeader("X-Request-ID")) + } + if requestID != "" { + req.Header.Set("X-Request-Id", requestID) + req.Header.Set("X-Request-ID", requestID) + } +} + // 从 "/_p//api/*" 裁剪为插件侧期望的 client path(保留前导斜杠) func trimToAPIClientPath(p string) string { // 期望形如 "/_p//api/..." @@ -620,6 +702,61 @@ func trimToAPIClientPath(p string) string { return rest[i+len("/api/")-1:] // 保留前导 '/' } +func isIdentityAuthClientPath(clientPath string) bool { + path := strings.TrimSpace(clientPath) + if path == "" { + return false + } + if !strings.HasPrefix(path, "/") { + path = "/" + path + } + segs := strings.Split(strings.Trim(path, "/"), "/") + if len(segs) < 4 { + return false + } + + // 允许两类入参: + // 1) /v1/admin/{identity}/auth/* + // 2) /api/v1/admin/{identity}/auth/* + switch { + case len(segs) >= 5 && segs[0] == "api" && segs[1] == "v1": + segs = segs[2:] + case segs[0] == "v1": + segs = segs[1:] + } + if len(segs) < 3 { + return false + } + if segs[0] != "admin" { + return false + } + identity := strings.TrimSpace(segs[1]) + if identity == "" { + return false + } + return segs[2] == "auth" +} + +func toHostIdentityAuthPath(clientPath string) string { + path := strings.TrimSpace(clientPath) + if path == "" { + return "/api/v1" + } + if !strings.HasPrefix(path, "/") { + path = "/" + path + } + if strings.HasPrefix(path, "/api/v1/") { + return path + } + if strings.HasPrefix(path, "/v1/") { + return "/api" + path + } + if strings.HasPrefix(path, "/admin/") { + return "/api/v1" + path + } + return "/api/v1" + path +} + func normalizeAdminClientPath(pluginID, clientPath string) (string, bool) { if clientPath == "" { return "/", false diff --git a/backend/internal/infra/plugin/manager/router/router_identity_auth_test.go b/backend/internal/infra/plugin/manager/router/router_identity_auth_test.go new file mode 100644 index 00000000..95f3b468 --- /dev/null +++ b/backend/internal/infra/plugin/manager/router/router_identity_auth_test.go @@ -0,0 +1,59 @@ +package router + +import "testing" + +func TestIsIdentityAuthClientPath(t *testing.T) { + t.Parallel() + + cases := []struct { + name string + path string + want bool + }{ + {name: "v1 user auth me", path: "/v1/admin/user/auth/me/context", want: true}, + {name: "v1 supply auth login", path: "/v1/admin/supply/auth/login", want: true}, + {name: "api v1 user auth", path: "/api/v1/admin/user/auth/refresh", want: true}, + {name: "future identity auth", path: "/v1/admin/channel_partner/auth/logout", want: true}, + {name: "legacy admin auth", path: "/v1/admin/auth/me/context", want: false}, + {name: "normal plugin api", path: "/v1/templates?page=1&page_size=50", want: false}, + {name: "admin non-auth route", path: "/v1/admin/user/profile", want: false}, + {name: "too short", path: "/v1/admin/user", want: false}, + } + + for _, tc := range cases { + tc := tc + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + got := isIdentityAuthClientPath(tc.path) + if got != tc.want { + t.Fatalf("isIdentityAuthClientPath(%q) = %v, want %v", tc.path, got, tc.want) + } + }) + } +} + +func TestToHostIdentityAuthPath(t *testing.T) { + t.Parallel() + + cases := []struct { + name string + in string + want string + }{ + {name: "keep api v1", in: "/api/v1/admin/user/auth/me/context", want: "/api/v1/admin/user/auth/me/context"}, + {name: "v1 to api", in: "/v1/admin/user/auth/me/context", want: "/api/v1/admin/user/auth/me/context"}, + {name: "admin direct to api v1", in: "/admin/supply/auth/login", want: "/api/v1/admin/supply/auth/login"}, + {name: "no leading slash", in: "v1/admin/user/auth/refresh", want: "/api/v1/admin/user/auth/refresh"}, + } + + for _, tc := range cases { + tc := tc + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + got := toHostIdentityAuthPath(tc.in) + if got != tc.want { + t.Fatalf("toHostIdentityAuthPath(%q) = %q, want %q", tc.in, got, tc.want) + } + }) + } +} diff --git a/backend/internal/infra/plugin/manager/uninstall.go b/backend/internal/infra/plugin/manager/uninstall.go index 5da51395..8744d2fe 100644 --- a/backend/internal/infra/plugin/manager/uninstall.go +++ b/backend/internal/infra/plugin/manager/uninstall.go @@ -17,10 +17,15 @@ func (m *managerImpl) Uninstall(ctx context.Context, id string, versionOptional // 1) 目标版本 targetVer := "" + currentVer := "" + if v, ok := m.opts.Registry.CurrentVersion(ctx, id); ok { + currentVer = v + } if len(versionOptional) > 0 && versionOptional[0] != "" { targetVer = versionOptional[0] } else { - if v, ok := m.opts.Registry.CurrentVersion(ctx, id); ok { + if currentVer != "" { + v := currentVer targetVer = v } else { return plugin_mgr.NewError(plugin_mgr.CodeNotFound, plugin_mgr.WithOp("uninstall"), @@ -44,21 +49,31 @@ func (m *managerImpl) Uninstall(ctx context.Context, id string, versionOptional } } - // 4) 清理由宿主创建的数据库资源 - if pl, ok := m.opts.Registry.GetVersion(ctx, id, targetVer); ok { - if err := m.cleanupPluginDatabaseResources(pl.HostConfig); err != nil { - return plugin_mgr.Wrap( - plugin_mgr.CodeLifecycleError, err, plugin_mgr.WithOp("uninstall.db_cleanup"), - plugin_mgr.WithPlugin(id), plugin_mgr.WithVersion(targetVer), - ) + // 4) 若删除当前版本,则连带清理该插件所有旧版本 + removeVersions := []string{targetVer} + if currentVer != "" && targetVer == currentVer { + all := m.opts.Registry.ListVersions(ctx, id) + if len(all) > 0 { + removeVersions = all } } - // 5) 从注册表删除并保存 - if err := m.opts.Registry.Remove(ctx, id, targetVer); err != nil { - return plugin_mgr.Wrap(plugin_mgr.CodeRegistryError, err, plugin_mgr.WithOp("uninstall.remove"), - plugin_mgr.WithPlugin(id), plugin_mgr.WithVersion(targetVer)) + // 5) 清理由宿主创建的数据库资源 + 从注册表删除 + for _, ver := range removeVersions { + if pl, ok := m.opts.Registry.GetVersion(ctx, id, ver); ok { + if err := m.cleanupPluginDatabaseResources(pl.HostConfig); err != nil { + return plugin_mgr.Wrap( + plugin_mgr.CodeLifecycleError, err, plugin_mgr.WithOp("uninstall.db_cleanup"), + plugin_mgr.WithPlugin(id), plugin_mgr.WithVersion(ver), + ) + } + } + if err := m.opts.Registry.Remove(ctx, id, ver); err != nil { + return plugin_mgr.Wrap(plugin_mgr.CodeRegistryError, err, plugin_mgr.WithOp("uninstall.remove"), + plugin_mgr.WithPlugin(id), plugin_mgr.WithVersion(ver)) + } } + if err := m.opts.Registry.Save(ctx); err != nil { return plugin_mgr.Wrap(plugin_mgr.CodeRegistryError, err, plugin_mgr.WithOp("uninstall.save"), plugin_mgr.WithPlugin(id), plugin_mgr.WithVersion(targetVer)) @@ -74,21 +89,36 @@ func (m *managerImpl) UninstallAndPurge(ctx context.Context, id string, versionO // 先确定目标版本 & 路径(卸载前先拿路径) targetVer := "" + currentVer := "" + if v, ok := m.opts.Registry.CurrentVersion(ctx, id); ok { + currentVer = v + } if len(versionOptional) > 0 && versionOptional[0] != "" { targetVer = versionOptional[0] } else { - if v, ok := m.opts.Registry.CurrentVersion(ctx, id); ok { + if currentVer != "" { + v := currentVer targetVer = v } else { return plugin_mgr.NewError(plugin_mgr.CodeNotFound, plugin_mgr.WithOp("uninstall_purge"), plugin_mgr.WithPlugin(id), plugin_mgr.WithMsg("no current version to uninstall")) } } - - pl, ok := m.opts.Registry.GetVersion(ctx, id, targetVer) - if !ok { - return plugin_mgr.NewError(plugin_mgr.CodeNotFound, plugin_mgr.WithOp("uninstall_purge"), - plugin_mgr.WithPlugin(id), plugin_mgr.WithVersion(targetVer), plugin_mgr.WithMsg("target version not installed")) + purgeVersions := []string{targetVer} + if currentVer != "" && targetVer == currentVer { + all := m.opts.Registry.ListVersions(ctx, id) + if len(all) > 0 { + purgeVersions = all + } + } + paths := make([]string, 0, len(purgeVersions)) + for _, ver := range purgeVersions { + pl, ok := m.opts.Registry.GetVersion(ctx, id, ver) + if !ok { + return plugin_mgr.NewError(plugin_mgr.CodeNotFound, plugin_mgr.WithOp("uninstall_purge"), + plugin_mgr.WithPlugin(id), plugin_mgr.WithVersion(ver), plugin_mgr.WithMsg("target version not installed")) + } + paths = append(paths, pl.Paths.Root) } // 先逻辑卸载 @@ -97,7 +127,12 @@ func (m *managerImpl) UninstallAndPurge(ctx context.Context, id string, versionO } // 再安全删除产物目录 - return m.purgePath(pl.Paths.Root) + for _, p := range paths { + if err := m.purgePath(p); err != nil { + return err + } + } + return nil } // --- 内部工具 --- diff --git a/backend/internal/server/mcp/blueprints/usecases/user_login_flow.yaml b/backend/internal/server/mcp/blueprints/usecases/user_login_flow.yaml index 9c3f37d3..f3c285d3 100644 --- a/backend/internal/server/mcp/blueprints/usecases/user_login_flow.yaml +++ b/backend/internal/server/mcp/blueprints/usecases/user_login_flow.yaml @@ -612,7 +612,7 @@ output_config: dto: "api/dto/auth/auth_dto.go" adapter: "api/adapter/auth/auth_adapter.go" router: "api/http/router.go" - handler: "api/http/admin/auth/auth_handler.go" + handler: "api/http/admin/user/auth/auth_handler.go" grpc_service: "api/grpc/v1/auth/auth_service.go" test_structure: test: "test/auth/auth_test.go" @@ -639,4 +639,4 @@ security_config: log_successful_logins: true log_failed_logins: true log_account_lockouts: true - retention_days: 90 \ No newline at end of file + retention_days: 90 diff --git a/backend/internal/transport/http/admin/dto/menu.go b/backend/internal/transport/http/admin/dto/menu.go index b33cd630..c56bdb7a 100644 --- a/backend/internal/transport/http/admin/dto/menu.go +++ b/backend/internal/transport/http/admin/dto/menu.go @@ -15,15 +15,16 @@ type AdminMenuItem struct { Title string `json:"title"` Icon string `json:"icon,omitempty"` // 对前端:path;对后端:仍然用 URL 字段名(兼容你现有引用) - URL string `json:"path,omitempty"` // 路径 - Order int `json:"order"` // 排序 - Visible bool `json:"visible"` // 是否可见 - Origin plugin_mgr.MenuOriginType `json:"origin,omitempty"` // "system" | "plugin" | "mixed" - Permissions []string `json:"permissions,omitempty"` // 权限 - ParentID plugin_mgr.MenuKey `json:"parentId,omitempty"` // 父菜单ID - Slot plugin_mgr.SlotKey `json:"slot,omitempty"` // 插件插槽 - Children []AdminMenuItem `json:"children,omitempty"` // 子菜单 - TitleI18n *MenuI18nLabel `json:"titleI18n,omitempty"` + URL string `json:"path,omitempty"` // 路径 + Order int `json:"order"` // 排序 + Visible bool `json:"visible"` // 是否可见 + Origin plugin_mgr.MenuOriginType `json:"origin,omitempty"` // "system" | "plugin" | "mixed" + Permissions []string `json:"permissions,omitempty"` // 权限 + ParentID plugin_mgr.MenuKey `json:"parentId,omitempty"` // 父菜单ID + Slot plugin_mgr.SlotKey `json:"slot,omitempty"` // 插件插槽 + Children []AdminMenuItem `json:"children,omitempty"` // 子菜单 + TitleI18n *MenuI18nLabel `json:"titleI18n,omitempty"` + PluginVersion string `json:"pluginVersion,omitempty"` } type MenuI18nLabel struct { diff --git a/backend/internal/transport/http/admin/menu/merge_handler.go b/backend/internal/transport/http/admin/menu/merge_handler.go index fc7a02fd..59863430 100644 --- a/backend/internal/transport/http/admin/menu/merge_handler.go +++ b/backend/internal/transport/http/admin/menu/merge_handler.go @@ -722,17 +722,19 @@ func groupAsCategories(sys []admdto.AdminMenuItem, i18n []admdto.MenuI18nPackage return string(orderedGroups[i].Key) < string(orderedGroups[j].Key) }) for _, g := range orderedGroups { + groupVersion := firstNonEmptyPluginVersion(g.Items) if len(g.Items) == 1 && len(g.Items[0].Children) > 0 { rootItem := g.Items[0] header := admdto.AdminMenuItem{ - Key: g.Key, - Title: rootItem.Title, - Icon: rootItem.Icon, - Order: g.Order, - Origin: plugin_mgr.OriginPlugin, - Visible: true, - Slot: rootItem.Slot, - Children: rootItem.Children, + Key: g.Key, + Title: rootItem.Title, + Icon: rootItem.Icon, + Order: g.Order, + Origin: plugin_mgr.OriginPlugin, + Visible: true, + Slot: rootItem.Slot, + Children: rootItem.Children, + PluginVersion: rootItem.PluginVersion, } // 组头标题尝试用 menu..title 覆盖(如 menu.base.title) if gt := guessPluginGroupTitleFromChildren(header.Children, i18n, locales); gt != "" { @@ -744,11 +746,12 @@ func groupAsCategories(sys []admdto.AdminMenuItem, i18n []admdto.MenuI18nPackage byID[catAppsKey].Children = append(byID[catAppsKey].Children, header) } else { header := admdto.AdminMenuItem{ - Key: g.Key, - Title: g.Title, - Order: g.Order, - Origin: plugin_mgr.OriginPlugin, - Visible: true, + Key: g.Key, + Title: g.Title, + Order: g.Order, + Origin: plugin_mgr.OriginPlugin, + Visible: true, + PluginVersion: groupVersion, } header.Children = g.Items byID[catAppsKey].Children = append(byID[catAppsKey].Children, header) @@ -807,6 +810,16 @@ func addToPluginGroup(groups map[string]*pluginGroup, key, title string, item ad g.Items = append(g.Items, child) } +func firstNonEmptyPluginVersion(items []admdto.AdminMenuItem) string { + for _, it := range items { + v := strings.TrimSpace(it.PluginVersion) + if v != "" { + return v + } + } + return "" +} + func formatSlotSeparatorTitle(raw string, i18n []admdto.MenuI18nPackage, locales []string) string { raw = strings.TrimSpace(raw) sep := " -" diff --git a/backend/internal/transport/http/admin/plugin/install_handler.go b/backend/internal/transport/http/admin/plugin/install_handler.go index b90f9575..fa79d207 100644 --- a/backend/internal/transport/http/admin/plugin/install_handler.go +++ b/backend/internal/transport/http/admin/plugin/install_handler.go @@ -5,11 +5,12 @@ import ( "compress/gzip" "encoding/json" "io" + "mime/multipart" "os" "path/filepath" + "strconv" "strings" - mgrimpl "github.com/ArtisanCloud/PowerX/internal/infra/plugin/manager" dtoRequest "github.com/ArtisanCloud/PowerX/pkg/dto" "github.com/ArtisanCloud/PowerX/pkg/plugin_mgr" "github.com/gin-gonic/gin" @@ -18,32 +19,85 @@ import ( // POST /api/admin/plugins/install/local // body: {"src_dir": "/absolute/or/relative/path", "enable": false} type installLocalReq struct { - SrcDir string `json:"src_dir" binding:"required"` + SrcDir string `json:"src_dir"` Enable bool `json:"enable"` Force bool `json:"force"` Metadata plugin_mgr.InstallMetadata `json:"metadata"` } func PluginInstallLocalHandler(c *gin.Context) { - var req installLocalReq - if err := dtoRequest.ValidateRequestWithContext(c, &req); err != nil { - dtoRequest.ResponseValidationError(c, err) - return - } + var ( + req installLocalReq + srcPath string + cleanup func() + err error + ) - // 解析 src_dir:支持直接传 tar.gz 包,或传入包含 package.tar.gz 的 build 目录,或包含 plugin.yaml 的目录 - srcDir, cleanup, err := resolveInstallSource(req.SrcDir) - if err != nil { - dtoRequest.ResponseError(c, plugin_mgr.HTTPStatusOf(plugin_mgr.CodeOf(err)), "安装失败", err) - return + // multipart 优先:文件选择器上传 + if strings.HasPrefix(strings.ToLower(c.ContentType()), "multipart/form-data") { + req.Enable = parseBool(c.PostForm("enable")) + req.Force = parseBool(c.PostForm("force")) + + var uploadedPath string + fileHeader, ferr := c.FormFile("file") + if ferr == nil && fileHeader != nil { + uploadedPath, cleanup, err = saveUploadedFileToTemp(fileHeader) + } else { + var formErr error + var form *multipart.Form + form, formErr = c.MultipartForm() + if formErr != nil || form == nil || len(form.File["files"]) == 0 { + dtoRequest.ResponseError(c, 400, "安装失败", plugin_mgr.NewError(plugin_mgr.CodeInvalidArg, plugin_mgr.WithMsg("file or files is required"))) + return + } + uploadedPath, cleanup, err = saveUploadedDirToTemp(form.File["files"], form.Value["file_paths"]) + } + if err != nil { + dtoRequest.ResponseError(c, plugin_mgr.HTTPStatusOf(plugin_mgr.CodeOf(err)), "安装失败", err) + return + } + var resolveCleanup func() + srcPath, resolveCleanup, err = resolveInstallSource(uploadedPath) + if err != nil { + if cleanup != nil { + cleanup() + cleanup = nil + } + dtoRequest.ResponseError(c, plugin_mgr.HTTPStatusOf(plugin_mgr.CodeOf(err)), "安装失败", err) + return + } + if resolveCleanup != nil { + prevCleanup := cleanup + cleanup = func() { + resolveCleanup() + if prevCleanup != nil { + prevCleanup() + } + } + } + } else { + // JSON 兼容:服务端本地路径安装 + if err := dtoRequest.ValidateRequestWithContext(c, &req); err != nil { + dtoRequest.ResponseValidationError(c, err) + return + } + srcPath, cleanup, err = resolveInstallSource(req.SrcDir) + if err != nil { + dtoRequest.ResponseError(c, plugin_mgr.HTTPStatusOf(plugin_mgr.CodeOf(err)), "安装失败", err) + return + } } if cleanup != nil { defer cleanup() } - mgr := mgrimpl.GetPluginManager() // 你走“实现包全局” + mgr, err := tryGetPluginManager() + if err != nil { + respondPluginRuntimeUnavailable(c, err) + return + } meta := coalesceInstallMetadata(c, req.Metadata) - p, err := mgr.InstallFromFile(c, srcDir, plugin_mgr.InstallOptions{ + p, err := mgr.InstallFromFile(c, srcPath, plugin_mgr.InstallOptions{ AutoEnable: req.Enable, Force: req.Force, Metadata: meta, @@ -63,6 +117,116 @@ func PluginInstallLocalHandler(c *gin.Context) { }) } +func parseBool(v string) bool { + ok, err := strconv.ParseBool(strings.TrimSpace(v)) + if err != nil { + return false + } + return ok +} + +func saveUploadedFileToTemp(fileHeader *multipart.FileHeader) (string, func(), error) { + in, err := fileHeader.Open() + if err != nil { + return "", nil, plugin_mgr.Wrap(plugin_mgr.CodeIOError, err, plugin_mgr.WithOp("upload_open")) + } + defer in.Close() + + ext := strings.ToLower(filepath.Ext(fileHeader.Filename)) + if strings.HasSuffix(strings.ToLower(fileHeader.Filename), ".tar.gz") { + ext = ".tar.gz" + } + tmpFile, err := os.CreateTemp("", "px-plugin-upload-*"+ext) + if err != nil { + return "", nil, plugin_mgr.Wrap(plugin_mgr.CodeIOError, err, plugin_mgr.WithOp("upload_temp")) + } + defer tmpFile.Close() + if _, err := io.Copy(tmpFile, in); err != nil { + _ = os.Remove(tmpFile.Name()) + return "", nil, plugin_mgr.Wrap(plugin_mgr.CodeIOError, err, plugin_mgr.WithOp("upload_copy")) + } + return tmpFile.Name(), func() { + _ = os.Remove(tmpFile.Name()) + }, nil +} + +func saveUploadedDirToTemp(files []*multipart.FileHeader, relPathsInput []string) (string, func(), error) { + tmpRoot, err := os.MkdirTemp("", "px-plugin-upload-dir-*") + if err != nil { + return "", nil, plugin_mgr.Wrap(plugin_mgr.CodeIOError, err, plugin_mgr.WithOp("upload_dir_temp")) + } + cleanup := func() { + _ = os.RemoveAll(tmpRoot) + } + relPaths := make([]string, 0, len(files)) + hasPathHints := len(relPathsInput) == len(files) + for _, fh := range files { + relRaw := strings.TrimSpace(fh.Filename) + if hasPathHints { + relRaw = strings.TrimSpace(relPathsInput[len(relPaths)]) + } + rel := filepath.Clean(relRaw) + rel = strings.TrimPrefix(rel, string(filepath.Separator)) + if rel == "" || rel == "." || strings.HasPrefix(rel, "..") { + cleanup() + return "", nil, plugin_mgr.NewError(plugin_mgr.CodeInvalidArg, plugin_mgr.WithMsg("invalid uploaded directory entry")) + } + target := filepath.Join(tmpRoot, rel) + cleanTarget := filepath.Clean(target) + if !strings.HasPrefix(cleanTarget, tmpRoot+string(filepath.Separator)) && cleanTarget != tmpRoot { + cleanup() + return "", nil, plugin_mgr.NewError(plugin_mgr.CodeInvalidArg, plugin_mgr.WithMsg("invalid uploaded directory path")) + } + + if err := os.MkdirAll(filepath.Dir(cleanTarget), 0o755); err != nil { + cleanup() + return "", nil, plugin_mgr.Wrap(plugin_mgr.CodeIOError, err, plugin_mgr.WithOp("upload_dir_mkdir")) + } + in, err := fh.Open() + if err != nil { + cleanup() + return "", nil, plugin_mgr.Wrap(plugin_mgr.CodeIOError, err, plugin_mgr.WithOp("upload_dir_open")) + } + out, err := os.OpenFile(cleanTarget, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0o644) + if err != nil { + in.Close() + cleanup() + return "", nil, plugin_mgr.Wrap(plugin_mgr.CodeIOError, err, plugin_mgr.WithOp("upload_dir_create")) + } + if _, err := io.Copy(out, in); err != nil { + out.Close() + in.Close() + cleanup() + return "", nil, plugin_mgr.Wrap(plugin_mgr.CodeIOError, err, plugin_mgr.WithOp("upload_dir_copy")) + } + out.Close() + in.Close() + relPaths = append(relPaths, rel) + } + return detectUploadedRoot(tmpRoot, relPaths), cleanup, nil +} + +func detectUploadedRoot(tmpRoot string, relPaths []string) string { + if len(relPaths) == 0 { + return tmpRoot + } + root := strings.Split(relPaths[0], string(filepath.Separator))[0] + if root == "" || root == "." { + return tmpRoot + } + for _, rel := range relPaths[1:] { + seg := strings.Split(rel, string(filepath.Separator))[0] + if seg != root { + return tmpRoot + } + } + candidate := filepath.Join(tmpRoot, root) + if st, err := os.Stat(candidate); err == nil && st.IsDir() { + return candidate + } + return tmpRoot +} + // resolveInstallSource 尝试将传入路径解析为可安装目录: // - 若是目录且包含 plugin.yaml:直接使用 // - 若是目录且包含 payload/plugin.yaml:使用 payload 子目录 @@ -100,11 +264,11 @@ func resolveInstallSource(src string) (string, func(), error) { } // 文件:若是 tar.gz 则解压 - if strings.HasSuffix(strings.ToLower(abs), ".tar.gz") { + if isSupportedPackageFile(abs) { return untarToTemp(abs) } - return "", nil, plugin_mgr.NewError(plugin_mgr.CodeInvalidArg, plugin_mgr.WithMsg("srcDir must be a directory with plugin.yaml or a package.tar.gz")) + return "", nil, plugin_mgr.NewError(plugin_mgr.CodeInvalidArg, plugin_mgr.WithMsg("srcDir must be a directory with plugin.yaml or a package.tar.gz/.tgz")) } func hasManifest(dir string) bool { @@ -125,13 +289,18 @@ func findPackage(dir string) string { continue } name := strings.ToLower(e.Name()) - if strings.HasSuffix(name, ".tar.gz") && strings.Contains(name, "package") { + if isSupportedPackageFile(name) { return filepath.Join(dir, e.Name()) } } return "" } +func isSupportedPackageFile(path string) bool { + lower := strings.ToLower(path) + return strings.HasSuffix(lower, ".tar.gz") || strings.HasSuffix(lower, ".tgz") +} + func untarToTemp(pkgPath string) (string, func(), error) { tmpDir, err := os.MkdirTemp("", "px-plugin-install-*") if err != nil { @@ -247,7 +416,11 @@ func PluginSwitchVersionHandler(c *gin.Context) { return } - mgr := mgrimpl.GetPluginManager() // 走实现包的全局 + mgr, err := tryGetPluginManager() + if err != nil { + respondPluginRuntimeUnavailable(c, err) + return + } p, err := mgr.SwitchVersion(c, id, req.Version, req.Enable) if err != nil { dtoRequest.ResponseError(c, plugin_mgr.HTTPStatusOf(plugin_mgr.CodeOf(err)), "切换版本失败", err) @@ -266,6 +439,7 @@ type installURLReq struct { URL string `json:"url" validate:"required,url"` SHA256 string `json:"sha256"` Enable bool `json:"enable"` + Force bool `json:"force"` Sign string `json:"signature"` Metadata plugin_mgr.InstallMetadata `json:"metadata"` } @@ -276,7 +450,11 @@ func PluginInstallURLHandler(c *gin.Context) { dtoRequest.ResponseValidationError(c, err) return } - mgr := mgrimpl.GetPluginManager() + mgr, err := tryGetPluginManager() + if err != nil { + respondPluginRuntimeUnavailable(c, err) + return + } // 安装(只登记、不自动启用) meta := coalesceInstallMetadata(c, req.Metadata) @@ -284,6 +462,7 @@ func PluginInstallURLHandler(c *gin.Context) { VerifyChecksum: req.SHA256 != "", // 传了就校验 VerifySignature: false, // 先关;后续接公钥再开 AutoEnable: req.Enable, + Force: req.Force, Metadata: meta, }) if err != nil { diff --git a/backend/internal/transport/http/admin/plugin/logs_handler.go b/backend/internal/transport/http/admin/plugin/logs_handler.go index 44f3bc51..10539b2a 100644 --- a/backend/internal/transport/http/admin/plugin/logs_handler.go +++ b/backend/internal/transport/http/admin/plugin/logs_handler.go @@ -1,7 +1,6 @@ package plugin import ( - mgrimpl "github.com/ArtisanCloud/PowerX/internal/infra/plugin/manager" dtoRequest "github.com/ArtisanCloud/PowerX/pkg/dto" "github.com/gin-gonic/gin" "strconv" @@ -25,7 +24,11 @@ func PluginLogsHandler(c *gin.Context) { } } - mgr := mgrimpl.GetPluginManager() + mgr, err := tryGetPluginManager() + if err != nil { + respondPluginRuntimeUnavailable(c, err) + return + } type logsProvider interface { RuntimeLogs(id string, tailBytes int) (string, bool) diff --git a/backend/internal/transport/http/admin/plugin/manager_guard.go b/backend/internal/transport/http/admin/plugin/manager_guard.go new file mode 100644 index 00000000..30a9cccb --- /dev/null +++ b/backend/internal/transport/http/admin/plugin/manager_guard.go @@ -0,0 +1,28 @@ +package plugin + +import ( + "fmt" + + mgrimpl "github.com/ArtisanCloud/PowerX/internal/infra/plugin/manager" + dtoRequest "github.com/ArtisanCloud/PowerX/pkg/dto" + "github.com/ArtisanCloud/PowerX/pkg/plugin_mgr" + "github.com/gin-gonic/gin" +) + +func tryGetPluginManager() (mgr plugin_mgr.Manager, err error) { + defer func() { + if r := recover(); r != nil { + err = fmt.Errorf("plugin manager unavailable: %v", r) + mgr = nil + } + }() + mgr = mgrimpl.GetPluginManager() + if mgr == nil { + return nil, fmt.Errorf("plugin manager unavailable: nil manager") + } + return mgr, nil +} + +func respondPluginRuntimeUnavailable(c *gin.Context, err error) { + dtoRequest.ResponseError(c, 503, "插件运行时不可用", err) +} diff --git a/backend/internal/transport/http/admin/plugin/market_handler.go b/backend/internal/transport/http/admin/plugin/market_handler.go index 69819620..6b983029 100644 --- a/backend/internal/transport/http/admin/plugin/market_handler.go +++ b/backend/internal/transport/http/admin/plugin/market_handler.go @@ -2,13 +2,13 @@ package plugin import ( - mgrimpl "github.com/ArtisanCloud/PowerX/internal/infra/plugin/manager" - dto "github.com/ArtisanCloud/PowerX/pkg/dto" - pmdto "github.com/ArtisanCloud/PowerX/pkg/dto/plugin_mgr" - "github.com/gin-gonic/gin" - "os" - "path/filepath" - "strings" + dto "github.com/ArtisanCloud/PowerX/pkg/dto" + pmdto "github.com/ArtisanCloud/PowerX/pkg/dto/plugin_mgr" + "github.com/ArtisanCloud/PowerX/pkg/plugin_mgr" + "github.com/gin-gonic/gin" + "os" + "path/filepath" + "strings" ) // ---- 基础配置(由路由层注入一次) ---- @@ -53,16 +53,26 @@ func MarketplaceListHandler(basePrefix string) gin.HandlerFunc { return "" } - return func(c *gin.Context) { - mgr := mgrimpl.GetPluginManager() - list, err := mgr.List(c) - if err != nil { - dto.ResponseError(c, 500, "加载插件失败", err) - return - } + return func(c *gin.Context) { + mgr, err := tryGetPluginManager() + var list []pmdto.MarketplaceItem + var plugs []plugin_mgr.Plugin + if err == nil { + plugs, err = mgr.List(c) + if err != nil { + dto.ResponseError(c, 500, "加载插件失败", err) + return + } + } else { + plugs, err = listPluginsFromRegistry(c) + if err != nil { + dto.ResponseList(c, []pmdto.MarketplaceItem{}, nil) + return + } + } - out := make([]pmdto.MarketplaceItem, 0, len(list)) - for _, p := range list { + out := make([]pmdto.MarketplaceItem, 0, len(plugs)) + for _, p := range plugs { iconURL := "" if p.Frontend.Admin.Kind == "static" && p.Paths.FrontendAdminDir != "" { if abs, err := filepath.Abs(p.Paths.FrontendAdminDir); err == nil { @@ -83,110 +93,122 @@ func MarketplaceListHandler(basePrefix string) gin.HandlerFunc { }) } - dto.ResponseList(c, out, nil) - } + list = out + dto.ResponseList(c, list, nil) + } } // MarketplaceListV2Handler: 返回贴合前端 Plugin 类型的结构(本地模拟) // 说明:无远端 Marketplace 时,使用当前已安装列表 + 元数据补齐字段;后续可改为远端合并。 func MarketplaceListV2Handler(basePrefix string) gin.HandlerFunc { - // 复用与 v1 相同的图标解析逻辑 - resolveIconURL := func(pID, adminDirAbs, iconFromMeta string) string { - if iconFromMeta == "" { - for _, rel := range []string{"icon.svg", "icon.png", "assets/icon.svg", "assets/icon.png"} { - if fi, err := os.Stat(filepath.Join(adminDirAbs, rel)); err == nil && !fi.IsDir() { - return basePrefix + "/" + pID + "/admin/" + rel - } - } - return "" - } - rel := strings.TrimPrefix(iconFromMeta, "./") - if fi, err := os.Stat(filepath.Join(adminDirAbs, rel)); err == nil && !fi.IsDir() { - return basePrefix + "/" + pID + "/admin/" + rel - } - if strings.HasPrefix(iconFromMeta, "http://") || strings.HasPrefix(iconFromMeta, "https://") { - return iconFromMeta - } - return "" - } - - slugify := func(id string) string { - s := strings.ReplaceAll(id, ".", "-") - s = strings.ReplaceAll(s, "_", "-") - return s - } - - // map state → systemStatus - toSystemStatus := func(state string) string { - switch strings.ToLower(strings.TrimSpace(state)) { - case "enabled": - return "enabled" - case "disabled": - return "disabled" - case "installed": - return "installed" - default: - return "not_installed" - } - } - - return func(c *gin.Context) { - mgr := mgrimpl.GetPluginManager() - list, err := mgr.List(c) - if err != nil { - dto.ResponseError(c, 500, "加载插件失败", err) - return - } - - out := make([]gin.H, 0, len(list)) - for _, p := range list { - iconURL := "" - if p.Frontend.Admin.Kind == "static" && p.Paths.FrontendAdminDir != "" { - if abs, err := filepath.Abs(p.Paths.FrontendAdminDir); err == nil { - iconURL = resolveIconURL(p.ID, abs, p.Metadata.Icon) - } - } - - systemStatus := toSystemStatus(string(p.State)) - isInstalled := systemStatus != "not_installed" - isEnabled := systemStatus == "enabled" - - // 补齐前端需要的字段;无远端 marketplace 时给默认值 - item := gin.H{ - "id": p.ID, - "name": p.Name, - "slug": slugify(p.ID), - "version": p.Version, - "description": p.Description, - "author": p.Metadata.Author, - "authorUrl": p.Metadata.Homepage, - "homepage": p.Metadata.Homepage, - "repository": "", - "license": p.Metadata.License, - "icon": iconURL, - "screenshots": []string{}, - "category": p.Metadata.Category, - "tags": append([]string(nil), p.Metadata.Tags...), - "systemStatus": systemStatus, - "isSystemInstalled": isInstalled, - "isSystemEnabled": isEnabled, - "installPath": p.Paths.Root, - "configSchema": gin.H{}, - "config": gin.H{}, - "dependencies": []string{}, - "requirements": gin.H{}, - "downloadUrl": "", - "downloadCount": 0, - "rating": 0, - "reviewCount": 0, - "lastUpdated": "", - "createdAt": "", - "updatedAt": "", - } - out = append(out, item) - } - - // 使用统一列表响应格式 - dto.ResponseList(c, out, nil) - } + // 复用与 v1 相同的图标解析逻辑 + resolveIconURL := func(pID, adminDirAbs, iconFromMeta string) string { + if iconFromMeta == "" { + for _, rel := range []string{"icon.svg", "icon.png", "assets/icon.svg", "assets/icon.png"} { + if fi, err := os.Stat(filepath.Join(adminDirAbs, rel)); err == nil && !fi.IsDir() { + return basePrefix + "/" + pID + "/admin/" + rel + } + } + return "" + } + rel := strings.TrimPrefix(iconFromMeta, "./") + if fi, err := os.Stat(filepath.Join(adminDirAbs, rel)); err == nil && !fi.IsDir() { + return basePrefix + "/" + pID + "/admin/" + rel + } + if strings.HasPrefix(iconFromMeta, "http://") || strings.HasPrefix(iconFromMeta, "https://") { + return iconFromMeta + } + return "" + } + + slugify := func(id string) string { + s := strings.ReplaceAll(id, ".", "-") + s = strings.ReplaceAll(s, "_", "-") + return s + } + + // map state → systemStatus + toSystemStatus := func(state string) string { + switch strings.ToLower(strings.TrimSpace(state)) { + case "enabled": + return "enabled" + case "disabled": + return "disabled" + case "installed": + return "installed" + case "broken", "invalid", "abnormal": + return "broken" + default: + return "not_installed" + } + } + + return func(c *gin.Context) { + mgr, err := tryGetPluginManager() + var list []plugin_mgr.Plugin + if err == nil { + list, err = mgr.List(c) + if err != nil { + dto.ResponseError(c, 500, "加载插件失败", err) + return + } + } else { + list, err = listPluginsFromRegistry(c) + if err != nil { + dto.ResponseList(c, []gin.H{}, nil) + return + } + } + + out := make([]gin.H, 0, len(list)) + for _, p := range list { + iconURL := "" + if p.Frontend.Admin.Kind == "static" && p.Paths.FrontendAdminDir != "" { + if abs, err := filepath.Abs(p.Paths.FrontendAdminDir); err == nil { + iconURL = resolveIconURL(p.ID, abs, p.Metadata.Icon) + } + } + + systemStatus := toSystemStatus(string(p.State)) + isInstalled := systemStatus != "not_installed" + isEnabled := systemStatus == "enabled" + + // 补齐前端需要的字段;无远端 marketplace 时给默认值 + item := gin.H{ + "id": p.ID, + "name": p.Name, + "slug": slugify(p.ID), + "version": p.Version, + "description": p.Description, + "author": p.Metadata.Author, + "authorUrl": p.Metadata.Homepage, + "homepage": p.Metadata.Homepage, + "repository": "", + "license": p.Metadata.License, + "icon": iconURL, + "screenshots": []string{}, + "category": p.Metadata.Category, + "tags": append([]string(nil), p.Metadata.Tags...), + "systemStatus": systemStatus, + "isSystemInstalled": isInstalled, + "isSystemEnabled": isEnabled, + "installPath": p.Paths.Root, + "configSchema": gin.H{}, + "config": gin.H{}, + "dependencies": []string{}, + "requirements": gin.H{}, + "downloadUrl": "", + "downloadCount": 0, + "rating": 0, + "reviewCount": 0, + "lastUpdated": "", + "createdAt": "", + "updatedAt": "", + } + out = append(out, item) + } + + // 使用统一列表响应格式 + dto.ResponseList(c, out, nil) + } } diff --git a/backend/internal/transport/http/admin/plugin/menus_agg.go b/backend/internal/transport/http/admin/plugin/menus_agg.go index fde0896b..2a0db927 100644 --- a/backend/internal/transport/http/admin/plugin/menus_agg.go +++ b/backend/internal/transport/http/admin/plugin/menus_agg.go @@ -8,7 +8,7 @@ import ( "sort" "strings" - mgrimpl "github.com/ArtisanCloud/PowerX/internal/infra/plugin/manager" + "github.com/ArtisanCloud/PowerX/config" admdto "github.com/ArtisanCloud/PowerX/internal/transport/http/admin/dto" "github.com/ArtisanCloud/PowerX/pkg/plugin_mgr" ) @@ -19,7 +19,17 @@ type PluginMenusPublic struct { } func BuildPluginMenusPublic(ctx context.Context, basePrefix string, locales []string) PluginMenusPublic { - mgr := mgrimpl.GetPluginManager() + cfg := config.GetGlobalConfig() + if cfg != nil && !cfg.Plugin.Enabled { + log.Printf("[menu-builder] plugin runtime disabled, skip plugin menus") + return PluginMenusPublic{Items: []admdto.AdminMenuItem{}} + } + + mgr, err := tryGetPluginManager() + if err != nil { + log.Printf("[menu-builder] plugin manager unavailable, skip plugin menus: %v", err) + return PluginMenusPublic{Items: []admdto.AdminMenuItem{}} + } list, err := mgr.List(ctx) if err != nil { return PluginMenusPublic{} @@ -35,12 +45,9 @@ func BuildPluginMenusPublic(ctx context.Context, basePrefix string, locales []st log.Printf("[menu-builder] id=%s state=%s kind=%s adminDir=%q menus=%d", p.ID, p.State, p.Frontend.Admin.Kind, p.Paths.FrontendAdminDir, len(p.Frontend.Admin.Menus)) - if p.State == plugin_mgr.StateDisabled { - log.Printf("[menu-builder] skip=%s reason=state=disabled", p.ID) - continue - } if p.State != plugin_mgr.StateEnabled { - log.Printf("[menu-builder] include=%s state=%s (menus only)", p.ID, p.State) + log.Printf("[menu-builder] skip=%s reason=state=%s", p.ID, p.State) + continue } // 只要插件声明了菜单,就接入(无论 static / process / proxy) @@ -61,7 +68,7 @@ func BuildPluginMenusPublic(ctx context.Context, basePrefix string, locales []st root := basePrefix + "/" + p.ID + "/admin/" for _, m := range p.Frontend.Admin.Menus { - item := convertPluginMenuItem(p.ID, root, "", m, preferredLocales, bundle) + item := convertPluginMenuItem(p.ID, p.Version, root, "", m, preferredLocales, bundle) if item.Slot == "" { item.Slot = plugin_mgr.SlotPlugins } @@ -72,7 +79,7 @@ func BuildPluginMenusPublic(ctx context.Context, basePrefix string, locales []st return out } -func convertPluginMenuItem(pluginID, root string, parent plugin_mgr.MenuKey, m plugin_mgr.MenuItem, locales []string, bundle *admdto.MenuI18nPackage) admdto.AdminMenuItem { +func convertPluginMenuItem(pluginID, pluginVersion, root string, parent plugin_mgr.MenuKey, m plugin_mgr.MenuItem, locales []string, bundle *admdto.MenuI18nPackage) admdto.AdminMenuItem { route := strings.TrimLeft(m.Route, "/") url := root if route != "" { @@ -90,16 +97,17 @@ func convertPluginMenuItem(pluginID, root string, parent plugin_mgr.MenuKey, m p key := makePluginMenuKey(pluginID, m, route) item := admdto.AdminMenuItem{ - Key: key, - Title: title, - Icon: m.Icon, - URL: url, - Order: m.Order, - Origin: plugin_mgr.OriginPlugin, - Visible: visible, - Slot: slot, - Permissions: m.RequiredPolicies, - TitleI18n: titleI18n, + Key: key, + Title: title, + Icon: m.Icon, + URL: url, + Order: m.Order, + Origin: plugin_mgr.OriginPlugin, + Visible: visible, + Slot: slot, + Permissions: m.RequiredPolicies, + TitleI18n: titleI18n, + PluginVersion: strings.TrimSpace(pluginVersion), } if parent != "" { item.ParentID = parent @@ -108,7 +116,7 @@ func convertPluginMenuItem(pluginID, root string, parent plugin_mgr.MenuKey, m p if len(m.Children) > 0 { item.Children = make([]admdto.AdminMenuItem, 0, len(m.Children)) for _, child := range m.Children { - childItem := convertPluginMenuItem(pluginID, root, key, child, locales, bundle) + childItem := convertPluginMenuItem(pluginID, pluginVersion, root, key, child, locales, bundle) item.Children = append(item.Children, childItem) } } diff --git a/backend/internal/transport/http/admin/plugin/menus_agg_test.go b/backend/internal/transport/http/admin/plugin/menus_agg_test.go index 30989151..3dc8c1ed 100644 --- a/backend/internal/transport/http/admin/plugin/menus_agg_test.go +++ b/backend/internal/transport/http/admin/plugin/menus_agg_test.go @@ -1,8 +1,12 @@ package plugin import ( + "context" + "os" + "path/filepath" "testing" + "github.com/ArtisanCloud/PowerX/config" admdto "github.com/ArtisanCloud/PowerX/internal/transport/http/admin/dto" "github.com/ArtisanCloud/PowerX/pkg/plugin_mgr" "github.com/stretchr/testify/require" @@ -49,12 +53,54 @@ func TestConvertPluginMenuItemHierarchy(t *testing.T) { } locales := normalizeLocalePreference([]string{"en-US"}) - item := convertPluginMenuItem("com.example.base", "/_p/com.example.base/admin/", "", menu, locales, bundle) + item := convertPluginMenuItem("com.example.base", "0.8.6", "/_p/com.example.base/admin/", "", menu, locales, bundle) require.Equal(t, plugin_mgr.MenuKey("plugin:com.example.base:base"), item.Key) require.Equal(t, "Base Plugin", item.Title) + require.Equal(t, "0.8.6", item.PluginVersion) require.Len(t, item.Children, 1) child := item.Children[0] require.Equal(t, item.Key, child.ParentID) require.Equal(t, "Dashboard", child.Title) } + +func TestBuildPluginMenusPublicReturnsEmptyWhenPluginDisabled(t *testing.T) { + orig := config.GlobalConfig + t.Cleanup(func() { config.GlobalConfig = orig }) + + config.GlobalConfig = &config.Config{ + Plugin: config.PluginAggregateConfig{ + PluginConfig: config.PluginConfig{ + Enabled: false, + }, + }, + } + + out := BuildPluginMenusPublic(context.Background(), "/_p", []string{"zh-CN"}) + require.Empty(t, out.Items) + require.Empty(t, out.I18n) +} + +func TestBuildPluginMenusPublicReadsConfigFromEtcWhenGlobalNil(t *testing.T) { + orig := config.GlobalConfig + t.Cleanup(func() { config.GlobalConfig = orig }) + config.GlobalConfig = nil + + tmp := t.TempDir() + etc := filepath.Join(tmp, "etc") + require.NoError(t, os.MkdirAll(etc, 0o755)) + require.NoError(t, os.WriteFile( + filepath.Join(etc, "config.yaml"), + []byte("plugin:\n enabled: false\n"), + 0o644, + )) + + wd, err := os.Getwd() + require.NoError(t, err) + require.NoError(t, os.Chdir(tmp)) + t.Cleanup(func() { _ = os.Chdir(wd) }) + + out := BuildPluginMenusPublic(context.Background(), "/_p", nil) + require.Empty(t, out.Items) + require.Empty(t, out.I18n) +} diff --git a/backend/internal/transport/http/admin/plugin/plugin_handler.go b/backend/internal/transport/http/admin/plugin/plugin_handler.go index 1be1c411..bc0027f2 100644 --- a/backend/internal/transport/http/admin/plugin/plugin_handler.go +++ b/backend/internal/transport/http/admin/plugin/plugin_handler.go @@ -7,6 +7,7 @@ import ( "github.com/ArtisanCloud/PowerX/config" manager "github.com/ArtisanCloud/PowerX/internal/infra/plugin/manager" + "github.com/ArtisanCloud/PowerX/internal/infra/plugin/manager/supervisor" dtoRequest "github.com/ArtisanCloud/PowerX/pkg/dto" pluginDto "github.com/ArtisanCloud/PowerX/pkg/dto/plugin_mgr" pluginMgr "github.com/ArtisanCloud/PowerX/pkg/plugin_mgr" @@ -25,12 +26,20 @@ func basePrefix() string { // GET /api/.../admin/plugins func PluginListHandler(c *gin.Context) { - mgr := manager.GetPluginManager() - - list, err := mgr.List(c) - if err != nil { - dtoRequest.ResponseError(c, http.StatusInternalServerError, "获取插件列表失败", err) - return + mgr, err := tryGetPluginManager() + var list []pluginMgr.Plugin + if err == nil { + list, err = mgr.List(c) + if err != nil { + dtoRequest.ResponseError(c, http.StatusInternalServerError, "获取插件列表失败", err) + return + } + } else { + list, err = listPluginsFromRegistry(c) + if err != nil { + dtoRequest.ResponseSuccess(c, gin.H{"plugins": []pluginDto.PluginItem{}}) + return + } } prefix := basePrefix() @@ -93,7 +102,11 @@ func PluginEnableHandler(c *gin.Context) { dtoRequest.ResponseError(c, http.StatusBadRequest, "缺少插件ID", nil) return } - mgr := manager.GetPluginManager() + mgr, err := tryGetPluginManager() + if err != nil { + respondPluginRuntimeUnavailable(c, err) + return + } ctx := c.Request.Context() tenantUUID := optionalTenantContext(c) if tenantUUID != "" { @@ -113,7 +126,11 @@ func PluginDisableHandler(c *gin.Context) { dtoRequest.ResponseError(c, http.StatusBadRequest, "缺少插件ID", nil) return } - mgr := manager.GetPluginManager() + mgr, err := tryGetPluginManager() + if err != nil { + respondPluginRuntimeUnavailable(c, err) + return + } if err := mgr.Disable(c, id); err != nil { dtoRequest.ResponseError(c, statusFromManagerErr(err), "停用插件失败", err) return @@ -127,11 +144,20 @@ func optionalTenantContext(c *gin.Context) string { // GET /api/.../admin/plugins/menus func PluginMenusHandler(c *gin.Context) { - mgr := manager.GetPluginManager() - list, err := mgr.List(c) - if err != nil { - dtoRequest.ResponseError(c, http.StatusInternalServerError, "获取插件菜单失败", err) - return + mgr, err := tryGetPluginManager() + var list []pluginMgr.Plugin + if err == nil { + list, err = mgr.List(c) + if err != nil { + dtoRequest.ResponseError(c, http.StatusInternalServerError, "获取插件菜单失败", err) + return + } + } else { + list, err = listPluginsFromRegistry(c) + if err != nil { + dtoRequest.ResponseSuccess(c, gin.H{"menus": []pluginDto.PluginMenuItem{}}) + return + } } prefix := basePrefix() @@ -176,17 +202,26 @@ func PluginGetHandler(c *gin.Context) { dtoRequest.ResponseError(c, http.StatusBadRequest, "缺少插件ID", nil) return } - mgr := manager.GetPluginManager() - - p, err := mgr.Get(c, id) - if err != nil { - dtoRequest.ResponseError(c, http.StatusNotFound, "插件不存在", err) - return + mgr, err := tryGetPluginManager() + var ( + p pluginMgr.Plugin + proc = supervisor.ProcInfo{} + ) + if err == nil { + p, err = mgr.Get(c, id) + if err != nil { + dtoRequest.ResponseError(c, http.StatusNotFound, "插件不存在", err) + return + } + proc, _ = manager.TryRuntimeStatus(mgr, id) + } else { + p, err = getPluginFromRegistry(c, id) + if err != nil { + dtoRequest.ResponseError(c, http.StatusNotFound, "插件不存在", err) + return + } } - // 运行态 - proc, _ := manager.TryRuntimeStatus(mgr, id) - prefix := basePrefix() hasAdmin := p.Frontend.Admin.Kind == pluginMgr.FrontendKindStatic && p.Paths.FrontendAdminDir != "" adminURL := "" @@ -231,7 +266,11 @@ func PluginRestartHandler(c *gin.Context) { dtoRequest.ResponseError(c, http.StatusBadRequest, "缺少插件ID", nil) return } - mgr := manager.GetPluginManager() + mgr, err := tryGetPluginManager() + if err != nil { + respondPluginRuntimeUnavailable(c, err) + return + } if err := mgr.Disable(c, id); err != nil { dtoRequest.ResponseError(c, statusFromManagerErr(err), "重启插件失败(停用阶段)", err) diff --git a/backend/internal/transport/http/admin/plugin/registry_fallback.go b/backend/internal/transport/http/admin/plugin/registry_fallback.go new file mode 100644 index 00000000..6d97bdf0 --- /dev/null +++ b/backend/internal/transport/http/admin/plugin/registry_fallback.go @@ -0,0 +1,231 @@ +package plugin + +import ( + "context" + "fmt" + "os" + "path/filepath" + "sort" + "strings" + "time" + + "github.com/ArtisanCloud/PowerX/config" + mgrimpl "github.com/ArtisanCloud/PowerX/internal/infra/plugin/manager" + "github.com/ArtisanCloud/PowerX/pkg/plugin_mgr" +) + +func absPath(p string) string { + if filepath.IsAbs(p) { + return filepath.Clean(p) + } + wd, err := os.Getwd() + if err != nil { + return filepath.Clean(p) + } + return filepath.Clean(filepath.Join(wd, p)) +} + +func loadRegistrySnapshot(ctx context.Context) (*mgrimpl.JSONRegistry, error) { + cfg := config.GetGlobalConfig() + if cfg == nil { + return nil, fmt.Errorf("global config is nil") + } + registryPath := strings.TrimSpace(cfg.Plugin.RegistryFile) + if registryPath == "" { + return nil, fmt.Errorf("plugin registry file is empty") + } + reg := mgrimpl.NewJSONRegistry(absPath(registryPath)) + if err := reg.Load(ctx); err != nil { + return nil, err + } + return reg, nil +} + +func listPluginsFromRegistry(ctx context.Context) ([]plugin_mgr.Plugin, error) { + reg, err := loadRegistrySnapshot(ctx) + if err != nil { + return nil, err + } + regItems := reg.List(ctx) + + // 合并磁盘残留(registry 为空或丢失时仍可展示并清理) + diskItems, _ := listPluginsFromInstalledDir() + if len(diskItems) == 0 { + return regItems, nil + } + merged := make(map[string]plugin_mgr.Plugin, len(regItems)+len(diskItems)) + for _, p := range regItems { + merged[p.ID] = p + } + for _, p := range diskItems { + if _, ok := merged[p.ID]; !ok { + merged[p.ID] = p + } + } + out := make([]plugin_mgr.Plugin, 0, len(merged)) + for _, p := range merged { + out = append(out, p) + } + sort.Slice(out, func(i, j int) bool { return out[i].ID < out[j].ID }) + return out, nil +} + +func getPluginFromRegistry(ctx context.Context, id string) (plugin_mgr.Plugin, error) { + reg, err := loadRegistrySnapshot(ctx) + if err != nil { + return plugin_mgr.Plugin{}, err + } + p, ok := reg.Get(ctx, id) + if !ok { + // registry 不存在时,回退到磁盘残留 + diskItems, _ := listPluginsFromInstalledDir() + for _, item := range diskItems { + if strings.EqualFold(strings.TrimSpace(item.ID), strings.TrimSpace(id)) { + return item, nil + } + } + return plugin_mgr.Plugin{}, plugin_mgr.NewError(plugin_mgr.CodeNotFound, plugin_mgr.WithPlugin(id), plugin_mgr.WithOp("registry_get")) + } + return p, nil +} + +func uninstallFromRegistry(ctx context.Context, id, version string, purge bool) error { + reg, err := loadRegistrySnapshot(ctx) + if err != nil { + return err + } + + targetVersion := strings.TrimSpace(version) + if targetVersion == "" { + if cur, ok := reg.CurrentVersion(ctx, id); ok && strings.TrimSpace(cur) != "" { + targetVersion = cur + } else if p, ok := reg.Get(ctx, id); ok { + targetVersion = strings.TrimSpace(p.Version) + } + } + if targetVersion == "" { + return plugin_mgr.NewError(plugin_mgr.CodeNotFound, plugin_mgr.WithPlugin(id), plugin_mgr.WithOp("registry_uninstall")) + } + + p, ok := reg.GetVersion(ctx, id, targetVersion) + if !ok { + // registry 中没有版本,尝试直接清理磁盘残留 + return uninstallResidualFromDisk(id, targetVersion, purge) + } + if purge { + root := strings.TrimSpace(p.Paths.Root) + if root != "" { + _ = os.RemoveAll(root) + } + } + if err := reg.Remove(ctx, id, targetVersion); err != nil { + return err + } + if err := reg.Save(ctx); err != nil { + return err + } + return nil +} + +func listPluginsFromInstalledDir() ([]plugin_mgr.Plugin, error) { + cfg := config.GetGlobalConfig() + if cfg == nil { + return nil, fmt.Errorf("global config is nil") + } + installedRoot := strings.TrimSpace(cfg.Plugin.InstalledDir) + if installedRoot == "" { + return []plugin_mgr.Plugin{}, nil + } + root := absPath(installedRoot) + pluginDirs, err := os.ReadDir(root) + if err != nil { + if os.IsNotExist(err) { + return []plugin_mgr.Plugin{}, nil + } + return nil, err + } + + items := make([]plugin_mgr.Plugin, 0, len(pluginDirs)) + for _, idDir := range pluginDirs { + if !idDir.IsDir() { + continue + } + pluginID := strings.TrimSpace(idDir.Name()) + if pluginID == "" { + continue + } + versionDirs, err := os.ReadDir(filepath.Join(root, pluginID)) + if err != nil { + continue + } + type verItem struct { + version string + root string + modTime time.Time + } + candidates := make([]verItem, 0, len(versionDirs)) + for _, vDir := range versionDirs { + if !vDir.IsDir() { + continue + } + ver := strings.TrimSpace(vDir.Name()) + if ver == "" { + continue + } + verRoot := filepath.Join(root, pluginID, ver) + if _, statErr := os.Stat(filepath.Join(verRoot, "plugin.yaml")); statErr != nil { + continue + } + info, _ := vDir.Info() + modAt := time.Time{} + if info != nil { + modAt = info.ModTime() + } + candidates = append(candidates, verItem{ + version: ver, + root: verRoot, + modTime: modAt, + }) + } + if len(candidates) == 0 { + continue + } + sort.Slice(candidates, func(i, j int) bool { + return candidates[i].modTime.After(candidates[j].modTime) + }) + cur := candidates[0] + items = append(items, plugin_mgr.Plugin{ + ID: pluginID, + Name: pluginID, + Version: cur.version, + State: plugin_mgr.PluginState("broken"), + Paths: plugin_mgr.InstalledPaths{ + Root: cur.root, + }, + }) + } + return items, nil +} + +func uninstallResidualFromDisk(id, version string, purge bool) error { + cfg := config.GetGlobalConfig() + if cfg == nil { + return fmt.Errorf("global config is nil") + } + root := absPath(strings.TrimSpace(cfg.Plugin.InstalledDir)) + if root == "" { + return plugin_mgr.NewError(plugin_mgr.CodeNotFound, plugin_mgr.WithPlugin(id), plugin_mgr.WithVersion(version), plugin_mgr.WithOp("registry_uninstall")) + } + target := filepath.Join(root, id, version) + if _, err := os.Stat(target); err != nil { + return plugin_mgr.NewError(plugin_mgr.CodeNotFound, plugin_mgr.WithPlugin(id), plugin_mgr.WithVersion(version), plugin_mgr.WithOp("registry_uninstall")) + } + // 对于残留目录,卸载语义即磁盘清理;purge 开关保持兼容,不再区分 + if purge || !purge { + if err := os.RemoveAll(target); err != nil { + return err + } + _ = os.Remove(filepath.Dir(target)) + } + return nil +} diff --git a/backend/internal/transport/http/admin/plugin/status_handler.go b/backend/internal/transport/http/admin/plugin/status_handler.go index bb1149e9..2e76cafa 100644 --- a/backend/internal/transport/http/admin/plugin/status_handler.go +++ b/backend/internal/transport/http/admin/plugin/status_handler.go @@ -13,7 +13,24 @@ func PluginStatusHandler(c *gin.Context) { return } - mgr := mgrimpl.GetPluginManager() + mgr, err := tryGetPluginManager() + if err != nil { + p, getErr := getPluginFromRegistry(c, id) + if getErr != nil { + dtoRequest.ResponseError(c, 404, "插件不存在", getErr) + return + } + dtoRequest.ResponseSuccess(c, gin.H{ + "id": id, + "version": p.Version, + "state": string(p.State), + "runtime": gin.H{ + "state": "unknown", + }, + "fallback": true, + }) + return + } // 注册表视图:版本/状态 p, err := mgr.Get(c, id) diff --git a/backend/internal/transport/http/admin/plugin/uninstall_handler.go b/backend/internal/transport/http/admin/plugin/uninstall_handler.go index 5ac3a9f6..34887892 100644 --- a/backend/internal/transport/http/admin/plugin/uninstall_handler.go +++ b/backend/internal/transport/http/admin/plugin/uninstall_handler.go @@ -1,7 +1,6 @@ package plugin import ( - mgrimpl "github.com/ArtisanCloud/PowerX/internal/infra/plugin/manager" dtoRequest "github.com/ArtisanCloud/PowerX/pkg/dto" "github.com/ArtisanCloud/PowerX/pkg/plugin_mgr" "github.com/gin-gonic/gin" @@ -27,9 +26,21 @@ func PluginUninstallHandler(c *gin.Context) { return } - mgr := mgrimpl.GetPluginManager() + mgr, err := tryGetPluginManager() + if err != nil { + if fallbackErr := uninstallFromRegistry(c, id, req.Version, req.Purge); fallbackErr != nil { + respondPluginRuntimeUnavailable(c, fallbackErr) + return + } + dtoRequest.ResponseSuccess(c, gin.H{ + "id": id, + "version": req.Version, + "purge": req.Purge, + "fallback": true, + }) + return + } - var err error if req.Purge { if req.Version != "" { err = mgr.UninstallAndPurge(c, id, req.Version) diff --git a/backend/internal/transport/http/admin/routes.go b/backend/internal/transport/http/admin/routes.go index ae4246b1..74343749 100644 --- a/backend/internal/transport/http/admin/routes.go +++ b/backend/internal/transport/http/admin/routes.go @@ -7,7 +7,6 @@ import ( "github.com/ArtisanCloud/PowerX/internal/transport/http/admin/agent" agentmodelhubHTTP "github.com/ArtisanCloud/PowerX/internal/transport/http/admin/agent_model_hub" agentlifecycleHTTP "github.com/ArtisanCloud/PowerX/internal/transport/http/admin/agentlifecycle" - "github.com/ArtisanCloud/PowerX/internal/transport/http/admin/auth" "github.com/ArtisanCloud/PowerX/internal/transport/http/admin/capability" capabilityRegistryHTTP "github.com/ArtisanCloud/PowerX/internal/transport/http/admin/capability_registry" devHotloadHTTP "github.com/ArtisanCloud/PowerX/internal/transport/http/admin/dev_hotload" @@ -25,6 +24,7 @@ import ( "github.com/ArtisanCloud/PowerX/internal/transport/http/admin/runtime" "github.com/ArtisanCloud/PowerX/internal/transport/http/admin/system" "github.com/ArtisanCloud/PowerX/internal/transport/http/admin/tenants" + userauth "github.com/ArtisanCloud/PowerX/internal/transport/http/admin/user/auth" versionHTTP "github.com/ArtisanCloud/PowerX/internal/transport/http/admin/version" workflowHTTP "github.com/ArtisanCloud/PowerX/internal/transport/http/admin/workflow" "github.com/gin-gonic/gin" @@ -55,7 +55,7 @@ func RegisterAPIRoutes( tenants.RegisterAPIRoutes(publicGroup, protectedGroup, deps) iam.RegisterAPIRoutes(publicGroup, protectedGroup, deps) menu.RegisterAPIRoutes(publicGroup, protectedGroup) - auth.RegisterAPIRoutes(publicGroup, protectedGroup, deps) + userauth.RegisterAPIRoutes(publicGroup, protectedGroup, deps) // Agent admin routes (includes share/revoke APIs under /admin/agents) agent.RegisterAPIRoutes(publicGroup, protectedGroup, deps) agentmodelhubHTTP.RegisterAPIRoutes(publicGroup, protectedGroup, deps) diff --git a/backend/internal/transport/http/admin/auth/api.go b/backend/internal/transport/http/admin/user/auth/api.go similarity index 72% rename from backend/internal/transport/http/admin/auth/api.go rename to backend/internal/transport/http/admin/user/auth/api.go index b43afbad..d280b9e1 100644 --- a/backend/internal/transport/http/admin/auth/api.go +++ b/backend/internal/transport/http/admin/user/auth/api.go @@ -16,14 +16,6 @@ func RegisterAPIRoutes( authPublicGroup.POST("/login", hAuthUser.LoginHandler(deps.AuthUser)) authPublicGroup.POST("/refresh", hAuthUser.RefreshHandler(deps.AuthUser)) } - - authProtectedGroup := protectedGroup.Group("/user/auth") - { - authProtectedGroup.POST("/logout", hAuthUser.LogoutHandler(deps.AuthUser)) - } - - // Compatibility: frontend uses `/api/v1/admin/user/auth/logout` (same prefix as login/register/refresh). - // Keep `/user/auth/logout` for legacy callers. authProtectedAdminGroup := protectedGroup.Group("/admin/user/auth") { authProtectedAdminGroup.POST("/logout", hAuthUser.LogoutHandler(deps.AuthUser)) @@ -31,8 +23,8 @@ func RegisterAPIRoutes( hMeContext := NewMeContextHandler(deps) - // 根据你的中间件实际名称绑定,确保需要登录 - gMeContext := protectedGroup.Group("/admin/auth") + // 统一用户上下文路由:/api/v1/admin/user/auth/me/* + gMeContext := protectedGroup.Group("/admin/user/auth") { gMeContext.GET("/me/context", hMeContext.GetMeContext) hMeExtra := NewMeExtraHandler(deps) diff --git a/backend/internal/transport/http/admin/auth/auth_handler.go b/backend/internal/transport/http/admin/user/auth/auth_handler.go similarity index 99% rename from backend/internal/transport/http/admin/auth/auth_handler.go rename to backend/internal/transport/http/admin/user/auth/auth_handler.go index 8f056221..0e22be10 100644 --- a/backend/internal/transport/http/admin/auth/auth_handler.go +++ b/backend/internal/transport/http/admin/user/auth/auth_handler.go @@ -1,4 +1,4 @@ -// api/http/admin/auth/auth_handler.go +// api/http/admin/user/auth/auth_handler.go package auth import ( diff --git a/backend/internal/transport/http/admin/auth/me_extra_handler.go b/backend/internal/transport/http/admin/user/auth/me_extra_handler.go similarity index 96% rename from backend/internal/transport/http/admin/auth/me_extra_handler.go rename to backend/internal/transport/http/admin/user/auth/me_extra_handler.go index a59307c1..ac0aad6e 100644 --- a/backend/internal/transport/http/admin/auth/me_extra_handler.go +++ b/backend/internal/transport/http/admin/user/auth/me_extra_handler.go @@ -30,7 +30,7 @@ type switchTenantReq struct { TenantUUID string `json:"tenant_uuid"` } -// POST /api/v1/admin/auth/me/switch-tenant +// POST /api/v1/admin/user/auth/me/switch-tenant func (h *MeExtraHandler) SwitchTenant(c *gin.Context) { var req switchTenantReq if err := dto.ValidateRequestWithContext(c, &req); err != nil { @@ -76,7 +76,7 @@ func (h *MeExtraHandler) SwitchTenant(c *gin.Context) { dto.ResponseSuccess(c, resp) } -// GET /api/v1/admin/auth/me/tenants +// GET /api/v1/admin/user/auth/me/tenants func (h *MeExtraHandler) ListTenants(c *gin.Context) { resp, err := h.me.GetMeContext(c.Request.Context()) if err != nil { @@ -86,7 +86,7 @@ func (h *MeExtraHandler) ListTenants(c *gin.Context) { dto.ResponseSuccess(c, resp.Members) } -// GET /api/v1/admin/auth/me/departments +// GET /api/v1/admin/user/auth/me/departments func (h *MeExtraHandler) ListDepartments(c *gin.Context) { ctx := c.Request.Context() tenantUUID, err := reqctx.RequireTenantUUID(ctx) diff --git a/backend/internal/transport/http/admin/auth/me_handler.go b/backend/internal/transport/http/admin/user/auth/me_handler.go similarity index 98% rename from backend/internal/transport/http/admin/auth/me_handler.go rename to backend/internal/transport/http/admin/user/auth/me_handler.go index 210daca4..fc8a30a4 100644 --- a/backend/internal/transport/http/admin/auth/me_handler.go +++ b/backend/internal/transport/http/admin/user/auth/me_handler.go @@ -27,7 +27,7 @@ func NewMeContextHandler(dep *shared.Deps) *MeContextHandler { } } -// GET /api/v1/auth/me/context +// GET /api/v1/admin/user/auth/me/context func (h *MeContextHandler) GetMeContext(c *gin.Context) { ctx := c.Request.Context() diff --git a/backend/pkg/corex/audit/callbacks.go b/backend/pkg/corex/audit/callbacks.go index babb9197..7c828ee3 100644 --- a/backend/pkg/corex/audit/callbacks.go +++ b/backend/pkg/corex/audit/callbacks.go @@ -51,7 +51,7 @@ func RegisterAuditCallbacks(db *gorm.DB, svc Service) { OccurredAt: time.Now(), Source: "db", Operation: "CREATE", - ResourceType: "db.table", + ResourceType: "db.row", ResourceID: tx.Statement.Table, Outcome: "SUCCESS", Severity: "INFO", @@ -66,7 +66,7 @@ func RegisterAuditCallbacks(db *gorm.DB, svc Service) { OccurredAt: time.Now(), Source: "db", Operation: "UPDATE", - ResourceType: "db.table", + ResourceType: "db.row", ResourceID: tx.Statement.Table, Outcome: "SUCCESS", Severity: "INFO", @@ -81,7 +81,7 @@ func RegisterAuditCallbacks(db *gorm.DB, svc Service) { OccurredAt: time.Now(), Source: "db", Operation: "DELETE", - ResourceType: "db.table", + ResourceType: "db.row", ResourceID: tx.Statement.Table, Outcome: "SUCCESS", Severity: "INFO", diff --git a/backend/pkg/corex/audit/file_sink.go b/backend/pkg/corex/audit/file_sink.go new file mode 100644 index 00000000..914f7a9d --- /dev/null +++ b/backend/pkg/corex/audit/file_sink.go @@ -0,0 +1,131 @@ +package audit + +import ( + "context" + "encoding/json" + "fmt" + "os" + "path/filepath" + "sync" + "time" + + dbm "github.com/ArtisanCloud/PowerX/pkg/corex/db/persistence/model/audit" + lumberjack "github.com/ArtisanCloud/PowerX/pkg/utils/logger/lib" +) + +// FileSinkOptions controls audit file output and rotation. +type FileSinkOptions struct { + Enable bool `yaml:"enable"` + Dir string `yaml:"dir"` + FilePrefix string `yaml:"file_prefix"` + MaxSize int `yaml:"max_size"` + MaxBackups int `yaml:"max_backups"` + MaxAge int `yaml:"max_age"` + Compress bool `yaml:"compress"` + UseUTC bool `yaml:"use_utc"` + IncludeMeta bool `yaml:"include_meta"` +} + +// FileSink writes one JSON line per audit event and rotates by date + size. +type FileSink struct { + opt FileSinkOptions + mu sync.Mutex + dayKey string + logger *lumberjack.Logger +} + +func NewFileSink(opt FileSinkOptions) (*FileSink, error) { + if !opt.Enable { + return nil, nil + } + if opt.Dir == "" { + opt.Dir = "logs/audit" + } + if opt.FilePrefix == "" { + opt.FilePrefix = "audit_event" + } + if opt.MaxSize <= 0 { + opt.MaxSize = 100 + } + if opt.MaxBackups <= 0 { + opt.MaxBackups = 30 + } + if opt.MaxAge <= 0 { + opt.MaxAge = 30 + } + if err := os.MkdirAll(opt.Dir, 0o755); err != nil { + return nil, err + } + return &FileSink{opt: opt}, nil +} + +func (s *FileSink) Emit(_ context.Context, evt *dbm.AuditEvent) error { + if s == nil || evt == nil || !s.opt.Enable { + return nil + } + now := time.Now() + if s.opt.UseUTC { + now = now.UTC() + } + dayKey := now.Format("2006-01-02") + + payload := map[string]any{ + "occurred_at": evt.OccurredAt, + "source": evt.Source, + "operation": evt.Operation, + "outcome": evt.Outcome, + "severity": evt.Severity, + "resource_type": evt.ResourceType, + "resource_id": evt.ResourceID, + "resource_name": evt.ResourceName, + "correlation_id": evt.CorrelationID, + "tenant_uuid": evt.TenantUUID, + "actor_user_id": evt.ActorUserID, + "actor_user_name": evt.ActorUserName, + "actor_display": evt.ActorDisplay, + "client_ip": evt.ClientIP, + "client_ua": evt.ClientUA, + "created_at": evt.CreatedAt, + } + if s.opt.IncludeMeta { + var meta any + if len(evt.Meta) > 0 && json.Unmarshal(evt.Meta, &meta) == nil { + payload["meta"] = meta + } else if len(evt.Meta) > 0 { + payload["meta_raw"] = string(evt.Meta) + } + } + line, err := json.Marshal(payload) + if err != nil { + return err + } + line = append(line, '\n') + + s.mu.Lock() + defer s.mu.Unlock() + if err := s.ensureWriterLocked(dayKey); err != nil { + return err + } + _, err = s.logger.Write(line) + return err +} + +func (s *FileSink) ensureWriterLocked(dayKey string) error { + if s.logger != nil && s.dayKey == dayKey { + return nil + } + if s.logger != nil { + _ = s.logger.Close() + s.logger = nil + } + filename := filepath.Join(s.opt.Dir, fmt.Sprintf("%s-%s.log", s.opt.FilePrefix, dayKey)) + s.logger = &lumberjack.Logger{ + Filename: filename, + MaxSize: s.opt.MaxSize, + MaxBackups: s.opt.MaxBackups, + MaxAge: s.opt.MaxAge, + Compress: s.opt.Compress, + } + s.dayKey = dayKey + return nil +} diff --git a/backend/pkg/plugin_mgr/manifest.go b/backend/pkg/plugin_mgr/manifest.go index 0abf86cb..d4497f63 100644 --- a/backend/pkg/plugin_mgr/manifest.go +++ b/backend/pkg/plugin_mgr/manifest.go @@ -13,6 +13,7 @@ type Manifest struct { Runtime RuntimeSpec `yaml:"runtime" json:"runtime"` Endpoints EndpointSpec `yaml:"endpoints" json:"endpoints"` Frontend FrontendSpec `yaml:"frontend" json:"frontend"` + Catalogs CatalogSpec `yaml:"catalogs,omitempty" json:"catalogs,omitempty"` RBAC RBACSpec `yaml:"rbac" json:"rbac"` Events EventSpec `yaml:"events" json:"events"` Backend *BackendSpec `yaml:"backend" json:"backend,omitempty"` diff --git a/backend/pkg/plugin_mgr/types.go b/backend/pkg/plugin_mgr/types.go index 3a9c3390..bdcb94f2 100644 --- a/backend/pkg/plugin_mgr/types.go +++ b/backend/pkg/plugin_mgr/types.go @@ -38,6 +38,14 @@ type InstallSource struct { Signature string } +type CatalogSpec struct { + Capabilities string `yaml:"capabilities,omitempty" json:"capabilities,omitempty"` + Exposure string `yaml:"exposure,omitempty" json:"exposure,omitempty"` + AgentTools string `yaml:"agent_tools,omitempty" json:"agent_tools,omitempty"` + Events string `yaml:"events,omitempty" json:"events,omitempty"` + RBAC string `yaml:"rbac,omitempty" json:"rbac,omitempty"` +} + type MenuOriginType string const ( @@ -92,9 +100,10 @@ type Plugin struct { State PluginState `json:"state"` // 这些来自 manifest: - Name string `json:"name"` - Description string `json:"description"` - Metadata Metadata `json:"metadata"` // ✅ 建议用值类型,避免 nil + Name string `json:"name"` + Description string `json:"description"` + Metadata Metadata `json:"metadata"` // ✅ 建议用值类型,避免 nil + Catalogs CatalogSpec `json:"catalogs,omitempty"` Runtime RuntimeSpec `json:"runtime"` Frontend FrontendSpec `json:"frontend"` diff --git a/backend/scripts/capability_registry/README.md b/backend/scripts/capability_registry/README.md new file mode 100644 index 00000000..9c780652 --- /dev/null +++ b/backend/scripts/capability_registry/README.md @@ -0,0 +1,32 @@ +# Capability Generator + +用于将 OpenAPI / gRPC proto 自动生成 PowerX 平台能力配置(`platform_capabilities` YAML)。 + +## 快速开始 + +在 `backend` 目录执行: + +```bash +./scripts/capability_registry/generate_from_specs.sh \ + --openapi api/openapi/swagger.json \ + --proto api/grpc/contracts \ + --out config/platform_capabilities/generated.auto.yaml +``` + +仅预览(不落盘): + +```bash +./scripts/capability_registry/generate_from_specs.sh \ + --openapi api/openapi/swagger.json \ + --proto api/grpc/contracts/powerx/workflow/v1/workflow.proto \ + --dry-run +``` + +## 说明 + +- 生成器入口:`cmd/capability_gen` +- 默认输出:`backend/config/platform_capabilities/generated.auto.yaml` +- 该工具为自动生成 MVP: + - OpenAPI:按 path + method 生成 REST capabilities + - Proto:按 service + rpc 生成 gRPC capabilities +- 建议把生成文件作为 `generated` 来源,再由人工复核后合并到正式能力配置。 diff --git a/backend/scripts/capability_registry/generate_from_specs.sh b/backend/scripts/capability_registry/generate_from_specs.sh new file mode 100755 index 00000000..7c82b7e9 --- /dev/null +++ b/backend/scripts/capability_registry/generate_from_specs.sh @@ -0,0 +1,61 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Usage: +# backend/scripts/capability_registry/generate_from_specs.sh \ +# --openapi backend/api/openapi/swagger.json \ +# --proto backend/api/grpc/contracts \ +# --out backend/config/platform_capabilities/generated.auto.yaml + +ROOT_DIR="$(cd "$(dirname "$0")/../.." && pwd)" +cd "$ROOT_DIR" +mkdir -p .gocache .gomodcache +export GOCACHE="${GOCACHE:-$ROOT_DIR/.gocache}" +export GOMODCACHE="${GOMODCACHE:-$ROOT_DIR/.gomodcache}" + +OPENAPI_ARGS=() +PROTO_ARGS=() +GIN_ARGS=(--gin-src internal/transport/http) +OUT="backend/config/platform_capabilities/generated.auto.yaml" +DRY_RUN="false" + +while [[ $# -gt 0 ]]; do + case "$1" in + --openapi) + OPENAPI_ARGS+=("--openapi" "$2") + shift 2 + ;; + --proto) + PROTO_ARGS+=("--proto" "$2") + shift 2 + ;; + --out) + OUT="$2" + shift 2 + ;; + --gin-src) + GIN_ARGS+=(--gin-src "$2") + shift 2 + ;; + --dry-run) + DRY_RUN="true" + shift + ;; + *) + echo "unknown arg: $1" >&2 + exit 1 + ;; + esac +done + +if [[ ${#OPENAPI_ARGS[@]} -eq 0 && ${#PROTO_ARGS[@]} -eq 0 ]]; then + echo "at least one --openapi or --proto is required" >&2 + exit 1 +fi + +CMD=(go run ./cmd/capability_gen "${OPENAPI_ARGS[@]}" "${PROTO_ARGS[@]}" "${GIN_ARGS[@]}" --out "$OUT") +if [[ "$DRY_RUN" == "true" ]]; then + CMD+=(--dry-run) +fi + +"${CMD[@]}" diff --git a/docs/guides/develop/api_key_token_playbook.md b/docs/guides/develop/api_key_token_playbook.md index 274ccb8a..3dbaa377 100644 --- a/docs/guides/develop/api_key_token_playbook.md +++ b/docs/guides/develop/api_key_token_playbook.md @@ -52,7 +52,14 @@ curl -sS "http://127.0.0.1:8077/api/v1/admin/gateway/meta" \ > 说明:`root` 不是前置条件。只有在需要做“跨租户审计/治理”时才使用 root 账号。 -### 0.1 凭证分层(按场景使用) +### 0.1 认证路由命名策略(与 IAM 对齐) + +- Core 认证路由统一采用 `"/api/v1/admin/{identity}/auth/*"`。 +- 当前主路径:`/api/v1/admin/user/auth/*`。 +- 预留扩展:`/api/v1/admin/supply/auth/*` 以及后续 `admin/{identity}/auth`。 +- 不再新增或依赖“无 identity 前缀”的旧认证路由。 + +### 0.2 凭证分层(按场景使用) - OpenAPI 是统一业务入口,JWT 和 API Key 是不同主体的鉴权凭证。 - JWT(Token):人登录后的会话凭证,适用于管理台、人机联调、宿主模式插件调用。 @@ -60,20 +67,20 @@ curl -sS "http://127.0.0.1:8077/api/v1/admin/gateway/meta" \ - 宿主模式插件调用底座能力走 Gateway/OpenAPI 统一入口,但默认凭证是用户 JWT(宿主会话),不是 API Key。 - API Key 仅用于外部系统调用,或插件在 standalone proxy 模式下调用宿主 Gateway/OpenAPI。 -### 0.2 租户边界(已生效) +### 0.3 租户边界(已生效) - 普通租户仅能管理本租户 API Key(创建/轮换/吊销/权限变更)。 - `admin/root` 允许做跨租户“有效性治理”(如禁用/吊销),用于平台级安全处置。 - `admin/root` 不应查看其他租户明文 key(仅做状态治理与审计)。 -### 0.3 凭证互斥约定(推荐) +### 0.4 凭证互斥约定(推荐) - 业务约定上,单次请求只应携带一种凭证:`JWT` 或 `API Key`。 - 宿主模式固定 JWT;外部平台/standalone proxy 固定 API Key。 - 后端按凭证类型分流:`Authorization: ApiKey ` 仅走 API Key 校验,`Authorization: Bearer ` 仅走 JWT 校验。 - 不再采用“API Key 失败后回退 JWT”的混合兜底策略。 -### 0.4 能力目录接口选型(已对齐) +### 0.5 能力目录接口选型(已对齐) - 对外统一“能力列表/筛选”主接口:`GET /api/v1/admin/capabilities` - 支持 `source=corex|plugin`(空值/`all` 表示全部来源) @@ -87,7 +94,7 @@ curl -sS "http://127.0.0.1:8077/api/v1/admin/gateway/meta" \ - `GET /api/v1/admin/capabilities/sources`:返回 source 枚举、默认值与别名映射 - `GET /api/v1/admin/gateway/meta`:返回 gateway 元信息(`base_url`、`api_prefix`、auth schemes、常用路径示例) -### 0.5 Invoke 入口选型(避免混用) +### 0.6 Invoke 入口选型(避免混用) - Selector 调用(按 `capability_id` / `intent`): - `POST {HTTP_BASE}/tenant/invocations` @@ -125,7 +132,7 @@ curl -sS -X POST "$HTTP_BASE/tenant/integration/routes/media-assets-read/invoke" }' | jq . ``` -### 0.6 `source` 定义来源(后端口径) +### 0.7 `source` 定义来源(后端口径) `source` 来自后端能力记录,不是前端固定值: @@ -189,7 +196,7 @@ API Key 需要绑定 `tenant_uuid + api_key_profile`,建议先准备 profile ### 2.1 查当前租户 UUID ```bash -curl -sS "http://127.0.0.1:8077/api/v1/admin/auth/me/context" \ +curl -sS "http://127.0.0.1:8077/api/v1/admin/user/auth/me/context" \ -H "Authorization: Bearer $ADMIN_TOKEN" | jq . ``` @@ -587,7 +594,7 @@ scripts/integration_gateway/apikey_token_playbook.sh \ 示例(读取当前用户上下文): ```bash -curl -sS "http://127.0.0.1:8077/api/v1/admin/auth/me/context" \ +curl -sS "http://127.0.0.1:8077/api/v1/admin/user/auth/me/context" \ -H "Authorization: Bearer $USER_TOKEN" | jq . ``` diff --git a/docs/guides/plugin_release/application_runbook.md b/docs/guides/plugin_release/application_runbook.md index b6dd6878..f8e2e4fa 100644 --- a/docs/guides/plugin_release/application_runbook.md +++ b/docs/guides/plugin_release/application_runbook.md @@ -166,10 +166,11 @@ web-admin/app/services/menuConfig.ts - 静态资源 `/_p/.../admin/assets/...` 不带 Authorization,不影响登录态;检查业务接口 `/api/v1/...` 的请求头是否包含 Authorization/JWT claims(tid/tenant_uuid) 以判定会话是否生效。 ### 流程速查(token/locale/theme/ctx) -- 会话来源:宿主登录后,后端会在 `/api/v1/admin/auth/me/context` 返回 `ctx/ctx_sig/ctx_jwt`(或响应头同名);需要配好 `auth.jwt_secret`,否则不会生成签名上下文。 +- 会话来源:宿主登录后,后端会在 `/api/v1/admin/user/auth/me/context` 返回 `ctx/ctx_sig/ctx_jwt`(或响应头同名);需要配好 `auth.jwt_secret`,否则不会生成签名上下文。 - 宿主桥接:`usePluginBridge` 从 token/localStorage/cookie/window 读取 token/locale/theme/ctx,构造 `auth-token`/`sync`,`postMessage('*')` 给 iframe。 - 插件接收:`powerx-bridge-client` 收到后调用 `useHostBridgeAdapter`,`useAuth.setAuth` 写入本域 localStorage,ctx 存 Pinia `hostCtx`。 - API 发起:插件 `useApiClient` 自动附带 `Authorization`(租户由 JWT claims 提供)、以及 `X-PowerX-CTX/CTX-SIG/CTX-JWT`(若 hostCtx 有值)直连 8077。 +- 身份接口边界:`/api/v1/admin/{identity}/auth/*` 必须走宿主主路由;不要通过 `/_p/:pluginId/api/v1/admin/{identity}/auth/*`。`/_p/:pluginId/api/*` 只用于插件业务 API。 - 渲染同步:`sync` 内的 locale/theme 直接应用到 i18n/colorMode,保持宿主与插件一致。 #### 流程图(文本) @@ -177,7 +178,7 @@ web-admin/app/services/menuConfig.ts flowchart LR subgraph Host[宿主 3030] H1[登录 @3030
拿 token / tid] - H2[调用 /api/v1/admin/auth/me/context
取 ctx / ctx_sig / ctx_jwt
存 localStorage / cookie] + H2[调用 /api/v1/admin/user/auth/me/context
取 ctx / ctx_sig / ctx_jwt
存 localStorage / cookie] H3[usePluginBridge
构造 sync + auth-token
带 locale / theme / token / ctx] end subgraph Bridge[postMessage] @@ -193,4 +194,4 @@ flowchart LR M --> P4 ``` -注意:如果 `/api/v1/admin/auth/me/context` 未返回 `ctx/ctx_sig/ctx_jwt`(后端未生成签名上下文),插件请求缺少 `X-PowerX-CTX*` 会被判 “tenant context missing”。 +注意:如果 `/api/v1/admin/user/auth/me/context` 未返回 `ctx/ctx_sig/ctx_jwt`(后端未生成签名上下文),插件请求缺少 `X-PowerX-CTX*` 会被判 “tenant context missing”。 diff --git a/docs/plan/AI_engineering/skills/api_contracts.md b/docs/plan/AI_engineering/skills/api_contracts.md new file mode 100644 index 00000000..cb1ecbc5 --- /dev/null +++ b/docs/plan/AI_engineering/skills/api_contracts.md @@ -0,0 +1,116 @@ +# Skills API 契约(Admin / Tenant / Plugin) + +本文定义 Skill 管理与调用接口契约,供后端、前端、插件侧统一实现。 + +## 1. Admin API + +### 1.1 注册 Skill + +`POST /api/v1/admin/skills` + +请求体(示例): + +```json +{ + "skill_id": "incident-triage", + "version": "1.0.0", + "source": "plugin", + "bundle_ref": { + "uri": "s3://powerx-skills/plugin-a/incident-triage-1.0.0.tgz", + "checksum": "sha256:xxxx" + }, + "manifest": { + "description": "故障分诊流程", + "entrypoints": ["runbook.default"] + } +} +``` + +### 1.2 查询 Skill 列表 + +`GET /api/v1/admin/skills?skill_id=&status=&source=&page=&page_size=` + +### 1.3 发布与回滚 + +- `POST /api/v1/admin/skills/{skill_id}/publish` +- `POST /api/v1/admin/skills/{skill_id}/rollback` + +## 2. Tenant API + +### 2.1 直接调用 Skill + +`POST /api/v1/tenant/skills/invoke` + +```json +{ + "skill_id": "incident-triage", + "version": "1.0.0", + "payload": { + "incident_id": "INC-1001" + }, + "context": { + "tool_scope": "ops" + } +} +``` + +### 2.2 统一入口调用 + +`POST /api/v1/tenant/invocations` with `preferred_protocol=skill` + +```json +{ + "capability_id": "com.powerx.skill.incident-triage.invoke", + "preferred_protocol": "skill", + "payload": { + "skill_id": "incident-triage", + "incident_id": "INC-1001" + } +} +``` + +## 3. Plugin / 第三方接口 + +### 3.1 导入 Skill + +`POST /api/v1/admin/skills/import` + +### 3.2 绑定 capability + +`POST /api/v1/admin/skills/{skill_id}/bind-capability` + +```json +{ + "capability_id": "com.powerx.skill.incident-triage.invoke", + "tool_grants": ["ops.incident.read"] +} +``` + +## 4. 统一响应模型 + +```json +{ + "trace_id": "trc_xxx", + "status": "completed", + "protocol_used": "skill", + "fallback_used": false, + "result": { + "summary": "..." + } +} +``` + +## 5. 错误码 + +- `skill.not_found` +- `skill.version_not_found` +- `skill.permission_denied` +- `skill.execution_failed` +- `skill.source_untrusted` + +## 6. 鉴权与多租户 + +1. 所有 Tenant 调用必须从请求上下文解析 `tenant_uuid`。 +2. 管理接口仅 Admin 可调用。 +3. Skill 调用需通过 ToolGrant 或 Policy 检查。 + diff --git a/docs/plan/AI_engineering/skills/data_model_and_registry.md b/docs/plan/AI_engineering/skills/data_model_and_registry.md new file mode 100644 index 00000000..b6d5fe21 --- /dev/null +++ b/docs/plan/AI_engineering/skills/data_model_and_registry.md @@ -0,0 +1,68 @@ +# Skills 数据模型与注册治理 + +本文定义 Skill 的数据结构、状态机与注册治理规则。 + +## 1. 核心实体 + +### 1.1 SkillRegistryRecord + +- `skill_id` +- `version` +- `status`:`draft/published/deprecated/disabled` +- `source`:`builtin/plugin/third_party` +- `bundle_uri` +- `checksum` +- `signature` +- `manifest_json` +- `capability_binding` +- `created_at` +- `updated_at` + +### 1.2 SkillExecutionTrace + +- `trace_id` +- `tenant_uuid` +- `skill_id` +- `version` +- `entrypoint` +- `protocol`(固定 `skill`) +- `status` +- `latency_ms` +- `error_summary` +- `request_payload` +- `response_payload` +- `created_at` + +## 2. 状态机 + +1. `draft` -> `published` +2. `published` -> `deprecated` +3. `published` -> `disabled` +4. `deprecated` -> `disabled` +5. `published` -> `published`(新版) + +## 3. 版本与回滚策略 + +1. 允许同 `skill_id` 多版本并存。 +2. 每个 skill 只有一个 `latest published`。 +3. 回滚通过切换指针,不删除历史版本。 +4. 禁止覆盖已发布版本内容(不可变版本)。 + +## 4. 索引建议 + +1. 唯一索引:`(skill_id, version)` +2. 查询索引:`(status, source, updated_at desc)` +3. 租户查询:`(tenant_uuid, skill_id, created_at desc)` for trace + +## 5. 与 Capability Registry 关系 + +1. 一个 Skill 可绑定一个或多个 capability。 +2. capability 与 skill 版本建议显式映射,避免隐式漂移。 +3. `preferred_protocol=skill` 时走 SkillAdapter。 + +## 6. 数据一致性约束 + +1. `status=published` 时 `checksum` 必填。 +2. `source=third_party` 时 `source_uri` 必填。 +3. `signature` 可选,但企业策略可配置为必填。 + diff --git a/docs/plan/AI_engineering/skills/examples/skill_manifest_example.md b/docs/plan/AI_engineering/skills/examples/skill_manifest_example.md new file mode 100644 index 00000000..0e4c33f9 --- /dev/null +++ b/docs/plan/AI_engineering/skills/examples/skill_manifest_example.md @@ -0,0 +1,70 @@ +# Skill Manifest 示例 + +## 1. 标准 SKILL.md 示例 + +```yaml +name: incident-triage +version: 1.0.0 +description: Incident triage and summary workflow +scope: ops +inputs: + incident_id: + type: string + required: true +outputs: + summary: + type: string +dependencies: + - rg + - go +entrypoints: + - runbook.default +references: + - https://example.com/runbook/incident-triage +``` + +## 2. PowerX 扩展示例 + +```yaml +name: incident-triage +version: 1.0.0 +description: Incident triage and summary workflow +entrypoints: + - runbook.default +x_powerx: + source: plugin + tenant_scope: tenant + bundle_ref: + uri: s3://powerx-skills/plugin-a/incident-triage-1.0.0.tgz + checksum: sha256:8ec2f0... + policy: + tool_grants: + - ops.incident.read + - ops.incident.comment.write +``` + +## 3. Tenant 调用示例 + +```json +{ + "skill_id": "incident-triage", + "version": "1.0.0", + "payload": { + "incident_id": "INC-1001" + } +} +``` + +## 4. 统一入口调用示例 + +```json +{ + "capability_id": "com.powerx.skill.incident-triage.invoke", + "preferred_protocol": "skill", + "payload": { + "skill_id": "incident-triage", + "incident_id": "INC-1001" + } +} +``` + diff --git a/docs/plan/AI_engineering/skills/management.md b/docs/plan/AI_engineering/skills/management.md new file mode 100644 index 00000000..f1855338 --- /dev/null +++ b/docs/plan/AI_engineering/skills/management.md @@ -0,0 +1,88 @@ +# PowerX Skills 开发总览与管理规范 + +本文是 `docs/plan/AI_engineering/skills/` 的总索引与总规范,定义 Skill 在 PowerX 中的目标、边界和实施路线。 + +## 1. 文档定位 + +本目录采用“主文 + 分文档”的结构: + +- `management.md`:总览、术语、边界、实施阶段与导航 +- `skill_standard_definition.md`:Skill 标准定义、使用原理、外部出处 +- `standard_mapping.md`:`SKILL.md` 与 PowerX SkillManifest 映射 +- `runtime_architecture.md`:运行时架构与调用链 +- `api_contracts.md`:Admin/Tenant/Plugin 接口契约 +- `data_model_and_registry.md`:数据模型、状态机与注册治理 +- `security_and_governance.md`:安全与合规约束 +- `plugin_third_party_integration.md`:插件与第三方接入机制 +- `testing_and_rollout.md`:测试策略与上线计划 +- `test_use_cases/README.md`:从简单到复杂的开发验收用例 +- `examples/skill_manifest_example.md`:示例清单 + +推荐阅读顺序: + +1. `skill_standard_definition.md` +2. `standard_mapping.md` +3. `runtime_architecture.md` +4. `api_contracts.md` +5. `security_and_governance.md` +6. `testing_and_rollout.md` + +## 2. 目标与边界 + +### 2.1 目标 + +1. 让 Skill 成为 Agent 一等能力(与 tool calling / MCP 并列)。 +2. 支持两条调用路径: + - Agent 内调用 Skill + - 通过 Capability Selector/Invocation 统一调用 Skill +3. 对插件与第三方开放 Skill 注册、发布、调用与治理能力。 + +### 2.2 非目标(首版) + +1. 不直接执行未托管、未校验的远程脚本。 +2. 不引入“无限制本地命令执行”能力。 +3. 不在首版做多标准并行解析(以 `SKILL.md` 为主,其他标准后续适配)。 + +## 3. 核心术语 + +- Skill:以 `SKILL.md` 为入口、可执行的任务能力单元。 +- SkillManifest:PowerX 内部归一化后的 Skill 元数据结构。 +- Skill Bundle:Skill 资产包(文档、脚本、模板、引用等)。 +- SkillRunner:执行 Skill 的运行时组件(Agent 内)。 +- SkillAdapter:Capability Router 下 `protocol=skill` 的适配层。 + +## 4. 与现有能力的关系 + +1. Tool calling:偏向“函数调用粒度”。 +2. MCP:偏向“标准化外部工具协议”。 +3. Skill:偏向“可复用任务工作流/操作手册能力”。 +4. Capability Registry:Skill 可被注册为 capability,并通过 Selector 统一鉴权与路由。 + +## 5. 实施原则 + +1. 标准优先:优先兼容公开 `SKILL.md` 规范。 +2. 双路径一致:Agent 内调用与 Gateway 调用在结果模型、错误模型、审计模型上保持一致。 +3. 安全默认收敛:默认最小权限,显式授权放开。 +4. 可观测先行:每次 Skill 调用必须带 trace 与审计字段。 + +## 6. 分阶段落地 + +1. Phase 1:标准映射 + 数据模型 +2. Phase 2:注册与管理 API +3. Phase 3:运行时双路径接入 +4. Phase 4:插件/第三方开放 +5. Phase 5:治理、压测、灰度、回滚 + +详细拆解见 `testing_and_rollout.md`。 + +## 7. 决策快照 + +1. 标准基线:`SKILL.md` 兼容层。 +2. 分发方式:托管仓库 + 元数据注册。 +3. 调用模式:支持独立 Skill 调用与 Agent+Skill 混合调用。 +4. 文档组织:总览 1 份 + 标准定义 1 份 + 开发分文档 7 份 + 示例 1 份。 + +## 8. 参考 + +- Anthropic Claude Code Skills: https://docs.anthropic.com/en/docs/claude-code/skills +- OpenAI Skills Repository: https://github.com/openai/skills diff --git a/docs/plan/AI_engineering/skills/plugin_third_party_integration.md b/docs/plan/AI_engineering/skills/plugin_third_party_integration.md new file mode 100644 index 00000000..51008112 --- /dev/null +++ b/docs/plan/AI_engineering/skills/plugin_third_party_integration.md @@ -0,0 +1,57 @@ +# Skills 插件侧与第三方接入设计 + +本文描述插件开发者与第三方如何接入 Skill 能力。 + +## 1. 目标 + +1. 插件可发布 Skill 并绑定 capability。 +2. 第三方可在受控流程中导入 Skill。 +3. 既支持独立调用 Skill,也支持 Agent + Skill 组合调用。 + +## 2. 插件接入流程 + +1. 插件准备 Skill Bundle 与 `SKILL.md`。 +2. 调用 Admin 导入接口注册 Skill。 +3. 绑定 capability 与 tool grants。 +4. 发布后由租户通过统一入口调用。 + +## 3. 第三方接入流程 + +1. 提交来源信息(仓库、版本、checksum、签名)。 +2. 平台拉取并校验资产。 +3. 通过后进入 `draft` 状态。 +4. 管理员审核发布到 `published`。 + +## 4. 开放模式 + +### 4.1 独立 Skill 模式 + +租户直接调用: + +- `POST /api/v1/tenant/skills/invoke` + +### 4.2 Agent + Skill 模式 + +Agent 在规划中引用 skill 节点,由 SkillRunner 执行。 + +### 4.3 统一 capability 模式 + +通过: + +- `/api/v1/tenant/invocations` +- `preferred_protocol=skill` + +## 5. 兼容与治理要求 + +1. 插件卸载前需处理 Skill 绑定关系。 +2. 第三方 Skill 升级必须记录来源变更。 +3. 不允许“无版本覆盖式更新”。 + +## 6. 最小对接清单 + +1. 提供 `SKILL.md` +2. 提供 bundle uri +3. 提供 checksum +4. 声明 entrypoints +5. 声明权限副作用 + diff --git a/docs/plan/AI_engineering/skills/runtime_architecture.md b/docs/plan/AI_engineering/skills/runtime_architecture.md new file mode 100644 index 00000000..90294b26 --- /dev/null +++ b/docs/plan/AI_engineering/skills/runtime_architecture.md @@ -0,0 +1,134 @@ +# Skills 运行时架构设计 + +本文定义 Skill 在 PowerX 的双路径运行时接入方案。 + +## 1. 总体架构 + +Skill 运行时支持两条路径: + +1. 路径A:Agent 内 SkillRunner +2. 路径B:Capability Gateway 的 SkillAdapter(`preferred_protocol=skill`) + +两条路径共享: + +- SkillRegistry +- SkillManifest 校验 +- 审计与追踪模型 +- 安全策略(tool_grants/safe_mode) + +## 2. 路径A:Agent + Skill + +### 2.1 触发条件 + +当 Agent Planner 识别到任务节点类型为 `skill` 时,进入 SkillRunner。 + +### 2.1.1 决策分层(Intent / Planner / Executor) + +Skill 是否执行,不由单一阶段直接拍板,而是三层决策: + +1. Intent 层:给出 `candidate_skills[]`(候选)。 +2. Planner 层:结合依赖、权限、上下文,决定是否把候选落为 `skill` 节点。 +3. Executor 层:按 `node.kind/use` 分发,`kind=skill` 才进入 SkillRunner。 + +建议在 Intent 输出增加结构化字段: + +```json +{ + "intent": "incident_triage", + "candidate_skills": [ + {"skill_id": "incident-triage", "confidence": 0.91, "reason": "match keywords + context"} + ] +} +``` + +### 2.1.2 Skill 候选识别(Intent 内增强) + +不建议每个 Agent 独立硬编码;建议在现有 Intent 层统一增加 `Skill Resolver`: + +1. 召回:关键词/标签规则匹配。 +2. 语义:向量检索候选 skills。 +3. 重排:LLM 或规则打分,输出 top-k。 + +最终由 Planner 消解冲突并定案。 + +### 2.1.3 提示词策略(统一模板) + +建议使用统一提示模板,而不是每个 Agent 各写一套: + +1. 输入:`user_message + allowed_skills + agent_profile + context`。 +2. 约束:只能从 `allowed_skills` 选择。 +3. 输出:结构化 JSON(`intent/candidate_skills/confidence`)。 +4. 无命中:返回空数组,不得臆造 skill_id。 + +### 2.2 执行流程 + +1. Planner 生成 `skill_id + version + params` +2. Runner 拉取 Manifest 与 Bundle +3. 校验权限、上下文、依赖 +4. 执行 entrypoint +5. 产出标准 `SkillExecutionResult` +6. 输出到 Agent stream(token/log/state/final) +7. 写审计与指标 + +### 2.3 失败语义 + +1. 可重试错误:依赖临时不可用、网络抖动 +2. 不可重试错误:鉴权失败、manifest 非法、签名不通过 + +## 3. 路径B:Capability + Skill + +### 3.1 触发条件 + +租户调用: + +- `POST /api/v1/tenant/invocations` 且 `preferred_protocol=skill` +- 或 `POST /api/v1/tenant/skills/invoke` + +### 3.2 执行流程 + +1. Selector 解析 capability/policy +2. Router 选到 `transport=skill` +3. SkillAdapter 装配执行上下文 +4. Runner 执行 Skill +5. 返回统一 envelope(trace/status/protocol/result) +6. 写 InvocationTrace 与审计事件 + +## 4. 统一结果模型 + +`SkillExecutionResult` 建议字段: + +- `trace_id` +- `status`:`completed/failed/denied` +- `output` +- `artifacts` +- `latency_ms` +- `protocol_used`:固定 `skill` +- `fallback_used` + +## 5. 与现有模块映射 + +- Agent:`backend/internal/server/agent/*` +- Selector/Invocation:`backend/internal/service/capability_registry/*` +- Tenant API:`backend/internal/transport/http/openapi/capability_registry/*` + +## 6. 观测要求 + +每次执行必须上报: + +- Metrics:`skill_invocations_total`, `skill_invocation_latency_ms` +- Trace 标签:`skill_id`, `skill_version`, `tenant_uuid` +- Audit 字段:`source`, `entrypoint`, `tool_grants` + +## 7. 决策流程图(三层抉择) + +```mermaid +flowchart TD + U[User Message] --> I[Intent Layer] + I --> C[candidate_skills top-k] + C --> P[Planner Layer] + P --> D{Build skill node?} + D -->|No| N1[Other nodes] + D -->|Yes| N2[node.kind=skill] + N2 --> E[Executor Dispatch] + E --> S[SkillRunner] +``` diff --git a/docs/plan/AI_engineering/skills/security_and_governance.md b/docs/plan/AI_engineering/skills/security_and_governance.md new file mode 100644 index 00000000..5718ed6f --- /dev/null +++ b/docs/plan/AI_engineering/skills/security_and_governance.md @@ -0,0 +1,55 @@ +# Skills 安全与治理规范 + +本文定义 Skill 的安全基线、授权边界与治理流程。 + +## 1. 来源可信策略 + +1. 首版仅支持“托管仓库 + 元数据注册”。 +2. 禁止直接执行未托管远程 URL 的脚本。 +3. 所有发布版本必须携带 `checksum`。 +4. `signature` 可按环境策略启用强校验。 + +## 2. 执行权限边界 + +1. 默认最小权限,不隐式继承高危命令权限。 +2. 需要外部系统操作时,必须声明副作用与权限需求。 +3. 敏感操作要求显式授权(ToolGrant/Role)。 + +## 3. 授权模型 + +1. Skill 可绑定 capability,再复用现有 ToolGrant 策略。 +2. Tenant 调用时必须通过: + - tenant 身份检查 + - capability 可见性检查 + - tool grant 检查 +3. safe mode 开启时可阻断高风险 skill。 + +## 4. 多租户隔离 + +1. 执行上下文必须注入 `tenant_uuid`。 +2. 数据与审计按租户隔离。 +3. 禁止跨租户读取执行记录。 + +## 5. 审计规范 + +每次调用至少记录: + +- `trace_id` +- `tenant_uuid` +- `skill_id` +- `version` +- `entrypoint` +- `status` +- `latency_ms` +- `error_summary` +- `source` + +## 6. 风险分级(建议) + +- `L1` 只读技能:文档总结、文本处理 +- `L2` 外部读取:查询接口、数据检索 +- `L3` 有副作用:写操作、工单、通知 +- `L4` 高风险:生产变更、权限修改 + +不同等级应匹配不同审批与授权要求。 + diff --git a/docs/plan/AI_engineering/skills/skill_standard_definition.md b/docs/plan/AI_engineering/skills/skill_standard_definition.md new file mode 100644 index 00000000..9fee2ee9 --- /dev/null +++ b/docs/plan/AI_engineering/skills/skill_standard_definition.md @@ -0,0 +1,289 @@ +# Skill 标准定义与使用原理(含外部出处) + +本文用于回答三个问题: + +1. Skill 标准到底是什么 +2. Skill 的使用原理是什么 +3. PowerX 该如何对齐公开标准并做工程落地 + +## 1. 什么是 Skill(标准定义) + +从公开标准看,Skill 是“目录化的能力包”: + +1. 最小单元是一个目录。 +2. 目录至少包含 `SKILL.md`。 +3. 可选包含 `scripts/`、`references/`、`assets/` 等辅助资源。 + +按 Agent Skills 规范,`SKILL.md` 需要: + +- YAML frontmatter +- Markdown 正文说明 +- 必填字段至少包括 `name` 与 `description` + +这意味着 Skill 不是“单个 prompt”,而是“可复用、可版本化、可携带资源的任务能力包”。 + +## 2. Skill 的使用原理 + +### 2.1 发现与装载 + +Skill 的执行通常遵循“元数据先发现、正文后加载”的模式: + +1. 先读取 `name/description` 等元数据做匹配。 +2. 只有命中时才加载完整 `SKILL.md` 与其附属资源。 + +这就是公开文档中提到的 `progressive disclosure`(渐进式披露),目的就是降低上下文负担、提高匹配效率。 + +### 2.2 调用方式 + +公开产品文档显示一般有两种调用方式: + +1. 显式调用:用户通过命令或明确指定 skill。 +2. 隐式调用:模型根据任务语义与 `description` 自动命中。 + +因此,`description` 的质量是 Skill 命中率的核心因素之一。 + +### 2.3 执行边界 + +Skill 本质是“指令 + 资源 +(可选)脚本”: + +1. 指令定义流程与约束。 +2. 资源提供上下文与模板。 +3. 脚本执行具体动作(在宿主工具权限范围内)。 + +## 3. 为什么这是“公开标准” + +Agent Skills 网站给出的定位是“开放格式(open format)”,并提供: + +1. 规范文档(Specification) +2. 参考实现与文档仓库(GitHub) +3. 客户端实现指南(如何在 agent 中支持 skills) + +OpenAI Codex 文档与 `openai/skills` 仓库也明确指向同一个 open standard,这说明跨产品互通是现实目标,而不是私有格式。 + +## 4. 对 PowerX 的工程含义 + +结合当前 PowerX 架构(Agent + Capability Registry + Selector): + +1. Skill 应作为独立能力对象管理(注册、版本、发布、回滚)。 +2. Skill 执行应支持双路径: + - Agent 内部 SkillRunner + - Capability 统一入口(`preferred_protocol=skill`) +3. Skill 元信息应至少覆盖公开标准必填字段,并扩展治理字段: + - `source/checksum/signature/tenant_scope/tool_grants` + +## 5. Agent 如何调度 Skill(PowerX 调度原理) + +这一节回答“Agent 在运行时到底怎么用 Skill”。 + +### 5.1 调度入口 + +PowerX 中 Skill 有两个入口: + +1. `Agent 内入口`:Planner 命中 `skill` 节点后由 SkillRunner 执行。 +2. `统一网关入口`:Tenant 调用 `/tenant/invocations`,并设置 `preferred_protocol=skill`。 + +### 5.2 Agent 内调度流程(推荐主路径) + +1. 用户消息进入 Agent Runtime。 +2. Intent/Planner 识别任务,生成执行计划。 +3. 计划中某节点类型为 `skill`(携带 `skill_id/version/params`)。 +4. SkillRunner 读取 SkillRegistry 获取 Manifest 与 BundleRef。 +5. 执行前做安全校验(租户、ToolGrant、safe-mode、checksum/signature)。 +6. 进入 entrypoint 执行(可读取 `references/assets/scripts`)。 +7. 输出统一结果模型(status/output/artifacts/latency)。 +8. 结果回流到 Agent Stream(token/log/state/final)并落审计。 + +### 5.3 调度流程图(Agent + Gateway 双入口) + +```mermaid +flowchart TD + U[User or Plugin Request] --> A{Entry} + A -->|Agent Chat| R[Agent Runtime] + A -->|Tenant API| T[/POST /tenant/invocations
preferred_protocol=skill/] + + R --> P[Intent + Planner] + P --> N{Node Type} + N -->|skill| S1[SkillRunner] + N -->|non-skill| O[Other Node Executors] + + T --> S0[Selector + Router] + S0 -->|transport=skill| S1 + + S1 --> G[SkillRegistry Lookup
manifest + bundle_ref] + G --> C[Policy Check
tenant/tool_grant/safe-mode] + C --> V[Integrity Verify
checksum/signature] + V --> E[Entrypoint Execute] + E --> X[Result Normalize] + X --> Y[Audit + Trace + Metrics] + Y --> Z[Response Stream / API Result] +``` + +### 5.4 关键实现要点 + +1. 调度与执行分离:Planner 负责“选 skill”,Runner 负责“跑 skill”。 +2. 结果模型统一:Agent 路径与 Gateway 路径都返回统一结构,避免前端/插件分支处理。 +3. 安全前置:校验在执行前完成,不允许“先执行后拒绝”。 +4. 可观测闭环:每次调用必须有 `trace_id + skill_id + version`。 + +## 6. 开源 Skill 包如何安装到 PowerX + +这一节回答“网上开源 Skill 包如何接入 PowerX”。 + +### 6.1 来源类型 + +1. GitHub 仓库(例如 `openai/skills`、`anthropics/skills`) +2. 组织内部镜像仓库 +3. 插件发布系统产出的 Skill Bundle + +### 6.2 标准安装流程 + +1. `发现`:选择目标 Skill(确定 `skill_id + version + source_url`)。 +2. `拉取`:下载/镜像到 PowerX 托管存储(本地或 S3/MinIO)。 +3. `解析`:读取 `SKILL.md`,映射为 `SkillManifest`。 +4. `校验`: + - 必填字段(`name/description/version/entrypoints`) + - 完整性(`checksum`) + - 可选可信性(`signature`) +5. `注册`:写入 SkillRegistry(状态 `draft`)。 +6. `发布`:管理员审批后切换到 `published`。 +7. `绑定`:可选绑定 capability(用于 `/tenant/invocations` 统一调用)。 +8. `调用`:租户或 Agent 使用 skill。 +9. `回滚`:版本异常时切换到上一个稳定版本。 + +### 6.3 安装流程图(开源仓库 -> PowerX) + +```mermaid +flowchart LR + GH[Open Source Skill Repo] --> DL[Fetch or Mirror] + DL --> ST[Store in PowerX Managed Storage] + ST --> PR[Parse SKILL.md] + PR --> CK[Validate schema + checksum + signature] + CK --> RG[Register skill as draft] + RG --> AP[Admin Approve Publish] + AP --> BD[Bind capability optional] + BD --> IV[Invoke by Agent or Tenant API] +``` + +### 6.4 PowerX 不建议的安装方式 + +1. 直接在生产环境执行任意外链脚本。 +2. 无校验落库(不记录 checksum/source)。 +3. 不经发布流程直接对租户可见。 + +### 6.5 最小安装元数据(建议) + +至少记录: + +- `skill_id` +- `version` +- `source_url` +- `source_commit_or_tag` +- `bundle_uri` +- `checksum` +- `imported_at` +- `imported_by` + +## 7. 安装后如何使用 Skill(不强依赖 Flow) + +这一节明确回答:安装第三方或自定义 Skill 后,怎么用。 + +Skill 使用有三种模式,只有第 3 种才依赖 flow 编排。 + +### 7.1 模式 A:直接调用 Skill(不依赖 Flow) + +适用场景: + +1. 想快速验证某个 skill 是否可用。 +2. 插件或租户系统只需要“单次技能执行”。 + +方式: + +1. 调用 `POST /api/v1/tenant/skills/invoke` +2. 传入 `skill_id + version + payload` + +结果: + +1. 返回统一执行结果(含 `trace_id/status/result`) +2. 可直接做冒烟测试和联调 + +### 7.2 模式 B:通过统一能力网关调用(不依赖 Flow) + +适用场景: + +1. 已接入 PowerX 统一调用入口。 +2. 希望和 http/grpc/mcp 一样使用一套调用协议。 + +方式: + +1. 调用 `POST /api/v1/tenant/invocations` +2. 设置 `preferred_protocol=skill` +3. 使用绑定的 `capability_id` + +结果: + +1. 走 Selector/Router 的统一治理链路 +2. 复用 ToolGrant、审计、策略能力 + +### 7.3 模式 C:Flow 编排内调用 Skill(依赖 Flow) + +适用场景: + +1. 多步骤任务编排(skill + llm + tool + workflow)。 +2. 需要前后置依赖和复杂流程控制。 + +方式: + +1. 在 flow 节点声明 `kind=skill` +2. Agent 通过 intent/planner 选中 flow +3. 执行到 skill 节点时由 SkillRunner 执行 + +结果: + +1. Skill 成为编排图中的一个节点能力 +2. 适合复杂业务自动化 + +### 7.4 推荐使用顺序 + +1. 先用模式 A 验证 skill 可执行。 +2. 再用模式 B 接入统一治理。 +3. 最后按需要纳入模式 C 做编排。 + +## 8. PowerX 推荐最小对齐清单(MVP) + +1. 目录结构对齐:`/SKILL.md` + 可选资源目录。 +2. 字段对齐:至少支持 `name`、`description` 必填校验。 +3. 执行语义对齐:支持显式/隐式两种触发语义。 +4. 上下文策略对齐:采用渐进式加载。 +5. 治理增强:在不破坏标准前提下加上审计、安全、租户隔离。 + +## 9. 与本目录其他文档关系 + +- 规范映射细节:`standard_mapping.md` +- 运行时实现:`runtime_architecture.md` +- API 合同:`api_contracts.md` +- 安全治理:`security_and_governance.md` + +## 10. 外部出处(官方/主源) + +1. Agent Skills Overview(官方站点) +https://agentskills.io/home + +2. Agent Skills Specification(官方规范) +https://agentskills.io/specification + +3. Agent Skills GitHub(规范与文档仓库) +https://github.com/agentskills/agentskills + +4. OpenAI Codex Skills 文档(官方) +https://developers.openai.com/codex/skills + +5. OpenAI Skills 仓库(官方) +https://github.com/openai/skills + +6. Claude Code Skills 文档(官方) +https://docs.claude.com/en/docs/claude-code/skills + +7. Anthropic Skills 仓库(官方) +https://github.com/anthropics/skills + +> 访问与核对日期:2026-03-06 diff --git a/docs/plan/AI_engineering/skills/standard_mapping.md b/docs/plan/AI_engineering/skills/standard_mapping.md new file mode 100644 index 00000000..ba099a96 --- /dev/null +++ b/docs/plan/AI_engineering/skills/standard_mapping.md @@ -0,0 +1,66 @@ +# Skill 标准映射规范(SKILL.md -> PowerX) + +本文定义外部 `SKILL.md` 与 PowerX 内部 `SkillManifest` 的映射规则。 + +## 1. 标准策略 + +1. 首版以 `SKILL.md` 为主输入格式。 +2. PowerX 支持在不破坏兼容的前提下扩展字段。 +3. 未识别字段进入 `extensions`,不直接丢弃。 + +## 2. 核心映射表 + +| SKILL.md 字段 | PowerX 字段 | 必填 | 规则 | +| --- | --- | --- | --- | +| `name` | `skill_id` | 是 | `kebab-case`,全局唯一 | +| `version` | `version` | 是 | 语义化版本,建议 `MAJOR.MINOR.PATCH` | +| `description` | `description` | 是 | 1-300 字 | +| `scope` | `scope` | 否 | `agent/backend/web-admin/ops` 等 | +| `inputs` | `input_schema` | 否 | 归一为 JSON Schema 风格对象 | +| `outputs` | `output_schema` | 否 | 归一为 JSON Schema 风格对象 | +| `dependencies` | `dependencies` | 否 | 工具、运行时依赖 | +| `entrypoints` | `entrypoints` | 是 | 至少一个执行入口 | +| `references` | `references` | 否 | 追溯信息与文档链接 | + +## 3. PowerX 扩展字段 + +PowerX 在 Manifest 增加以下治理字段: + +- `source`:`builtin/plugin/third_party` +- `source_uri`:托管地址或镜像地址 +- `checksum`:包校验值 +- `signature`:签名(可选) +- `tenant_scope`:`global/tenant` +- `visibility`:可见性策略 +- `tool_grants`:执行所需授权 + +## 4. 兼容策略 + +1. 未带 `version` 的 Skill 拒绝注册。 +2. 未带 `entrypoints` 的 Skill 拒绝注册。 +3. 字段类型不匹配时,记录校验错误并返回 `invalid_manifest`。 +4. 扩展字段必须带 `x_powerx_` 前缀或进入 `extensions`。 + +## 5. 解析流程 + +1. 加载 `SKILL.md`。 +2. YAML/Markdown Front Matter 解析。 +3. 字段标准化(trim/lowercase/case-normalization)。 +4. 映射到 `SkillManifest`。 +5. 校验必填字段与签名校验策略。 +6. 入库前写入 `normalized_manifest` 快照。 + +## 6. 版本策略 + +1. 同 `skill_id` 允许多版本并存。 +2. 最新发布版由 `status=published` + `is_latest=true` 标记。 +3. 回滚时切换 `is_latest` 指向旧版本,不覆盖历史。 + +## 7. 错误码建议 + +- `skill.invalid_manifest` +- `skill.unsupported_version` +- `skill.entrypoint_missing` +- `skill.signature_invalid` +- `skill.checksum_mismatch` + diff --git a/docs/plan/AI_engineering/skills/test_use_cases/01_manifest_parse.md b/docs/plan/AI_engineering/skills/test_use_cases/01_manifest_parse.md new file mode 100644 index 00000000..d20e70e2 --- /dev/null +++ b/docs/plan/AI_engineering/skills/test_use_cases/01_manifest_parse.md @@ -0,0 +1,65 @@ +# L1 - Skill Manifest 解析与入库 + +## 目标 + +验证 `SKILL.md` 能被正确解析、校验并写入 `draft` 版本。 + +## 前置条件 + +1. 已有管理员 Token:`ADMIN_TOKEN` +2. 已启动后端:`API_BASE=http://127.0.0.1:8077/api/v1` +3. 准备一个最小 Skill 包(含 `SKILL.md`) + +## 操作步骤 + +### 步骤 1:准备最小 `SKILL.md` + +```yaml +name: incident-triage +version: 1.0.0 +description: Incident triage workflow +entrypoints: + - runbook.default +``` + +### 步骤 2:注册 Skill(示例) + +```bash +curl -sS -X POST "$API_BASE/admin/skills" \ + -H "Authorization: Bearer $ADMIN_TOKEN" \ + -H "Content-Type: application/json" \ + -d '{ + "skill_id":"incident-triage", + "version":"1.0.0", + "source":"plugin", + "bundle_ref":{"uri":"s3://powerx-skills/demo/incident-triage-1.0.0.tgz","checksum":"sha256:demo"}, + "manifest":{"description":"Incident triage workflow","entrypoints":["runbook.default"]} + }' +``` + +### 步骤 3:查询详情 + +```bash +curl -sS -H "Authorization: Bearer $ADMIN_TOKEN" \ + "$API_BASE/admin/skills/incident-triage" +``` + +## 预期效果 + +1. 注册成功,状态为 `draft`。 +2. `skill_id=incident-triage`,`version=1.0.0`。 +3. 返回结构中含 manifest 与 bundle_ref。 + +## 通过标准 + +1. 无 `skill.invalid_manifest` 错误。 +2. 可进入 L2 发布流程。 + +## 记录模板 + +- 执行人: +- 执行时间: +- trace_id: +- 结果:通过 / 失败 +- 备注: + diff --git a/docs/plan/AI_engineering/skills/test_use_cases/02_publish_and_rollback.md b/docs/plan/AI_engineering/skills/test_use_cases/02_publish_and_rollback.md new file mode 100644 index 00000000..afe96900 --- /dev/null +++ b/docs/plan/AI_engineering/skills/test_use_cases/02_publish_and_rollback.md @@ -0,0 +1,46 @@ +# L2 - 发布、升级、回滚状态机 + +## 目标 + +验证同一 `skill_id` 的多版本发布与回滚行为是否正确。 + +## 前置条件 + +1. 已完成 L1,存在 `incident-triage:1.0.0(draft)` +2. 管理员 Token 可用 + +## 操作步骤 + +### 步骤 1:发布 `1.0.0` + +```bash +curl -sS -X POST "$API_BASE/admin/skills/incident-triage/publish" \ + -H "Authorization: Bearer $ADMIN_TOKEN" \ + -H "Content-Type: application/json" \ + -d '{"version":"1.0.0"}' +``` + +### 步骤 2:注册并发布 `1.1.0` + +重复 L1 注册流程,版本改为 `1.1.0`,然后执行 publish。 + +### 步骤 3:回滚到 `1.0.0` + +```bash +curl -sS -X POST "$API_BASE/admin/skills/incident-triage/rollback" \ + -H "Authorization: Bearer $ADMIN_TOKEN" \ + -H "Content-Type: application/json" \ + -d '{"target_version":"1.0.0"}' +``` + +## 预期效果 + +1. 版本并存:`1.0.0` 和 `1.1.0` 都存在。 +2. 回滚后默认使用 `1.0.0`。 +3. 历史不丢失,可审计。 + +## 通过标准 + +1. 发布与回滚都有审计记录。 +2. 回滚后调用链路实际命中目标版本。 + diff --git a/docs/plan/AI_engineering/skills/test_use_cases/03_agent_minimal_skill_execution.md b/docs/plan/AI_engineering/skills/test_use_cases/03_agent_minimal_skill_execution.md new file mode 100644 index 00000000..1845a7f1 --- /dev/null +++ b/docs/plan/AI_engineering/skills/test_use_cases/03_agent_minimal_skill_execution.md @@ -0,0 +1,36 @@ +# L3 - Agent 内最小 Skill 执行链路 + +## 目标 + +验证 `node.kind=skill` 能被正确分发到 SkillRunner,并返回统一结果。 + +## 前置条件 + +1. 已有发布版 skill(如 `incident-triage:1.0.0`) +2. Agent Runtime 已启动 + +## 操作步骤 + +### 步骤 1:准备最小 flow(包含 skill 节点) + +flow 仅需一条 skill 节点,参数带 `skill_id/version`。 + +### 步骤 2:发送一条触发消息到 agent 对话入口 + +通过现有聊天入口发起请求,并在上下文中绑定该 flow。 + +### 步骤 3:观察流式事件 + +检查 SSE/WS 事件中 `data.metadata` 是否含 `skill_id/version`。 + +## 预期效果 + +1. 节点分发命中 SkillRunner。 +2. 返回 `status/output/latency` 等统一字段。 +3. 产生 trace 与审计记录。 + +## 通过标准 + +1. 非 skill 执行器未误触发。 +2. 前端或调用方可直接消费返回结果。 + diff --git a/docs/plan/AI_engineering/skills/test_use_cases/04_intent_to_planner_decision.md b/docs/plan/AI_engineering/skills/test_use_cases/04_intent_to_planner_decision.md new file mode 100644 index 00000000..48ef6531 --- /dev/null +++ b/docs/plan/AI_engineering/skills/test_use_cases/04_intent_to_planner_decision.md @@ -0,0 +1,40 @@ +# L4 - Intent 候选 Skill 到 Planner 定案 + +## 目标 + +验证三层决策链:`Intent 候选 -> Planner 定案 -> Node 分发`。 + +## 前置条件 + +1. 至少两个语义相近的 skill(例如 `incident-triage`、`incident-summary`) +2. 已开启 Intent 策略链(rule/embedding/llm) + +## 操作步骤 + +### 步骤 1:输入多候选语义消息 + +示例:“帮我排查这个事故并给一段简短总结。” + +### 步骤 2:查看 Intent 输出 + +确认存在 `candidate_skills[]`(top-k)。 + +### 步骤 3:查看 Planner 结果 + +确认最终 plan 是否落了 `kind=skill` 节点,以及选择了哪个 skill。 + +### 步骤 4:执行并核对 + +确认真正执行的是 Planner 定案 skill,而不是所有候选 skill。 + +## 预期效果 + +1. Intent 给候选,不直接执行。 +2. Planner 综合上下文选择最终节点。 +3. Executor 仅按 `node.kind/use` 分发。 + +## 通过标准 + +1. 候选与定案可解释(有分数或理由)。 +2. 误选率在可接受阈值内(团队自定义)。 + diff --git a/docs/plan/AI_engineering/skills/test_use_cases/05_gateway_protocol_skill.md b/docs/plan/AI_engineering/skills/test_use_cases/05_gateway_protocol_skill.md new file mode 100644 index 00000000..50dcd623 --- /dev/null +++ b/docs/plan/AI_engineering/skills/test_use_cases/05_gateway_protocol_skill.md @@ -0,0 +1,41 @@ +# L5 - 统一入口调用(preferred_protocol=skill) + +## 目标 + +验证通过统一入口调用 skill 的链路与结果模型。 + +## 前置条件 + +1. 租户 Token 可用:`TENANT_TOKEN` +2. Skill 已发布并绑定 capability + +## 操作步骤 + +### 步骤 1:调用统一入口 + +```bash +curl -sS -X POST "$API_BASE/tenant/invocations" \ + -H "Authorization: Bearer $TENANT_TOKEN" \ + -H "Content-Type: application/json" \ + -d '{ + "capability_id":"com.powerx.skill.incident-triage.invoke", + "preferred_protocol":"skill", + "payload":{"skill_id":"incident-triage","incident_id":"INC-1001"} + }' +``` + +### 步骤 2:记录 trace_id 并查询执行记录 + +使用返回 `trace_id` 查询 invocation trace(按你们实际查询接口)。 + +## 预期效果 + +1. `protocol_used=skill`。 +2. 返回统一 envelope(status/trace/result)。 +3. trace 与审计记录可查。 + +## 通过标准 + +1. Gateway 路径结果字段与 Agent 路径一致。 +2. fallback 行为与策略一致。 + diff --git a/docs/plan/AI_engineering/skills/test_use_cases/06_authz_and_tenant_isolation.md b/docs/plan/AI_engineering/skills/test_use_cases/06_authz_and_tenant_isolation.md new file mode 100644 index 00000000..35dfe3b7 --- /dev/null +++ b/docs/plan/AI_engineering/skills/test_use_cases/06_authz_and_tenant_isolation.md @@ -0,0 +1,40 @@ +# L6 - 权限与租户隔离 + +## 目标 + +验证 ToolGrant、租户隔离、安全模式在 Skill 调用中的生效情况。 + +## 前置条件 + +1. 准备两个租户:`TENANT_A`、`TENANT_B` +2. 仅 `TENANT_A` 拥有目标 skill 的 grant + +## 操作步骤 + +### 步骤 1:TENANT_A 调用(有 grant) + +预期成功,返回 `completed`。 + +### 步骤 2:TENANT_B 调用(无 grant) + +预期拒绝,返回权限错误码(如 `skill.permission_denied`)。 + +### 步骤 3:跨租户查 trace + +用 `TENANT_B` 去查 `TENANT_A` 的 trace,预期拒绝或 not found。 + +### 步骤 4:打开 safe mode 后再调用 + +验证高风险 skill 被阻断。 + +## 预期效果 + +1. 授权与未授权行为差异明确。 +2. 跨租户访问不可见。 +3. safe mode 能生效阻断。 + +## 通过标准 + +1. 无“越权成功”样例。 +2. 所有拒绝都有可追踪错误码与审计记录。 + diff --git a/docs/plan/AI_engineering/skills/test_use_cases/07_open_source_skill_installation.md b/docs/plan/AI_engineering/skills/test_use_cases/07_open_source_skill_installation.md new file mode 100644 index 00000000..163f71b0 --- /dev/null +++ b/docs/plan/AI_engineering/skills/test_use_cases/07_open_source_skill_installation.md @@ -0,0 +1,45 @@ +# L7 - 开源 Skill 包安装到 PowerX + +## 目标 + +验证开源 skill 包的“拉取 -> 校验 -> 注册 -> 发布 -> 调用”全流程。 + +## 前置条件 + +1. 已选定一个开源 skill(仓库地址、tag/commit) +2. PowerX 托管存储可用(S3/MinIO/本地) +3. 管理员 Token 可用 + +## 操作步骤 + +### 步骤 1:拉取并镜像到托管存储 + +保留 `source_url` 与 `source_commit_or_tag`。 + +### 步骤 2:生成 checksum(可选 signature) + +记录到导入元数据。 + +### 步骤 3:导入并注册为 draft + +调用 `admin/skills/import` 或等效流程。 + +### 步骤 4:发布并绑定 capability + +发布后绑定 `com.powerx.skill.xxx.invoke`。 + +### 步骤 5:执行一次 tenant 调用 + +走 `tenant/invocations` 或 `tenant/skills/invoke`。 + +## 预期效果 + +1. 来源信息可追溯。 +2. 校验失败时禁止发布。 +3. 发布后可正常调用。 + +## 通过标准 + +1. 从导入到调用每一步都有审计记录。 +2. 对同一来源可重复导入并保证版本可控。 + diff --git a/docs/plan/AI_engineering/skills/test_use_cases/08_stability_regression.md b/docs/plan/AI_engineering/skills/test_use_cases/08_stability_regression.md new file mode 100644 index 00000000..44c6e3aa --- /dev/null +++ b/docs/plan/AI_engineering/skills/test_use_cases/08_stability_regression.md @@ -0,0 +1,50 @@ +# L8 - 稳定性与全链路回归 + +## 目标 + +验证 Skill 功能在并发与异常场景下稳定,且不破坏既有协议路径。 + +## 前置条件 + +1. L1-L7 全部通过 +2. 已有基础压测工具(如 k6/wrk/hey) + +## 操作步骤 + +### 步骤 1:并发调用压测 + +对 skill 调用做固定并发(例如 50/100 并发)与持续压测(例如 10-30 分钟)。 + +### 步骤 2:异常注入 + +分别注入: + +1. 下游超时 +2. checksum 校验失败 +3. 依赖服务临时不可用 + +### 步骤 3:回归其他协议 + +并行执行既有 `http/grpc/mcp/agent` 回归用例,确认无回归。 + +### 步骤 4:审计与指标复核 + +核对关键指标: + +- 错误率 +- P95 延迟 +- fallback 比例 +- 审计完整性 + +## 预期效果 + +1. Skill 调用稳定,异常可控。 +2. 其他协议路径不受影响。 +3. 错误分类清晰,可重试策略明确。 + +## 通过标准 + +1. 达到团队定义的性能门槛。 +2. 无阻断级回归。 +3. 可进入灰度发布。 + diff --git a/docs/plan/AI_engineering/skills/test_use_cases/README.md b/docs/plan/AI_engineering/skills/test_use_cases/README.md new file mode 100644 index 00000000..7db40ff4 --- /dev/null +++ b/docs/plan/AI_engineering/skills/test_use_cases/README.md @@ -0,0 +1,41 @@ +# Skills 测试用例索引(独立文件版) + +本目录将每个 test use case 拆成独立文档,便于逐条执行、分工与回归。 + +## 1. 用例清单(从简单到复杂) + +1. [01_manifest_parse.md](./01_manifest_parse.md) +L1:Skill Manifest 解析与入库 + +2. [02_publish_and_rollback.md](./02_publish_and_rollback.md) +L2:发布、升级、回滚状态机 + +3. [03_agent_minimal_skill_execution.md](./03_agent_minimal_skill_execution.md) +L3:Agent 内最小 skill 执行链路 + +4. [04_intent_to_planner_decision.md](./04_intent_to_planner_decision.md) +L4:Intent 候选 skill 到 Planner 定案 + +5. [05_gateway_protocol_skill.md](./05_gateway_protocol_skill.md) +L5:统一入口 `preferred_protocol=skill` + +6. [06_authz_and_tenant_isolation.md](./06_authz_and_tenant_isolation.md) +L6:权限与租户隔离 + +7. [07_open_source_skill_installation.md](./07_open_source_skill_installation.md) +L7:开源 Skill 包安装到 PowerX + +8. [08_stability_regression.md](./08_stability_regression.md) +L8:稳定性与全链路回归 + +## 2. 统一执行要求 + +1. 每条用例都要记录:`trace_id`、执行时间、执行人、结论。 +2. 失败必须附:请求参数、错误码、关键日志片段。 +3. 未达到“通过标准”不得进入下一层用例。 + +## 3. 建议执行顺序 + +1. 首轮:L1 -> L5(主功能链路)。 +2. 次轮:L6 -> L8(安全、接入、稳定性)。 +3. 发版前:至少重跑 L5、L6、L8。 diff --git a/docs/plan/AI_engineering/skills/testing_and_rollout.md b/docs/plan/AI_engineering/skills/testing_and_rollout.md new file mode 100644 index 00000000..6d0a4a48 --- /dev/null +++ b/docs/plan/AI_engineering/skills/testing_and_rollout.md @@ -0,0 +1,70 @@ +# Skills 测试与上线计划 + +本文定义 Skill 功能的测试矩阵、灰度发布与回滚策略。 + +## 1. 测试目标 + +1. 确保 `SKILL.md` 解析与校验稳定。 +2. 确保双路径调用(Agent/Gateway)结果一致。 +3. 确保授权、安全、租户隔离正确。 + +## 2. 测试矩阵 + +### 2.1 单元测试 + +1. Manifest 字段映射 +2. 版本状态机迁移 +3. 错误码与异常分类 + +### 2.2 集成测试 + +1. Admin 注册 -> 发布 -> 回滚全流程 +2. Tenant 调用 `skills/invoke` +3. `tenant/invocations + preferred_protocol=skill` + +### 2.3 契约测试 + +1. API 请求响应 JSON 结构 +2. 错误码稳定性 +3. 鉴权错误语义稳定性 + +### 2.4 回归测试 + +1. 不影响现有 `http/grpc/mcp/agent` 路由 +2. 不破坏现有 capability selector 行为 + +## 3. 验收标准 + +1. 技能注册成功率达到既定目标(示例:99.9%)。 +2. 调用链 trace 可完整回放。 +3. 授权拒绝有明确错误码与审计记录。 +4. 回滚可在不删历史的前提下完成。 + +## 4. 灰度策略 + +1. 灰度开关:按租户与环境控制。 +2. 先灰度只读 Skill,再灰度有副作用 Skill。 +3. 观察指标通过后全量开启。 + +## 5. 监控指标(建议) + +- `skill_invocations_total` +- `skill_invocation_error_total` +- `skill_invocation_latency_ms` +- `skill_registry_publish_total` +- `skill_registry_rollback_total` + +## 6. 回滚策略 + +1. 配置回滚:关闭 `protocol=skill` 选择权重。 +2. 版本回滚:切换到上一个 `published` 版本。 +3. 紧急回滚:将目标版本标记 `disabled`。 + +## 7. 里程碑 + +1. M1:文档与契约冻结 +2. M2:注册与管理接口上线 +3. M3:双路径运行时打通 +4. M4:插件/第三方接入上线 +5. M5:全量发布与运维交接 + diff --git a/docs/plan/AI_engineering/skills_management.md b/docs/plan/AI_engineering/skills_management.md deleted file mode 100644 index 6e1ef05a..00000000 --- a/docs/plan/AI_engineering/skills_management.md +++ /dev/null @@ -1,67 +0,0 @@ -# Skills 管理与使用规范 - -本文档用于约定「Skills」的维护与使用方式,供后续智能体/任务执行时按需加载与复用。 - -## 目标 - -- 让任务执行时可声明所需 Skill,避免重复造轮子。 -- 支持内置 Skill 与外部来源 Skill(例如 GitHub 列表)。 -- 规范化 Skill 的元信息、安装、升级、回滚与使用流程。 - -## Skill 定义(建议元信息字段) - -每个 Skill 以单个目录为单位,至少包含 `SKILL.md`,建议包含以下元信息: - -- name:唯一标识(短名,kebab-case) -- version:语义化版本 -- description:一句话说明用途 -- scope:适用范围(backend/web-admin/ops/agent 等) -- inputs:必需输入 -- outputs:输出形态(文档/代码/命令/配置) -- dependencies:运行/工具依赖(如需要 `rg`、`go`) -- entrypoints:主要使用流程或脚本入口 -- references:关联资料或仓库链接 - -## Skill 来源与安装 - -### 1) 内置 Skill - -- 存放路径建议:`skills//` -- 由仓库维护,随版本发布。 - -### 2) 外部 Skill(示例来源) - -- 允许从标准化 Skill 仓库安装,例如: - - `https://github.com/VoltAgent/awesome-openclaw-skills` - -安装流程建议: -1. 选择 Skill(name/version) -2. 拉取并校验(签名/校验和可选) -3. 安装到 `skills/` 或受控目录 -4. 记录安装来源与版本 - -## 使用方式(任务声明) - -执行任务前,允许在任务描述中显式声明所需 Skill: - -``` -需要技能:skill-a, skill-b -``` - -智能体按声明加载 `SKILL.md`,遵循其中步骤;如缺失或不可用,应回退到手工流程并记录原因。 - -## 版本与回滚 - -- 版本升级需记录变更摘要与兼容性说明。 -- 回滚应保留最近 1 个稳定版本。 - -## 安全与合规 - -- 禁止自动执行具有破坏性的命令(除非明确授权)。 -- 外部 Skill 必须可追溯来源。 -- Skill 内如含脚本,应标注权限需求与副作用。 - -## 后续计划(待实现) - -- 提供可视化 Skill 管理页(列表/安装/卸载/升级)。 -- 支持一键拉取外部 Skill 清单并筛选安装。 diff --git a/docs/standards/powerx/backend/rbac/readme.md b/docs/standards/powerx/backend/rbac/readme.md index a250636b..f563f7ce 100644 --- a/docs/standards/powerx/backend/rbac/readme.md +++ b/docs/standards/powerx/backend/rbac/readme.md @@ -41,6 +41,8 @@ ## Plugin 网关与 STS - 动态反代:宿主将 `/_p/:id/api/*` 反向代理到插件后端(见 `internal/infra/plugin/manager/router/router.go`)。 +- 认证边界:`/_p/:id/api/*` 仅用于插件内部业务 API,不承载宿主身份认证路由。 +- 身份路由约束:`/api/v1/admin/{identity}/auth/*`(当前 `user`,未来 `supply` 等)必须走宿主主路由,禁止通过 `/_p/:id/api/v1/admin/{identity}/auth/*` 访问。 - 路由策略(Policy): - 来自插件 manifest:`endpoints.http_base_path` 与 `rbac.resources[*].actions`;健康检查 `GET|HEAD:/healthz` 固定放行。 - 先匹配显式规则(`METHOD:/pattern`),否则自动推导(方法→动作;路径→资源,移除 `http_base_path`)。 @@ -127,4 +129,3 @@ claims, err := auth.ParseAndValidate(bearer, secret, "powerx-auth", "plugin: - 权限仓储:`pkg/corex/db/persistence/repository/iam/*` - Plugin 网关与策略:`internal/infra/plugin/manager/router/*`、`internal/infra/plugin/manager/rbac.go` - 健康检查:`internal/transport/http/admin/health_handler.go`、`internal/infra/plugin/manager/supervisor/*` - diff --git a/docs/standards/powerx/backend/swagger.json b/docs/standards/powerx/backend/swagger.json index 4d1efce4..6436025a 100644 --- a/docs/standards/powerx/backend/swagger.json +++ b/docs/standards/powerx/backend/swagger.json @@ -301,15 +301,15 @@ ] } }, - "/api/v1/admin/auth/me/context": { + "/api/v1/admin/user/auth/me/context": { "get": { - "operationId": "GET /api/v1/admin/auth/me/context", + "operationId": "GET /api/v1/admin/user/auth/me/context", "responses": { "200": { "description": "OK" } }, - "summary": "GET /api/v1/admin/auth/me/context", + "summary": "GET /api/v1/admin/user/auth/me/context", "tags": [ "api" ] diff --git a/docs/standards/powerx/backend/swagger.yaml b/docs/standards/powerx/backend/swagger.yaml index 9263933a..406520c7 100644 --- a/docs/standards/powerx/backend/swagger.yaml +++ b/docs/standards/powerx/backend/swagger.yaml @@ -195,13 +195,13 @@ paths: summary: POST /api/v1/admin/agents/test/connection tags: - api - /api/v1/admin/auth/me/context: + /api/v1/admin/user/auth/me/context: get: - operationId: GET /api/v1/admin/auth/me/context + operationId: GET /api/v1/admin/user/auth/me/context responses: "200": description: OK - summary: GET /api/v1/admin/auth/me/context + summary: GET /api/v1/admin/user/auth/me/context tags: - api /api/v1/admin/capabilities: diff --git a/docs/standards/powerx/web-admin/appendix/API_Route_Map.md b/docs/standards/powerx/web-admin/appendix/API_Route_Map.md index 49c2254a..66b08c59 100644 --- a/docs/standards/powerx/web-admin/appendix/API_Route_Map.md +++ b/docs/standards/powerx/web-admin/appendix/API_Route_Map.md @@ -9,7 +9,7 @@ | 页面 / 功能 | 代码位置 | Composable / Store | 请求 | API 端点 | 权限 / 备注 | | --- | --- | --- | --- | --- | --- | | 登录 | `app/pages/users/login.vue`(TODO) | `useAuthService().login` | `POST` | `/admin/user/auth/login` | `auth.login` | -| 用户上下文 | `app/stores/user.ts` | `useMe().getUserContext` | `GET` | `/admin/user/me/context`(假定) | `user.context.read` | +| 用户上下文 | `app/stores/user.ts` | `useMe().getUserContext` | `GET` | `/admin/user/auth/me/context` | `user.context.read` | | Agent 列表 | `/agent` | `useAgentManager().fetchAgents` | `GET` | `/admin/agents` | `agent.list` | | Agent 详情 | `/agent` | `useAgentManager().fetchAgentDetail` | `GET` | `/admin/agents/{id}` | `agent.read` | | Agent 会话列表 | `/agent` | `useChatSessions().listSessions` | `GET` | `/admin/agents/{id}/sessions`(待确认) | `agent.session.list` | @@ -32,6 +32,15 @@ > 若实际接口不同,请在集成时更新表格,确保前后端使用统一路径。 +### 身份路由策略(强约束) + +- 认证相关接口统一使用:`/admin/{identity}/auth/*` +- 当前 identity: + - `user`:`/admin/user/auth/*` + - `supply`:`/admin/supply/auth/*`(按模块启用) +- 未来 identity: + - `admin/{identity}/auth` 可按业务域扩展,不新增无 identity 前缀的认证路径。 + --- ## 2. 约定 diff --git a/docs/standards/powerx/web-admin/auth-and-iam/OIDC_SSO_and_Session_Flow.md b/docs/standards/powerx/web-admin/auth-and-iam/OIDC_SSO_and_Session_Flow.md index be701355..08e8c87d 100644 --- a/docs/standards/powerx/web-admin/auth-and-iam/OIDC_SSO_and_Session_Flow.md +++ b/docs/standards/powerx/web-admin/auth-and-iam/OIDC_SSO_and_Session_Flow.md @@ -6,6 +6,10 @@ ## 1. 架构概览 +- **认证路由命名策略**:统一采用 `"/admin/{identity}/auth/*"`,当前已启用 `user`,后续可扩展 `supply` 等身份域。 +- **当前生效命名空间**:`/admin/user/auth/*`(例如登录、刷新、登出、`me/context`)。 +- **未来扩展示例**:`/admin/supply/auth/*`、`/admin/{identity}/auth/*`(由后端按身份域注册,不复用无 identity 前缀的旧认证路由)。 +- **网关调用边界**:身份认证接口必须调用宿主 `/api/v1/admin/{identity}/auth/*`,不得通过插件代理路径 `/_p/:pluginId/api/v1/admin/{identity}/auth/*`,避免插件 STS token 与用户会话 token 混用。 - **登录端点**:`useAuthService().login()` 调用 `/admin/user/auth/login`(`app/composables/api/services/authService.ts: "210`)。" - **状态持久化**:`useAuth()` 将 `access_token`、`refresh_token`、`expires_at` 等写入 `localStorage`,并通过 `useState` 保持运行时状态(`app/composables/useAuth.ts: "6`)。" - **路由守卫**:`app/middleware/auth.ts: "1` 在客户端校验 Token,并在过期时重定向至 `/users/login?redirect=...`。" @@ -14,6 +18,12 @@ > 当前实现为“Password Grant + Refresh Token” 模式,尚未与外部 IdP 联动;以下流程为后续对接 OIDC 做铺垫。 +### 1.1 路由兼容约束 + +- 无 identity 前缀的旧认证路由已废弃,不再作为新能力或新插件的接入目标。 +- 文档、SDK、前端请求、插件桥接统一指向 `"/admin/{identity}/auth/*"`。 +- 网关鉴权与路由契约按 identity 维度扩展,不再使用“无 identity 前缀”的单一路由承载所有身份类型。 + --- ## 2. 登录/登出流程 diff --git a/docs/standards/powerx/web-admin/plugins/admin_plugins_user_guide.md b/docs/standards/powerx/web-admin/plugins/admin_plugins_user_guide.md index 78c26a2e..a2112c20 100644 --- a/docs/standards/powerx/web-admin/plugins/admin_plugins_user_guide.md +++ b/docs/standards/powerx/web-admin/plugins/admin_plugins_user_guide.md @@ -63,6 +63,15 @@ 注意:安装是系统级行为,与租户无关;不会生成租户凭证。 +安装弹窗中的“安装范围(用户级/组织级/系统级)”说明: +- 字段位置:安装请求 `metadata.scope`(随 `/api/v1/admin/plugins/install/local|url` 提交)。 +- 当前语义:用于安装记录的治理标签(审计/筛选/后续策略扩展),不改变“系统级安装”这一事实。 +- 默认值:按当前身份自动推断 + - `root`(平台管理员)→ `system` + - 租户管理员(非 root)→ `org` + - 普通用户 → `user` +- 未来用途(规划):可接入权限校验、发布审批、可见性控制、配额与计费策略。 + ### 2) 启用/停用(系统级,root) 1. 打开“已安装”页,找到目标插件。 2. 点击“启用(系统级)”启动进程并挂载反代;或点击“停用(系统级)”停止进程并卸载反代。 @@ -171,4 +180,3 @@ --- 如需对接“远端市场”,可在保持本手册交互不变的前提下,调整市场列表的数据来源(见 `docs/plugins/readme.md` 的远端对接说明)。 - diff --git a/docs/standards/powerx/web-admin/plugins/host_plugin_grpc.md b/docs/standards/powerx/web-admin/plugins/host_plugin_grpc.md index f5385415..9d9f9c5b 100644 --- a/docs/standards/powerx/web-admin/plugins/host_plugin_grpc.md +++ b/docs/standards/powerx/web-admin/plugins/host_plugin_grpc.md @@ -77,3 +77,22 @@ func unaryAuthInterceptor(ctx context.Context, req any, info *grpc.UnaryServerIn - 内部令牌每次进程启动随机化;不要写日志与磁盘。 - 插件端限制仅本机访问,或进一步使用 UDS/mTLS 加固。 - 插件端持久化 `client_secret` 时注意加密与最小权限;避免通过前端接口回读。 + +## 插件日志开关(宿主统一注入) + +为避免把宿主日志开关与插件日志开关混用,PowerX 约定了插件专用环境变量: + +- `POWERX_PLUGIN_HTTP_LOG` +- `POWERX_PLUGIN_GIN_MODE` +- `POWERX_PLUGIN_LOG_LEVEL` + +兼容策略(从高到低): + +1. `POWERX_PLUGIN_*`(推荐) +2. `POWERX_*`(历史兼容) +3. 插件自身默认配置 + +说明: + +- 宿主会在启动插件进程时把最终值同时注入 `POWERX_PLUGIN_*` 与 `POWERX_*`,确保旧插件(仅识别 `POWERX_*`)和新插件(识别 `POWERX_PLUGIN_*`)都能工作。 +- 建议插件侧优先读取 `POWERX_PLUGIN_*`,逐步移除对 `POWERX_*` 的依赖。 diff --git a/docs/standards/powerx/web-admin/plugins/readme.md b/docs/standards/powerx/web-admin/plugins/readme.md index 1cdcd06d..501bdca3 100644 --- a/docs/standards/powerx/web-admin/plugins/readme.md +++ b/docs/standards/powerx/web-admin/plugins/readme.md @@ -8,6 +8,7 @@ - 市场(Marketplace):展示“可安装的插件目录”。当前为本地模拟,未来支持远端索引(index_url)。 - 系统级(平台维度):安装/卸载、切换版本、进程启停、反向代理挂载等,全局唯一,与租户无关。 - 租户级(Tenant 维度):某租户对某插件的启用态与凭证(client_id/client_secret),独立隔离。 +- 安装范围(Install Scope):安装请求中的 `metadata.scope` 标签字段(`user/org/system`),当前用于治理与审计标签,不改变系统级安装行为;默认按身份自动推断(`root -> system`,租户管理员 -> `org`,普通用户 -> `user`)。 - 凭证(Credentials):落库于 `plugin_instance_configs(tenant_uuid, plugin_id, key="auth.credentials")`,仅存哈希;明文 secret 仅在首次生成或轮换时返回一次。 - STS(短期令牌):插件使用 `client_id/secret` 向宿主交换短期 JWT,用于访问宿主 API。 diff --git a/docs/use_cases/_from_hub/SCN-IAM-USER-ROLE-001/UC-IAM-USER-ROLE-BULK-AUTH-001.md b/docs/use_cases/_from_hub/SCN-IAM-USER-ROLE-001/UC-IAM-USER-ROLE-BULK-AUTH-001.md index 6f787fa1..2b5b49e7 100644 --- a/docs/use_cases/_from_hub/SCN-IAM-USER-ROLE-001/UC-IAM-USER-ROLE-BULK-AUTH-001.md +++ b/docs/use_cases/_from_hub/SCN-IAM-USER-ROLE-001/UC-IAM-USER-ROLE-BULK-AUTH-001.md @@ -183,5 +183,5 @@ sequenceDiagram - 主场景:`docs/scenarios/iam/SCN-IAM-USER-ROLE-001.md` - Docmap 配置:`docs/_data/docmap.yaml` - IAM 标准:`docs/standards/powerx/backend/iam/use_case.md` -- 前端守卫规范:`docs/standards/powerx/web-admin/auth-and-iam/Permission_Guards_and_RBAC.md` +- 前端守卫规范:`docs/standards/powerx/web-admin/iam/Permission_Guards_and_RBAC.md`(以仓库实际目录为准) - 工作流指标脚本:`scripts/qa/workflow-metrics.mjs` diff --git a/docs/use_cases/_from_hub/SCN-IAM-USER-ROLE-001/UC-IAM-USER-ROLE-DIRECTORY-SYNC-001.md b/docs/use_cases/_from_hub/SCN-IAM-USER-ROLE-001/UC-IAM-USER-ROLE-DIRECTORY-SYNC-001.md index 2dcd3aa7..38e42de8 100644 --- a/docs/use_cases/_from_hub/SCN-IAM-USER-ROLE-001/UC-IAM-USER-ROLE-DIRECTORY-SYNC-001.md +++ b/docs/use_cases/_from_hub/SCN-IAM-USER-ROLE-001/UC-IAM-USER-ROLE-DIRECTORY-SYNC-001.md @@ -187,5 +187,5 @@ sequenceDiagram - 主场景:`docs/scenarios/iam/SCN-IAM-USER-ROLE-001.md` - Docmap 配置:`docs/_data/docmap.yaml` - IAM 标准:`docs/standards/powerx/backend/iam/use_case.md` -- 前端守卫规范:`docs/standards/powerx/web-admin/auth-and-iam/Permission_Guards_and_RBAC.md` +- 前端守卫规范:`docs/standards/powerx/web-admin/iam/Permission_Guards_and_RBAC.md`(以仓库实际目录为准) - 工作流指标脚本:`scripts/qa/workflow-metrics.mjs` diff --git a/docs/use_cases/_from_hub/SCN-IAM-USER-ROLE-001/UC-IAM-USER-ROLE-OFFBOARD-001.md b/docs/use_cases/_from_hub/SCN-IAM-USER-ROLE-001/UC-IAM-USER-ROLE-OFFBOARD-001.md index 53d2d24d..5847a5df 100644 --- a/docs/use_cases/_from_hub/SCN-IAM-USER-ROLE-001/UC-IAM-USER-ROLE-OFFBOARD-001.md +++ b/docs/use_cases/_from_hub/SCN-IAM-USER-ROLE-001/UC-IAM-USER-ROLE-OFFBOARD-001.md @@ -81,7 +81,7 @@ last_reviewed_at: 2025-10-30 | 接入层 | `internal/transport/http/admin/iam/member_handler.go` | 暴露 Webhook、手动回收、报告查询 API;校验签名与权限 | `repos/powerx/internal/transport/http/admin/iam/` | | 工作流层 | `internal/service/iam/offboard_workflow.go` | 编排冻结、会话终止、权限回收、资产移交、重试与告警 | `repos/powerx/internal/service/iam/` | | 账号与权限层 | `internal/service/iam/member_service.go`, `pkg/corex/db/persistence/repository/iam` | 更新账号状态、解绑角色、回收项目授权、记录审计快照 | `repos/powerx/internal/service/iam/`, `repos/powerx/pkg/corex/db/persistence/repository/iam/` | -| 会话层 | `internal/transport/http/admin/auth/session_handler.go`(或等效服务) | 强制登出、刷新令牌失效、记录会话终止结果 | `repos/powerx/internal/transport/http/admin/auth/` | +| 会话层 | `internal/transport/http/admin/{identity}/auth/session_handler.go`(或等效服务) | 强制登出、刷新令牌失效、记录会话终止结果 | `repos/powerx/internal/transport/http/admin/{identity}/auth/` | | 通知与审计 | `internal/infra/plugin/manager/notify/notify.go`, `pkg/corex/audit`, `pkg/event_bus` | 输出通知、PagerDuty 告警、`iam.offboard.*` 事件、离职报告 | `repos/powerx/internal/infra/plugin/manager/notify/`, `repos/powerx/pkg/corex/audit/`, `repos/powerx/pkg/event_bus/` | ## 流程与时序 diff --git a/make_files/dev.mk b/make_files/dev.mk index 5303adc4..d9491cb6 100644 --- a/make_files/dev.mk +++ b/make_files/dev.mk @@ -8,9 +8,14 @@ LOG_LEVEL ?= debug CAPABILITY_SYNC_CONFIG ?= ./etc/config.yaml CAPABILITY_SYNC_ARTIFACTS ?= ./tmp/plugins CAPABILITY_SYNC_FLAGS ?= +CAPABILITY_GEN_OUT ?= config/platform_capabilities/generated.auto.yaml +CAPABILITY_GEN_OPENAPI ?= api/openapi/swagger.json +CAPABILITY_GEN_PROTO ?= api/grpc/contracts +CAPABILITY_GEN_GIN ?= internal/transport/http +CAPABILITY_GEN_FLAGS ?= # 启动开发服务器 -.PHONY: dev dev-agent dev-demo dev-watch capability-sync +.PHONY: dev dev-agent dev-demo dev-watch capability-sync capability-gen capability-gen-dry dev: dev-demo # 启动 Agent 服务 @@ -45,6 +50,28 @@ capability-sync: @echo "⚙️ 启动 Capability Sync Worker..." @cd backend && go run ./cmd/capability_sync -config $(CAPABILITY_SYNC_CONFIG) -artifacts $(CAPABILITY_SYNC_ARTIFACTS) $(CAPABILITY_SYNC_FLAGS) +# Capability 配置自动生成(OpenAPI/gRPC -> platform_capabilities YAML) +capability-gen: + @echo "🧩 生成 Capability 配置..." + @cd backend && ./scripts/capability_registry/generate_from_specs.sh \ + --openapi $(CAPABILITY_GEN_OPENAPI) \ + --proto $(CAPABILITY_GEN_PROTO) \ + --gin-src $(CAPABILITY_GEN_GIN) \ + --out $(CAPABILITY_GEN_OUT) \ + $(CAPABILITY_GEN_FLAGS) + @echo "✅ 生成完成: backend/$(CAPABILITY_GEN_OUT)" + +# 仅预览生成结果,不落盘 +capability-gen-dry: + @echo "🧪 预览 Capability 配置(dry-run)..." + @cd backend && ./scripts/capability_registry/generate_from_specs.sh \ + --openapi $(CAPABILITY_GEN_OPENAPI) \ + --proto $(CAPABILITY_GEN_PROTO) \ + --gin-src $(CAPABILITY_GEN_GIN) \ + --out $(CAPABILITY_GEN_OUT) \ + --dry-run \ + $(CAPABILITY_GEN_FLAGS) + # 代码质量检查 .PHONY: lint format vet check-all lint: vet format diff --git a/scripts/integration_gateway/apikey_token_playbook.sh b/scripts/integration_gateway/apikey_token_playbook.sh index 99a79fda..a83638f9 100755 --- a/scripts/integration_gateway/apikey_token_playbook.sh +++ b/scripts/integration_gateway/apikey_token_playbook.sh @@ -168,7 +168,7 @@ ensure_tenant_uuid() { fi local auth_header result payload status tenant_uuid auth_header="Authorization: Bearer ${ADMIN_TOKEN_VALUE}" - result="$(request_json GET "/admin/auth/me/context" "$auth_header")" + result="$(request_json GET "/admin/user/auth/me/context" "$auth_header")" payload="$(printf '%s' "$result" | sed '$d')" status="$(printf '%s' "$result" | tail -n1)" if [[ ! "$status" =~ ^2[0-9][0-9]$ ]]; then diff --git a/specs/007-integration-gateway-and-mcp/spec.md b/specs/007-integration-gateway-and-mcp/spec.md index 6d7e2b6b..c23cdd68 100644 --- a/specs/007-integration-gateway-and-mcp/spec.md +++ b/specs/007-integration-gateway-and-mcp/spec.md @@ -133,7 +133,7 @@ - **FR-025**: JWT 鉴权在签名/过期校验通过后,必须执行主体状态校验:`tenant/user/member` 均需存在且可用;若任一主体失效,返回 401/403,并清晰标识失败原因(如 `tenant_disabled`, `member_not_found`)。 - **FR-026**: 主体状态校验必须采用 `cache-first + DB-fallback`:先读取 Redis 快照,未命中或快照不完整时回源 DB 并回填缓存;缓存 TTL 默认 60 秒(可配置),且支持事件驱动失效。 - **FR-027**: 系统必须支持会话版本强制失效机制:JWT claims 增加 `session_version`(或等效字段),请求时与服务端当前版本对比;版本不一致时拒绝请求,确保密码重置、租户迁移、db-refresh 后可快速收敛旧 token。 -- **FR-028**: `/admin/auth/me/context` 在 token 通过签名但主体关系已漂移(如 token tenant 不在当前 memberships)时必须返回非 200(推荐 401/403),禁止“自动兜底切租户”掩盖失效态,避免前端误判为登录仍有效。 +- **FR-028**: `/admin/user/auth/me/context` 在 token 通过签名但主体关系已漂移(如 token tenant 不在当前 memberships)时必须返回非 200(推荐 401/403),禁止“自动兜底切租户”掩盖失效态,避免前端误判为登录仍有效。 - **FR-029**: 插件事件主题必须在 `plugin.yaml` 中显式声明(建议 `events.topics[]`),并在安装/启用流程中幂等同步到 `event_topics`;`/internal/ws-bus/grant` 仅执行授权绑定(ACL grant),禁止承担 topic 创建职责。运行时若 topic 未注册,必须返回明确错误(推荐 404/403),不允许隐式自动创建。 #### Gateway Proxy Envelope(请求/响应) diff --git a/web-admin/app/components/PluginWebView.vue b/web-admin/app/components/PluginWebView.vue index 278928c0..b8ad554e 100644 --- a/web-admin/app/components/PluginWebView.vue +++ b/web-admin/app/components/PluginWebView.vue @@ -1,5 +1,5 @@