Token导航 LogoToken导航TokenDH.com
前端设计需要联网github未标认证来源可访问许可证需确认审计通过

cue-kind-definition提示类型定义

Agent Skill

cue-kind-definition 用于处理 GitHub 仓库、Issue、Pull Request 和代码协作信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要围绕仓库状态、代码变更或协作事项进行整理时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

1,226

周安装

49

GitHub Stars

26

下载量

388
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

unknown

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:cue-kind-definition(提示类型定义)
来源仓库:https://github.com/grafana/skills
仓库路径:skills/cue-kind-definition
安装命令:
npx skills add https://github.com/grafana/skills --skill cue-kind-definition
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/grafana/skills --skill cue-kind-definition

简介

cue-kind-definition 驱动 grafana-app-sdk 的全链路代码生成,定义 Kubernetes 风格资源类型。

  • 适用于扩展 Grafana 插件体系,自动生成 Go、TypeScript 类型与 CRD 清单。
  • 每个 Kind 包含名称、版本与 schema 定义,支撑前后端一致性维护。
  • 新增 Kind 时应使用 CLI 脚手架生成模板,仔细阅读注释以理解字段用途。
  • 修改 CUE 文件后需重新运行代码生成 pipeline,确保所有产物同步更新。

SKILL.md

CUE Kind Definition

Kinds are the schema definitions that drive the entire grafana-app-sdk code generation pipeline. Each kind describes a Kubernetes-style resource type: its name, versions, and per-version schema. All Go types, TypeScript types, API clients, CRD manifests, and the AppManifest are generated from these CUE files.

Adding a Kind

Use the CLI to scaffold a kind before editing:

grafana-app-sdk project kind add <KindName> --overwrite

This creates a .cue file with scaffolding, field comments, and example values. Read the generated comments carefully — they explain every field's purpose.

Always use --overwrite when re-running to regenerate scaffolding without losing manual additions.

Kind File Structure

grafana-app-sdk project kind add creates files directly in kinds/ — the default layout is flat, all in package kinds:

kinds/
├── manifest.cue           # App manifest + version list declarations
├── mykind.cue             # Common (cross-version) kind metadata
└── mykind_v1alpha1.cue    # v1alpha1 schema + codegen config

For multi-version kinds the additional version files sit alongside:

kinds/
├── manifest.cue
├── mykind.cue
├── mykind_v1alpha1.cue
└── mykind_v1.cue
For larger, more complex kind definitions users may choose to organise kinds into per-kind and per-version subdirectories, each with their own package. The default CLI output uses the flat layout above.

CUE Kind Anatomy

A complete kind definition has three layers:

1. Common kind metadata (shared across versions)

// kinds/mykind.cue
package kinds

myKind: {
    kind: "MyKind"               // Required: the kind name (PascalCase)
    // other cross-version fields (scope, pluralName, validation, mutation, conversion, etc.)
    // See references/kind-layout.md for the full field reference
}

2. Per-version schema (one file per version)

Each version joins the common metadata with its own schema via CUE's & operator:

// kinds/mykind_v1alpha1.cue
package kinds

myKindv1alpha1: myKind & {
    // Version-specific schema
    schema: {
        // spec: desired state — set by users/clients, never by the operator
        spec: {
            title:       string
            description: string | *""     // optional with default
            count:       int & >=0
            enabled:     bool | *true
        }
        // status: observed state — written only by the operator/reconciler,
        // never by users. Mirrors Kubernetes spec/status conventions.
        status: {
            lastObservedGeneration: int | *0
            state:                  string | *""
            message:                string | *""
        }
    }

    // Code generation config
    codegen: {
        ts: { enabled: true }   // generate TypeScript types
        go: { enabled: true }   // generate Go types and client
    }
}

3. App manifest (version registration)

Since all files share package kinds, version objects are referenced directly — no imports needed in the flat layout:

// kinds/manifest.cue
package kinds

App: {
    appName: "my-app"
    versions: {
        "v1alpha1": {
            schema: myKindv1alpha1
        }
    }
}

spec vs status

This distinction follows Kubernetes conventions exactly:

spec — desired state. Written by users and clients. The operator reads spec and works to make the world match it. Admission handlers validate and mutate spec. Never write to spec from a reconciler.

status — observed state. Written only by the operator/reconciler after it has done work. Users and clients should treat status as read-only. Admission handlers must not modify status.

Typical status fields:

status: {
    // Generation of the spec that was last successfully reconciled.
    // Set to metadata.generation after a successful reconcile loop.
    lastObservedGeneration: int | *0

    // Human-readable summary of current state
    state:   string | *""   // e.g. "Ready", "Provisioning", "Error"
    message: string | *""   // detail, especially on error

    // References to objects created by the reconciler.
    // e.g. the name of a ConfigMap or Deployment the reconciler provisioned.
    provisionedConfigMap: string | *""
    provisionedServiceAccount: string | *""
}

Fields that belong in status, not spec:

  • Anything the operator computes or creates (IDs, names, URLs of provisioned resources)
  • lastObservedGeneration / observedGeneration
  • conditions (Kubernetes-style condition arrays)
  • Current health or lifecycle state ("Ready", "Degraded", etc.)
  • Timestamps of when the operator last acted

Fields that belong in spec, not status:

  • Everything the user configures as desired state
  • References to *existing* resources the user wants the app to interact with (the operator looks these up, it doesn't create them)

Type Definitions with #

CUE supports named type definitions using the # prefix inside a schema block. Each #Definition generates a named Go struct and TypeScript interface alongside the kind's Spec type.

schema: {
    #Threshold: {
        value:    float & >=0
        severity: "info" | "warning" | "critical"
        message:  string | *""
    }

    #ResourceRef: {
        name:      string & != ""
        namespace: string | *"default"
    }

    spec: {
        title:          string & != ""
        alertThreshold: #Threshold
        thresholds:     [...#Threshold]  // list of a defined type
        targetRef?:     #ResourceRef     // optional
    }
}

# definitions are scoped to the schema block they are declared in.

Prefer # definitions when:

  • A struct is used in more than one field
  • A struct is large or complex enough that inlining hurts readability
  • A struct appears in a list ([...#MyType])

Inline structs are fine when:

  • The struct is small and simple (2-3 fields) or shallow
  • It is used in only one place and unlikely to be reused

Maps ({[string]: string}) and lists of scalars ([...string]) are always fine inline.

Schema Field Types

CUE is a superset of JSON. Commonly used types and constraints:

// Basic types
myString:  string
myInt:     int
myFloat:   float
myBool:    bool
myBytes:   bytes

// Optional with default
name: string | *"default-value"

// Constraints (using & to intersect)
port:     int & >=1 & <=65535
label:    string & =~"^[a-z][a-z0-9-]*$"  // regex constraint

// Enums (disjunctions)
status:   "pending" | "active" | "archived"

// Maps (always fine inline)
labels: {[string]: string}
attrs:  {[string]: _}

// Lists of scalars (fine inline)
tags: [...string]

// Optional field
description?: string

Custom Routes in CUE

Routes can be defined at two levels. Both require corresponding Go handlers registered in app.go.

Kind-level routes

MyKind: {
    kind: "MyKind"
    schema: { ... }

    routes: {
        "/actions/process": {
            "POST": {
                name: "processMyKind"  // unique within version; must start with a k8s verb
                request: {
                    body: {
                        reason: string
                    }
                }
                response: {
                    jobId:  string
                    status: string
                }
            }
        }
    }
}

Version-level routes

versions: {
    "v1alpha1": {
        routes: {
            namespaced: {
                "/summary": {
                    "GET": {
                        name: "getNamespacedSummary"
                        response: { count: int }
                    }
                }
            }
            cluster: {
                "/health": {
                    "GET": {
                        name: "getHealth"
                        response: { status: string }
                    }
                }
            }
        }
    }
}

After adding routes, run grafana-app-sdk generate — routes are included in the AppManifest and ValidateManifest will fail if a handler is missing.

Version Compatibility Rules

When a kind has multiple versions, fields declared in the common metadata object must match across all versions. Schema fields (inside schema.spec) can differ per version, but:

  • The kind field must be identical in every version
  • Breaking changes (removing fields, changing types, adding required fields) must be introduced via a new version — never by modifying a stable version (v1, v2)
  • Use status for server-managed fields; never put mutable server state in spec

Codegen Configuration

Control what gets generated per kind per version:

codegen: {
    ts: { enabled: true | false }   // TypeScript types
    go: { enabled: true | false }   // Go types + client
}

Disabling go for frontend-only apps avoids generating unused Go code. Disabling ts for backend-only resources reduces TypeScript bundle size. Both default to true when omitted.

After Editing Kinds

Always run generate after any change to .cue files:

grafana-app-sdk generate

The generated files in pkg/generated/ must never be edited manually — they are overwritten on every generate run.

Resources

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Codex

36.41%
按下载量换算141

Claude

31.93%
按下载量换算124

Cursor

17.07%
按下载量换算66

Gemini CLI

8.4%
按下载量换算33

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

需要联网

该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills