{ "manifestVersion": "v1", "environment": "dev", "commitId": "9f142ea", "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 }, { "name": "hwlab-dev-tunnel-health", "type": "tcp", "localServiceId": "hwlab-tunnel-client", "localHost": "hwlab-tunnel-client.hwlab-dev.svc.cluster.local", "localPort": 7402, "remotePort": 7402 } ] }, "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-cli", "name": "hwlab-cli", "namespace": "hwlab-dev", "port": 7501, "targetPort": "http" }, { "serviceId": "hwlab-agent-skills", "name": "hwlab-agent-skills", "namespace": "hwlab-dev", "port": 7430, "targetPort": "http" }, { "serviceId": "hwlab-agent-mgr", "name": "hwlab-agent-mgr", "namespace": "hwlab-dev", "port": 7410, "targetPort": "http" }, { "serviceId": "hwlab-gateway-simu", "name": "hwlab-gateway-simu-1", "namespace": "hwlab-dev", "port": 7101, "targetPort": "http" }, { "serviceId": "hwlab-box-simu", "name": "hwlab-box-simu-1", "namespace": "hwlab-dev", "port": 7201, "targetPort": "http" }, { "serviceId": "hwlab-gateway-simu", "name": "hwlab-gateway-simu-2", "namespace": "hwlab-dev", "port": 7101, "targetPort": "http" }, { "serviceId": "hwlab-box-simu", "name": "hwlab-box-simu-2", "namespace": "hwlab-dev", "port": 7201, "targetPort": "http" }, { "serviceId": "hwlab-patch-panel", "name": "hwlab-patch-panel", "namespace": "hwlab-dev", "port": 7301, "targetPort": "http" }, { "serviceId": "hwlab-router", "name": "hwlab-router", "namespace": "hwlab-dev", "port": 7401, "targetPort": "http" }, { "serviceId": "hwlab-tunnel-client", "name": "hwlab-tunnel-client", "namespace": "hwlab-dev", "port": 7402, "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." } }, "services": [ { "serviceId": "hwlab-cloud-api", "image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:288a80d", "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_COMMIT_ID": "288a80d", "HWLAB_IMAGE": "127.0.0.1:5000/hwlab/hwlab-cloud-api:288a80d", "HWLAB_IMAGE_TAG": "288a80d", "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": "true", "HWLAB_M3_GATEWAY_SIMU_1_URL": "http://hwlab-gateway-simu-1.hwlab-dev.svc.cluster.local:7101", "HWLAB_M3_GATEWAY_SIMU_2_URL": "http://hwlab-gateway-simu-2.hwlab-dev.svc.cluster.local:7101", "HWLAB_M3_PATCH_PANEL_URL": "http://hwlab-patch-panel.hwlab-dev.svc.cluster.local:7301", "HWLAB_CODE_AGENT_PROVIDER": "codex-stdio", "HWLAB_CODE_AGENT_MODEL": "gpt-5.5", "HWLAB_CODE_AGENT_TIMEOUT_MS": "600000", "HWLAB_CODE_AGENT_OPENAI_BASE_URL": "http://127.0.0.1:49280/responses", "HWLAB_CODE_AGENT_HWLAB_API_BASE_URL": "http://hwlab-cloud-api.hwlab-dev.svc.cluster.local:6667", "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:/root/.agents/skills:/home/ubuntu/.agents/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", "image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:6a84959", "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": "660000", "HWLAB_COMMIT_ID": "6a84959", "HWLAB_IMAGE": "127.0.0.1:5000/hwlab/hwlab-cloud-web:6a84959", "HWLAB_IMAGE_TAG": "6a84959" } }, { "serviceId": "hwlab-agent-mgr", "image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:6a84959", "namespace": "hwlab-dev", "healthPath": "/health/live", "profile": "dev", "replicas": 1, "env": { "HWLAB_AGENT_SESSION_MODE": "control-plane", "HWLAB_ENVIRONMENT": "dev" } }, { "serviceId": "hwlab-agent-worker", "image": "127.0.0.1:5000/hwlab/hwlab-agent-worker:6a84959", "namespace": "hwlab-dev", "healthPath": "/health/live", "profile": "dev", "replicas": 0, "env": { "HWLAB_AGENT_SESSION_MODE": "session-scoped", "HWLAB_ENVIRONMENT": "dev" } }, { "serviceId": "hwlab-gateway", "image": "127.0.0.1:5000/hwlab/hwlab-gateway:6a84959", "namespace": "hwlab-dev", "healthPath": "/health/live", "profile": "dev", "replicas": 0, "env": { "HWLAB_GATEWAY_MODE": "hardware-boundary", "HWLAB_ENVIRONMENT": "dev" } }, { "serviceId": "hwlab-gateway-simu", "image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:6a84959", "namespace": "hwlab-dev", "healthPath": "/health/live", "profile": "dev", "replicas": 2, "instanceNames": [ "hwlab-gateway-simu-1", "hwlab-gateway-simu-2" ], "identityStrategy": "indexed-workloads", "env": { "HWLAB_GATEWAY_MODE": "simulator", "HWLAB_GATEWAY_ID": "gwsimu_1,gwsimu_2", "HWLAB_BOX_IDS": "boxsimu_1,boxsimu_2", "HWLAB_BOX_RESOURCES": "res_boxsimu_1,res_boxsimu_2", "HWLAB_BOX_URLS": "http://hwlab-box-simu-1.hwlab-dev.svc.cluster.local:7201,http://hwlab-box-simu-2.hwlab-dev.svc.cluster.local:7201" } }, { "serviceId": "hwlab-box-simu", "image": "127.0.0.1:5000/hwlab/hwlab-box-simu:6a84959", "namespace": "hwlab-dev", "healthPath": "/health/live", "profile": "dev", "replicas": 2, "instanceNames": [ "hwlab-box-simu-1", "hwlab-box-simu-2" ], "identityStrategy": "indexed-workloads", "env": { "HWLAB_BOX_ID": "boxsimu_1,boxsimu_2", "HWLAB_BOX_RESOURCE_ID": "res_boxsimu_1,res_boxsimu_2", "HWLAB_GATEWAY_SESSION_ID": "gws_gwsimu_1,gws_gwsimu_2", "HWLAB_ENVIRONMENT": "dev" } }, { "serviceId": "hwlab-patch-panel", "image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:6a84959", "namespace": "hwlab-dev", "healthPath": "/health/live", "profile": "dev", "replicas": 1, "m3Route": { "fromResourceId": "res_boxsimu_1", "fromPort": "DO1", "patchPanelServiceId": "hwlab-patch-panel", "toResourceId": "res_boxsimu_2", "toPort": "DI1" }, "env": { "HWLAB_PATCH_PANEL_MODE": "dev-skeleton", "HWLAB_PATCH_PANEL_ENDPOINT_MAP": "{\"res_boxsimu_2\":\"http://hwlab-box-simu-2.hwlab-dev.svc.cluster.local:7201\"}", "HWLAB_PATCH_PANEL_WIRING_CONFIG": "{\"wiringConfigId\":\"wir_m3_do1_di1\",\"projectId\":\"prj_m3_hardware_loop\",\"gatewaySessionId\":\"gws_gwsimu_1\",\"name\":\"M3 simulated DO1 to DI1 patch wiring\",\"status\":\"active\",\"connections\":[{\"from\":{\"resourceId\":\"res_boxsimu_1\",\"port\":\"DO1\"},\"to\":{\"resourceId\":\"res_boxsimu_2\",\"port\":\"DI1\"},\"mode\":\"exclusive\"}],\"constraints\":{\"propagation\":\"patch-panel-only\",\"localLoopbackSubstituteAllowed\":false},\"createdAt\":\"2026-05-21T00:00:00.000Z\",\"updatedAt\":\"2026-05-21T00:00:00.000Z\"}", "HWLAB_ENVIRONMENT": "dev" } }, { "serviceId": "hwlab-router", "image": "127.0.0.1:5000/hwlab/hwlab-router:6a84959", "namespace": "hwlab-dev", "healthPath": "/health/live", "profile": "dev", "replicas": 1, "env": { "HWLAB_ROUTER_MODE": "edge-reachability", "HWLAB_EDGE_PROXY_SERVICE": "hwlab-edge-proxy" } }, { "serviceId": "hwlab-tunnel-client", "image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:6a84959", "namespace": "hwlab-dev", "healthPath": "/health/live", "profile": "dev", "replicas": 1, "env": { "HWLAB_TUNNEL_MODE": "frp-client", "HWLAB_FRP_SERVER_ADDR": "74.48.78.17", "HWLAB_FRP_PUBLIC_PORT": "16667", "HWLAB_FRP_WEB_PUBLIC_PORT": "16666" } }, { "serviceId": "hwlab-edge-proxy", "image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:6a84959", "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": "660000" } }, { "serviceId": "hwlab-cli", "image": "127.0.0.1:5000/hwlab/hwlab-cli:6a84959", "namespace": "hwlab-dev", "healthPath": "/health/live", "profile": "dev", "replicas": 0, "env": { "HWLAB_CLI_ENDPOINT": "http://74.48.78.17:16667" } }, { "serviceId": "hwlab-agent-skills", "image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:6a84959", "namespace": "hwlab-dev", "healthPath": "/health/live", "profile": "dev", "replicas": 1, "env": { "HWLAB_SKILLS_COMMIT_ID": "6a84959" } } ], "createdAt": "2026-05-21T00:00:00Z" }