# SPEC: PJ2026-01060505 Workbench Performance; PJ2026-0106 平台运维
manifestVersion: v1
environment: dev
namespace: hwlab-dev
endpoint: http://74.48.78.17:16667
health:
  method: GET
  path: /health/live
  responseFormat: json
publicEndpoints:
  frontend:
    url: http://74.48.78.17:16666
    protocol: http
    host: 74.48.78.17
    port: 16666
    serviceId: hwlab-cloud-web
    frpProxy: hwlab-dev-cloud-web
  api:
    url: http://74.48.78.17:16667
    protocol: http
    host: 74.48.78.17
    port: 16667
    serviceId: hwlab-edge-proxy
    frpProxy: hwlab-dev-edge-proxy
frp:
  server:
    address: 74.48.78.17
    bindPort: 7000
  proxies:
    - name: hwlab-dev-cloud-web
      endpointId: frontend
      type: tcp
      localServiceId: hwlab-cloud-web
      localHost: hwlab-cloud-web.hwlab-dev.svc.cluster.local
      localPort: 8080
      remotePort: 16666
    - name: hwlab-dev-edge-proxy
      endpointId: api
      type: tcp
      localServiceId: hwlab-edge-proxy
      localHost: hwlab-edge-proxy.hwlab-dev.svc.cluster.local
      localPort: 6667
      remotePort: 16667
k3s:
  serviceMappings:
    - serviceId: hwlab-cloud-api
      name: hwlab-cloud-api
      namespace: hwlab-dev
      port: 6667
      targetPort: http
    - serviceId: hwlab-cloud-web
      name: hwlab-cloud-web
      namespace: hwlab-dev
      port: 8080
      targetPort: http
    - serviceId: hwlab-gateway
      name: hwlab-gateway
      namespace: hwlab-dev
      port: 7001
      targetPort: http
    - serviceId: hwlab-agent-skills
      name: hwlab-agent-skills
      namespace: hwlab-dev
      port: 7430
      targetPort: http
    - serviceId: hwlab-edge-proxy
      name: hwlab-edge-proxy
      namespace: hwlab-dev
      port: 6667
      targetPort: http
profiles:
  dev:
    name: dev
    enabled: true
    namespace: hwlab-dev
    endpoint: http://74.48.78.17:16667
    notes: DEV-only k3s deployment skeleton. D601 reaches the master edge through frp reverse tunnel.
  prod:
    name: prod
    enabled: false
    namespace: hwlab-prod
    notes: Reserved placeholder only. PROD deployment and acceptance are explicitly out of scope.
nodes:
  G14:
    gitopsRoot: deploy/gitops/node
    sourceRepo: git@github.com:pikasTech/HWLAB.git
    publicHost: 74.48.78.17
  NC01:
    gitopsRoot: deploy/gitops/node/nc01
    sourceRepo: git@github.com:pikasTech/HWLAB.git
lanes:
  v02:
    name: v0.2
    node: G14
    sourceBranch: v0.2
    gitopsBranch: v0.2-gitops
    gitMirror:
      namespace: devops-infra
      serviceReadName: git-mirror-http
      serviceWriteName: git-mirror-write
      cachePvcName: hwlab-git-mirror-cache
      cachePvcStorage: 20Gi
      cacheHostPath: /var/lib/rancher/k3s/storage/hwlab-d601-v02-git-mirror-cache
      servicePort: 8080
      syncConfigMapName: git-mirror-sync-script
      egressProxy:
        mode: node-global
        required: true
        namespace: platform-infra
        serviceName: sub2api-egress-proxy
        port: 10808
        clientName: d601-global-proxy
        noProxy:
          - localhost
          - 127.0.0.1
          - ::1
          - 127.0.0.1:5000
          - localhost:5000
          - .svc
          - .svc.cluster.local
          - .cluster.local
          - kubernetes
          - kubernetes.default
          - kubernetes.default.svc
          - 10.0.0.0/8
          - 10.42.0.0/16
          - 10.43.0.0/16
          - 172.16.0.0/12
          - 192.168.0.0/16
          - 82.156.23.220
          - 74.48.78.17
          - hyueapi.com
          - .hyueapi.com
    namespace: hwlab-v02
    endpoint: https://hwlab.74-48-78-17.nip.io
    publicEndpoints:
      frontend: https://hwlab.74-48-78-17.nip.io
      api: https://hwlab.74-48-78-17.nip.io
      legacyFrontend: http://74.48.78.17:19666
      legacyApi: http://74.48.78.17:19667
    artifactCatalog: deploy/artifact-catalog.v02.json
    runtimePath: runtime-v02
    imageTagMode: full
    envReuseServices:
      - hwlab-cloud-api
      - hwlab-cloud-web
      - hwlab-gateway
      - hwlab-edge-proxy
      - hwlab-agent-skills
    bootScripts:
      hwlab-cloud-api: deploy/runtime/boot/hwlab-cloud-api.sh
      hwlab-cloud-web: deploy/runtime/boot/hwlab-cloud-web.sh
      hwlab-gateway: deploy/runtime/boot/hwlab-gateway.sh
      hwlab-edge-proxy: deploy/runtime/boot/hwlab-edge-proxy.sh
      hwlab-agent-skills: deploy/runtime/boot/hwlab-agent-skills.sh
    serviceDeclarations:
      hwlab-cloud-api:
        runtimeKind: bun-command
        entrypoint: cmd/hwlab-cloud-api/main.ts
        artifactKind: bun-command
        healthPath: /health/live
        healthPort: 6667
        componentPaths:
          - cmd/hwlab-cloud-api/
          - cmd/hwlab-codex-api-responses-forwarder/
          - cmd/hwlab-deepseek-responses-bridge/
          - deploy/runtime/boot/hwlab-codex-api-responses-forwarder.sh
          - deploy/runtime/boot/hwlab-deepseek-responses-bridge.sh
          - internal/cloud/
          - internal/db/
          - internal/audit/
          - internal/agent/agentrun-dispatch.mjs
          - internal/agent/prompts/
          - skills/hwlab-agent-runtime/
        env: {}
        observable: true
      hwlab-cloud-web:
        runtimeKind: cloud-web
        entrypoint: web/hwlab-cloud-web/index.html
        artifactKind: cloud-web
        healthPath: /health/live
        healthPort: 8080
        componentPaths:
          - web/hwlab-cloud-web/
          - internal/dev-entrypoint/cloud-web-runtime.mjs
          - internal/dev-entrypoint/cloud-web-proxy.mjs
          - internal/dev-entrypoint/cloud-web-routes.mjs
          - internal/dev-entrypoint/opencode-provider-proxy.mjs
          - deploy/runtime/boot/opencode-provider-proxy.sh
          - tools/src/hwlab-cli/trace-renderer.ts
        env:
          OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: http://otel-collector.platform-infra.svc.cluster.local:4318/v1/traces
          OTEL_SERVICE_NAME: hwlab-cloud-web
        observable: true
      hwlab-gateway:
        runtimeKind: bun-command
        entrypoint: cmd/hwlab-gateway/main.ts
        artifactKind: bun-command
        healthPath: /health/live
        healthPort: 7001
        componentPaths:
          - cmd/hwlab-gateway/
          - internal/sim/
        env: {}
        observable: false
      hwlab-edge-proxy:
        runtimeKind: node-command
        entrypoint: cmd/hwlab-edge-proxy/main.mjs
        artifactKind: node-command
        healthPath: /health
        healthPort: 6667
        componentPaths:
          - cmd/hwlab-edge-proxy/
          - internal/dev-entrypoint/http.mjs
        env: {}
        observable: true
      hwlab-agent-skills:
        runtimeKind: skills-bundle
        entrypoint: skills/hwlab-agent-runtime/SKILL.md
        artifactKind: skills-bundle
        healthPath: /health/live
        healthPort: 7430
        componentPaths:
          - skills/
        env: {}
        observable: true
    envRecipe:
      osPackages:
        - ca-certificates
        - git
      bunVersion: 1.3.13
      downloadStack:
        httpProxy: http://127.0.0.1:10808
        httpsProxy: http://127.0.0.1:10808
        noProxy:
          - 127.0.0.1
          - localhost
          - ::1
          - hyueapi.com
          - .hyueapi.com
        npmRegistry: https://registry.npmjs.org/
        npmFetchTimeoutMs: 300000
        bunPackages:
          x64: '@oven/bun-linux-x64'
          arm64: '@oven/bun-linux-aarch64'
      launcherPath: deploy/runtime/launcher/hwlab-env-reuse-launcher.ts
      runtimeNodeModulesPath: /opt/hwlab-env/node_modules
      additionalEnvPaths:
        - internal/dev-entrypoint/artifact-runtime.mjs
      hwpodAliases:
        - command: hwpod
          script: tools/hwpod-cli.ts
        - command: hwpod-ctl
          script: tools/hwpod-ctl.ts
        - command: hwpod-compiler
          script: tools/hwpod-compiler-cli.ts
    bootConfig:
      template: default
      overrides: {}
    services:
      - serviceId: hwlab-cloud-api
        env:
          HWLAB_CLOUD_DB_URL: secretRef:hwlab-cloud-api-v02-db/database-url
          HWLAB_CLOUD_DB_CONTRACT: v02-redacted-presence-only
          HWLAB_ACCESS_CONTROL_REQUIRED: "1"
          HWLAB_BOOTSTRAP_ADMIN_ID: usr_v02_admin
          HWLAB_BOOTSTRAP_ADMIN_USERNAME: admin
          HWLAB_BOOTSTRAP_ADMIN_DISPLAY_NAME: HWLAB v0.2 Admin
          HWLAB_BOOTSTRAP_ADMIN_PASSWORD_HASH: secretRef:hwlab-v02-bootstrap-admin/password-hash
          HWLAB_BOOTSTRAP_ADMIN_API_KEY_ID: key_master_server_admin
          HWLAB_BOOTSTRAP_ADMIN_API_KEY: secretRef:hwlab-v02-master-server-admin-api-key/api-key
          HWLAB_KEYCLOAK_ISSUER: https://auth.74-48-78-17.nip.io/realms/hwlab
          HWLAB_KEYCLOAK_CLIENT_ID: hwlab-cloud-web
          HWLAB_KEYCLOAK_CLIENT_SECRET: secretRef:hwlab-cloud-web-client/client-secret
          HWLAB_CODE_AGENT_ADAPTER: agentrun-v01
          AGENTRUN_MGR_URL: http://agentrun-mgr.agentrun-v01.svc.cluster.local:8080
          AGENTRUN_API_KEY: secretRef:hwlab-v02-master-server-admin-api-key/api-key
          HWLAB_CODE_AGENT_AGENTRUN_RUNNER_NAMESPACE: agentrun-v01
          HWLAB_CODE_AGENT_AGENTRUN_SECRET_NAMESPACE: agentrun-v01
          HWLAB_CODE_AGENT_AGENTRUN_REPO_URL: http://git-mirror-http.devops-infra.svc.cluster.local/pikasTech/HWLAB.git
  v03:
    name: v0.3
    node: G14
    sourceBranch: v0.3
    gitopsBranch: v0.3-gitops
    gitMirror:
      namespace: devops-infra
      serviceReadName: git-mirror-http
      serviceWriteName: git-mirror-write
      cachePvcName: hwlab-git-mirror-cache
      cachePvcStorage: 20Gi
      cacheHostPath: /var/lib/rancher/k3s/storage/hwlab-d601-v03-git-mirror-cache
      servicePort: 8080
      syncConfigMapName: git-mirror-sync-script
      egressProxy:
        mode: node-global
        required: true
        namespace: platform-infra
        serviceName: sub2api-egress-proxy
        port: 10808
        clientName: d601-global-proxy
        noProxy:
          - localhost
          - 127.0.0.1
          - ::1
          - 127.0.0.1:5000
          - localhost:5000
          - .svc
          - .svc.cluster.local
          - .cluster.local
          - kubernetes
          - kubernetes.default
          - kubernetes.default.svc
          - 10.0.0.0/8
          - 10.42.0.0/16
          - 10.43.0.0/16
          - 172.16.0.0/12
          - 192.168.0.0/16
          - 82.156.23.220
          - 74.48.78.17
          - hyueapi.com
          - .hyueapi.com
    namespace: hwlab-v03
    endpoint: https://hwlab.pikapython.com
    publicEndpoints:
      frontend: https://hwlab.pikapython.com
      api: https://hwlab.pikapython.com
      legacyFrontend: http://82.156.23.220:22090
      legacyApi: http://82.156.23.220:22088
    publicServices:
      nodes:
        NC01:
          - name: hwlab-cloud-web-public
            selector:
              app.kubernetes.io/name: hwlab-cloud-web
            port: 80
            targetPort: 8080
            nodePort: 32009
          - name: hwlab-hwpod-web-public
            selector:
              app.kubernetes.io/name: hwlab-hwpod-web
            port: 80
            targetPort: 8080
            nodePort: 32012
    frp:
      server:
        address: 82.156.23.220
        bindPort: 22000
      auth:
        secretName: hwlab-v03-frpc-secrets
        secretKey: token
      proxies:
        - name: hwlab-jd01-v03-cloud-web
          endpointId: frontend
          type: tcp
          localServiceId: hwlab-cloud-web
          localHost: hwlab-cloud-web.hwlab-v03.svc.cluster.local
          localPort: 8080
          remotePort: 22090
        - name: hwlab-jd01-v03-edge-proxy
          endpointId: api
          type: tcp
          localServiceId: hwlab-edge-proxy
          localHost: hwlab-edge-proxy.hwlab-v03.svc.cluster.local
          localPort: 6667
          remotePort: 22088
      nodes:
        NC01:
          proxies:
            - name: hwlab-nc01-v03-cloud-web
              endpointId: frontend
              type: tcp
              localServiceId: hwlab-cloud-web
              localHost: hwlab-cloud-web.hwlab-v03.svc.cluster.local
              localPort: 8080
              remotePort: 22082
            - name: hwlab-nc01-v03-edge-proxy
              endpointId: api
              type: tcp
              localServiceId: hwlab-edge-proxy
              localHost: hwlab-edge-proxy.hwlab-v03.svc.cluster.local
              localPort: 6667
              remotePort: 22083
    artifactCatalog: deploy/artifact-catalog.v03.json
    runtimePath: runtime-v03
    imageTagMode: full
    accessControl:
      usersRef: config/hwlab-access-control/users.d601-v03.yaml#spec.users
      navProfilesRef: config/hwlab-access-control/nav-profiles.yaml#spec.profiles
    secretPlaneRef: config/hwlab-v03/secrets.yaml#secretPlane
    workbench:
      traceTimeline:
        autoExpandRunning: true
        autoCollapseTerminal: false
      rawHwlabEventWindow:
        enabled: true
        maxEntries: 200
        maxRetainedBytes: 1048576
    agentObserver:
      retentionEventLimit: 10000
      retentionScanLimit: 1000000
      retentionTimeoutMs: 30000
      retentionGroupPrefix: hwlab-v03-agent-observer-replay
      sseHeartbeatMs: 15000
      reconnectDelayMs: 1500
      batchMaxEvents: 100
      liveBufferLimit: 2000
      identityWindowLimit: 12000
      reducerEventLimit: 2000
      reducerEntityLimit: 500
      treeNodeLimit: 500
      inspectorEventTailLimit: 100
      virtualListWindowLimit: 160
      changeHighlightMs: 1200
      staleAfterMs: 30000
      reducedMotion: respect-system
    observability:
      traceExplorerUrlTemplate: /v1/workbench/traces/{trace_id}/events
      prometheusOperatorResources: false
    opencode:
      image: 127.0.0.1:5000/hwlab/opencode:1.17.7-git
      providerProfile: gpt.pika
      providerId: gpt.pika
      displayName: AgentRun gpt.pika
      model: gpt-5.4-mini
      smallModel: gpt-5.4-mini
      baseURL: https://api.pikapython.com/
      npm: '@ai-sdk/openai-compatible'
      apiKeyEnv: OPENCODE_GPT_PIKA_API_KEY
      apiKeySecretRef: hwlab-code-agent-provider/opencode-api-key
      contextLimit: 1000000
      outputLimit: 384000
      agentrunSecretNamespace: agentrun-v02
      agentrunSecretName: agentrun-v01-provider-gpt-pika
      agentrunSecretKeys:
        - auth.json
        - config.toml
        - model-catalog.json
    externalPostgres:
      enabled: true
      serviceName: jd01-pk01-platform-postgres
      endpointAddress: 82.156.23.220
      port: 5432
      nodes:
        NC01:
          serviceName: nc01-host-postgres
          endpointAddress: 10.42.0.1
          port: 5432
    runtimeStore:
      postgres:
        image: postgres:16-alpine
        sslMode: require
        poolMax: 4
        connectionTimeoutMs: 5000
        queryTimeoutMs: 3000
        queryRetryMaxAttempts: 5
        queryRetryInitialDelayMs: 250
        queryRetryMaxDelayMs: 5000
    workbenchRuntime:
      client:
        timeoutMs: 3000
      sessionsSummary:
        maxAttempts: 1
        attemptTimeoutMs: 10000
        backoffMs: 0
      factsQuery:
        maxAttempts: 1
        backoffBaseMs: 0
        backoffMaxMs: 1
      postgres:
        poolMax: 16
        queryTimeoutMs: 10000
        readyTimeoutMs: 10000
      cache:
        redis:
          enabled: true
          namespace: hwlab-v03
          serviceName: hwlab-workbench-redis
          port: 6379
          image: 127.0.0.1:5000/hwlab/redis:8.2.3-alpine
          resources:
            requests:
              cpu: 50m
              memory: 64Mi
            limits:
              cpu: 250m
              memory: 256Mi
          memoryPolicy:
            persistence: disabled
            maxMemory: 192mb
            eviction: allkeys-lru
          ttl:
            sessionsSummaryMs: 30000
            terminalTurnMs: 300000
            terminalTracePageMs: 300000
            runningPageMs: 5000
          limits:
            maxKeyBytes: 512
            maxPayloadBytes: 262144
          timeouts:
            connectMs: 200
            operationMs: 100
          metrics:
            labels:
              lane: v03
              service: hwlab-workbench-runtime
              cacheKeyClass: workbench-derived-read
          disableSwitchEnv: HWLAB_WORKBENCH_CACHE_REDIS_ENABLED
          unavailableBehavior:
            livenessFailure: false
            readMode: db-or-degraded
            fallbackStateSource: false
    envReuseServices: &v03EnvReuseServices
      - hwlab-cloud-api
      - hwlab-workbench-runtime
      - hwlab-user-billing
      - hwlab-project-management
      - hwlab-tasktree-api
      - hwlab-tasktree-worker
      - hwlab-harnessrl-api
      - hwlab-harnessrl-worker
      - hwlab-workbench-api
      - hwlab-workbench-worker
      - hwlab-hwpod-api
      - hwlab-hwpod-worker
      - hwlab-hwpod-web
      - hwlab-cloud-web
      - hwlab-gateway
      - hwlab-edge-proxy
      - hwlab-agent-skills
    bootScripts: &v03BootScripts
      hwlab-cloud-api: deploy/runtime/boot/hwlab-cloud-api.sh
      hwlab-workbench-runtime: deploy/runtime/boot/hwlab-workbench-runtime.sh
      hwlab-user-billing: deploy/runtime/boot/hwlab-user-billing.sh
      hwlab-project-management: deploy/runtime/boot/hwlab-project-management.sh
      hwlab-tasktree-api: deploy/runtime/boot/hwlab-tasktree-api.sh
      hwlab-tasktree-worker: deploy/runtime/boot/hwlab-tasktree-worker.sh
      hwlab-harnessrl-api: deploy/runtime/boot/hwlab-harnessrl-api.sh
      hwlab-harnessrl-worker: deploy/runtime/boot/hwlab-harnessrl-worker.sh
      hwlab-workbench-api: deploy/runtime/boot/hwlab-workbench-api.sh
      hwlab-workbench-worker: deploy/runtime/boot/hwlab-workbench-worker.sh
      hwlab-hwpod-api: deploy/runtime/boot/hwlab-hwpod-api.sh
      hwlab-hwpod-worker: deploy/runtime/boot/hwlab-hwpod-worker.sh
      hwlab-hwpod-web: deploy/runtime/boot/hwlab-hwpod-web.sh
      hwlab-cloud-web: deploy/runtime/boot/hwlab-cloud-web.sh
      hwlab-gateway: deploy/runtime/boot/hwlab-gateway.sh
      hwlab-edge-proxy: deploy/runtime/boot/hwlab-edge-proxy.sh
      hwlab-agent-skills: deploy/runtime/boot/hwlab-agent-skills.sh
    serviceDeclarations: &v03ServiceDeclarations
      hwlab-cloud-api:
        runtimeKind: bun-command
        entrypoint: cmd/hwlab-cloud-api/main.ts
        artifactKind: bun-command
        healthPath: /health/live
        healthPort: 6667
        healthProbe:
          readiness:
            timeoutSeconds: 3
            failureThreshold: 5
          liveness:
            periodSeconds: 20
            timeoutSeconds: 5
            failureThreshold: 6
          startup:
            timeoutSeconds: 3
        componentPaths:
          - cmd/hwlab-cloud-api/
          - cmd/hwlab-codex-api-responses-forwarder/
          - cmd/hwlab-deepseek-responses-bridge/
          - deploy/runtime/boot/hwlab-codex-api-responses-forwarder.sh
          - deploy/runtime/boot/hwlab-deepseek-responses-bridge.sh
          - internal/cloud/
          - internal/db/
          - internal/audit/
          - internal/agent/agentrun-dispatch.mjs
          - internal/agent/prompts/
          - skills/hwlab-agent-runtime/
        env:
          TZ: Asia/Shanghai
          HWLAB_METRICS_NAMESPACE: hwlab-v03
          HWLAB_OBSERVABILITY_CONFIG_REVISION: PJ2026-01060505-20260619-long-trace-timeout-mitigation
          HWLAB_CODE_AGENT_AGENTRUN_DISPATCH_RETRY_MAX: "5"
          HWLAB_CODE_AGENT_AGENTRUN_DISPATCH_RETRY_BASE_MS: "1000"
          HWLAB_CODE_AGENT_AGENTRUN_DISPATCH_RETRY_MAX_DELAY_MS: "30000"
        observable: true
      hwlab-workbench-runtime:
        runtimeKind: go-service
        entrypoint: cmd/hwlab-workbench-runtime/main.go
        artifactKind: go-service
        healthPath: /health/live
        healthPort: 6671
        healthProbe:
          readiness:
            timeoutSeconds: 10
            failureThreshold: 5
          liveness:
            timeoutSeconds: 5
            failureThreshold: 6
          startup:
            timeoutSeconds: 10
            failureThreshold: 30
        componentPaths:
          - go.mod
          - go.sum
          - cmd/hwlab-workbench-runtime/
          - internal/workbenchruntime/
          - deploy/runtime/boot/hwlab-workbench-runtime.sh
        env:
          TZ: Asia/Shanghai
        observable: true
      hwlab-user-billing:
        runtimeKind: go-service
        entrypoint: cmd/hwlab-user-billing/main.go
        artifactKind: go-service
        healthPath: /health/live
        healthPort: 6670
        healthProbe:
          readiness:
            timeoutSeconds: 10
            failureThreshold: 5
          liveness:
            timeoutSeconds: 5
            failureThreshold: 6
          startup:
            timeoutSeconds: 10
            failureThreshold: 30
        componentPaths:
          - go.mod
          - go.sum
          - cmd/hwlab-user-billing/
          - internal/userbilling/
          - deploy/runtime/boot/hwlab-user-billing.sh
        env:
          TZ: Asia/Shanghai
        observable: true
      hwlab-project-management:
        runtimeKind: bun-command
        entrypoint: cmd/hwlab-project-management/main.ts
        artifactKind: bun-command
        healthPath: /health/live
        healthPort: 6672
        healthProbe:
          readiness:
            timeoutSeconds: 10
            failureThreshold: 5
          liveness:
            timeoutSeconds: 5
            failureThreshold: 6
          startup:
            timeoutSeconds: 10
            failureThreshold: 30
        componentPaths:
          - cmd/hwlab-project-management/
          - internal/project-management/
          - internal/db/runtime-store.ts
          - deploy/runtime/boot/hwlab-project-management.sh
        env:
          TZ: Asia/Shanghai
        observable: true
      hwlab-tasktree-api:
        runtimeKind: bun-command
        entrypoint: cmd/hwlab-tasktree-api/main.ts
        artifactKind: bun-command
        healthPath: /health/live
        healthPort: 6673
        componentPaths:
          - cmd/hwlab-tasktree-api/
          - internal/tasktree/
          - tools/src/tasktree-cli.ts
          - package.json
          - package-lock.json
          - deploy/runtime/boot/hwlab-tasktree-api.sh
        env:
          TZ: Asia/Shanghai
        observable: true
      hwlab-tasktree-worker:
        runtimeKind: bun-command
        entrypoint: cmd/hwlab-tasktree-worker/main.ts
        artifactKind: bun-command
        healthPath: /health/live
        healthPort: 6674
        componentPaths:
          - cmd/hwlab-tasktree-worker/
          - internal/tasktree/
          - package.json
          - package-lock.json
          - deploy/runtime/boot/hwlab-tasktree-worker.sh
        env:
          TZ: Asia/Shanghai
        observable: true
      hwlab-harnessrl-api:
        runtimeKind: bun-command
        entrypoint: cmd/hwlab-harnessrl-api/main.ts
        artifactKind: bun-command
        healthPath: /health/live
        healthPort: 6675
        componentPaths:
          - cmd/hwlab-harnessrl-api/
          - internal/harnessrl/
          - internal/cloud/server-caserun-http.ts
          - package.json
          - package-lock.json
          - deploy/runtime/boot/hwlab-harnessrl-api.sh
        env:
          TZ: Asia/Shanghai
        observable: true
      hwlab-harnessrl-worker:
        runtimeKind: bun-command
        entrypoint: cmd/hwlab-harnessrl-worker/main.ts
        artifactKind: bun-command
        healthPath: /health/live
        healthPort: 6676
        componentPaths:
          - cmd/hwlab-harnessrl-worker/
          - internal/harnessrl/
          - tools/src/hwlab-caserun-lib.ts
          - package.json
          - package-lock.json
          - deploy/runtime/boot/hwlab-harnessrl-worker.sh
        env:
          TZ: Asia/Shanghai
          HWLAB_CASERUN_INTERNAL_API_URL: http://hwlab-cloud-api.hwlab-dev.svc.cluster.local:6667
        observable: true
      hwlab-workbench-api:
        runtimeKind: bun-command
        entrypoint: cmd/hwlab-workbench-api/main.ts
        artifactKind: bun-command
        healthPath: /health/live
        healthPort: 6677
        componentPaths:
          - cmd/hwlab-workbench-api/
          - internal/workbench/
          - internal/cloud/workbench-command-proxy.ts
          - tools/src/workbench-cli.ts
          - tools/hwlab-cli/bin/hwlab-cli.ts
          - package.json
          - package-lock.json
          - deploy/runtime/boot/hwlab-workbench-api.sh
        env:
          TZ: Asia/Shanghai
        observable: true
      hwlab-workbench-worker:
        runtimeKind: bun-command
        entrypoint: cmd/hwlab-workbench-worker/main.ts
        artifactKind: bun-command
        healthPath: /health/live
        healthPort: 6678
        componentPaths:
          - cmd/hwlab-workbench-worker/
          - internal/workbench/
          - internal/cloud/code-agent-agentrun-adapter.ts
          - package.json
          - package-lock.json
          - deploy/runtime/boot/hwlab-workbench-worker.sh
        env:
          TZ: Asia/Shanghai
        observable: true
      hwlab-hwpod-api:
        runtimeKind: bun-command
        entrypoint: cmd/hwlab-hwpod-api/main.ts
        artifactKind: bun-command
        healthPath: /health/live
        healthPort: 6681
        componentPaths:
          - cmd/hwlab-hwpod-api/
          - internal/hwpod/
          - internal/db/runtime-store-core.ts
          - package.json
          - package-lock.json
          - deploy/runtime/boot/hwlab-hwpod-api.sh
        env:
          TZ: Asia/Shanghai
        observable: true
      hwlab-hwpod-worker:
        runtimeKind: bun-command
        entrypoint: cmd/hwlab-hwpod-worker/main.ts
        artifactKind: bun-command
        healthPath: /health/live
        healthPort: 6682
        componentPaths:
          - cmd/hwlab-hwpod-worker/
          - internal/hwpod/
          - internal/db/runtime-store-core.ts
          - package.json
          - package-lock.json
          - deploy/runtime/boot/hwlab-hwpod-worker.sh
        env:
          TZ: Asia/Shanghai
        observable: true
      hwlab-hwpod-web:
        runtimeKind: cloud-web
        entrypoint: cmd/hwlab-hwpod-web/main.ts
        artifactKind: cloud-web
        healthPath: /health/live
        healthPort: 8080
        healthProbe:
          startup:
            periodSeconds: 5
            timeoutSeconds: 3
            failureThreshold: 60
        componentPaths:
          - cmd/hwlab-hwpod-web/
          - web/hwlab-cloud-web/hwpod/
          - web/hwlab-cloud-web/scripts/hwpod-native-vite.config.ts
          - web/hwlab-cloud-web/package.json
          - package.json
          - package-lock.json
          - deploy/runtime/boot/hwlab-hwpod-web.sh
        env:
          BUN_CONFIG_REGISTRY: https://registry.npmjs.org/
          npm_config_registry: https://registry.npmjs.org/
        observable: true
      hwlab-cloud-web:
        runtimeKind: cloud-web
        entrypoint: web/hwlab-cloud-web/index.html
        artifactKind: cloud-web
        healthPath: /health/live
        healthPort: 8080
        healthProbe:
          startup:
            periodSeconds: 10
            timeoutSeconds: 3
            failureThreshold: 90
        componentPaths:
          - web/hwlab-cloud-web/
          - internal/dev-entrypoint/cloud-web-runtime.mjs
          - internal/dev-entrypoint/cloud-web-proxy.mjs
          - internal/dev-entrypoint/cloud-web-routes.mjs
          - internal/dev-entrypoint/opencode-provider-proxy.mjs
          - deploy/runtime/boot/opencode-provider-proxy.sh
          - tools/src/hwlab-cli/trace-renderer.ts
        env:
          BUN_CONFIG_REGISTRY: https://registry.npmjs.org/
          npm_config_registry: https://registry.npmjs.org/
          HWLAB_CLOUD_WEB_DISPLAY_TIME_ZONE: Asia/Shanghai
          HWLAB_CLOUD_WEB_DISPLAY_TIME_LOCALE: zh-CN
          HWLAB_CLOUD_WEB_DISPLAY_TIME_LABEL: 北京时间
          HWLAB_WORKBENCH_LIVE_KAFKA_SSE_ENABLED: "true"
          HWLAB_WORKBENCH_KAFKA_REFRESH_REPLAY_ENABLED: "true"
          HWLAB_WORKBENCH_PROJECTION_REALTIME_ENABLED: "false"
          HWLAB_WORKBENCH_KAFKA_DEBUG_REPLAY_ENABLED: "true"
          HWLAB_CLOUD_WEB_OPENCODE_UPSTREAM_URL: http://opencode-server.hwlab-v03.svc.cluster.local:4096
          HWLAB_CLOUD_WEB_OPENCODE_USERNAME: secretRef:hwlab-opencode-server-auth/username
          HWLAB_CLOUD_WEB_OPENCODE_PASSWORD: secretRef:hwlab-opencode-server-auth/password
          HWLAB_CLOUD_WEB_OPENCODE_DEFAULT_PROJECT: /workspace
          HWLAB_CLOUD_WEB_OPENCODE_EVENT_DIRECTORY_FROM: /workspace
          HWLAB_CLOUD_WEB_OPENCODE_EVENT_DIRECTORY_TO: /
          OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: http://otel-collector.platform-infra.svc.cluster.local:4318/v1/traces
          OTEL_SERVICE_NAME: hwlab-cloud-web
        observable: true
      hwlab-gateway:
        runtimeKind: bun-command
        entrypoint: cmd/hwlab-gateway/main.ts
        artifactKind: bun-command
        healthPath: /health/live
        healthPort: 7001
        componentPaths:
          - cmd/hwlab-gateway/
          - internal/sim/
        env:
          TZ: Asia/Shanghai
        observable: false
      hwlab-edge-proxy:
        runtimeKind: node-command
        entrypoint: cmd/hwlab-edge-proxy/main.mjs
        artifactKind: node-command
        healthPath: /health
        healthPort: 6667
        healthProbe:
          readiness:
            timeoutSeconds: 3
            failureThreshold: 5
          liveness:
            periodSeconds: 20
            timeoutSeconds: 5
            failureThreshold: 6
          startup:
            timeoutSeconds: 3
        componentPaths:
          - cmd/hwlab-edge-proxy/
          - internal/dev-entrypoint/http.mjs
        env:
          TZ: Asia/Shanghai
        observable: true
      hwlab-agent-skills:
        runtimeKind: skills-bundle
        entrypoint: skills/hwlab-agent-runtime/SKILL.md
        artifactKind: skills-bundle
        healthPath: /health/live
        healthPort: 7430
        componentPaths:
          - skills/
        env:
          TZ: Asia/Shanghai
        observable: true
    envRecipe: &v03EnvRecipe
      osPackages:
        - ca-certificates
        - git
        - tzdata
      goOsPackages:
        - golang-go
      goBaseImage: 127.0.0.1:5000/hwlab/hwlab-go-env-base:go1-bookworm-slim
      bunVersion: 1.3.13
      downloadStack:
        httpProxy: http://127.0.0.1:10808
        httpsProxy: http://127.0.0.1:10808
        noProxy:
          - 127.0.0.1
          - localhost
          - ::1
          - hyueapi.com
          - .hyueapi.com
        npmRegistry: https://registry.npmjs.org/
        npmFetchTimeoutMs: 300000
        goProxy: https://goproxy.cn,direct
        bunPackages:
          x64: '@oven/bun-linux-x64'
          arm64: '@oven/bun-linux-aarch64'
      launcherPath: deploy/runtime/launcher/hwlab-env-reuse-launcher.ts
      runtimeNodeModulesPath: /opt/hwlab-env/node_modules
      runtimeGoModCachePath: /opt/hwlab-env/go/pkg/mod
      runtimeGoBuildCachePath: /opt/hwlab-env/go/cache
      goToolchain: local
      additionalEnvPaths:
        - internal/dev-entrypoint/artifact-runtime.mjs
      hwpodAliases:
        - command: hwpod
          script: tools/hwpod-cli.ts
        - command: hwpod-ctl
          script: tools/hwpod-ctl.ts
        - command: hwpod-compiler
          script: tools/hwpod-compiler-cli.ts
    bootConfig: &v03BootConfig
      template: default
      overrides: {}
    configMaps: &v03ConfigMaps
      - name: hwlab-v03-hwpod-preinstalled-specs
        labels:
          hwlab.pikastech.local/config-kind: hwpod-preinstalled-specs
        annotations:
          hwlab.pikastech.local/source-ref: config/hwlab-hwpod-preinstalls/constart-71freq-c.yaml#hwpodPreinstall
          hwlab.pikastech.local/verification-issue: pikasTech/HWLAB#2183
        data:
          constart-71freq-c.yaml: |-
            apiVersion: hwlab.dev/v0alpha1
            kind: Hwpod
            metadata:
              uid: CONSTART-71FREQ-C
              name: constart-71freq-c
            spec:
              targetDevice:
                board: ConStart 71-FREQ Controller
                mcu: STM32H723ZGTx
                flashBase: "0x08000000"
              workspace:
                path: "F:\\Work\\ConStart"
                toolchain: keil-mdk
                projectRoot: projects/71-00075-11-FREQ
                keilProject: projects/71-00075-11-FREQ/FirmWare/MDK-ARM/FREQ_Controller_FW.uvprojx
                keilTarget: FREQ_Controller_FW
                hexPath: projects/71-00075-11-FREQ/FirmWare/MDK-ARM/FREQ_Controller_FW/FREQ_Controller_FW.hex
                mapPath: projects/71-00075-11-FREQ/FirmWare/MDK-ARM/FREQ_Controller_FW/FREQ_Controller_FW.map
                keilCliPath: "C:\\Users\\liang\\.agents\\skills\\keil\\keil-cli.py"
              debugProbe:
                type: cmsis-dap
                adapter: keil
                probeUid: 3FD750C63E342E24
                probeName: MicroLink CMSIS-DAP
                programBackend: keil-headless
                autoBindUvoptx: true
              boardComm:
                endpoints:
                  hwpod-node-ops:
                    kind: hwpod-node-ops
                    endpointRef: config/hwlab-gateway/constart-71freq.yaml#gateway.profile.nodeOps.publicUrl
                  freq71:
                    kind: jsonrpc-tcp
                    host: 192.168.0.154
                    port: 8000
                    role: frequency-controller
                  main41:
                    kind: jsonrpc-tcp
                    host: 192.168.0.151
                    port: 8000
                    role: main-controller
              ioProbe:
                uart:
                  id: uart/1
                  port: COM4
                  baudrate: 921600
                probes:
                  main41.ai0.current:
                    endpointRef: main41
                    quantity: current
                    unit: mA
                    path: hardware/ai/0
                    valuePath: ai_current_mA
              nodeBinding:
                nodeId: node-d601-f103-v2
                nodeType: pc-host
          constart-71freq-c.meta.json: |-
            {
              "contractVersion": "hwpod-spec-registry-v1",
              "source": {
                "kind": "preinstalled-yaml-first-spec",
                "workspaceRoot": "F:\\Work\\ConStart",
                "projectRoot": "projects/71-00075-11-FREQ",
                "verificationIssue": "pikasTech/HWLAB#2183",
                "verifiedAt": "2026-06-26"
              }
            }
      - name: hwlab-v03-project-management-bootstrap
        labels:
          hwlab.pikastech.local/config-kind: project-management-bootstrap-sources
        annotations:
          hwlab.pikastech.local/source-ref: config/hwlab-project-management/constart-71freq-mdtodo.yaml#projectManagement.sources[0],config/hwlab-project-management/constar-workspace-mdtodo.yaml#projectManagement.sources[0]
          hwlab.pikastech.local/verification-issue: pikasTech/HWLAB#2183
        data:
          sources.json: |-
            [
              {
                "sourceId": "constart-71freq-mdtodo",
                "sourceKind": "hwpod-workspace",
                "displayName": "71-FREQ MDTODO",
                "projectId": "project_constart_71freq",
                "hwpodId": "constart-71freq-c",
                "nodeId": "node-d601-f103-v2",
                "workspaceRootRef": "F:\\Work\\ConStart",
                "mdtodoRootRef": "docs/MDTODO",
                "maxFiles": 300,
                "capabilities": ["probe", "list", "read", "write", "reindex"]
              },
              {
                "sourceId": "constar-workspace-mdtodo",
                "sourceKind": "hwpod-workspace",
                "displayName": "控之星工作区 MDTODO",
                "projectId": "project_constar_workspace",
                "hwpodId": "constar-workspace",
                "nodeId": "node-g14-wsl-constar",
                "workspaceRootRef": "D:\\Work\\CONSTAR_workspace",
                "mdtodoRootRef": "docs/MDTODO",
                "maxFiles": 300,
                "capabilities": ["probe", "list", "read", "reindex", "launchWorkbench"]
              }
            ]
    services:
      - serviceId: hwlab-cloud-api
        replicas: 1
        shutdownDrain:
          enabled: true
          path: /v1/internal/workbench/drain
          sleepSeconds: 3
          timeoutMs: 2500
        env:
          HWLAB_CLOUD_DB_URL: secretRef:hwlab-cloud-api-v03-db/database-url
          HWLAB_HWPOD_OPERATION_RETENTION_SECONDS: "604800"
          HWLAB_CLOUD_DB_CONTRACT: v03-redacted-presence-only
          HWLAB_ACCESS_CONTROL_REQUIRED: "1"
          HWLAB_SESSION_COOKIE_SAMESITE: None
          HWLAB_BOOTSTRAP_ADMIN_ID: usr_v03_admin
          HWLAB_BOOTSTRAP_ADMIN_USERNAME: admin
          HWLAB_BOOTSTRAP_ADMIN_DISPLAY_NAME: HWLAB v0.3 Admin
          HWLAB_BOOTSTRAP_ADMIN_PASSWORD_HASH: secretRef:hwlab-v03-bootstrap-admin/password-hash
          HWLAB_BOOTSTRAP_ADMIN_API_KEY_ID: key_master_server_admin
          HWLAB_BOOTSTRAP_ADMIN_API_KEY: secretRef:hwlab-v03-master-server-admin-api-key/api-key
          HWLAB_USER_BILLING_URL: http://hwlab-user-billing.hwlab-v03.svc.cluster.local:6670
          HWLAB_WORKBENCH_RUNTIME_URL: http://hwlab-workbench-runtime.hwlab-v03.svc.cluster.local:6671
          HWLAB_WORKBENCH_API_URL: http://hwlab-workbench-api.hwlab-v03.svc.cluster.local:6677
          WORKBENCH_CLOUD_API_AUTHORIZATION: secretRef:hwlab-v03-master-server-admin-api-key/api-key
          HWLAB_PROJECT_MANAGEMENT_URL: http://hwlab-project-management.hwlab-v03.svc.cluster.local:6672
          HWLAB_TASKTREE_URL: http://hwlab-tasktree-api.hwlab-v03.svc.cluster.local:6673
          HARNESSRL_API_URL: http://hwlab-harnessrl-api.hwlab-v03.svc.cluster.local:6675
          HWLAB_HWPOD_SPEC_REGISTRY_DIRS: /etc/hwlab/hwpod-specs
          HWLAB_HWPOD_NODE_WS_TOKEN: secretRef:hwlab-v03-hwpod-node-auth/token
          HWLAB_USER_BILLING_LOGIN_RETRY_ATTEMPTS: "2"
          HWLAB_USER_BILLING_LOGIN_RETRY_DELAY_MS: "250"
          HWLAB_USER_BILLING_CODE_AGENT_ENABLED: "1"
          HWLAB_USER_BILLING_CODE_AGENT_ESTIMATED_CREDITS: "1"
          HWLAB_USER_BILLING_CODE_AGENT_USED_CREDITS: "1"
          HWLAB_KEYCLOAK_ISSUER: https://auth.74-48-78-17.nip.io/realms/hwlab
          HWLAB_KEYCLOAK_CLIENT_ID: hwlab-cloud-web
          HWLAB_KEYCLOAK_CLIENT_SECRET: secretRef:hwlab-cloud-web-client/client-secret
          HWLAB_CODE_AGENT_ADAPTER: agentrun-v02
          OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: http://otel-collector.platform-infra.svc.cluster.local:4318/v1/traces
          OTEL_SERVICE_NAME: hwlab-cloud-api
          AGENTRUN_MGR_URL: http://agentrun-mgr.agentrun-release.svc.cluster.local:8080
          AGENTRUN_API_KEY: secretRef:hwlab-v03-master-server-admin-api-key/api-key
          HWLAB_CODE_AGENT_AGENTRUN_RUNNER_NAMESPACE: agentrun-release
          HWLAB_CODE_AGENT_AGENTRUN_SECRET_NAMESPACE: agentrun-release
          HWLAB_CODE_AGENT_AGENTRUN_REPO_URL: http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git
          HWLAB_KAFKA_ENABLED: "true"
          HWLAB_KAFKA_AGENTRUN_EVENT_CONSUME_ENABLED: "true"
          HWLAB_KAFKA_DIRECT_PUBLISH_ENABLED: "true"
          HWLAB_WORKBENCH_LIVE_KAFKA_SSE_ENABLED: "true"
          HWLAB_WORKBENCH_KAFKA_REFRESH_REPLAY_ENABLED: "true"
          HWLAB_KAFKA_TRANSACTIONAL_PROJECTOR_ENABLED: "false"
          HWLAB_KAFKA_PROJECTION_OUTBOX_RELAY_ENABLED: "false"
          HWLAB_WORKBENCH_PROJECTION_REALTIME_ENABLED: "false"
          HWLAB_WORKBENCH_KAFKA_DEBUG_REPLAY_ENABLED: "true"
          HWLAB_KAFKA_BOOTSTRAP_SERVERS: platform-infra-kafka-kafka-bootstrap.platform-infra.svc.cluster.local:9092
          HWLAB_KAFKA_STDIO_TOPIC: codex-stdio.raw.v1
          HWLAB_KAFKA_AGENTRUN_EVENT_TOPIC: agentrun.event.v1
          HWLAB_KAFKA_EVENT_TOPIC: hwlab.event.v1
          HWLAB_KAFKA_CLIENT_ID: hwlab-v03-cloud-api
          HWLAB_KAFKA_AGENTRUN_EVENT_GROUP_ID: hwlab-v03-agentrun-event-direct-publish
          HWLAB_KAFKA_PROJECTOR_GROUP_ID: hwlab-v03-agentrun-event-projector
          HWLAB_KAFKA_HWLAB_EVENT_GROUP_ID: hwlab-v03-workbench-live-sse
          HWLAB_KAFKA_HWLAB_DEBUG_EVENT_TOPIC: hwlab.event.debug.v1
          HWLAB_KAFKA_HWLAB_DEBUG_GROUP_PREFIX: hwlab-v03-workbench-isolated-debug
          HWLAB_WORKBENCH_KAFKA_DEBUG_REPLAY_LIMIT: "200"
          HWLAB_WORKBENCH_KAFKA_DEBUG_REPLAY_TIMEOUT_MS: "15000"
          HWLAB_KAFKA_PROJECTOR_HEARTBEAT_INTERVAL_MS: "2000"
          HWLAB_KAFKA_OUTBOX_RELAY_INTERVAL_MS: "250"
          HWLAB_KAFKA_OUTBOX_RELAY_BATCH_SIZE: "100"
          HWLAB_KAFKA_OUTBOX_RELAY_LEASE_MS: "30000"
          HWLAB_KAFKA_OUTBOX_RELAY_SEND_TIMEOUT_MS: "10000"
          HWLAB_KAFKA_OUTBOX_RELAY_RETRY_BACKOFF_MS: "1000"
          HWLAB_WORKBENCH_OUTBOX_TAIL_BATCH_SIZE: "100"
          HWLAB_WORKBENCH_EMPTY_SESSION_GC_ENABLED: "1"
          HWLAB_WORKBENCH_EMPTY_SESSION_TTL_MS: "600000"
          HWLAB_WORKBENCH_EMPTY_SESSION_GC_INTERVAL_MS: "60000"
          HWLAB_WORKBENCH_EMPTY_SESSION_GC_INITIAL_DELAY_MS: "5000"
          HWLAB_WORKBENCH_EMPTY_SESSION_GC_BATCH_SIZE: "100"
          HWLAB_WORKBENCH_EMPTY_SESSION_GC_JITTER_MS: "15000"
          HWLAB_WORKBENCH_EMPTY_SESSION_GC_FAILURE_BACKOFF_MS: "120000"
          HWLAB_SECRET_PLANE_SMOKE: secretRef:hwlab-secret-plane-smoke/password
        configMapMounts:
          - name: hwpod-preinstalled-specs
            configMapName: hwlab-v03-hwpod-preinstalled-specs
            mountPath: /etc/hwlab/hwpod-specs
            readOnly: true
      - serviceId: hwlab-workbench-runtime
        env:
          HWLAB_WORKBENCH_RUNTIME_DB_URL: secretRef:hwlab-cloud-api-v03-db/database-url
          HWLAB_WORKBENCH_RUNTIME_PORT: "6671"
          OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: http://otel-collector.platform-infra.svc.cluster.local:4318/v1/traces
          OTEL_SERVICE_NAME: hwlab-workbench-runtime
      - serviceId: hwlab-user-billing
        env:
          HWLAB_USER_BILLING_DB_URL: secretRef:hwlab-cloud-api-v03-db/database-url
          HWLAB_USER_BILLING_DB_POOL_MAX: "2"
          HWLAB_USER_BILLING_MIGRATION_TIMEOUT_SECONDS: "180"
          HWLAB_USER_BILLING_BOOTSTRAP_TIMEOUT_SECONDS: "60"
          HWLAB_BOOTSTRAP_ADMIN_ID: usr_v03_admin
          HWLAB_BOOTSTRAP_ADMIN_USERNAME: admin
          HWLAB_BOOTSTRAP_ADMIN_DISPLAY_NAME: HWLAB v0.3 Admin
          HWLAB_BOOTSTRAP_ADMIN_PASSWORD_HASH: secretRef:hwlab-v03-bootstrap-admin/password-hash
          HWLAB_USER_BILLING_STATE_AUTHORITY: pk01-postgres
          HWLAB_USER_BILLING_EXTERNAL_DB_LABEL: pk01-external-postgres
          HWLAB_USER_BILLING_PORT: "6670"
          HWLAB_USER_BILLING_REGISTRATION_ENABLED: "1"
          HWLAB_USER_BILLING_INITIAL_CREDITS: "0"
          HWLAB_USER_BILLING_CREDIT_PER_1K_TOKENS: "1"
          HWLAB_USER_BILLING_MIGRATE_ON_START: "1"
          HWLAB_USER_BILLING_REDIS_URL: redis://hwlab-user-billing-redis.hwlab-v03.svc.cluster.local:6379/0
          OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: http://otel-collector.platform-infra.svc.cluster.local:4318/v1/traces
          OTEL_SERVICE_NAME: hwlab-user-billing
      - serviceId: hwlab-project-management
        replicas: 1
        env:
          HWLAB_PROJECT_MANAGEMENT_DB_URL: secretRef:hwlab-cloud-api-v03-db/database-url
          HWLAB_PROJECT_MANAGEMENT_DB_CONNECT_TIMEOUT_MS: "5000"
          HWLAB_PROJECT_MANAGEMENT_PORT: "6672"
          HWLAB_PROJECT_MANAGEMENT_SOURCE_ROOT: /workspace/hwlab-boot/repo
          HWLAB_PROJECT_MANAGEMENT_SOURCE_ID: hwlab-v03-mdtodo
          HWLAB_PROJECT_MANAGEMENT_SOURCE_NAME: HWLAB v0.3 MDTODO
          HWLAB_PROJECT_MANAGEMENT_PROJECT_ID: project_hwlab_v03
          HWLAB_PROJECT_MANAGEMENT_MDTODO_TASK_DEFAULT_LIMIT: "200"
          HWLAB_PROJECT_MANAGEMENT_MDTODO_TASK_MAX_LIMIT: "500"
          HWLAB_PROJECT_MANAGEMENT_HWPOD_NODE_OPS_URL: http://hwlab-cloud-api.hwlab-v03.svc.cluster.local:6667/v1/hwpod-node-ops
          HWLAB_PROJECT_MANAGEMENT_HWPOD_NODE_OPS_API_KEY: secretRef:hwlab-v03-master-server-admin-api-key/api-key
          HWLAB_PROJECT_MANAGEMENT_BOOTSTRAP_SOURCES_PATH: /etc/hwlab/project-management/sources.json
          OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: http://otel-collector.platform-infra.svc.cluster.local:4318/v1/traces
          OTEL_SERVICE_NAME: hwlab-project-management
        configMapMounts:
          - name: project-management-bootstrap
            configMapName: hwlab-v03-project-management-bootstrap
            mountPath: /etc/hwlab/project-management
            readOnly: true
      - serviceId: hwlab-tasktree-api
        replicas: 1
        env:
          TASKTREE_DATABASE_URL: secretRef:hwlab-tasktree-db/database-url
          TASKTREE_TEMPORAL_ADDRESS: temporal-frontend.temporal.svc.cluster.local:7233
          TASKTREE_TEMPORAL_NAMESPACE: unidesk
          TASKTREE_TEMPORAL_TASK_QUEUE: hwlab-v03-tasktree
          TASKTREE_API_PORT: "6673"
          OTEL_SERVICE_NAME: hwlab-tasktree-api
      - serviceId: hwlab-tasktree-worker
        replicas: 1
        env:
          TASKTREE_DATABASE_URL: secretRef:hwlab-tasktree-db/database-url
          TASKTREE_TEMPORAL_ADDRESS: temporal-frontend.temporal.svc.cluster.local:7233
          TASKTREE_TEMPORAL_NAMESPACE: unidesk
          TASKTREE_TEMPORAL_TASK_QUEUE: hwlab-v03-tasktree
          TASKTREE_WORKER_HEALTH_PORT: "6674"
          OTEL_SERVICE_NAME: hwlab-tasktree-worker
      - serviceId: hwlab-harnessrl-api
        replicas: 1
        env:
          HARNESSRL_DATABASE_URL: secretRef:hwlab-cloud-api-v03-db/database-url
          HARNESSRL_TEMPORAL_ADDRESS: temporal-frontend.temporal.svc.cluster.local:7233
          HARNESSRL_TEMPORAL_NAMESPACE: unidesk
          HARNESSRL_TEMPORAL_TASK_QUEUE: hwlab-v03-harnessrl
          HARNESSRL_ACTIVITY_START_TO_CLOSE_TIMEOUT_MS: "1800000"
          HARNESSRL_ACTIVITY_HEARTBEAT_TIMEOUT_MS: "30000"
          HARNESSRL_ACTIVITY_RETRY_INITIAL_INTERVAL_MS: "1000"
          HARNESSRL_ACTIVITY_RETRY_MAXIMUM_INTERVAL_MS: "30000"
          HARNESSRL_ACTIVITY_RETRY_MAXIMUM_ATTEMPTS: "5"
          HARNESSRL_API_PORT: "6675"
          OTEL_SERVICE_NAME: hwlab-harnessrl-api
      - serviceId: hwlab-harnessrl-worker
        replicas: 1
        env:
          HARNESSRL_DATABASE_URL: secretRef:hwlab-cloud-api-v03-db/database-url
          HARNESSRL_TEMPORAL_ADDRESS: temporal-frontend.temporal.svc.cluster.local:7233
          HARNESSRL_TEMPORAL_NAMESPACE: unidesk
          HARNESSRL_TEMPORAL_TASK_QUEUE: hwlab-v03-harnessrl
          HARNESSRL_ACTIVITY_START_TO_CLOSE_TIMEOUT_MS: "1800000"
          HARNESSRL_ACTIVITY_HEARTBEAT_TIMEOUT_MS: "30000"
          HARNESSRL_ACTIVITY_RETRY_INITIAL_INTERVAL_MS: "1000"
          HARNESSRL_ACTIVITY_RETRY_MAXIMUM_INTERVAL_MS: "30000"
          HARNESSRL_ACTIVITY_RETRY_MAXIMUM_ATTEMPTS: "5"
          HARNESSRL_WORKER_HEALTH_PORT: "6676"
          HWLAB_CASERUN_INTERNAL_API_URL: http://hwlab-cloud-api.hwlab-v03.svc.cluster.local:6667
          HWLAB_RUNTIME_INTERNAL_API_URL: http://hwlab-cloud-api.hwlab-v03.svc.cluster.local:6667
          OTEL_SERVICE_NAME: hwlab-harnessrl-worker
      - serviceId: hwlab-workbench-api
        replicas: 1
        env:
          WORKBENCH_MODE: temporal
          WORKBENCH_API_PORT: "6677"
          WORKBENCH_API_IDLE_TIMEOUT_SECONDS: "60"
          WORKBENCH_CLOUD_API_URL: http://hwlab-cloud-api.hwlab-v03.svc.cluster.local:6667
          WORKBENCH_CLOUD_API_AUTHORIZATION: secretRef:hwlab-v03-master-server-admin-api-key/api-key
          WORKBENCH_API_AUTHORIZATION: secretRef:hwlab-v03-master-server-admin-api-key/api-key
          WORKBENCH_TEMPORAL_ADDRESS: temporal-frontend.temporal.svc.cluster.local:7233
          WORKBENCH_TEMPORAL_NAMESPACE: unidesk
          WORKBENCH_TEMPORAL_TASK_QUEUE: hwlab-v03-workbench
          WORKBENCH_ACTIVITY_START_TO_CLOSE_TIMEOUT_MS: "30000"
          WORKBENCH_ACTIVITY_RETRY_INITIAL_INTERVAL_MS: "1000"
          WORKBENCH_ACTIVITY_RETRY_MAXIMUM_INTERVAL_MS: "30000"
          WORKBENCH_ACTIVITY_RETRY_MAXIMUM_ATTEMPTS: "5"
          OTEL_SERVICE_NAME: hwlab-workbench-api
      - serviceId: hwlab-workbench-worker
        replicas: 1
        env:
          WORKBENCH_MODE: temporal
          WORKBENCH_WORKER_HEALTH_PORT: "6678"
          WORKBENCH_CLOUD_API_URL: http://hwlab-cloud-api.hwlab-v03.svc.cluster.local:6667
          WORKBENCH_CLOUD_API_AUTHORIZATION: secretRef:hwlab-v03-master-server-admin-api-key/api-key
          WORKBENCH_TEMPORAL_ADDRESS: temporal-frontend.temporal.svc.cluster.local:7233
          WORKBENCH_TEMPORAL_NAMESPACE: unidesk
          WORKBENCH_TEMPORAL_TASK_QUEUE: hwlab-v03-workbench
          WORKBENCH_ACTIVITY_START_TO_CLOSE_TIMEOUT_MS: "30000"
          WORKBENCH_ACTIVITY_RETRY_INITIAL_INTERVAL_MS: "1000"
          WORKBENCH_ACTIVITY_RETRY_MAXIMUM_INTERVAL_MS: "30000"
          WORKBENCH_ACTIVITY_RETRY_MAXIMUM_ATTEMPTS: "5"
          HWLAB_KAFKA_BOOTSTRAP_SERVERS: platform-infra-kafka-kafka-bootstrap.platform-infra.svc.cluster.local:9092
          HWLAB_KAFKA_EVENT_TOPIC: hwlab.event.v1
          HWLAB_KAFKA_CLIENT_ID: hwlab-v03-workbench-worker
          OTEL_SERVICE_NAME: hwlab-workbench-worker
      - serviceId: hwlab-hwpod-api
        replicas: 1
        env:
          HWPOD_API_HOST: 0.0.0.0
          HWPOD_API_PORT: "6681"
          HWPOD_TEMPORAL_ADDRESS: temporal-frontend.temporal.svc.cluster.local:7233
          HWPOD_TEMPORAL_NAMESPACE: unidesk
          HWPOD_TEMPORAL_TASK_QUEUE: hwlab-v03-hwpod
          HWPOD_RUNTIME_API_URL: http://hwlab-cloud-api.hwlab-v03.svc.cluster.local:6667
          HWPOD_RUNTIME_API_AUTHORIZATION: secretRef:hwlab-v03-master-server-admin-api-key/api-key
          HWPOD_RUNTIME_API_AUTHORIZATION_PREFIX: Bearer
          HWPOD_SPEC_DATABASE_URL: secretRef:hwlab-cloud-api-v03-db/database-url
          HWPOD_SPEC_DATABASE_SCHEMA: hwpod
          HWPOD_SPEC_DATABASE_TABLE: runtime_specs
          HWPOD_SPEC_DATABASE_CONNECTION_TIMEOUT_MS: "5000"
          HWPOD_BUILTIN_SPEC_CONFIG_DIRECTORY: /etc/hwlab/hwpod-specs
          OTEL_SERVICE_NAME: hwlab-hwpod-api
        configMapMounts:
          - name: hwpod-preinstalled-specs
            configMapName: hwlab-v03-hwpod-preinstalled-specs
            mountPath: /etc/hwlab/hwpod-specs
            readOnly: true
      - serviceId: hwlab-hwpod-worker
        replicas: 1
        env:
          HWPOD_WORKER_HEALTH_HOST: 0.0.0.0
          HWPOD_WORKER_HEALTH_PORT: "6682"
          HWPOD_TEMPORAL_ADDRESS: temporal-frontend.temporal.svc.cluster.local:7233
          HWPOD_TEMPORAL_NAMESPACE: unidesk
          HWPOD_TEMPORAL_TASK_QUEUE: hwlab-v03-hwpod
          HWPOD_RUNTIME_API_URL: http://hwlab-cloud-api.hwlab-v03.svc.cluster.local:6667
          HWPOD_RUNTIME_API_AUTHORIZATION: secretRef:hwlab-v03-master-server-admin-api-key/api-key
          HWPOD_RUNTIME_API_AUTHORIZATION_PREFIX: Bearer
          HWPOD_SPEC_DATABASE_URL: secretRef:hwlab-cloud-api-v03-db/database-url
          HWPOD_SPEC_DATABASE_SCHEMA: hwpod
          HWPOD_SPEC_DATABASE_TABLE: runtime_specs
          HWPOD_SPEC_DATABASE_CONNECTION_TIMEOUT_MS: "5000"
          HWPOD_BUILTIN_SPEC_CONFIG_DIRECTORY: /etc/hwlab/hwpod-specs
          OTEL_SERVICE_NAME: hwlab-hwpod-worker
        configMapMounts:
          - name: hwpod-preinstalled-specs
            configMapName: hwlab-v03-hwpod-preinstalled-specs
            mountPath: /etc/hwlab/hwpod-specs
            readOnly: true
      - serviceId: hwlab-hwpod-web
        replicas: 1
        env:
          HWPOD_WEB_HOST: 0.0.0.0
          HWPOD_WEB_PORT: "8080"
          HWPOD_API_URL: http://hwlab-hwpod-api.hwlab-v03.svc.cluster.local:6681
          HWPOD_WEB_ROOT: web/hwlab-cloud-web/hwpod/dist
          OTEL_SERVICE_NAME: hwlab-hwpod-web
  production:
    name: Production
    node: NC01
    sourceBranch: release
    gitopsBranch: release-gitops
    gitReadUrl: http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git
    gitWriteUrl: http://git-mirror-write.devops-infra.svc.cluster.local:8080/pikasTech/HWLAB.git
    artifactCatalog: deploy/artifact-catalog.nc01-production.json
    runtimePath: runtime-production
    namespace: hwlab-production
    imageTagMode: full
    endpoint: https://lab.hwpod.com
    publicEndpoints:
      frontend: https://lab.hwpod.com
      api: https://lab.hwpod.com
    publicServices:
      nodes:
        NC01:
          - name: hwlab-cloud-web-public
            selector:
              app.kubernetes.io/name: hwlab-cloud-web
            port: 80
            targetPort: 8080
            nodePort: 32010
    frp:
      enabled: false
    externalPostgres:
      enabled: true
      serviceName: nc01-host-postgres
      endpointAddress: 10.42.0.1
      port: 5432
      migrationSecretName: hwlab-cloud-api-production-db
      migrationSecretKey: migration-database-url
    workbench:
      rawHwlabEventWindow:
        enabled: true
        maxEntries: 200
        maxRetainedBytes: 1048576
    envReuseServices: *v03EnvReuseServices
    bootScripts: *v03BootScripts
    serviceDeclarations: *v03ServiceDeclarations
    configMaps: *v03ConfigMaps
    services:
      - serviceId: hwlab-cloud-api
        shutdownDrain:
          enabled: true
          path: /v1/internal/workbench/drain
          sleepSeconds: 3
          timeoutMs: 2500
        env:
          HWLAB_METRICS_NAMESPACE: hwlab-production
          HWLAB_CLOUD_DB_URL: secretRef:hwlab-cloud-api-production-db/database-url
          HWLAB_CLOUD_DB_SSL_MODE: require
          HWLAB_CLOUD_DB_CONTRACT: production-redacted-presence-only
          HWLAB_ACCESS_CONTROL_REQUIRED: "1"
          HWLAB_SESSION_COOKIE_SAMESITE: None
          HWLAB_BOOTSTRAP_ADMIN_ID: usr_production_admin
          HWLAB_BOOTSTRAP_ADMIN_USERNAME: admin
          HWLAB_BOOTSTRAP_ADMIN_DISPLAY_NAME: HWLAB Production Admin
          HWLAB_BOOTSTRAP_ADMIN_PASSWORD_HASH: secretRef:hwlab-production-bootstrap-admin/password-hash
          HWLAB_BOOTSTRAP_ADMIN_API_KEY_ID: key_master_server_admin
          HWLAB_BOOTSTRAP_ADMIN_API_KEY: secretRef:hwlab-production-master-server-admin-api-key/api-key
          HWLAB_USER_BILLING_URL: http://hwlab-user-billing.hwlab-production.svc.cluster.local:6670
          HWLAB_WORKBENCH_RUNTIME_URL: http://hwlab-workbench-runtime.hwlab-production.svc.cluster.local:6671
          HWLAB_PROJECT_MANAGEMENT_URL: http://hwlab-project-management.hwlab-production.svc.cluster.local:6672
          HWLAB_TASKTREE_URL: http://hwlab-tasktree-api.hwlab-production.svc.cluster.local:6673
          HWLAB_USER_BILLING_LOGIN_RETRY_ATTEMPTS: "2"
          HWLAB_USER_BILLING_LOGIN_RETRY_DELAY_MS: "250"
          HWLAB_USER_BILLING_CODE_AGENT_ENABLED: "1"
          HWLAB_USER_BILLING_CODE_AGENT_ESTIMATED_CREDITS: "1"
          HWLAB_USER_BILLING_CODE_AGENT_USED_CREDITS: "1"
          OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: http://otel-collector.platform-infra.svc.cluster.local:4318/v1/traces
          OTEL_SERVICE_NAME: hwlab-cloud-api
      - serviceId: hwlab-cloud-web
        env:
          HWLAB_CLOUD_WEB_OPENCODE_UPSTREAM_URL: http://opencode-server.hwlab-production.svc.cluster.local:4096
      - serviceId: hwlab-workbench-runtime
        env:
          HWLAB_WORKBENCH_RUNTIME_DB_URL: secretRef:hwlab-cloud-api-production-db/database-url
          HWLAB_WORKBENCH_RUNTIME_PORT: "6671"
          OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: http://otel-collector.platform-infra.svc.cluster.local:4318/v1/traces
          OTEL_SERVICE_NAME: hwlab-workbench-runtime
      - serviceId: hwlab-user-billing
        env:
          HWLAB_USER_BILLING_DB_URL: secretRef:hwlab-cloud-api-production-db/database-url
          HWLAB_USER_BILLING_DB_POOL_MAX: "2"
          HWLAB_USER_BILLING_MIGRATION_TIMEOUT_SECONDS: "180"
          HWLAB_USER_BILLING_BOOTSTRAP_TIMEOUT_SECONDS: "60"
          HWLAB_BOOTSTRAP_ADMIN_ID: usr_production_admin
          HWLAB_BOOTSTRAP_ADMIN_USERNAME: admin
          HWLAB_BOOTSTRAP_ADMIN_DISPLAY_NAME: HWLAB Production Admin
          HWLAB_BOOTSTRAP_ADMIN_PASSWORD_HASH: secretRef:hwlab-production-bootstrap-admin/password-hash
          HWLAB_USER_BILLING_STATE_AUTHORITY: nc01-postgres
          HWLAB_USER_BILLING_EXTERNAL_DB_LABEL: nc01-external-postgres
          HWLAB_USER_BILLING_PORT: "6670"
          HWLAB_USER_BILLING_REGISTRATION_ENABLED: "1"
          HWLAB_USER_BILLING_INITIAL_CREDITS: "0"
          HWLAB_USER_BILLING_CREDIT_PER_1K_TOKENS: "1"
          HWLAB_USER_BILLING_MIGRATE_ON_START: "1"
          HWLAB_USER_BILLING_REDIS_URL: redis://hwlab-user-billing-redis.hwlab-production.svc.cluster.local:6379/0
          OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: http://otel-collector.platform-infra.svc.cluster.local:4318/v1/traces
          OTEL_SERVICE_NAME: hwlab-user-billing
      - serviceId: hwlab-project-management
        replicas: 1
        env:
          HWLAB_PROJECT_MANAGEMENT_DB_URL: secretRef:hwlab-cloud-api-production-db/database-url
          HWLAB_PROJECT_MANAGEMENT_DB_CONNECT_TIMEOUT_MS: "5000"
          HWLAB_PROJECT_MANAGEMENT_PORT: "6672"
          HWLAB_PROJECT_MANAGEMENT_SOURCE_ROOT: /workspace/hwlab-boot/repo
          HWLAB_PROJECT_MANAGEMENT_SOURCE_ID: hwlab-production-mdtodo
          HWLAB_PROJECT_MANAGEMENT_SOURCE_NAME: HWLAB Production MDTODO
          HWLAB_PROJECT_MANAGEMENT_PROJECT_ID: project_hwlab_production
          HWLAB_PROJECT_MANAGEMENT_MDTODO_TASK_DEFAULT_LIMIT: "200"
          HWLAB_PROJECT_MANAGEMENT_MDTODO_TASK_MAX_LIMIT: "500"
          HWLAB_PROJECT_MANAGEMENT_HWPOD_NODE_OPS_URL: http://hwlab-cloud-api.hwlab-production.svc.cluster.local:6667/v1/hwpod-node-ops
          HWLAB_PROJECT_MANAGEMENT_HWPOD_NODE_OPS_API_KEY: secretRef:hwlab-production-master-server-admin-api-key/api-key
          OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: http://otel-collector.platform-infra.svc.cluster.local:4318/v1/traces
          OTEL_SERVICE_NAME: hwlab-project-management
      - serviceId: hwlab-tasktree-api
        replicas: 1
        env:
          TASKTREE_DATABASE_URL: secretRef:hwlab-tasktree-db/database-url
          TASKTREE_TEMPORAL_ADDRESS: temporal-frontend.temporal.svc.cluster.local:7233
          TASKTREE_TEMPORAL_NAMESPACE: unidesk
          TASKTREE_TEMPORAL_TASK_QUEUE: hwlab-production-tasktree
          TASKTREE_API_PORT: "6673"
          OTEL_SERVICE_NAME: hwlab-tasktree-api
      - serviceId: hwlab-tasktree-worker
        replicas: 1
        env:
          TASKTREE_DATABASE_URL: secretRef:hwlab-tasktree-db/database-url
          TASKTREE_TEMPORAL_ADDRESS: temporal-frontend.temporal.svc.cluster.local:7233
          TASKTREE_TEMPORAL_NAMESPACE: unidesk
          TASKTREE_TEMPORAL_TASK_QUEUE: hwlab-production-tasktree
          TASKTREE_WORKER_HEALTH_PORT: "6674"
          OTEL_SERVICE_NAME: hwlab-tasktree-worker
      - serviceId: hwlab-hwpod-api
        replicas: 1
        env:
          HWPOD_API_HOST: 0.0.0.0
          HWPOD_API_PORT: "6681"
          HWPOD_TEMPORAL_ADDRESS: temporal-frontend.temporal.svc.cluster.local:7233
          HWPOD_TEMPORAL_NAMESPACE: unidesk
          HWPOD_TEMPORAL_TASK_QUEUE: hwlab-production-hwpod
          HWPOD_RUNTIME_API_URL: http://hwlab-cloud-api.hwlab-production.svc.cluster.local:6667
          HWPOD_RUNTIME_API_AUTHORIZATION: secretRef:hwlab-production-master-server-admin-api-key/api-key
          HWPOD_RUNTIME_API_AUTHORIZATION_PREFIX: Bearer
          HWPOD_SPEC_DATABASE_URL: secretRef:hwlab-cloud-api-production-db/database-url
          HWPOD_SPEC_DATABASE_SCHEMA: hwpod
          HWPOD_SPEC_DATABASE_TABLE: runtime_specs
          HWPOD_SPEC_DATABASE_CONNECTION_TIMEOUT_MS: "5000"
          HWPOD_BUILTIN_SPEC_CONFIG_DIRECTORY: /etc/hwlab/hwpod-specs
          OTEL_SERVICE_NAME: hwlab-hwpod-api
        configMapMounts:
          - name: hwpod-preinstalled-specs
            configMapName: hwlab-v03-hwpod-preinstalled-specs
            mountPath: /etc/hwlab/hwpod-specs
            readOnly: true
      - serviceId: hwlab-hwpod-worker
        replicas: 1
        env:
          HWPOD_WORKER_HEALTH_HOST: 0.0.0.0
          HWPOD_WORKER_HEALTH_PORT: "6682"
          HWPOD_TEMPORAL_ADDRESS: temporal-frontend.temporal.svc.cluster.local:7233
          HWPOD_TEMPORAL_NAMESPACE: unidesk
          HWPOD_TEMPORAL_TASK_QUEUE: hwlab-production-hwpod
          HWPOD_RUNTIME_API_URL: http://hwlab-cloud-api.hwlab-production.svc.cluster.local:6667
          HWPOD_RUNTIME_API_AUTHORIZATION: secretRef:hwlab-production-master-server-admin-api-key/api-key
          HWPOD_RUNTIME_API_AUTHORIZATION_PREFIX: Bearer
          HWPOD_SPEC_DATABASE_URL: secretRef:hwlab-cloud-api-production-db/database-url
          HWPOD_SPEC_DATABASE_SCHEMA: hwpod
          HWPOD_SPEC_DATABASE_TABLE: runtime_specs
          HWPOD_SPEC_DATABASE_CONNECTION_TIMEOUT_MS: "5000"
          HWPOD_BUILTIN_SPEC_CONFIG_DIRECTORY: /etc/hwlab/hwpod-specs
          OTEL_SERVICE_NAME: hwlab-hwpod-worker
        configMapMounts:
          - name: hwpod-preinstalled-specs
            configMapName: hwlab-v03-hwpod-preinstalled-specs
            mountPath: /etc/hwlab/hwpod-specs
            readOnly: true
      - serviceId: hwlab-hwpod-web
        replicas: 1
        env:
          HWPOD_WEB_HOST: 0.0.0.0
          HWPOD_WEB_PORT: "8080"
          HWPOD_API_URL: http://hwlab-hwpod-api.hwlab-production.svc.cluster.local:6681
          HWPOD_WEB_ROOT: web/hwlab-cloud-web/hwpod/dist
          OTEL_SERVICE_NAME: hwlab-hwpod-web
    envRecipe: *v03EnvRecipe
    bootConfig: *v03BootConfig
services:
  - serviceId: hwlab-harnessrl-api
    namespace: hwlab-dev
    healthPath: /health/live
  - serviceId: hwlab-harnessrl-worker
    namespace: hwlab-dev
    healthPath: /health/live
  - serviceId: hwlab-tasktree-api
    namespace: hwlab-dev
    healthPath: /health/live
  - serviceId: hwlab-tasktree-worker
    namespace: hwlab-dev
    healthPath: /health/live
  - serviceId: hwlab-cloud-api
    namespace: hwlab-dev
    healthPath: /health/live
    profile: dev
    replicas: 1
    env:
      HWLAB_ENVIRONMENT: dev
      HWLAB_PUBLIC_ENDPOINT: http://74.48.78.17:16667
      HWLAB_CLOUD_API_PORT: "6667"
      HWLAB_RUNTIME_SUBSTITUTE_FORBIDDEN: unidesk-backend,provider-gateway,microservice-proxy
      HWLAB_CLOUD_DB_URL: secretRef:hwlab-cloud-api-dev-db/database-url
      HWLAB_CLOUD_DB_SSL_MODE: disable
      HWLAB_CLOUD_DB_CONTRACT: dev-redacted-presence-only
      HWLAB_CLOUD_RUNTIME_ADAPTER: postgres
      HWLAB_CLOUD_RUNTIME_DURABLE: "true"
      HWLAB_M3_IO_CONTROL_ENABLED: "false"
      HWLAB_CODE_AGENT_PROVIDER: codex-stdio
      HWLAB_CODE_AGENT_MODEL: gpt-5.5
      HWLAB_CODE_AGENT_TIMEOUT_MS: "1200000"
      HWLAB_CODE_AGENT_OPENAI_BASE_URL: http://127.0.0.1:49280/responses
      HWLAB_CODE_AGENT_CODEX_STDIO_ENABLED: "1"
      HWLAB_CODE_AGENT_CODEX_STDIO_SUPERVISOR: repo-owned
      HWLAB_CODE_AGENT_WORKSPACE: /workspace/hwlab
      HWLAB_CODE_AGENT_CODEX_WORKSPACE: /workspace/hwlab
      HWLAB_CODE_AGENT_CODEX_SANDBOX: danger-full-access
      HWLAB_CODE_AGENT_CODEX_COMMAND: /app/node_modules/.bin/codex
      CODEX_HOME: /codex-home
      NO_PROXY: hyueapi.com,.hyueapi.com,hyui.com,.hyui.com,127.0.0.1,localhost,::1,api.minimaxi.com,.minimaxi.com
      no_proxy: hyueapi.com,.hyueapi.com,hyui.com,.hyui.com,127.0.0.1,localhost,::1,api.minimaxi.com,.minimaxi.com
      OPENAI_API_KEY: secretRef:hwlab-code-agent-provider/openai-api-key
      HWLAB_CODE_AGENT_SKILLS_DIRS: /app/skills:/data/user-skills
      HWLAB_PREINSTALLED_SKILLS_DIR: /app/skills
      HWLAB_USER_SKILLS_DIR: /data/user-skills
      HWLAB_CODE_AGENT_DEFAULT_PROVIDER_PROFILE: deepseek
      HWLAB_CODE_AGENT_DEEPSEEK_MODEL: deepseek-chat
      HWLAB_CODE_AGENT_DEEPSEEK_BASE_URL: http://hwlab-deepseek-proxy.hwlab-dev.svc.cluster.local:4000/v1/responses
      HWLAB_CODE_AGENT_CODEX_API_MODEL: gpt-5.5
      HWLAB_CODE_AGENT_CODEX_API_BASE_URL: http://127.0.0.1:49280/responses
      HWLAB_CODE_AGENT_CODEX_API_UPSTREAM_BASE_URL: https://hyueapi.com
      HWLAB_CODE_AGENT_CODEX_API_FORWARDER_PORT: "49280"
  - serviceId: hwlab-cloud-web
    namespace: hwlab-dev
    healthPath: /health/live
    profile: dev
    replicas: 1
    env:
      HWLAB_ENVIRONMENT: dev
      HWLAB_API_BASE_URL: http://hwlab-cloud-api.hwlab-dev.svc.cluster.local:6667
      HWLAB_CLOUD_WEB_PROXY_TIMEOUT_MS: "1260000"
  - serviceId: hwlab-gateway
    namespace: hwlab-dev
    healthPath: /health/live
    profile: dev
    replicas: 0
    env:
      HWLAB_GATEWAY_MODE: hardware-boundary
      HWLAB_ENVIRONMENT: dev
  - serviceId: hwlab-edge-proxy
    namespace: hwlab-dev
    healthPath: /health/live
    profile: dev
    replicas: 1
    env:
      HWLAB_EDGE_LISTEN: 0.0.0.0:6667
      HWLAB_EDGE_UPSTREAM: http://hwlab-cloud-api.hwlab-dev.svc.cluster.local:6667
      HWLAB_EDGE_PROXY_TIMEOUT_MS: "1260000"
      HWLAB_EDGE_IDLE_TIMEOUT_SECONDS: "120"
  - serviceId: hwlab-agent-skills
    namespace: hwlab-dev
    healthPath: /health/live
    profile: dev
    replicas: 1
    env: {}
createdAt: 2026-05-21T00:00:00Z
