# sema-stack 默认 values = full-cluster 形态(3 机准生产;单机覆盖见 values-full-single.yaml)。
# 凭据类(minio.rootPassword / server.serviceAuthToken / server.modelApiKey)必须由安装方
# --set/--values 注入(cluster-up.sh 从 $WORK/.env 读)——本文件不含任何真实凭据。

pg:
  instances: 3
  # >=3 机 required(不然调度器把多实例挤同节点,HA 名不副实——复审实抓);
  # <3 机 preferred(required 会让副本永久 Pending——单节点 dev 真踩)
  antiAffinity: required
  storageSize: 100Gi
  storageClass: longhorn
  # REV-2 §3c 调优参数(as-built 值;按机器规格重算由安装方覆盖)
  parameters:
    shared_buffers: "8GB"
    effective_cache_size: "86GB"
    maintenance_work_mem: "2GB"
    random_page_cost: "1.1"
    effective_io_concurrency: "200"
    checkpoint_completion_target: "0.9"
    max_parallel_workers: "8"
  backup:
    enabled: true
    retention: 7d
    # ⚠ in-tree barman 在 CNPG 1.31 移除——operator 钉 1.30;升 operator 前先迁 barman-cloud plugin
    schedule: "0 0 3 * * *"   # 每日 03:00 UTC 基备(WAL 连续归档另在跑,支持 PITR)
    bucket: s3://sema-pg-backup/

minio:
  image: minio/minio:latest
  storageSize: 200Gi
  storageClass: longhorn
  rootUser: sema
  rootPassword: ""   # REQUIRED(cluster-up 注入)

server:
  image: ""          # REQUIRED:registry 引用(海外=docker.io/<ns>/sema-server:<tag>)或节点预灌 tag
  pullPolicy: IfNotPresent   # tar 预灌=Never
  replicas: 3
  nodePort: 30890
  serviceAuthToken: ""   # REQUIRED
  modelGatewayBaseurl: ""  # REQUIRED
  modelId: ""              # REQUIRED
  modelApiKey: ""          # REQUIRED
  modelVision: "false"
  requirePrincipal: "false"   # users=multi 时 true(身份隔离;compose 路径同名 env)
  # region=global 时置 "global"(B5 env-first);cn 留空 = 域内默认
  sandboxPkgSource: ""
  # k8s exec lane 的 TLS 姿势:true=渲染 K8S_INSECURE_TLS=true(chart 0.1.0 as-built);
  # false=不渲染(2026-07-09 TLS 修=in-cluster CA 后的现役姿势,海外集群带外已删该 env,
  # 收编时默认 false 以贴合 live、避免 upgrade 把 insecure 面加回来)
  k8sInsecureTls: false
  # SendUserFile 公网直链(可选,三项全留空=不渲染,行为不变——MinIO 三键已内置,故工具会挂载、
  # 签发时 fail-loud 提示补 S3_PUBLIC_ENDPOINT):
  #   s3PublicEndpoint = 用户浏览器可达的 S3/MinIO 公网 base(反代必须透传 Host,SigV4 绑定 Host);
  #   s3PublicBucket   = 永久轨匿名桶(server 缺省 sema-public)。⚠️ 桶匿名策略必须 GetObject-only
  #     (mc anonymous set-json,Action 只含 s3:GetObject;set download 会连带开 ListBucket,
  #      不可猜 key 会被匿名枚举);
  #   sendUserFileSandboxPutEndpoint = 沙箱直传 PUT 端点(缺省=公网面;集群内 pod 可指内网 MinIO)。
  s3PublicEndpoint: ""
  s3PublicBucket: ""
  sendUserFileSandboxPutEndpoint: ""

# v4-pro 变体 worker(2026-07-11 手工 kubectl 资源收编进 chart;同镜像/同 env 面,仅 MODEL_ID 不同;
# 公网入口=Gcore LB listener 8091 → nodePort,LB 面不归 chart 管)
serverV4pro:
  enabled: false
  modelId: deepseek-v4-flash
  replicas: 1
  nodePort: 30891
  image: ""   # 留空 = 跟 server.image 同镜像

# sema-registry 配置中心(MCP/skill/模型配置云同步;各档默认带上,--registry=false 可关)。
# SQLite 落 PVC;凭据由安装方注入(kube-up.sh 从 $WORK/.env 读,不轮换)。
registry:
  enabled: true
  image: ""            # enabled=true 时 REQUIRED(GHCR/Hub 的 sema-registry 镜像,迁移中;SWR 已弃用)
  nodePort: 30300
  storageSize: 2Gi
  storageClass: ""     # 空=集群默认 SC
  # 默认管理员名必须是中性值——个人标识串作生产默认值=内部标识外溢(cli 点名案)。
  adminUser: admin
  adminPassword: ""    # REQUIRED(kube-up 注入)
  sessionSecret: ""    # REQUIRED
  pullToken: ""        # REQUIRED
  # git 面(--git=provision/connect 时注入;都空=只有表单登录)
  giteaBaseUrl: ""
  giteaOauthClientId: ""
  giteaOauthClientSecret: ""

# 自建 Gitea(--git=provision;引导管理员/token/OAuth app 是一次性动作,归 kube-up.sh)
gitea:
  enabled: false
  image: gitea/gitea:1.24
  httpNodePort: 30330
  sshNodePort: 30322
  storageSize: 10Gi
  storageClass: ""     # 空=集群默认 SC
  domain: ""           # clone URL 用的对外地址(kube-up 填节点 IP)

sandbox:
  namespace: sema-sandbox
  runtimeClass: kata-qemu   # 置空 = 不指定 runtimeClass(已有 k8s 无 kata 时的降级,沙箱=runc 隔离)
  # 默认=公开池 code-node(0.33GB:git+node+uv python3.12+pkg-source hook;clay 拍 2026-07-13——
  # 小巧默认,重任务用 sandboxImageProfile 按需选 code-python/code-full 等,Hub 池 public 匿名可拉)。
  # 裸 OS 镜像(如 ubuntu)没有 pkg-source hook——sandboxPkgSource=global 时官方源不会材料化,别退回。
  image: docker.io/claybobby/code-node:20260707-749ab84f5fdd-786f5ef10ffd

# 私有 registry 拉取(6b:secret 由 cluster-up 建 + patch default SA;这里的显式引用是纵深,
# 留空=只靠 SA 注入)
imagePullSecrets: []
# - sema-regcred
