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
lanes:
  v02:
    name: v0.2
    node: G14
    sourceBranch: v0.2
    gitopsBranch: v0.2-gitops
    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
          - tools/src/hwlab-cli/trace-renderer.ts
        env: {}
        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: bun-command
        entrypoint: cmd/hwlab-edge-proxy/main.ts
        artifactKind: bun-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
        - scripts/artifact-publish.mjs
        - scripts/src/dev-artifact-services.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
          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
    namespace: hwlab-v03
    endpoint: https://hwlab-v03.74-48-78-17.nip.io
    publicEndpoints:
      frontend: https://hwlab-v03.74-48-78-17.nip.io
      api: https://hwlab-v03.74-48-78-17.nip.io
      legacyFrontend: http://74.48.78.17:19766
      legacyApi: http://74.48.78.17:19767
    artifactCatalog: deploy/artifact-catalog.v03.json
    runtimePath: runtime-v03
    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
          - tools/src/hwlab-cli/trace-renderer.ts
        env: {}
        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: bun-command
        entrypoint: cmd/hwlab-edge-proxy/main.ts
        artifactKind: bun-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
        - scripts/artifact-publish.mjs
        - scripts/src/dev-artifact-services.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-v03-db/database-url
          HWLAB_CLOUD_DB_CONTRACT: v03-redacted-presence-only
          HWLAB_ACCESS_CONTROL_REQUIRED: "1"
          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_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
          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
services:
  - 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"
  - serviceId: hwlab-agent-skills
    namespace: hwlab-dev
    healthPath: /health/live
    profile: dev
    replicas: 1
    env: {}
createdAt: 2026-05-21T00:00:00Z
