400 lines
13 KiB
JSON
400 lines
13 KiB
JSON
{
|
|
"manifestVersion": "v1",
|
|
"environment": "dev",
|
|
"commitId": "32ad194",
|
|
"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:7a14c6b",
|
|
"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": "7a14c6b",
|
|
"HWLAB_IMAGE": "127.0.0.1:5000/hwlab/hwlab-cloud-api:7a14c6b",
|
|
"HWLAB_IMAGE_TAG": "7a14c6b",
|
|
"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://172.26.26.227:17680/v1/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"
|
|
}
|
|
},
|
|
{
|
|
"serviceId": "hwlab-cloud-web",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:7a14c6b",
|
|
"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": "7a14c6b",
|
|
"HWLAB_IMAGE": "127.0.0.1:5000/hwlab/hwlab-cloud-web:7a14c6b",
|
|
"HWLAB_IMAGE_TAG": "7a14c6b"
|
|
}
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-mgr",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:7a14c6b",
|
|
"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:7a14c6b",
|
|
"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:7a14c6b",
|
|
"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:7a14c6b",
|
|
"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:7a14c6b",
|
|
"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:7a14c6b",
|
|
"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:7a14c6b",
|
|
"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:7a14c6b",
|
|
"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:7a14c6b",
|
|
"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:7a14c6b",
|
|
"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:7a14c6b",
|
|
"namespace": "hwlab-dev",
|
|
"healthPath": "/health/live",
|
|
"profile": "dev",
|
|
"replicas": 1,
|
|
"env": {
|
|
"HWLAB_SKILLS_COMMIT_ID": "7a14c6b"
|
|
}
|
|
}
|
|
],
|
|
"createdAt": "2026-05-21T00:00:00Z"
|
|
}
|