{
  "project": {
    "name": "unidesk",
    "timezone": "Etc/UTC"
  },
  "runtime": {
    "typescript": "bun",
    "bunVersion": "1.3.13"
  },
  "network": {
    "host": "0.0.0.0",
    "publicHost": "152.53.229.148",
    "core": {
      "port": 18080,
      "containerPort": 8080
    },
    "frontend": {
      "port": 18081,
      "containerPort": 8080
    },
    "devFrontend": {
      "port": 18083,
      "containerPort": 8080
    },
    "database": {
      "port": 15432,
      "containerPort": 5432
    },
    "providerIngress": {
      "port": 18082,
      "containerPort": 8081
    },
    "providerData": {
      "port": 18084,
      "containerPort": 8082
    },
    "restrictedHostAccess": {
      "bindHost": "0.0.0.0",
      "allowedSourceCidrs": [
        "36.49.30.105/32",
        "59.72.97.73/32",
        "175.30.53.221/32"
      ],
      "allowedForwardRules": [
        {
          "id": "nc01-k3s-pods-to-pk01-postgres",
          "sourceCidr": "10.42.0.0/16",
          "destinationCidr": "82.156.23.220/32",
          "port": 5432,
          "purpose": "NC01 k3s Sub2API external PostgreSQL on PK01"
        }
      ]
    }
  },
  "database": {
    "user": "unidesk",
    "password": "unidesk_dev_password",
    "name": "unidesk",
    "volume": "unidesk_pgdata_10gb",
    "volumeSize": "15GB"
  },
  "providerGateway": {
    "id": "main-server",
    "name": "Main Server Provider",
    "token": "unidesk-dev-token-change-me",
    "labels": {
      "host": "main-server",
      "role": "self-provider",
      "docker": true
    },
    "heartbeatIntervalMs": 15000,
    "reconnectBaseMs": 1000,
    "reconnectMaxMs": 30000,
    "metrics": {
      "diskPath": "/"
    },
    "upgrade": {
      "hostProjectRoot": "/root/unidesk",
      "workspacePath": "/workspace",
      "composeFile": "docker-compose.yml",
      "composeEnvFile": "/root/.unidesk/.state/docker-compose.env",
      "composeProject": "unidesk",
      "service": "provider-gateway",
      "runnerImage": "unidesk_provider-gateway"
    }
  },
  "docker": {
    "composeFile": "docker-compose.yml",
    "projectName": "unidesk"
  },
  "microservices": [
    {
      "id": "findjob",
      "name": "FindJob",
      "providerId": "D601",
      "description": "FindJob 纯后端服务，部署在 D601 Docker 中，UniDesk frontend 负责统一前端展示。",
      "repository": {
        "url": "https://gitee.com/Lyon1998/findjob",
        "commitId": "2d43212c5f474df5d87820985a6c75a8c2e7ac42",
        "dockerfile": "Dockerfile",
        "composeFile": "docker-compose.yml",
        "composeService": "server",
        "containerName": "findjob-server"
      },
      "backend": {
        "nodeBaseUrl": "http://host.docker.internal:3254",
        "nodeBindHost": "127.0.0.1",
        "nodePort": 3254,
        "proxyMode": "provider-gateway-http",
        "frontendOnly": true,
        "public": false,
        "allowedPathPrefixes": [
          "/api/"
        ],
        "healthPath": "/api/health",
        "timeoutMs": 12000,
        "allowedMethods": [
          "GET",
          "HEAD"
        ]
      },
      "development": {
        "providerId": "D601",
        "sshPassthrough": true,
        "worktreePath": "/home/ubuntu/findjob"
      },
      "frontend": {
        "route": "/apps/findjob",
        "integrated": true
      },
      "deployment": {
        "mode": "unidesk-direct"
      }
    },
    {
      "id": "pipeline",
      "name": "Pipeline v2",
      "providerId": "D601",
      "description": "Pipeline v2 观测后端部署在 D601 Docker 中，UniDesk frontend 负责渲染组件矩阵、运行状态、epoch 甘特图和运行材料索引。",
      "repository": {
        "url": "https://github.com/pikasTech/pipeline",
        "commitId": "87811a8d43edf216a4f4d8efa55bbb96bad8df14",
        "dockerfile": "Dockerfile",
        "composeFile": "docker-compose.yml",
        "composeService": "pipeline-control",
        "containerName": "pipeline-v2-control"
      },
      "backend": {
        "nodeBaseUrl": "http://host.docker.internal:18082",
        "nodeBindHost": "127.0.0.1",
        "nodePort": 18082,
        "proxyMode": "provider-gateway-http",
        "frontendOnly": true,
        "public": false,
        "allowedPathPrefixes": [
          "/health",
          "/api/",
          "/oa/"
        ],
        "healthPath": "/health",
        "timeoutMs": 15000,
        "allowedMethods": [
          "GET",
          "HEAD",
          "POST"
        ]
      },
      "development": {
        "providerId": "D601",
        "sshPassthrough": true,
        "worktreePath": "/home/ubuntu/pipeline"
      },
      "frontend": {
        "route": "/apps/pipeline",
        "integrated": true
      },
      "deployment": {
        "mode": "unidesk-direct"
      }
    },
    {
      "id": "met-nonlinear",
      "name": "MET Nonlinear",
      "providerId": "D601",
      "description": "MET Nonlinear 训练编排用户服务，TS 后端部署在 D601 Docker 中，按需拉起 TensorFlow 2.6 GPU 训练容器并由 UniDesk frontend 展示队列、进度和历史记录。",
      "repository": {
        "url": "https://github.com/pikasTech/met_nonlinear",
        "commitId": "9fcdfc0b505e52cc88cf51b196543dc055da2334",
        "dockerfile": "docker/unidesk/Dockerfile.ml",
        "composeFile": "docker-compose.unidesk.yml",
        "composeService": "met-nonlinear-ts",
        "containerName": "met-nonlinear-ts"
      },
      "backend": {
        "nodeBaseUrl": "http://host.docker.internal:3288",
        "nodeBindHost": "127.0.0.1",
        "nodePort": 3288,
        "proxyMode": "provider-gateway-http",
        "frontendOnly": true,
        "public": false,
        "allowedMethods": [
          "GET",
          "HEAD",
          "POST",
          "PUT"
        ],
        "allowedPathPrefixes": [
          "/health",
          "/api/"
        ],
        "healthPath": "/health",
        "timeoutMs": 90000
      },
      "development": {
        "providerId": "D601",
        "sshPassthrough": true,
        "worktreePath": "/home/ubuntu/met_nonlinear"
      },
      "frontend": {
        "route": "/apps/met-nonlinear",
        "integrated": true
      },
      "deployment": {
        "mode": "unidesk-direct"
      }
    },
    {
      "id": "claudeqq",
      "name": "ClaudeQQ",
      "providerId": "D601",
      "description": "ClaudeQQ 是由 D601 k3s 控制平面代管的 QQ 消息网关用户服务，为 UniDesk、主 server 和其他用户服务提供 QQ 消息事件订阅与消息推送 API。",
      "repository": {
        "url": "https://gitee.com/lyon1998/agent_skills",
        "commitId": "203b1f46684c91340ecbbd8a74502bd55e4f2011",
        "dockerfile": "claudeqq/Dockerfile",
        "composeFile": "src/components/microservices/k3sctl-adapter/k3s/claudeqq.k3s.json",
        "composeService": "claudeqq",
        "containerName": "k3s:claudeqq"
      },
      "backend": {
        "nodeBaseUrl": "k3s://claudeqq",
        "nodeBindHost": "k3s://unidesk/claudeqq",
        "nodePort": 3290,
        "proxyMode": "k3sctl-adapter-http",
        "frontendOnly": true,
        "public": false,
        "allowedMethods": [
          "GET",
          "HEAD",
          "POST",
          "DELETE"
        ],
        "allowedPathPrefixes": [
          "/health",
          "/logs",
          "/api/"
        ],
        "healthPath": "/health",
        "timeoutMs": 30000
      },
      "development": {
        "providerId": "D601",
        "sshPassthrough": true,
        "worktreePath": "/home/ubuntu/.agents/skills/claudeqq"
      },
      "frontend": {
        "route": "/apps/claudeqq",
        "integrated": true
      },
      "deployment": {
        "mode": "k3sctl-managed",
        "adapterServiceId": "k3sctl-adapter",
        "k3sServiceId": "claudeqq",
        "namespace": "unidesk",
        "expectedNodeIds": [
          "D601"
        ],
        "activeNodeId": "D601"
      }
    },
    {
      "id": "project-manager",
      "name": "Project Manager",
      "providerId": "main-server",
      "description": "项目管理用户服务，部署在主 server Docker 中，使用 UniDesk PostgreSQL 保存合作项目清单，支持项目增删改查、Excel 导入和 Excel 导出。",
      "repository": {
        "url": "https://github.com/pikasTech/unidesk",
        "commitId": "a278de032d5cdb91010466ac1e2183c79026550d",
        "dockerfile": "src/components/microservices/project-manager/Dockerfile",
        "composeFile": "docker-compose.yml",
        "composeService": "project-manager",
        "containerName": "project-manager-backend"
      },
      "backend": {
        "nodeBaseUrl": "http://project-manager:4233",
        "nodeBindHost": "project-manager",
        "nodePort": 4233,
        "proxyMode": "provider-gateway-http",
        "frontendOnly": true,
        "public": false,
        "allowedMethods": [
          "GET",
          "HEAD",
          "POST",
          "PUT",
          "DELETE"
        ],
        "allowedPathPrefixes": [
          "/health",
          "/logs",
          "/api/"
        ],
        "healthPath": "/health",
        "timeoutMs": 30000
      },
      "development": {
        "providerId": "main-server",
        "sshPassthrough": true,
        "worktreePath": "/root/unidesk"
      },
      "frontend": {
        "route": "/apps/project-manager",
        "integrated": true
      },
      "deployment": {
        "mode": "unidesk-direct"
      }
    },
    {
      "id": "baidu-netdisk",
      "name": "Baidu Netdisk",
      "providerId": "main-server",
      "description": "容器化百度网盘存储用户服务，提供 OAuth 设备码登录、根目录浏览和 staging 目录上传下载任务。",
      "repository": {
        "url": "https://github.com/pikasTech/unidesk",
        "commitId": "ae462ed9ef8057909fee9eabfadce5ed55e958a2",
        "dockerfile": "src/components/microservices/baidu-netdisk/Dockerfile",
        "composeFile": "docker-compose.yml",
        "composeService": "baidu-netdisk",
        "containerName": "baidu-netdisk-backend"
      },
      "backend": {
        "nodeBaseUrl": "http://baidu-netdisk:4244",
        "nodeBindHost": "baidu-netdisk",
        "nodePort": 4244,
        "proxyMode": "provider-gateway-http",
        "frontendOnly": true,
        "public": false,
        "allowedMethods": [
          "GET",
          "HEAD",
          "POST",
          "DELETE"
        ],
        "allowedPathPrefixes": [
          "/health",
          "/logs",
          "/api/"
        ],
        "healthPath": "/health",
        "timeoutMs": 120000
      },
      "development": {
        "providerId": "main-server",
        "sshPassthrough": true,
        "worktreePath": "/root/unidesk"
      },
      "frontend": {
        "route": "/apps/baidu-netdisk",
        "integrated": true
      },
      "deployment": {
        "mode": "unidesk-direct"
      }
    },
    {
      "id": "filebrowser",
      "name": "File Browser D518",
      "providerId": "D518",
      "description": "File Browser WebUI 用户服务，部署在 D518 WSL provider Docker 中，挂载 provider host / 到 /srv，包含 /mnt/c 等 Windows 盘符；主 server 不再运行 File Browser 容器以节省资源。",
      "repository": {
        "url": "https://github.com/filebrowser/filebrowser",
        "commitId": "ca5e249e3c0c94159c2136a0cd431a424eb18472",
        "dockerfile": "docker.io/filebrowser/filebrowser:v2.63.3",
        "artifactSource": {
          "kind": "upstream-image",
          "imageRef": "docker.io/filebrowser/filebrowser:v2.63.3",
          "digestPinRequired": true,
          "mirrorRepository": "127.0.0.1:5000/upstream/filebrowser/filebrowser",
          "ciDockerfileBuild": false,
          "pullOnlyCd": true
        },
        "composeFile": "docker run --restart unless-stopped",
        "composeService": "unidesk-filebrowser-d518",
        "containerName": "unidesk-filebrowser-d518"
      },
      "backend": {
        "nodeBaseUrl": "http://host.docker.internal:4251",
        "nodeBindHost": "0.0.0.0",
        "nodePort": 4251,
        "proxyMode": "provider-gateway-http",
        "frontendOnly": true,
        "public": false,
        "allowedMethods": [
          "GET",
          "HEAD",
          "POST",
          "PUT",
          "PATCH",
          "DELETE"
        ],
        "allowedPathPrefixes": [
          "/"
        ],
        "healthPath": "/health",
        "timeoutMs": 120000
      },
      "development": {
        "providerId": "D518",
        "sshPassthrough": true,
        "worktreePath": "/"
      },
      "frontend": {
        "route": "/apps/filebrowser",
        "integrated": true
      },
      "deployment": {
        "mode": "unidesk-direct"
      }
    },
    {
      "id": "filebrowser-d601",
      "name": "File Browser D601",
      "providerId": "D601",
      "description": "File Browser WebUI 用户服务，部署在 D601 WSL provider Docker 中，挂载 provider host / 到 /srv，包含 /mnt/c 等 Windows 盘符。",
      "repository": {
        "url": "https://github.com/filebrowser/filebrowser",
        "commitId": "ca5e249e3c0c94159c2136a0cd431a424eb18472",
        "dockerfile": "docker.io/filebrowser/filebrowser:v2.63.3",
        "artifactSource": {
          "kind": "upstream-image",
          "imageRef": "docker.io/filebrowser/filebrowser:v2.63.3",
          "digestPinRequired": true,
          "mirrorRepository": "127.0.0.1:5000/upstream/filebrowser/filebrowser",
          "ciDockerfileBuild": false,
          "pullOnlyCd": true
        },
        "composeFile": "docker run --restart unless-stopped",
        "composeService": "unidesk-filebrowser-d601",
        "containerName": "unidesk-filebrowser-d601"
      },
      "backend": {
        "nodeBaseUrl": "http://host.docker.internal:4251",
        "nodeBindHost": "127.0.0.1",
        "nodePort": 4251,
        "proxyMode": "provider-gateway-http",
        "frontendOnly": true,
        "public": false,
        "allowedMethods": [
          "GET",
          "HEAD",
          "POST",
          "PUT",
          "PATCH",
          "DELETE"
        ],
        "allowedPathPrefixes": [
          "/"
        ],
        "healthPath": "/health",
        "timeoutMs": 120000
      },
      "development": {
        "providerId": "D601",
        "sshPassthrough": true,
        "worktreePath": "/"
      },
      "frontend": {
        "route": "/apps/filebrowser",
        "integrated": true
      },
      "deployment": {
        "mode": "unidesk-direct"
      }
    },
    {
      "id": "oa-event-flow",
      "name": "OA Event Flow",
      "providerId": "main-server",
      "description": "统一 OA 事件流与统计中心用户服务，为 Code Queue 和 Pipeline 提供事件表、tag 订阅、Trace/STEP stats 投影和事件可见性页面。",
      "repository": {
        "url": "https://github.com/pikasTech/unidesk",
        "commitId": "b36d7f94d7a7db9527ca823a98599106096b3c91",
        "dockerfile": "src/components/microservices/oa-event-flow/Dockerfile",
        "composeFile": "docker-compose.yml",
        "composeService": "oa-event-flow",
        "containerName": "oa-event-flow-backend"
      },
      "backend": {
        "nodeBaseUrl": "http://oa-event-flow:4255",
        "nodeBindHost": "oa-event-flow",
        "nodePort": 4255,
        "proxyMode": "provider-gateway-http",
        "frontendOnly": true,
        "public": false,
        "allowedMethods": [
          "GET",
          "HEAD",
          "POST"
        ],
        "allowedPathPrefixes": [
          "/health",
          "/logs",
          "/api/"
        ],
        "healthPath": "/health",
        "timeoutMs": 30000
      },
      "development": {
        "providerId": "main-server",
        "sshPassthrough": true,
        "worktreePath": "/root/unidesk"
      },
      "frontend": {
        "route": "/apps/oa-event-flow",
        "integrated": true
      },
      "deployment": {
        "mode": "unidesk-direct"
      }
    },
    {
      "id": "k3sctl-adapter",
      "name": "k3s Control Plane",
      "providerId": "D601",
      "description": "k3sctl-adapter 是 UniDesk 直管的 k3s 控制平面适配微服务，连接 D601 原生 k3s/k3sctl 控制平面，并通过 k3s 标准服务路由代理 D601 上的代管微服务。",
      "repository": {
        "url": "https://github.com/pikasTech/unidesk",
        "commitId": "4d9eed65132f158b2323b128aabed5613cb15627",
        "dockerfile": "src/components/microservices/k3sctl-adapter/Dockerfile",
        "composeFile": "src/components/microservices/k3sctl-adapter/docker-compose.d601.yml",
        "composeService": "k3sctl-adapter",
        "containerName": "k3sctl-adapter"
      },
      "backend": {
        "nodeBaseUrl": "http://host.docker.internal:4266",
        "nodeBindHost": "127.0.0.1",
        "nodePort": 4266,
        "proxyMode": "provider-gateway-http",
        "frontendOnly": true,
        "public": false,
        "allowedMethods": [
          "GET",
          "HEAD",
          "POST",
          "DELETE",
          "PUT",
          "PATCH"
        ],
        "allowedPathPrefixes": [
          "/health",
          "/logs",
          "/api/"
        ],
        "healthPath": "/health",
        "timeoutMs": 30000
      },
      "deployment": {
        "mode": "unidesk-direct"
      },
      "development": {
        "providerId": "D601",
        "sshPassthrough": true,
        "worktreePath": "/home/ubuntu/cq-deploy"
      },
      "frontend": {
        "route": "/apps/k3sctl",
        "integrated": true
      }
    },
    {
      "id": "k3sctl-adapter-g14",
      "name": "k3s Control Plane G14",
      "providerId": "G14",
      "description": "k3sctl-adapter-g14 是 UniDesk 直管的 G14 k3s 控制平面适配微服务，用于旁路构建和验证 G14 基础设施与 DEV 集群；当前不接管 D601 生产 Code Queue 或其他用户服务。",
      "repository": {
        "url": "https://github.com/pikasTech/unidesk",
        "commitId": "local",
        "dockerfile": "src/components/microservices/k3sctl-adapter/Dockerfile",
        "composeFile": "src/components/microservices/k3sctl-adapter/docker-compose.g14.yml",
        "composeService": "k3sctl-adapter-g14",
        "containerName": "k3sctl-adapter-g14"
      },
      "backend": {
        "nodeBaseUrl": "http://host.docker.internal:4266",
        "nodeBindHost": "127.0.0.1",
        "nodePort": 4266,
        "proxyMode": "provider-gateway-http",
        "frontendOnly": true,
        "public": false,
        "allowedMethods": [
          "GET",
          "HEAD",
          "POST",
          "DELETE",
          "PUT",
          "PATCH"
        ],
        "allowedPathPrefixes": [
          "/health",
          "/logs",
          "/api/"
        ],
        "healthPath": "/health",
        "timeoutMs": 30000
      },
      "deployment": {
        "mode": "unidesk-direct"
      },
      "development": {
        "providerId": "G14",
        "sshPassthrough": true,
        "worktreePath": "/root/unidesk"
      },
      "frontend": {
        "route": "/apps/k3sctl-g14",
        "integrated": false
      }
    },
    {
      "id": "code-queue",
      "name": "Code Queue",
      "providerId": "D601",
      "description": "Code Queue 的用户服务 ID 保持稳定；队列管理、提交、历史和轻量 Trace 读取默认由主 server code-queue-mgr 直管 PostgreSQL，D601 k3s Code Queue 仍负责生产 scheduler/runner、active run steer/interrupt 和执行态写回；G14 只作为旁路构建与验证目标，未切流前不得接管生产。",
      "repository": {
        "url": "https://github.com/pikasTech/unidesk",
        "commitId": "2a9f60d57401bf9d6165e44af30c2f21ada79320",
        "dockerfile": "src/components/microservices/code-queue/Dockerfile",
        "composeFile": "src/components/microservices/k3sctl-adapter/k3s/code-queue.k3s.json",
        "composeService": "code-queue",
        "containerName": "k3s:code-queue"
      },
      "backend": {
        "nodeBaseUrl": "k3s://code-queue",
        "nodeBindHost": "k3s://unidesk/code-queue",
        "nodePort": 4222,
        "proxyMode": "k3sctl-adapter-http",
        "frontendOnly": true,
        "public": false,
        "allowedMethods": [
          "GET",
          "HEAD",
          "POST",
          "DELETE",
          "PUT",
          "PATCH"
        ],
        "allowedPathPrefixes": [
          "/health",
          "/logs",
          "/api/"
        ],
        "healthPath": "/health",
        "timeoutMs": 30000
      },
      "development": {
        "providerId": "D601",
        "sshPassthrough": true,
        "worktreePath": "/home/ubuntu/unidesk-code-queue-deploy"
      },
      "frontend": {
        "route": "/apps/code-queue",
        "integrated": true
      },
      "deployment": {
        "mode": "k3sctl-managed",
        "adapterServiceId": "k3sctl-adapter",
        "k3sServiceId": "code-queue",
        "namespace": "unidesk",
        "expectedNodeIds": [
          "D601"
        ],
        "activeNodeId": "D601"
      }
    },
    {
      "id": "code-queue-mgr",
      "name": "Code Queue Manager",
      "providerId": "main-server",
      "description": "code-queue-mgr 是主 server 直管的轻量 Code Queue 控制面，只连接主 PostgreSQL，负责队列 CRUD、任务提交、历史摘要和轻量 Trace 读取；不包含 Codex/OpenCode/Playwright/Chromium/runner 依赖。",
      "repository": {
        "url": "https://github.com/pikasTech/unidesk",
        "commitId": "local",
        "dockerfile": "src/components/microservices/code-queue-mgr/Dockerfile",
        "composeFile": "docker-compose.yml",
        "composeService": "code-queue-mgr",
        "containerName": "code-queue-mgr-backend"
      },
      "backend": {
        "nodeBaseUrl": "http://code-queue-mgr:4278",
        "nodeBindHost": "code-queue-mgr",
        "nodePort": 4278,
        "proxyMode": "unidesk-direct",
        "frontendOnly": true,
        "public": false,
        "allowedMethods": [
          "GET",
          "HEAD",
          "POST",
          "PUT",
          "PATCH",
          "DELETE"
        ],
        "allowedPathPrefixes": [
          "/health",
          "/live",
          "/logs",
          "/api/"
        ],
        "healthPath": "/health",
        "timeoutMs": 10000
      },
      "deployment": {
        "mode": "internal-sidecar"
      },
      "development": {
        "providerId": "main-server",
        "sshPassthrough": false,
        "worktreePath": "/root/unidesk/src/components/microservices/code-queue-mgr"
      },
      "frontend": {
        "route": "/apps/code-queue-mgr",
        "integrated": false
      }
    },
    {
      "id": "code-agent-sandbox",
      "name": "Code Agent Sandbox",
      "providerId": "main-server",
      "description": "独立 Code Agent Sandbox 微服务骨架，承载 Codex/OpenCode/未来 agent 的统一状态机、adapter 契约、模式边界和凭证分发语义；当前不依赖 Code Queue。",
      "repository": {
        "url": "https://github.com/pikasTech/unidesk",
        "commitId": "local",
        "dockerfile": "src/components/microservices/code-agent-sandbox/Dockerfile",
        "composeFile": "docker-compose.yml",
        "composeService": "code-agent-sandbox",
        "containerName": "code-agent-sandbox-backend"
      },
      "backend": {
        "nodeBaseUrl": "http://code-agent-sandbox:4260",
        "nodeBindHost": "code-agent-sandbox",
        "nodePort": 4260,
        "proxyMode": "unidesk-direct",
        "frontendOnly": true,
        "public": false,
        "allowedMethods": [
          "GET",
          "HEAD",
          "POST",
          "PUT"
        ],
        "allowedPathPrefixes": [
          "/health",
          "/diagnostics",
          "/trace",
          "/logs",
          "/api/"
        ],
        "healthPath": "/health",
        "timeoutMs": 10000
      },
      "development": {
        "providerId": "main-server",
        "sshPassthrough": false,
        "worktreePath": "/root/unidesk/src/components/microservices/code-agent-sandbox"
      },
      "frontend": {
        "route": "/apps/code-agent-sandbox",
        "integrated": false
      },
      "deployment": {
        "mode": "internal-sidecar"
      }
    },
    {
      "id": "auth-broker",
      "name": "Auth Broker",
      "providerId": "main-server",
      "description": "Auth Broker 是主 server 私有鉴权代理 skeleton，为 Code Queue PR preflight 和 GitHub issue/PR dry-run 提供 broker-held credential ref 语义；当前只登记 source/contract/profile，不启用 live secret 或公网入口。",
      "repository": {
        "url": "https://github.com/pikasTech/unidesk",
        "commitId": "local",
        "dockerfile": "src/components/microservices/auth-broker/Dockerfile",
        "composeFile": "docker-compose.yml",
        "composeService": "auth-broker",
        "containerName": "auth-broker-backend"
      },
      "backend": {
        "nodeBaseUrl": "http://auth-broker:4291",
        "nodeBindHost": "auth-broker",
        "nodePort": 4291,
        "proxyMode": "unidesk-direct",
        "frontendOnly": true,
        "public": false,
        "allowedMethods": [
          "GET",
          "HEAD",
          "POST"
        ],
        "allowedPathPrefixes": [
          "/health",
          "/v1/github/"
        ],
        "healthPath": "/health",
        "timeoutMs": 10000
      },
      "development": {
        "providerId": "main-server",
        "sshPassthrough": false,
        "worktreePath": "/root/unidesk/src/components/microservices/auth-broker"
      },
      "frontend": {
        "route": "/apps/auth-broker",
        "integrated": false
      },
      "deployment": {
        "mode": "internal-sidecar"
      }
    },
    {
      "id": "mdtodo",
      "name": "MDTODO",
      "providerId": "D601",
      "description": "MDTODO 是由 D601 k3s 控制面代管的 Markdown TODO 后端，读取原 F:\\Work\\vscode-mdtodo 工作区，UniDesk frontend 负责统一任务树、编辑和状态展示。",
      "repository": {
        "url": "https://github.com/pikasTech/unidesk",
        "commitId": "local",
        "dockerfile": "src/components/microservices/mdtodo/Dockerfile",
        "composeFile": "src/components/microservices/k3sctl-adapter/k3s/mdtodo.k3s.json",
        "composeService": "mdtodo",
        "containerName": "k3s:mdtodo"
      },
      "backend": {
        "nodeBaseUrl": "k3s://mdtodo",
        "nodeBindHost": "k3s://unidesk/mdtodo",
        "nodePort": 4267,
        "proxyMode": "k3sctl-adapter-http",
        "frontendOnly": true,
        "public": false,
        "allowedMethods": [
          "GET",
          "HEAD",
          "POST",
          "PUT",
          "PATCH",
          "DELETE"
        ],
        "allowedPathPrefixes": [
          "/health",
          "/live",
          "/logs",
          "/api/"
        ],
        "healthPath": "/health",
        "timeoutMs": 30000
      },
      "development": {
        "providerId": "D601",
        "sshPassthrough": true,
        "worktreePath": "/home/ubuntu/cq-deploy/src/components/microservices/mdtodo"
      },
      "frontend": {
        "route": "/apps/mdtodo",
        "integrated": true
      },
      "deployment": {
        "mode": "k3sctl-managed",
        "adapterServiceId": "k3sctl-adapter",
        "k3sServiceId": "mdtodo",
        "namespace": "unidesk",
        "expectedNodeIds": [
          "D601"
        ],
        "activeNodeId": "D601"
      }
    },
    {
      "id": "decision-center",
      "name": "Decision Center",
      "providerId": "D601",
      "description": "Decision Center 是由 D601 k3s 控制面代管的决策权威记录服务，用于沉淀会议记录、决议、目标、问题分级、停放事项和证据；参谋对话仍使用 Codex 原生会话。",
      "repository": {
        "url": "https://github.com/pikasTech/unidesk",
        "commitId": "f4787a8cf0ddb9a773c05d86ea3dca5e8d93bd35",
        "dockerfile": "src/components/microservices/decision-center/Dockerfile",
        "composeFile": "src/components/microservices/k3sctl-adapter/k3s/decision-center.k3s.json",
        "composeService": "decision-center",
        "containerName": "k3s:decision-center"
      },
      "backend": {
        "nodeBaseUrl": "k3s://decision-center",
        "nodeBindHost": "k3s://unidesk/decision-center",
        "nodePort": 4277,
        "proxyMode": "k3sctl-adapter-http",
        "frontendOnly": true,
        "public": false,
        "allowedMethods": [
          "GET",
          "HEAD",
          "POST",
          "PUT",
          "DELETE"
        ],
        "allowedPathPrefixes": [
          "/health",
          "/live",
          "/logs",
          "/api/"
        ],
        "healthPath": "/health",
        "timeoutMs": 30000
      },
      "development": {
        "providerId": "D601",
        "sshPassthrough": true,
        "worktreePath": "/home/ubuntu/cq-deploy/src/components/microservices/decision-center"
      },
      "frontend": {
        "route": "/apps/decision-center",
        "integrated": true
      },
      "deployment": {
        "mode": "k3sctl-managed",
        "adapterServiceId": "k3sctl-adapter",
        "k3sServiceId": "decision-center",
        "namespace": "unidesk",
        "expectedNodeIds": [
          "D601"
        ],
        "activeNodeId": "D601"
      }
    }
  ],
  "paths": {
    "stateDir": "/root/.unidesk/.state",
    "logsDir": "/root/.unidesk/.state/logs",
    "docsReferenceDir": "docs/reference"
  },
  "sshForwarding": {
    "mode": "optional-maintenance-only",
    "keyDir": "/root/.unidesk/host-ssh",
    "host": "host.docker.internal",
    "port": 22,
    "user": "root"
  },
  "auth": {
    "username": "admin",
    "password": "Liang6516.",
    "sessionSecret": "unidesk-dev-session-secret-change-me",
    "sessionTtlSeconds": 86400
  }
}
