From dfd888583a3f9e57566608bebc2f104c699a1894 Mon Sep 17 00:00:00 2001 From: HWLAB node GitOps Bot Date: Mon, 29 Jun 2026 05:53:00 +0000 Subject: [PATCH] chore: promote node GitOps source 1c448bc --- deploy/artifact-catalog.jd01-v03.json | 647 ++++++ .../node/jd01/runtime-v03/configmaps.yaml | 53 + .../node/jd01/runtime-v03/deepseek-proxy.yaml | 327 ++++ .../jd01/runtime-v03/health-contract.yaml | 27 + .../node/jd01/runtime-v03/kustomization.yaml | 14 + .../node/jd01/runtime-v03/namespace.yaml | 17 + .../node/jd01/runtime-v03/node-frpc.yaml | 89 + .../gitops/node/jd01/runtime-v03/openfga.yaml | 278 +++ .../node/jd01/runtime-v03/postgres.yaml | 942 +++++++++ .../node/jd01/runtime-v03/services.yaml | 208 ++ .../jd01/runtime-v03/workbench-redis.yaml | 243 +++ .../node/jd01/runtime-v03/workloads.yaml | 1734 +++++++++++++++++ 12 files changed, 4579 insertions(+) create mode 100644 deploy/artifact-catalog.jd01-v03.json create mode 100644 deploy/gitops/node/jd01/runtime-v03/configmaps.yaml create mode 100644 deploy/gitops/node/jd01/runtime-v03/deepseek-proxy.yaml create mode 100644 deploy/gitops/node/jd01/runtime-v03/health-contract.yaml create mode 100644 deploy/gitops/node/jd01/runtime-v03/kustomization.yaml create mode 100644 deploy/gitops/node/jd01/runtime-v03/namespace.yaml create mode 100644 deploy/gitops/node/jd01/runtime-v03/node-frpc.yaml create mode 100644 deploy/gitops/node/jd01/runtime-v03/openfga.yaml create mode 100644 deploy/gitops/node/jd01/runtime-v03/postgres.yaml create mode 100644 deploy/gitops/node/jd01/runtime-v03/services.yaml create mode 100644 deploy/gitops/node/jd01/runtime-v03/workbench-redis.yaml create mode 100644 deploy/gitops/node/jd01/runtime-v03/workloads.yaml diff --git a/deploy/artifact-catalog.jd01-v03.json b/deploy/artifact-catalog.jd01-v03.json new file mode 100644 index 00000000..866ed737 --- /dev/null +++ b/deploy/artifact-catalog.jd01-v03.json @@ -0,0 +1,647 @@ +{ + "catalogVersion": "v1", + "kind": "hwlab-artifact-catalog", + "environment": "v03", + "profile": "v03", + "namespace": "hwlab-v03", + "endpoint": "https://hwlab.pikapython.com", + "commitId": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "artifactState": "published", + "publish": { + "ciPublished": true, + "registryVerified": true, + "provenance": "node-ci-artifact:hwlab-jd01-v03-ci-poll-1c448bc4b9fa-rmqysuwcb-collect", + "note": "Digest fields were copied from a successful DEV artifact publish report for this source commit." + }, + "healthContract": { + "method": "GET", + "path": "/health/live", + "responseFormat": "json", + "requiredFields": [ + "serviceId", + "environment", + "status" + ] + }, + "allowedProfiles": [ + "v03" + ], + "forbiddenProfiles": [ + "dev", + "prod" + ], + "services": [ + { + "serviceId": "hwlab-cloud-api", + "commitId": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "sourceCommitId": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "image": "127.0.0.1:5000/hwlab/hwlab-cloud-api-env:env-5ff41b539190", + "imageTag": "env-5ff41b539190", + "digest": "sha256:c317276bb0d002bc82cb8d3cde6d5e596db18325585436d9f3592ebd173eb01d", + "publishState": "published", + "profile": "v03", + "namespace": "hwlab-v03", + "healthPath": "/health/live", + "sourceState": "source-present", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "notPublishedReason": null, + "buildCreatedAt": "2026-06-29T05:52:28.413Z", + "buildSource": "git-mirror-http.devops-infra.svc.cluster.local:8080/pikasTech/HWLAB@env:5ff41b539190849e76511ed722a4539f5921622e98eea1444b606475f8ef55aa", + "buildBackend": "buildkit-env-reuse", + "componentCommitId": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "componentInputHash": "c4978d0f6ca938b026598c5742ae83ddb011a66d6dcebbaee3f0b60258b43e9a", + "runtimeMode": "env-reuse-git-mirror-checkout", + "envReuse": true, + "envChanged": true, + "codeChanged": true, + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-cloud-api-env:env-5ff41b539190", + "environmentDigest": "sha256:c317276bb0d002bc82cb8d3cde6d5e596db18325585436d9f3592ebd173eb01d", + "environmentInputHash": "5ff41b539190849e76511ed722a4539f5921622e98eea1444b606475f8ef55aa", + "codeInputHash": "e692ec9a4feee2d0ee983f1f9dc2eeebdfa1e4dd68dd9bcfdef19129d9bbb57a", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "bootSh": "deploy/runtime/boot/hwlab-cloud-api.sh", + "bootEnvEvidence": { + "runtimeMode": "env-reuse-git-mirror-checkout", + "environmentDigest": "sha256:c317276bb0d002bc82cb8d3cde6d5e596db18325585436d9f3592ebd173eb01d", + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-cloud-api-env:env-5ff41b539190", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "bootSh": "deploy/runtime/boot/hwlab-cloud-api.sh", + "env": { + "HWLAB_BOOT_REPO": "git@github.com:pikasTech/HWLAB.git", + "HWLAB_BOOT_COMMIT": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "HWLAB_BOOT_SH": "deploy/runtime/boot/hwlab-cloud-api.sh", + "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-cloud-api-env:env-5ff41b539190", + "HWLAB_ENVIRONMENT_DIGEST": "sha256:c317276bb0d002bc82cb8d3cde6d5e596db18325585436d9f3592ebd173eb01d" + } + }, + "dockerfileHash": "125399a6ce5b8c39d98042f89b270f219505cd1f02d80393fa30ebc143dcf406", + "baseImageReference": "127.0.0.1:5000/hwlab/hwlab-node20-base:20-bookworm-slim", + "baseImageDigest": null, + "buildArgsHash": "445d32282d642d5089290ffe5f621ccea3206cf1d9f11b24091f82a4434cbcd5", + "ciAffected": true, + "ciReason": [ + "environment-input-mismatch", + "code-input-changed", + "component-path-changed", + "runtime-deps-changed" + ], + "reuse": { + "status": "not-reused", + "reason": "environment-affected" + }, + "reusedFrom": null + }, + { + "serviceId": "hwlab-workbench-runtime", + "commitId": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "sourceCommitId": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "image": "127.0.0.1:5000/hwlab/hwlab-workbench-runtime-env:env-2cf8ee7ed635", + "imageTag": "env-2cf8ee7ed635", + "digest": "sha256:c9d030b753ead3b66183a9e72e51c97627e253796ec7ef44480a930af621fb3d", + "publishState": "published", + "profile": "v03", + "namespace": "hwlab-v03", + "healthPath": "/health/live", + "sourceState": "source-present", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "notPublishedReason": null, + "buildCreatedAt": "2026-06-29T05:52:28.561Z", + "buildSource": "git-mirror-http.devops-infra.svc.cluster.local:8080/pikasTech/HWLAB@env:2cf8ee7ed635a31a8c16f5aa35c28d6cfbf1234d32176f2e6e8d40b1cceefb5d", + "buildBackend": "buildkit-env-reuse", + "componentCommitId": "fc7fc23f4e19c8fef317e0ed7321bb0afe86aae9", + "componentInputHash": "ad805e28689b176dcfba8939fe27971b3d0b654010c1fbee8ad95ae121cb92c6", + "runtimeMode": "env-reuse-git-mirror-checkout", + "envReuse": true, + "envChanged": true, + "codeChanged": true, + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-workbench-runtime-env:env-2cf8ee7ed635", + "environmentDigest": "sha256:c9d030b753ead3b66183a9e72e51c97627e253796ec7ef44480a930af621fb3d", + "environmentInputHash": "2cf8ee7ed635a31a8c16f5aa35c28d6cfbf1234d32176f2e6e8d40b1cceefb5d", + "codeInputHash": "5ac3e165aaf2b87a5138c404870feba94da8f7269e566dfa89a180b71d5ff7cb", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "bootSh": "deploy/runtime/boot/hwlab-workbench-runtime.sh", + "bootEnvEvidence": { + "runtimeMode": "env-reuse-git-mirror-checkout", + "environmentDigest": "sha256:c9d030b753ead3b66183a9e72e51c97627e253796ec7ef44480a930af621fb3d", + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-workbench-runtime-env:env-2cf8ee7ed635", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "bootSh": "deploy/runtime/boot/hwlab-workbench-runtime.sh", + "env": { + "HWLAB_BOOT_REPO": "git@github.com:pikasTech/HWLAB.git", + "HWLAB_BOOT_COMMIT": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "HWLAB_BOOT_SH": "deploy/runtime/boot/hwlab-workbench-runtime.sh", + "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-workbench-runtime-env:env-2cf8ee7ed635", + "HWLAB_ENVIRONMENT_DIGEST": "sha256:c9d030b753ead3b66183a9e72e51c97627e253796ec7ef44480a930af621fb3d" + } + }, + "dockerfileHash": "266549474c79a3130e2c5fb5f6e596e74d72828cfd4115954154030e0dd576c9", + "baseImageReference": "127.0.0.1:5000/hwlab/hwlab-node20-base:20-bookworm-slim", + "baseImageDigest": null, + "buildArgsHash": "4269b9316d150facffb495f7c4900ee56af391c071b86063ae850defa7e64e99", + "ciAffected": true, + "ciReason": [ + "environment-input-mismatch", + "code-input-changed", + "runtime-deps-changed" + ], + "reuse": { + "status": "not-reused", + "reason": "environment-affected" + }, + "reusedFrom": null + }, + { + "serviceId": "hwlab-user-billing", + "commitId": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "sourceCommitId": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "image": "127.0.0.1:5000/hwlab/hwlab-user-billing-env:env-2cf8ee7ed635", + "imageTag": "env-2cf8ee7ed635", + "digest": "sha256:0b0030ee57a8a603af6e7cc2673b4cd9dce52d9117b571b7f0dc5b39724ce7e3", + "publishState": "published", + "profile": "v03", + "namespace": "hwlab-v03", + "healthPath": "/health/live", + "sourceState": "source-present", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "notPublishedReason": null, + "buildCreatedAt": "2026-06-29T05:52:28.404Z", + "buildSource": "git-mirror-http.devops-infra.svc.cluster.local:8080/pikasTech/HWLAB@env:2cf8ee7ed635a31a8c16f5aa35c28d6cfbf1234d32176f2e6e8d40b1cceefb5d", + "buildBackend": "buildkit-env-reuse", + "componentCommitId": "fc7fc23f4e19c8fef317e0ed7321bb0afe86aae9", + "componentInputHash": "f67a9ba5dd0855070f521b147716bdfb7c9b2322eed48a1212bf607f32c38adf", + "runtimeMode": "env-reuse-git-mirror-checkout", + "envReuse": true, + "envChanged": true, + "codeChanged": true, + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-user-billing-env:env-2cf8ee7ed635", + "environmentDigest": "sha256:0b0030ee57a8a603af6e7cc2673b4cd9dce52d9117b571b7f0dc5b39724ce7e3", + "environmentInputHash": "2cf8ee7ed635a31a8c16f5aa35c28d6cfbf1234d32176f2e6e8d40b1cceefb5d", + "codeInputHash": "1c7f8090dc17d9a7dfc7cdd0714e7294bb231db899c396b388e4ab3642e5134e", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "bootSh": "deploy/runtime/boot/hwlab-user-billing.sh", + "bootEnvEvidence": { + "runtimeMode": "env-reuse-git-mirror-checkout", + "environmentDigest": "sha256:0b0030ee57a8a603af6e7cc2673b4cd9dce52d9117b571b7f0dc5b39724ce7e3", + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-user-billing-env:env-2cf8ee7ed635", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "bootSh": "deploy/runtime/boot/hwlab-user-billing.sh", + "env": { + "HWLAB_BOOT_REPO": "git@github.com:pikasTech/HWLAB.git", + "HWLAB_BOOT_COMMIT": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "HWLAB_BOOT_SH": "deploy/runtime/boot/hwlab-user-billing.sh", + "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-user-billing-env:env-2cf8ee7ed635", + "HWLAB_ENVIRONMENT_DIGEST": "sha256:0b0030ee57a8a603af6e7cc2673b4cd9dce52d9117b571b7f0dc5b39724ce7e3" + } + }, + "dockerfileHash": "266549474c79a3130e2c5fb5f6e596e74d72828cfd4115954154030e0dd576c9", + "baseImageReference": "127.0.0.1:5000/hwlab/hwlab-node20-base:20-bookworm-slim", + "baseImageDigest": null, + "buildArgsHash": "490a070de1a6975b4935670478f0e64345d20e1aa9b80096b1318106b25d9310", + "ciAffected": true, + "ciReason": [ + "environment-input-mismatch", + "code-input-changed", + "runtime-deps-changed" + ], + "reuse": { + "status": "not-reused", + "reason": "environment-affected" + }, + "reusedFrom": null + }, + { + "serviceId": "hwlab-project-management", + "commitId": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "sourceCommitId": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "image": "127.0.0.1:5000/hwlab/hwlab-project-management-env:env-5ff41b539190", + "imageTag": "env-5ff41b539190", + "digest": "sha256:0c32f970d12f8f78d27df3fd0ed06a4adbf9cb476fbb1c933b8626d638dd7112", + "publishState": "published", + "profile": "v03", + "namespace": "hwlab-v03", + "healthPath": "/health/live", + "sourceState": "source-present", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "notPublishedReason": null, + "buildCreatedAt": "2026-06-29T05:52:28.711Z", + "buildSource": "git-mirror-http.devops-infra.svc.cluster.local:8080/pikasTech/HWLAB@env:5ff41b539190849e76511ed722a4539f5921622e98eea1444b606475f8ef55aa", + "buildBackend": "buildkit-env-reuse", + "componentCommitId": "fc7fc23f4e19c8fef317e0ed7321bb0afe86aae9", + "componentInputHash": "cc160fdc92f0fe2786b2f12a9dc29994d393eb16b908a1e5e182cc67ad5b0758", + "runtimeMode": "env-reuse-git-mirror-checkout", + "envReuse": true, + "envChanged": true, + "codeChanged": true, + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-project-management-env:env-5ff41b539190", + "environmentDigest": "sha256:0c32f970d12f8f78d27df3fd0ed06a4adbf9cb476fbb1c933b8626d638dd7112", + "environmentInputHash": "5ff41b539190849e76511ed722a4539f5921622e98eea1444b606475f8ef55aa", + "codeInputHash": "c194b49c2cb463467e6f661bde2bfa984fd44731c6b280eae9a28b0174ea0207", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "bootSh": "deploy/runtime/boot/hwlab-project-management.sh", + "bootEnvEvidence": { + "runtimeMode": "env-reuse-git-mirror-checkout", + "environmentDigest": "sha256:0c32f970d12f8f78d27df3fd0ed06a4adbf9cb476fbb1c933b8626d638dd7112", + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-project-management-env:env-5ff41b539190", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "bootSh": "deploy/runtime/boot/hwlab-project-management.sh", + "env": { + "HWLAB_BOOT_REPO": "git@github.com:pikasTech/HWLAB.git", + "HWLAB_BOOT_COMMIT": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "HWLAB_BOOT_SH": "deploy/runtime/boot/hwlab-project-management.sh", + "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-project-management-env:env-5ff41b539190", + "HWLAB_ENVIRONMENT_DIGEST": "sha256:0c32f970d12f8f78d27df3fd0ed06a4adbf9cb476fbb1c933b8626d638dd7112" + } + }, + "dockerfileHash": "125399a6ce5b8c39d98042f89b270f219505cd1f02d80393fa30ebc143dcf406", + "baseImageReference": "127.0.0.1:5000/hwlab/hwlab-node20-base:20-bookworm-slim", + "baseImageDigest": null, + "buildArgsHash": "30d9f35c4d70555725db1ef7a591b9af9cb158e82d924d3c6dc82326fbeffbd4", + "ciAffected": true, + "ciReason": [ + "environment-input-mismatch", + "code-input-changed", + "runtime-deps-changed" + ], + "reuse": { + "status": "not-reused", + "reason": "environment-affected" + }, + "reusedFrom": null + }, + { + "serviceId": "hwlab-cloud-web", + "commitId": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "sourceCommitId": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "image": "127.0.0.1:5000/hwlab/hwlab-cloud-web-env:env-5ff41b539190", + "imageTag": "env-5ff41b539190", + "digest": "sha256:3236077bdfde794202d1205cddbdb69c78a721b5b83f7221cfad9993185c5728", + "publishState": "published", + "profile": "v03", + "namespace": "hwlab-v03", + "healthPath": "/health/live", + "sourceState": "source-present", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "notPublishedReason": null, + "buildCreatedAt": "2026-06-29T05:52:26.537Z", + "buildSource": "git-mirror-http.devops-infra.svc.cluster.local:8080/pikasTech/HWLAB@env:5ff41b539190849e76511ed722a4539f5921622e98eea1444b606475f8ef55aa", + "buildBackend": "buildkit-env-reuse", + "componentCommitId": "fc7fc23f4e19c8fef317e0ed7321bb0afe86aae9", + "componentInputHash": "482385eaafd056643f1d41717e585b3deabeabe53e73f4dc0ec634315a0afe1e", + "runtimeMode": "env-reuse-git-mirror-checkout", + "envReuse": true, + "envChanged": true, + "codeChanged": true, + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-cloud-web-env:env-5ff41b539190", + "environmentDigest": "sha256:3236077bdfde794202d1205cddbdb69c78a721b5b83f7221cfad9993185c5728", + "environmentInputHash": "5ff41b539190849e76511ed722a4539f5921622e98eea1444b606475f8ef55aa", + "codeInputHash": "2f419dca5d5d7105222c1b087797b7369d6fc93207cd2c87c2eee18d75349e45", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "bootSh": "deploy/runtime/boot/hwlab-cloud-web.sh", + "bootEnvEvidence": { + "runtimeMode": "env-reuse-git-mirror-checkout", + "environmentDigest": "sha256:3236077bdfde794202d1205cddbdb69c78a721b5b83f7221cfad9993185c5728", + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-cloud-web-env:env-5ff41b539190", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "bootSh": "deploy/runtime/boot/hwlab-cloud-web.sh", + "env": { + "HWLAB_BOOT_REPO": "git@github.com:pikasTech/HWLAB.git", + "HWLAB_BOOT_COMMIT": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "HWLAB_BOOT_SH": "deploy/runtime/boot/hwlab-cloud-web.sh", + "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-cloud-web-env:env-5ff41b539190", + "HWLAB_ENVIRONMENT_DIGEST": "sha256:3236077bdfde794202d1205cddbdb69c78a721b5b83f7221cfad9993185c5728" + } + }, + "dockerfileHash": "125399a6ce5b8c39d98042f89b270f219505cd1f02d80393fa30ebc143dcf406", + "baseImageReference": "127.0.0.1:5000/hwlab/hwlab-node20-base:20-bookworm-slim", + "baseImageDigest": null, + "buildArgsHash": "39effb18af665e5e286cca9f84ef2a30f577ad11c9acca098589b7ee37f6950c", + "ciAffected": true, + "ciReason": [ + "environment-input-mismatch", + "code-input-changed", + "runtime-deps-changed" + ], + "reuse": { + "status": "not-reused", + "reason": "environment-affected" + }, + "reusedFrom": null + }, + { + "serviceId": "hwlab-gateway", + "commitId": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "sourceCommitId": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "image": "127.0.0.1:5000/hwlab/hwlab-gateway-env:env-5ff41b539190", + "imageTag": "env-5ff41b539190", + "digest": "sha256:bfa144b3183fca784c2107c072744af959b352026d3841c8868db5cfd7a961a1", + "publishState": "published", + "profile": "v03", + "namespace": "hwlab-v03", + "healthPath": "/health/live", + "sourceState": "source-present", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "notPublishedReason": null, + "buildCreatedAt": "2026-06-29T05:52:26.369Z", + "buildSource": "git-mirror-http.devops-infra.svc.cluster.local:8080/pikasTech/HWLAB@env:5ff41b539190849e76511ed722a4539f5921622e98eea1444b606475f8ef55aa", + "buildBackend": "buildkit-env-reuse", + "componentCommitId": "fc7fc23f4e19c8fef317e0ed7321bb0afe86aae9", + "componentInputHash": "6fe14bdceb6d64eb1b066bf5a4120b0b5a39bdc65c42203f95d282db853eb097", + "runtimeMode": "env-reuse-git-mirror-checkout", + "envReuse": true, + "envChanged": true, + "codeChanged": true, + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-gateway-env:env-5ff41b539190", + "environmentDigest": "sha256:bfa144b3183fca784c2107c072744af959b352026d3841c8868db5cfd7a961a1", + "environmentInputHash": "5ff41b539190849e76511ed722a4539f5921622e98eea1444b606475f8ef55aa", + "codeInputHash": "9693556c71091e3e85d61efc6ef7d62e1064fba145ec83b3b9c196477f0b2870", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "bootSh": "deploy/runtime/boot/hwlab-gateway.sh", + "bootEnvEvidence": { + "runtimeMode": "env-reuse-git-mirror-checkout", + "environmentDigest": "sha256:bfa144b3183fca784c2107c072744af959b352026d3841c8868db5cfd7a961a1", + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-gateway-env:env-5ff41b539190", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "bootSh": "deploy/runtime/boot/hwlab-gateway.sh", + "env": { + "HWLAB_BOOT_REPO": "git@github.com:pikasTech/HWLAB.git", + "HWLAB_BOOT_COMMIT": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "HWLAB_BOOT_SH": "deploy/runtime/boot/hwlab-gateway.sh", + "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-gateway-env:env-5ff41b539190", + "HWLAB_ENVIRONMENT_DIGEST": "sha256:bfa144b3183fca784c2107c072744af959b352026d3841c8868db5cfd7a961a1" + } + }, + "dockerfileHash": "125399a6ce5b8c39d98042f89b270f219505cd1f02d80393fa30ebc143dcf406", + "baseImageReference": "127.0.0.1:5000/hwlab/hwlab-node20-base:20-bookworm-slim", + "baseImageDigest": null, + "buildArgsHash": "3fed509f00ba3448138a999f51dad3d38b822bb4a5c152011e3e57526972fd41", + "ciAffected": true, + "ciReason": [ + "environment-input-mismatch", + "code-input-changed", + "runtime-deps-changed" + ], + "reuse": { + "status": "not-reused", + "reason": "environment-affected" + }, + "reusedFrom": null + }, + { + "serviceId": "hwlab-edge-proxy", + "commitId": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "sourceCommitId": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy-env:env-5ff41b539190", + "imageTag": "env-5ff41b539190", + "digest": "sha256:4f9e5d4a4d8b4c714a9d7127f9c15ce770640c84f8f5a1dde5e1727f53766165", + "publishState": "published", + "profile": "v03", + "namespace": "hwlab-v03", + "healthPath": "/health/live", + "sourceState": "source-present", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "notPublishedReason": null, + "buildCreatedAt": "2026-06-29T05:52:26.704Z", + "buildSource": "git-mirror-http.devops-infra.svc.cluster.local:8080/pikasTech/HWLAB@env:5ff41b539190849e76511ed722a4539f5921622e98eea1444b606475f8ef55aa", + "buildBackend": "buildkit-env-reuse", + "componentCommitId": "fc7fc23f4e19c8fef317e0ed7321bb0afe86aae9", + "componentInputHash": "a2dbe0c29261cfa217e7a95b5124178b349c93c56e4193ce7d981fca372f2f93", + "runtimeMode": "env-reuse-git-mirror-checkout", + "envReuse": true, + "envChanged": true, + "codeChanged": true, + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-edge-proxy-env:env-5ff41b539190", + "environmentDigest": "sha256:4f9e5d4a4d8b4c714a9d7127f9c15ce770640c84f8f5a1dde5e1727f53766165", + "environmentInputHash": "5ff41b539190849e76511ed722a4539f5921622e98eea1444b606475f8ef55aa", + "codeInputHash": "c97d19939c872e128a6931bdf73f28a75a684948a76a2b1af37508dd47481544", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "bootSh": "deploy/runtime/boot/hwlab-edge-proxy.sh", + "bootEnvEvidence": { + "runtimeMode": "env-reuse-git-mirror-checkout", + "environmentDigest": "sha256:4f9e5d4a4d8b4c714a9d7127f9c15ce770640c84f8f5a1dde5e1727f53766165", + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-edge-proxy-env:env-5ff41b539190", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "bootSh": "deploy/runtime/boot/hwlab-edge-proxy.sh", + "env": { + "HWLAB_BOOT_REPO": "git@github.com:pikasTech/HWLAB.git", + "HWLAB_BOOT_COMMIT": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "HWLAB_BOOT_SH": "deploy/runtime/boot/hwlab-edge-proxy.sh", + "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-edge-proxy-env:env-5ff41b539190", + "HWLAB_ENVIRONMENT_DIGEST": "sha256:4f9e5d4a4d8b4c714a9d7127f9c15ce770640c84f8f5a1dde5e1727f53766165" + } + }, + "dockerfileHash": "125399a6ce5b8c39d98042f89b270f219505cd1f02d80393fa30ebc143dcf406", + "baseImageReference": "127.0.0.1:5000/hwlab/hwlab-node20-base:20-bookworm-slim", + "baseImageDigest": null, + "buildArgsHash": "68746696603227763e5768f8daf45d31331f4c8425e6d756b21482ad104e6183", + "ciAffected": true, + "ciReason": [ + "environment-input-mismatch", + "code-input-changed", + "runtime-deps-changed" + ], + "reuse": { + "status": "not-reused", + "reason": "environment-affected" + }, + "reusedFrom": null + }, + { + "serviceId": "hwlab-agent-skills", + "commitId": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "sourceCommitId": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "image": "127.0.0.1:5000/hwlab/hwlab-agent-skills-env:env-5ff41b539190", + "imageTag": "env-5ff41b539190", + "digest": "sha256:4b1d08b3afc4b4001d3a95b293ce99d1f94093ef6d0958f44658f5b5bfd16ca8", + "publishState": "published", + "profile": "v03", + "namespace": "hwlab-v03", + "healthPath": "/health/live", + "sourceState": "source-present", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "notPublishedReason": null, + "buildCreatedAt": "2026-06-29T05:52:28.468Z", + "buildSource": "git-mirror-http.devops-infra.svc.cluster.local:8080/pikasTech/HWLAB@env:5ff41b539190849e76511ed722a4539f5921622e98eea1444b606475f8ef55aa", + "buildBackend": "buildkit-env-reuse", + "componentCommitId": "fc7fc23f4e19c8fef317e0ed7321bb0afe86aae9", + "componentInputHash": "0d72a0be1884028f54957ddd45db2d5b83bf7a15feff2ad2d8a6fecddcc8302f", + "runtimeMode": "env-reuse-git-mirror-checkout", + "envReuse": true, + "envChanged": true, + "codeChanged": true, + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-agent-skills-env:env-5ff41b539190", + "environmentDigest": "sha256:4b1d08b3afc4b4001d3a95b293ce99d1f94093ef6d0958f44658f5b5bfd16ca8", + "environmentInputHash": "5ff41b539190849e76511ed722a4539f5921622e98eea1444b606475f8ef55aa", + "codeInputHash": "369ca524ae4010fb5d9adfd30b4290808a035804b4674755bc193fee743f3d5a", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "bootSh": "deploy/runtime/boot/hwlab-agent-skills.sh", + "bootEnvEvidence": { + "runtimeMode": "env-reuse-git-mirror-checkout", + "environmentDigest": "sha256:4b1d08b3afc4b4001d3a95b293ce99d1f94093ef6d0958f44658f5b5bfd16ca8", + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-agent-skills-env:env-5ff41b539190", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "bootSh": "deploy/runtime/boot/hwlab-agent-skills.sh", + "env": { + "HWLAB_BOOT_REPO": "git@github.com:pikasTech/HWLAB.git", + "HWLAB_BOOT_COMMIT": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "HWLAB_BOOT_SH": "deploy/runtime/boot/hwlab-agent-skills.sh", + "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-agent-skills-env:env-5ff41b539190", + "HWLAB_ENVIRONMENT_DIGEST": "sha256:4b1d08b3afc4b4001d3a95b293ce99d1f94093ef6d0958f44658f5b5bfd16ca8" + } + }, + "dockerfileHash": "125399a6ce5b8c39d98042f89b270f219505cd1f02d80393fa30ebc143dcf406", + "baseImageReference": "127.0.0.1:5000/hwlab/hwlab-node20-base:20-bookworm-slim", + "baseImageDigest": null, + "buildArgsHash": "d5e50a18e70c6a8b4896e527fa07b5dd2c85458ed9ef512c1d46775ef4e40a10", + "ciAffected": true, + "ciReason": [ + "environment-input-mismatch", + "code-input-changed", + "runtime-deps-changed" + ], + "reuse": { + "status": "not-reused", + "reason": "environment-affected" + }, + "reusedFrom": null + } + ], + "serviceInventory": { + "version": "v2", + "serviceCount": 8, + "requiredServiceCount": 8, + "disabledServiceCount": 0, + "requiredServiceIds": [ + "hwlab-cloud-api", + "hwlab-workbench-runtime", + "hwlab-user-billing", + "hwlab-project-management", + "hwlab-cloud-web", + "hwlab-gateway", + "hwlab-edge-proxy", + "hwlab-agent-skills" + ], + "disabledServiceIds": [], + "services": [ + { + "serviceId": "hwlab-cloud-api", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "runtimeKind": "bun-command", + "implementationState": "repo-entrypoint", + "sourceState": "source-present", + "entrypoint": "cmd/hwlab-cloud-api/main.ts", + "disabledReason": null + }, + { + "serviceId": "hwlab-workbench-runtime", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "runtimeKind": "go-service", + "implementationState": "repo-entrypoint", + "sourceState": "source-present", + "entrypoint": "cmd/hwlab-workbench-runtime/main.go", + "disabledReason": null + }, + { + "serviceId": "hwlab-user-billing", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "runtimeKind": "go-service", + "implementationState": "repo-entrypoint", + "sourceState": "source-present", + "entrypoint": "cmd/hwlab-user-billing/main.go", + "disabledReason": null + }, + { + "serviceId": "hwlab-project-management", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "runtimeKind": "bun-command", + "implementationState": "repo-entrypoint", + "sourceState": "source-present", + "entrypoint": "cmd/hwlab-project-management/main.ts", + "disabledReason": null + }, + { + "serviceId": "hwlab-cloud-web", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "runtimeKind": "cloud-web", + "implementationState": "static-web-wrapper", + "sourceState": "source-present", + "entrypoint": "web/hwlab-cloud-web/index.html", + "disabledReason": null + }, + { + "serviceId": "hwlab-gateway", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "runtimeKind": "bun-command", + "implementationState": "repo-entrypoint", + "sourceState": "source-present", + "entrypoint": "cmd/hwlab-gateway/main.ts", + "disabledReason": null + }, + { + "serviceId": "hwlab-edge-proxy", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "runtimeKind": "node-command", + "implementationState": "repo-entrypoint", + "sourceState": "source-present", + "entrypoint": "cmd/hwlab-edge-proxy/main.mjs", + "disabledReason": null + }, + { + "serviceId": "hwlab-agent-skills", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "runtimeKind": "skills-bundle", + "implementationState": "repo-bundle", + "sourceState": "source-present", + "entrypoint": "skills/hwlab-agent-runtime/SKILL.md", + "disabledReason": null + } + ] + } +} diff --git a/deploy/gitops/node/jd01/runtime-v03/configmaps.yaml b/deploy/gitops/node/jd01/runtime-v03/configmaps.yaml new file mode 100644 index 00000000..e8677103 --- /dev/null +++ b/deploy/gitops/node/jd01/runtime-v03/configmaps.yaml @@ -0,0 +1,53 @@ +{ + "apiVersion": "v1", + "kind": "List", + "items": [ + { + "apiVersion": "v1", + "kind": "ConfigMap", + "metadata": { + "name": "hwlab-v03-hwpod-preinstalled-specs", + "namespace": "hwlab-v03", + "labels": { + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/source-commit": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/config-kind": "hwpod-preinstalled-specs" + }, + "annotations": { + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", + "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\nkind: Hwpod\nmetadata:\n uid: CONSTART-71FREQ-C\n name: constart-71freq-c\nspec:\n targetDevice:\n board: ConStart 71-FREQ Controller\n mcu: STM32H723ZGTx\n flashBase: \"0x08000000\"\n workspace:\n path: \"F:\\\\Work\\\\ConStart\"\n toolchain: keil-mdk\n projectRoot: projects/71-00075-11\n keilProject: projects/71-00075-11/FirmWare/MDK-ARM/FREQ_Controller_FW.uvprojx\n keilTarget: FREQ_Controller_FW\n hexPath: projects/71-00075-11/FirmWare/MDK-ARM/FREQ_Controller_FW/FREQ_Controller_FW.hex\n mapPath: projects/71-00075-11/FirmWare/MDK-ARM/FREQ_Controller_FW/FREQ_Controller_FW.map\n keilCliPath: \"C:\\\\Users\\\\liang\\\\.agents\\\\skills\\\\keil\\\\keil-cli.py\"\n debugProbe:\n type: cmsis-dap\n adapter: keil\n probeUid: 3FD750C63E342E24\n probeName: MicroLink CMSIS-DAP\n programBackend: keil-headless\n autoBindUvoptx: true\n ioProbe:\n uart:\n id: uart/1\n port: COM4\n baudrate: 921600\n nodeBinding:\n nodeId: node-d601-f103-v2\n nodeType: pc-host", + "constart-71freq-c.meta.json": "{\n \"contractVersion\": \"hwpod-spec-registry-v1\",\n \"source\": {\n \"kind\": \"preinstalled-yaml-first-spec\",\n \"workspaceRoot\": \"F:\\\\Work\\\\ConStart\",\n \"projectRoot\": \"projects/71-00075-11\",\n \"verificationIssue\": \"pikasTech/HWLAB#2183\",\n \"verifiedAt\": \"2026-06-26\"\n }\n}" + } + }, + { + "apiVersion": "v1", + "kind": "ConfigMap", + "metadata": { + "name": "hwlab-v03-project-management-bootstrap", + "namespace": "hwlab-v03", + "labels": { + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/source-commit": "1c448bc4b9fac145059b6ceffcb6c52e542aba13", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/config-kind": "project-management-bootstrap-sources" + }, + "annotations": { + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", + "hwlab.pikastech.local/source-ref": "config/hwlab-project-management/constart-71freq-mdtodo.yaml#projectManagement.sources[0]", + "hwlab.pikastech.local/verification-issue": "pikasTech/HWLAB#2183" + } + }, + "data": { + "sources.json": "[\n {\n \"sourceId\": \"constart-71freq-mdtodo\",\n \"sourceKind\": \"hwpod-workspace\",\n \"displayName\": \"71-FREQ MDTODO\",\n \"projectId\": \"project_constart_71freq\",\n \"hwpodId\": \"constart-71freq-c\",\n \"nodeId\": \"node-d601-f103-v2\",\n \"workspaceRootRef\": \"F:\\\\Work\\\\ConStart\",\n \"mdtodoRootRef\": \"docs/MDTODO\",\n \"maxFiles\": 300,\n \"capabilities\": [\"probe\", \"list\", \"read\", \"write\", \"reindex\"]\n }\n]" + } + } + ] +} diff --git a/deploy/gitops/node/jd01/runtime-v03/deepseek-proxy.yaml b/deploy/gitops/node/jd01/runtime-v03/deepseek-proxy.yaml new file mode 100644 index 00000000..51dc773c --- /dev/null +++ b/deploy/gitops/node/jd01/runtime-v03/deepseek-proxy.yaml @@ -0,0 +1,327 @@ +apiVersion: v1 +kind: List +items: + - apiVersion: v1 + kind: ConfigMap + metadata: + name: hwlab-deepseek-proxy-config + namespace: hwlab-v03 + labels: + app.kubernetes.io/name: hwlab-deepseek-proxy + app.kubernetes.io/part-of: hwlab + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/gitops-target: v03 + hwlab.pikastech.local/service-id: hwlab-deepseek-proxy + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/monitoring: disabled + data: + render-config.sh: > + #!/bin/sh + + if [ -z "${DEEPSEEK_API_KEY:-}" ] && [ -z "${OPENCODE_API_KEY:-}" ]; + then + echo "at least one of DEEPSEEK_API_KEY or OPENCODE_API_KEY is required" >&2 + exit 1 + fi + + cat > /config/config.yml < + -- SPEC: PJ2026-0104010803 Workbench唯一投影 + draft-2026-06-24-p0-aggregate-event-stream. + + -- HWLAB L1 Cloud Core schema skeleton. + + -- This file is source schema only; applying it to DEV/PROD is a + separate + + -- operator action and is not performed by source tests or smokes. + + + CREATE TABLE IF NOT EXISTS projects ( + id TEXT PRIMARY KEY, + name TEXT NOT NULL DEFAULT '', + status TEXT NOT NULL DEFAULT 'pending', + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL + ); + + + CREATE TABLE IF NOT EXISTS users ( + id TEXT PRIMARY KEY, + username TEXT NOT NULL UNIQUE, + display_name TEXT NOT NULL DEFAULT '', + role TEXT NOT NULL CHECK (role IN ('admin', 'user')), + status TEXT NOT NULL DEFAULT 'active' CHECK (status IN ('active', 'disabled')), + password_hash TEXT, + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL + ); + + + CREATE TABLE IF NOT EXISTS user_sessions ( + id TEXT PRIMARY KEY, + user_id TEXT NOT NULL REFERENCES users(id), + session_token_hash TEXT NOT NULL UNIQUE, + created_at TEXT NOT NULL, + last_seen_at TEXT NOT NULL, + expires_at TEXT NOT NULL, + revoked_at TEXT + ); + + + CREATE TABLE IF NOT EXISTS gateway_sessions ( + id TEXT PRIMARY KEY, + project_id TEXT, + gateway_service_id TEXT NOT NULL, + status TEXT NOT NULL DEFAULT 'pending', + started_at TEXT, + ended_at TEXT, + gateway_session_json TEXT NOT NULL DEFAULT '{}' + ); + + + CREATE TABLE IF NOT EXISTS box_resources ( + id TEXT PRIMARY KEY, + project_id TEXT, + gateway_session_id TEXT, + resource_state TEXT NOT NULL DEFAULT 'available', + labels_json TEXT NOT NULL DEFAULT '{}', + resource_json TEXT NOT NULL DEFAULT '{}', + updated_at TEXT NOT NULL + ); + + + CREATE TABLE IF NOT EXISTS box_capabilities ( + id TEXT PRIMARY KEY, + box_resource_id TEXT NOT NULL, + capability_type TEXT NOT NULL, + capability_json TEXT NOT NULL DEFAULT '{}', + updated_at TEXT NOT NULL + ); + + + CREATE TABLE IF NOT EXISTS wiring_configs ( + id TEXT PRIMARY KEY, + project_id TEXT, + wiring_json TEXT NOT NULL DEFAULT '{}', + status TEXT NOT NULL DEFAULT 'pending', + updated_at TEXT NOT NULL + ); + + + CREATE TABLE IF NOT EXISTS patch_panel_status ( + id TEXT PRIMARY KEY, + gateway_session_id TEXT, + wiring_config_id TEXT, + status_json TEXT NOT NULL DEFAULT '{}', + updated_at TEXT NOT NULL + ); + + + CREATE TABLE IF NOT EXISTS hardware_operations ( + id TEXT PRIMARY KEY, + project_id TEXT, + requested_by TEXT, + operation_type TEXT NOT NULL, + operation_json TEXT NOT NULL DEFAULT '{}', + status TEXT NOT NULL DEFAULT 'requested', + requested_at TEXT NOT NULL, + updated_at TEXT NOT NULL + ); + + + CREATE TABLE IF NOT EXISTS audit_events ( + id TEXT PRIMARY KEY, + request_id TEXT NOT NULL, + actor TEXT NOT NULL, + source TEXT NOT NULL, + operation TEXT NOT NULL, + target TEXT NOT NULL, + result TEXT NOT NULL, + timestamp TEXT NOT NULL, + event_json TEXT NOT NULL DEFAULT '{}' + ); + + + CREATE TABLE IF NOT EXISTS agent_sessions ( + id TEXT PRIMARY KEY, + project_id TEXT, + agent_id TEXT NOT NULL, + status TEXT NOT NULL DEFAULT 'pending', + started_at TEXT, + ended_at TEXT, + owner_user_id TEXT REFERENCES users(id), + conversation_id TEXT, + thread_id TEXT, + last_trace_id TEXT, + session_json TEXT NOT NULL DEFAULT '{}', + updated_at TEXT + ); + + + ALTER TABLE agent_sessions ADD COLUMN IF NOT EXISTS owner_user_id TEXT + REFERENCES users(id); + + ALTER TABLE agent_sessions ADD COLUMN IF NOT EXISTS conversation_id + TEXT; + + ALTER TABLE agent_sessions ADD COLUMN IF NOT EXISTS thread_id TEXT; + + ALTER TABLE agent_sessions ADD COLUMN IF NOT EXISTS last_trace_id TEXT; + + ALTER TABLE agent_sessions ADD COLUMN IF NOT EXISTS session_json TEXT + NOT NULL DEFAULT '{}'; + + ALTER TABLE agent_sessions ADD COLUMN IF NOT EXISTS updated_at TEXT; + + CREATE INDEX IF NOT EXISTS idx_agent_sessions_owner ON + agent_sessions(owner_user_id); + + CREATE INDEX IF NOT EXISTS idx_agent_sessions_conversation ON + agent_sessions(conversation_id); + + CREATE INDEX IF NOT EXISTS idx_agent_sessions_active_updated ON + agent_sessions(updated_at DESC, id DESC) WHERE status <> 'archived'; + + CREATE INDEX IF NOT EXISTS idx_agent_sessions_owner_active_updated ON + agent_sessions(owner_user_id, updated_at DESC, id DESC) WHERE status <> + 'archived'; + + + CREATE TABLE IF NOT EXISTS account_workspaces ( + id TEXT PRIMARY KEY, + owner_user_id TEXT NOT NULL REFERENCES users(id), + project_id TEXT NOT NULL, + name TEXT NOT NULL DEFAULT 'Default Workbench', + status TEXT NOT NULL DEFAULT 'active' CHECK (status IN ('active', 'archived')), + is_default BOOLEAN NOT NULL DEFAULT true, + selected_conversation_id TEXT, + selected_agent_session_id TEXT, + active_trace_id TEXT, + provider_profile TEXT, + workspace_json TEXT NOT NULL DEFAULT '{}', + revision INTEGER NOT NULL DEFAULT 1, + updated_by_session_id TEXT, + updated_by_client TEXT, + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL + ); + + CREATE UNIQUE INDEX IF NOT EXISTS idx_account_workspaces_default ON + account_workspaces(owner_user_id, project_id) WHERE is_default = TRUE + AND status = 'active'; + + CREATE INDEX IF NOT EXISTS idx_account_workspaces_owner ON + account_workspaces(owner_user_id, project_id, updated_at DESC); + + + CREATE TABLE IF NOT EXISTS worker_sessions ( + id TEXT PRIMARY KEY, + agent_session_id TEXT, + worker_id TEXT NOT NULL, + status TEXT NOT NULL DEFAULT 'pending', + started_at TEXT, + ended_at TEXT + ); + + + CREATE TABLE IF NOT EXISTS agent_trace_events ( + id TEXT PRIMARY KEY, + trace_id TEXT NOT NULL, + agent_session_id TEXT, + worker_session_id TEXT, + level TEXT NOT NULL DEFAULT 'info', + message TEXT NOT NULL DEFAULT '', + event_json TEXT NOT NULL DEFAULT '{}', + occurred_at TEXT NOT NULL + ); + + CREATE INDEX IF NOT EXISTS idx_agent_trace_events_trace_order ON + agent_trace_events(trace_id, occurred_at, id); + + CREATE INDEX IF NOT EXISTS idx_agent_trace_events_session_order ON + agent_trace_events(agent_session_id, occurred_at, id); + + CREATE INDEX IF NOT EXISTS idx_agent_trace_events_worker_order ON + agent_trace_events(worker_session_id, occurred_at, id); + + + CREATE TABLE IF NOT EXISTS workbench_projection_state ( + trace_id TEXT PRIMARY KEY, + session_id TEXT, + conversation_id TEXT, + thread_id TEXT, + run_id TEXT NOT NULL, + command_id TEXT NOT NULL, + last_agentrun_seq INTEGER NOT NULL DEFAULT 0, + last_projected_seq INTEGER NOT NULL DEFAULT 0, + upstream_latest_seq INTEGER, + projection_status TEXT NOT NULL DEFAULT 'projecting', + projection_health TEXT NOT NULL DEFAULT 'healthy', + result_sync_state TEXT NOT NULL DEFAULT 'not_started', + last_projected_at TEXT, + last_result_sync_at TEXT, + last_error_code TEXT, + last_error_message TEXT, + failure_count INTEGER NOT NULL DEFAULT 0, + next_retry_at TEXT, + projection_json TEXT NOT NULL DEFAULT '{}', + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL + ); + + CREATE INDEX IF NOT EXISTS + idx_workbench_projection_state_status_retry_updated ON + workbench_projection_state(projection_status, next_retry_at, + updated_at); + + CREATE INDEX IF NOT EXISTS idx_workbench_projection_state_run_command ON + workbench_projection_state(run_id, command_id); + + CREATE INDEX IF NOT EXISTS + idx_workbench_projection_state_session_updated ON + workbench_projection_state(session_id, updated_at DESC); + + + CREATE TABLE IF NOT EXISTS workbench_sessions ( + session_id TEXT PRIMARY KEY, + owner_user_id TEXT REFERENCES users(id), + project_id TEXT, + conversation_id TEXT, + thread_id TEXT, + status TEXT NOT NULL DEFAULT 'unknown', + last_trace_id TEXT, + projected_seq INTEGER NOT NULL DEFAULT 0, + source_seq INTEGER NOT NULL DEFAULT 0, + source_event_id TEXT, + terminal BOOLEAN NOT NULL DEFAULT false, + sealed BOOLEAN NOT NULL DEFAULT false, + session_json TEXT NOT NULL DEFAULT '{}', + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL + ); + + CREATE INDEX IF NOT EXISTS idx_workbench_sessions_owner_updated ON + workbench_sessions(owner_user_id, updated_at DESC, session_id); + + CREATE INDEX IF NOT EXISTS idx_workbench_sessions_status_updated ON + workbench_sessions(status, updated_at DESC, session_id); + + + CREATE TABLE IF NOT EXISTS workbench_messages ( + message_id TEXT PRIMARY KEY, + session_id TEXT NOT NULL, + turn_id TEXT, + trace_id TEXT, + role TEXT NOT NULL, + status TEXT NOT NULL DEFAULT 'unknown', + projected_seq INTEGER NOT NULL DEFAULT 0, + source_seq INTEGER NOT NULL DEFAULT 0, + source_event_id TEXT, + terminal BOOLEAN NOT NULL DEFAULT false, + sealed BOOLEAN NOT NULL DEFAULT false, + message_json TEXT NOT NULL DEFAULT '{}', + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL + ); + + CREATE INDEX IF NOT EXISTS idx_workbench_messages_session_updated ON + workbench_messages(session_id, updated_at ASC, message_id); + + CREATE INDEX IF NOT EXISTS idx_workbench_messages_trace ON + workbench_messages(trace_id, message_id); + + CREATE INDEX IF NOT EXISTS idx_workbench_messages_turn ON + workbench_messages(turn_id, message_id); + + + CREATE TABLE IF NOT EXISTS workbench_parts ( + part_id TEXT PRIMARY KEY, + message_id TEXT NOT NULL, + session_id TEXT NOT NULL, + turn_id TEXT, + trace_id TEXT, + part_index INTEGER NOT NULL DEFAULT 0, + part_type TEXT NOT NULL DEFAULT 'text', + status TEXT NOT NULL DEFAULT 'unknown', + projected_seq INTEGER NOT NULL DEFAULT 0, + source_seq INTEGER NOT NULL DEFAULT 0, + source_event_id TEXT, + terminal BOOLEAN NOT NULL DEFAULT false, + sealed BOOLEAN NOT NULL DEFAULT false, + part_json TEXT NOT NULL DEFAULT '{}', + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL + ); + + CREATE INDEX IF NOT EXISTS idx_workbench_parts_message_index ON + workbench_parts(message_id, part_index, part_id); + + CREATE INDEX IF NOT EXISTS idx_workbench_parts_session_trace ON + workbench_parts(session_id, trace_id, part_index); + + + CREATE TABLE IF NOT EXISTS workbench_turns ( + turn_id TEXT PRIMARY KEY, + session_id TEXT NOT NULL, + trace_id TEXT, + message_id TEXT, + status TEXT NOT NULL DEFAULT 'unknown', + projected_seq INTEGER NOT NULL DEFAULT 0, + source_seq INTEGER NOT NULL DEFAULT 0, + source_event_id TEXT, + terminal BOOLEAN NOT NULL DEFAULT false, + sealed BOOLEAN NOT NULL DEFAULT false, + final_response_json TEXT NOT NULL DEFAULT 'null', + diagnostic_json TEXT NOT NULL DEFAULT '{}', + turn_json TEXT NOT NULL DEFAULT '{}', + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL + ); + + CREATE INDEX IF NOT EXISTS idx_workbench_turns_session_updated ON + workbench_turns(session_id, updated_at DESC, turn_id); + + CREATE INDEX IF NOT EXISTS idx_workbench_turns_trace ON + workbench_turns(trace_id, turn_id); + + + CREATE TABLE IF NOT EXISTS workbench_trace_events ( + id TEXT PRIMARY KEY, + trace_id TEXT NOT NULL, + session_id TEXT, + turn_id TEXT, + message_id TEXT, + source_seq INTEGER NOT NULL DEFAULT 0, + source_event_id TEXT, + projected_seq INTEGER NOT NULL DEFAULT 0, + event_type TEXT NOT NULL DEFAULT 'event', + terminal BOOLEAN NOT NULL DEFAULT false, + sealed BOOLEAN NOT NULL DEFAULT false, + event_json TEXT NOT NULL DEFAULT '{}', + occurred_at TEXT NOT NULL, + updated_at TEXT NOT NULL + ); + + CREATE INDEX IF NOT EXISTS idx_workbench_trace_events_trace_seq ON + workbench_trace_events(trace_id, source_seq, projected_seq, id); + + CREATE INDEX IF NOT EXISTS idx_workbench_trace_events_session_seq ON + workbench_trace_events(session_id, source_seq, projected_seq, id); + + + WITH duplicate_trace_source_events AS ( + SELECT + id, + ROW_NUMBER() OVER ( + PARTITION BY trace_id, source_event_id + ORDER BY occurred_at, id + ) AS duplicate_rank + FROM workbench_trace_events + WHERE trace_id IS NOT NULL AND source_event_id IS NOT NULL + ), trace_source_event_rewrites AS ( + SELECT + id, + 'workbench_trace_events:' || id AS stable_source_event_id + FROM duplicate_trace_source_events + WHERE duplicate_rank > 1 + ) + + UPDATE workbench_trace_events AS target + + SET + source_event_id = trace_source_event_rewrites.stable_source_event_id, + updated_at = COALESCE(NULLIF(target.updated_at, ''), target.occurred_at, CURRENT_TIMESTAMP::text) + FROM trace_source_event_rewrites + + WHERE target.id = trace_source_event_rewrites.id + AND target.source_event_id IS DISTINCT FROM trace_source_event_rewrites.stable_source_event_id; + + WITH trace_event_projected_seq_conflicts AS ( + SELECT trace_id + FROM workbench_trace_events + WHERE trace_id IS NOT NULL + GROUP BY trace_id + HAVING COUNT(*) <> COUNT(DISTINCT projected_seq) + ), trace_event_resequence AS ( + SELECT + workbench_trace_events.id, + (ROW_NUMBER() OVER ( + PARTITION BY workbench_trace_events.trace_id + ORDER BY + CASE WHEN workbench_trace_events.projected_seq > 0 THEN 0 ELSE 1 END, + workbench_trace_events.projected_seq, + workbench_trace_events.occurred_at, + workbench_trace_events.id + ))::integer AS durable_projected_seq + FROM workbench_trace_events + INNER JOIN trace_event_projected_seq_conflicts + ON trace_event_projected_seq_conflicts.trace_id = workbench_trace_events.trace_id + ) + + UPDATE workbench_trace_events AS target + + SET + projected_seq = trace_event_resequence.durable_projected_seq, + source_seq = CASE + WHEN target.source_seq > 0 THEN target.source_seq + ELSE trace_event_resequence.durable_projected_seq + END, + updated_at = COALESCE(NULLIF(target.updated_at, ''), target.occurred_at, CURRENT_TIMESTAMP::text) + FROM trace_event_resequence + + WHERE target.id = trace_event_resequence.id + AND ( + target.projected_seq IS DISTINCT FROM trace_event_resequence.durable_projected_seq + OR target.source_seq <= 0 + ); + + DROP INDEX IF EXISTS idx_workbench_trace_events_trace_source_event; + + CREATE UNIQUE INDEX idx_workbench_trace_events_trace_source_event ON + workbench_trace_events(trace_id, source_event_id) WHERE source_event_id + IS NOT NULL; + + DROP INDEX IF EXISTS idx_workbench_trace_events_trace_projected_seq; + + CREATE UNIQUE INDEX idx_workbench_trace_events_trace_projected_seq ON + workbench_trace_events(trace_id, projected_seq); + + + CREATE TABLE IF NOT EXISTS workbench_event_sequences ( + aggregate_id TEXT PRIMARY KEY, + aggregate_type TEXT NOT NULL DEFAULT 'trace', + session_id TEXT, + turn_id TEXT, + trace_id TEXT, + last_seq INTEGER NOT NULL DEFAULT 0, + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL + ); + + CREATE INDEX IF NOT EXISTS idx_workbench_event_sequences_session ON + workbench_event_sequences(session_id, updated_at DESC, aggregate_id); + + CREATE INDEX IF NOT EXISTS idx_workbench_event_sequences_trace ON + workbench_event_sequences(trace_id, updated_at DESC, aggregate_id); + + + CREATE TABLE IF NOT EXISTS workbench_events ( + event_seq BIGSERIAL PRIMARY KEY, + event_id TEXT NOT NULL UNIQUE, + aggregate_id TEXT NOT NULL, + aggregate_type TEXT NOT NULL DEFAULT 'trace', + aggregate_seq INTEGER NOT NULL, + session_id TEXT, + turn_id TEXT, + trace_id TEXT, + message_id TEXT, + source_run_id TEXT, + source_command_id TEXT, + source_seq INTEGER NOT NULL DEFAULT 0, + source_event_id TEXT, + event_type TEXT NOT NULL DEFAULT 'event', + projection_revision INTEGER NOT NULL DEFAULT 0, + terminal BOOLEAN NOT NULL DEFAULT false, + sealed BOOLEAN NOT NULL DEFAULT false, + payload_json TEXT NOT NULL DEFAULT '{}', + occurred_at TEXT NOT NULL, + committed_at TEXT NOT NULL + ); + + CREATE UNIQUE INDEX IF NOT EXISTS idx_workbench_events_aggregate_seq ON + workbench_events(aggregate_id, aggregate_seq); + + CREATE UNIQUE INDEX IF NOT EXISTS + idx_workbench_events_aggregate_source_event ON + workbench_events(aggregate_id, source_event_id) WHERE source_event_id IS + NOT NULL; + + CREATE INDEX IF NOT EXISTS idx_workbench_events_trace_seq ON + workbench_events(trace_id, event_seq); + + CREATE INDEX IF NOT EXISTS idx_workbench_events_session_seq ON + workbench_events(session_id, event_seq); + + CREATE INDEX IF NOT EXISTS idx_workbench_events_type_seq ON + workbench_events(event_type, event_seq); + + + CREATE TABLE IF NOT EXISTS workbench_session_inputs ( + input_id TEXT PRIMARY KEY, + session_id TEXT NOT NULL, + turn_id TEXT, + trace_id TEXT, + message_id TEXT, + command_id TEXT, + delivery TEXT NOT NULL DEFAULT 'queue', + admitted_seq INTEGER NOT NULL DEFAULT 0, + promoted_seq INTEGER, + status TEXT NOT NULL DEFAULT 'admitted', + error_code TEXT, + source_event_id TEXT, + input_json TEXT NOT NULL DEFAULT '{}', + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL + ); + + CREATE INDEX IF NOT EXISTS idx_workbench_session_inputs_session_seq ON + workbench_session_inputs(session_id, admitted_seq, input_id); + + CREATE INDEX IF NOT EXISTS idx_workbench_session_inputs_trace ON + workbench_session_inputs(trace_id, input_id); + + CREATE INDEX IF NOT EXISTS idx_workbench_session_inputs_command ON + workbench_session_inputs(command_id, input_id) WHERE command_id IS NOT + NULL; + + CREATE UNIQUE INDEX IF NOT EXISTS + idx_workbench_session_inputs_source_event ON + workbench_session_inputs(session_id, source_event_id) WHERE + source_event_id IS NOT NULL; + + + CREATE TABLE IF NOT EXISTS workbench_projection_checkpoints ( + trace_id TEXT PRIMARY KEY, + session_id TEXT, + turn_id TEXT, + run_id TEXT, + command_id TEXT, + projected_seq INTEGER NOT NULL DEFAULT 0, + source_seq INTEGER NOT NULL DEFAULT 0, + source_event_id TEXT, + projection_status TEXT NOT NULL DEFAULT 'projecting', + projection_health TEXT NOT NULL DEFAULT 'healthy', + terminal BOOLEAN NOT NULL DEFAULT false, + sealed BOOLEAN NOT NULL DEFAULT false, + diagnostic_json TEXT NOT NULL DEFAULT '{}', + checkpoint_json TEXT NOT NULL DEFAULT '{}', + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL + ); + + CREATE INDEX IF NOT EXISTS + idx_workbench_projection_checkpoints_status_updated ON + workbench_projection_checkpoints(projection_status, updated_at DESC, + trace_id); + + CREATE INDEX IF NOT EXISTS + idx_workbench_projection_checkpoints_session_updated ON + workbench_projection_checkpoints(session_id, updated_at DESC, trace_id); + + + CREATE TABLE IF NOT EXISTS workbench_projection_outbox ( + outbox_seq BIGSERIAL PRIMARY KEY, + event_seq BIGINT, + aggregate_id TEXT, + aggregate_seq INTEGER NOT NULL DEFAULT 0, + projection_revision INTEGER NOT NULL DEFAULT 0, + trace_id TEXT NOT NULL, + session_id TEXT, + turn_id TEXT, + message_id TEXT, + projected_seq INTEGER NOT NULL DEFAULT 0, + source_seq INTEGER NOT NULL DEFAULT 0, + source_event_id TEXT, + commit_type TEXT NOT NULL DEFAULT 'event', + terminal BOOLEAN NOT NULL DEFAULT false, + sealed BOOLEAN NOT NULL DEFAULT false, + payload_json TEXT NOT NULL DEFAULT '{}', + created_at TEXT NOT NULL + ); + + ALTER TABLE workbench_projection_outbox ADD COLUMN IF NOT EXISTS + event_seq BIGINT; + + ALTER TABLE workbench_projection_outbox ADD COLUMN IF NOT EXISTS + aggregate_id TEXT; + + ALTER TABLE workbench_projection_outbox ADD COLUMN IF NOT EXISTS + aggregate_seq INTEGER NOT NULL DEFAULT 0; + + ALTER TABLE workbench_projection_outbox ADD COLUMN IF NOT EXISTS + projection_revision INTEGER NOT NULL DEFAULT 0; + + CREATE INDEX IF NOT EXISTS idx_workbench_projection_outbox_trace_seq ON + workbench_projection_outbox(trace_id, outbox_seq); + + CREATE INDEX IF NOT EXISTS idx_workbench_projection_outbox_session_seq + ON workbench_projection_outbox(session_id, outbox_seq); + + CREATE INDEX IF NOT EXISTS idx_workbench_projection_outbox_after_seq ON + workbench_projection_outbox(outbox_seq); + + CREATE INDEX IF NOT EXISTS idx_workbench_projection_outbox_event_seq ON + workbench_projection_outbox(event_seq) WHERE event_seq IS NOT NULL; + + + INSERT INTO workbench_sessions ( + session_id, + owner_user_id, + project_id, + conversation_id, + thread_id, + status, + last_trace_id, + projected_seq, + source_seq, + source_event_id, + terminal, + sealed, + session_json, + created_at, + updated_at + ) + + SELECT + id, + owner_user_id, + project_id, + conversation_id, + thread_id, + status, + last_trace_id, + 0, + 0, + id, + status IN ('completed', 'failed', 'canceled', 'cancelled', 'archived'), + status IN ('completed', 'failed', 'canceled', 'cancelled', 'archived') AND ended_at IS NOT NULL, + COALESCE(NULLIF(session_json, ''), '{}'), + COALESCE(started_at, updated_at, CURRENT_TIMESTAMP::text), + COALESCE(updated_at, ended_at, started_at, CURRENT_TIMESTAMP::text) + FROM agent_sessions + + WHERE id IS NOT NULL + + ON CONFLICT (session_id) DO NOTHING; + + + INSERT INTO workbench_trace_events ( + id, + trace_id, + session_id, + turn_id, + message_id, + source_seq, + source_event_id, + projected_seq, + event_type, + terminal, + sealed, + event_json, + occurred_at, + updated_at + ) + + SELECT + source_trace_events.id, + source_trace_events.trace_id, + source_trace_events.agent_session_id, + source_trace_events.trace_id, + NULL, + source_trace_events.durable_projection_seq, + source_trace_events.id, + source_trace_events.durable_projection_seq, + 'agent_trace_event', + false, + false, + COALESCE(NULLIF(source_trace_events.event_json, ''), '{}'), + source_trace_events.occurred_at, + source_trace_events.occurred_at + FROM ( + SELECT + agent_trace_events.*, + (ROW_NUMBER() OVER (PARTITION BY trace_id ORDER BY occurred_at, id))::integer AS durable_projection_seq + FROM agent_trace_events + WHERE id IS NOT NULL AND trace_id IS NOT NULL + ) AS source_trace_events + + ON CONFLICT DO NOTHING; + + + INSERT INTO workbench_turns ( + turn_id, + session_id, + trace_id, + message_id, + status, + projected_seq, + source_seq, + source_event_id, + terminal, + sealed, + final_response_json, + diagnostic_json, + turn_json, + created_at, + updated_at + ) + + SELECT + trace_id, + COALESCE(session_id, trace_id), + trace_id, + NULL, + projection_status, + last_projected_seq, + last_agentrun_seq, + trace_id || ':' || last_agentrun_seq::text, + projection_status IN ('caught_up', 'terminal'), + projection_status = 'terminal', + 'null', + COALESCE(NULLIF(projection_json, ''), '{}'), + COALESCE(NULLIF(projection_json, ''), '{}'), + COALESCE(created_at, updated_at, CURRENT_TIMESTAMP::text), + COALESCE(updated_at, created_at, CURRENT_TIMESTAMP::text) + FROM workbench_projection_state + + WHERE trace_id IS NOT NULL + + ON CONFLICT (turn_id) DO NOTHING; + + + INSERT INTO workbench_projection_checkpoints ( + trace_id, + session_id, + turn_id, + run_id, + command_id, + projected_seq, + source_seq, + source_event_id, + projection_status, + projection_health, + terminal, + sealed, + diagnostic_json, + checkpoint_json, + created_at, + updated_at + ) + + SELECT + trace_id, + session_id, + trace_id, + run_id, + command_id, + last_projected_seq, + last_agentrun_seq, + trace_id || ':' || last_agentrun_seq::text, + projection_status, + projection_health, + projection_status IN ('caught_up', 'terminal'), + projection_status = 'terminal', + COALESCE(NULLIF(projection_json, ''), '{}'), + COALESCE(NULLIF(projection_json, ''), '{}'), + COALESCE(created_at, updated_at, CURRENT_TIMESTAMP::text), + COALESCE(updated_at, created_at, CURRENT_TIMESTAMP::text) + FROM workbench_projection_state + + WHERE trace_id IS NOT NULL + + ON CONFLICT (trace_id) DO NOTHING; + + + CREATE TABLE IF NOT EXISTS evidence_records ( + id TEXT PRIMARY KEY, + project_id TEXT, + operation_id TEXT, + evidence_type TEXT NOT NULL, + uri TEXT NOT NULL DEFAULT '', + metadata_json TEXT NOT NULL DEFAULT '{}', + created_at TEXT NOT NULL + ); + + + CREATE TABLE IF NOT EXISTS hwlab_schema_migrations ( + id TEXT PRIMARY KEY, + schema_version TEXT NOT NULL, + applied_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + migration_json TEXT NOT NULL DEFAULT '{}' + ); + + + INSERT INTO hwlab_schema_migrations (id, schema_version, applied_at, + migration_json) + + VALUES ( + '0001_cloud_core_skeleton', + 'runtime-durable-postgres-v7', + CURRENT_TIMESTAMP, + '{"path":"internal/db/migrations/0001_cloud_core_skeleton.sql","runtime":"cloud-api"}' + ) + + ON CONFLICT (id) DO UPDATE SET + schema_version = EXCLUDED.schema_version, + migration_json = EXCLUDED.migration_json; + - apiVersion: v1 + kind: Service + metadata: + name: hwlab-v03-postgres + namespace: hwlab-v03 + labels: + app.kubernetes.io/name: hwlab-v03-postgres + app.kubernetes.io/part-of: hwlab + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/gitops-target: v03 + hwlab.pikastech.local/profile: v03 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + spec: + type: ClusterIP + selector: + app.kubernetes.io/name: hwlab-v03-postgres + ports: + - name: postgres + port: 5432 + targetPort: postgres + - apiVersion: apps/v1 + kind: StatefulSet + metadata: + name: hwlab-v03-postgres + namespace: hwlab-v03 + labels: + app.kubernetes.io/name: hwlab-v03-postgres + app.kubernetes.io/part-of: hwlab + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/gitops-target: v03 + hwlab.pikastech.local/profile: v03 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + spec: + serviceName: hwlab-v03-postgres + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: hwlab-v03-postgres + template: + metadata: + labels: + app.kubernetes.io/name: hwlab-v03-postgres + app.kubernetes.io/part-of: hwlab + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/gitops-target: v03 + hwlab.pikastech.local/profile: v03 + hwlab.pikastech.local/migration-sha256: 880f77326c6dd41a + annotations: + hwlab.pikastech.local/migration-sha256: 880f77326c6dd41a994931567da1d0372af0b3c3f8aef1e2f69e3d5ed4343274 + spec: + containers: + - name: postgres + image: 127.0.0.1:5000/hwlab/postgres:16-alpine + imagePullPolicy: IfNotPresent + env: + - name: POSTGRES_DB + value: hwlab_v03 + - name: POSTGRES_USER + value: hwlab_v03 + - name: POSTGRES_PASSWORD + valueFrom: + secretKeyRef: + name: hwlab-v03-postgres + key: POSTGRES_PASSWORD + ports: + - name: postgres + containerPort: 5432 + readinessProbe: + tcpSocket: + port: postgres + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + tcpSocket: + port: postgres + initialDelaySeconds: 30 + periodSeconds: 20 + volumeMounts: + - name: data + mountPath: /var/lib/postgresql/data + - name: init + mountPath: /docker-entrypoint-initdb.d + readOnly: true + volumes: + - name: init + configMap: + name: hwlab-v03-postgres-init + volumeClaimTemplates: + - metadata: + name: data + spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 8Gi diff --git a/deploy/gitops/node/jd01/runtime-v03/services.yaml b/deploy/gitops/node/jd01/runtime-v03/services.yaml new file mode 100644 index 00000000..9a5a14cb --- /dev/null +++ b/deploy/gitops/node/jd01/runtime-v03/services.yaml @@ -0,0 +1,208 @@ +apiVersion: v1 +kind: List +items: + - apiVersion: v1 + kind: Service + metadata: + name: hwlab-cloud-api + namespace: hwlab-v03 + labels: + app.kubernetes.io/name: hwlab-cloud-api + hwlab.pikastech.local/service-id: hwlab-cloud-api + hwlab.pikastech.local/gitops-target: v03 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + hwlab.pikastech.local/monitoring: disabled + annotations: + hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs + spec: + type: ClusterIP + selector: + app.kubernetes.io/name: hwlab-cloud-api + ports: + - name: http + port: 6667 + targetPort: http + - name: metrics + port: 9100 + targetPort: metrics + - apiVersion: v1 + kind: Service + metadata: + name: hwlab-project-management + namespace: hwlab-v03 + labels: + app.kubernetes.io/name: hwlab-project-management + hwlab.pikastech.local/service-id: hwlab-project-management + hwlab.pikastech.local/gitops-target: v03 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + hwlab.pikastech.local/monitoring: disabled + annotations: + hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs + spec: + type: ClusterIP + selector: + app.kubernetes.io/name: hwlab-project-management + ports: + - name: http + port: 6672 + targetPort: http + - name: metrics + port: 9100 + targetPort: metrics + - apiVersion: v1 + kind: Service + metadata: + name: hwlab-workbench-runtime + namespace: hwlab-v03 + labels: + app.kubernetes.io/name: hwlab-workbench-runtime + hwlab.pikastech.local/service-id: hwlab-workbench-runtime + hwlab.pikastech.local/gitops-target: v03 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + hwlab.pikastech.local/monitoring: disabled + annotations: + hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs + spec: + type: ClusterIP + selector: + app.kubernetes.io/name: hwlab-workbench-runtime + ports: + - name: http + port: 6671 + targetPort: http + - name: metrics + port: 9100 + targetPort: metrics + - apiVersion: v1 + kind: Service + metadata: + name: hwlab-user-billing + namespace: hwlab-v03 + labels: + app.kubernetes.io/name: hwlab-user-billing + hwlab.pikastech.local/service-id: hwlab-user-billing + hwlab.pikastech.local/gitops-target: v03 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + hwlab.pikastech.local/monitoring: disabled + annotations: + hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs + spec: + type: ClusterIP + selector: + app.kubernetes.io/name: hwlab-user-billing + ports: + - name: http + port: 6670 + targetPort: http + - name: metrics + port: 9100 + targetPort: metrics + - apiVersion: v1 + kind: Service + metadata: + name: hwlab-cloud-web + namespace: hwlab-v03 + labels: + app.kubernetes.io/name: hwlab-cloud-web + hwlab.pikastech.local/service-id: hwlab-cloud-web + hwlab.pikastech.local/gitops-target: v03 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + hwlab.pikastech.local/monitoring: disabled + annotations: + hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs + spec: + type: ClusterIP + selector: + app.kubernetes.io/name: hwlab-cloud-web + ports: + - name: http + port: 8080 + targetPort: http + - name: metrics + port: 9100 + targetPort: metrics + - apiVersion: v1 + kind: Service + metadata: + name: hwlab-gateway + namespace: hwlab-v03 + labels: + app.kubernetes.io/name: hwlab-gateway + hwlab.pikastech.local/service-id: hwlab-gateway + hwlab.pikastech.local/activation: manual + hwlab.pikastech.local/gitops-target: v03 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + annotations: + hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs + spec: + type: ClusterIP + selector: + app.kubernetes.io/name: hwlab-gateway + ports: + - name: http + port: 7001 + targetPort: http + - apiVersion: v1 + kind: Service + metadata: + name: hwlab-agent-skills + namespace: hwlab-v03 + labels: + app.kubernetes.io/name: hwlab-agent-skills + hwlab.pikastech.local/service-id: hwlab-agent-skills + hwlab.pikastech.local/gitops-target: v03 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + hwlab.pikastech.local/monitoring: disabled + annotations: + hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs + spec: + type: ClusterIP + selector: + app.kubernetes.io/name: hwlab-agent-skills + ports: + - name: http + port: 7430 + targetPort: http + - name: metrics + port: 9100 + targetPort: metrics + - apiVersion: v1 + kind: Service + metadata: + name: hwlab-edge-proxy + namespace: hwlab-v03 + labels: + app.kubernetes.io/name: hwlab-edge-proxy + hwlab.pikastech.local/service-id: hwlab-edge-proxy + hwlab.pikastech.local/gitops-target: v03 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + hwlab.pikastech.local/monitoring: disabled + annotations: + hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs + spec: + type: ClusterIP + selector: + app.kubernetes.io/name: hwlab-edge-proxy + ports: + - name: http + port: 6667 + targetPort: http + - name: metrics + port: 9100 + targetPort: metrics diff --git a/deploy/gitops/node/jd01/runtime-v03/workbench-redis.yaml b/deploy/gitops/node/jd01/runtime-v03/workbench-redis.yaml new file mode 100644 index 00000000..87e39a0f --- /dev/null +++ b/deploy/gitops/node/jd01/runtime-v03/workbench-redis.yaml @@ -0,0 +1,243 @@ +{ + "apiVersion": "v1", + "kind": "List", + "items": [ + { + "apiVersion": "v1", + "kind": "ConfigMap", + "metadata": { + "name": "hwlab-workbench-redis-config", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-workbench-redis", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/cache-role": "workbench-derived-read", + "hwlab.pikastech.local/component": "workbench-runtime-cache", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/service-id": "hwlab-workbench-redis", + "hwlab.pikastech.local/source-commit": "1c448bc4b9fac145059b6ceffcb6c52e542aba13" + }, + "annotations": { + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", + "argocd.argoproj.io/sync-wave": "2" + } + }, + "data": { + "redis.conf": "save \"\"\nappendonly no\nmaxmemory 192mb\nmaxmemory-policy allkeys-lru\n" + } + }, + { + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "hwlab-workbench-redis", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-workbench-redis", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/cache-role": "workbench-derived-read", + "hwlab.pikastech.local/component": "workbench-runtime-cache", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/service-id": "hwlab-workbench-redis", + "hwlab.pikastech.local/source-commit": "1c448bc4b9fac145059b6ceffcb6c52e542aba13" + }, + "annotations": { + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", + "argocd.argoproj.io/sync-wave": "2" + } + }, + "spec": { + "replicas": 1, + "selector": { + "matchLabels": { + "app.kubernetes.io/name": "hwlab-workbench-redis" + } + }, + "template": { + "metadata": { + "labels": { + "app.kubernetes.io/name": "hwlab-workbench-redis", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/cache-role": "workbench-derived-read", + "hwlab.pikastech.local/component": "workbench-runtime-cache", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/service-id": "hwlab-workbench-redis", + "hwlab.pikastech.local/source-commit": "1c448bc4b9fac145059b6ceffcb6c52e542aba13" + }, + "annotations": { + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", + "argocd.argoproj.io/sync-wave": "2" + } + }, + "spec": { + "containers": [ + { + "name": "redis", + "image": "127.0.0.1:5000/hwlab/redis:8.2.3-alpine", + "imagePullPolicy": "IfNotPresent", + "args": [ + "redis-server", + "/usr/local/etc/redis/redis.conf" + ], + "ports": [ + { + "name": "redis", + "containerPort": 6379 + } + ], + "readinessProbe": { + "exec": { + "command": [ + "redis-cli", + "-p", + "6379", + "ping" + ] + }, + "initialDelaySeconds": 3, + "periodSeconds": 10, + "timeoutSeconds": 2, + "failureThreshold": 3 + }, + "livenessProbe": { + "exec": { + "command": [ + "redis-cli", + "-p", + "6379", + "ping" + ] + }, + "initialDelaySeconds": 15, + "periodSeconds": 20, + "timeoutSeconds": 3, + "failureThreshold": 3 + }, + "resources": { + "requests": { + "cpu": "50m", + "memory": "64Mi" + }, + "limits": { + "cpu": "250m", + "memory": "256Mi" + } + }, + "volumeMounts": [ + { + "name": "config", + "mountPath": "/usr/local/etc/redis", + "readOnly": true + } + ] + } + ], + "volumes": [ + { + "name": "config", + "configMap": { + "name": "hwlab-workbench-redis-config" + } + } + ] + } + } + } + }, + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "hwlab-workbench-redis", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-workbench-redis", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/cache-role": "workbench-derived-read", + "hwlab.pikastech.local/component": "workbench-runtime-cache", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/service-id": "hwlab-workbench-redis", + "hwlab.pikastech.local/source-commit": "1c448bc4b9fac145059b6ceffcb6c52e542aba13" + }, + "annotations": { + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", + "argocd.argoproj.io/sync-wave": "2" + } + }, + "spec": { + "type": "ClusterIP", + "selector": { + "app.kubernetes.io/name": "hwlab-workbench-redis" + }, + "ports": [ + { + "name": "redis", + "port": 6379, + "targetPort": "redis", + "protocol": "TCP" + } + ] + } + }, + { + "apiVersion": "networking.k8s.io/v1", + "kind": "NetworkPolicy", + "metadata": { + "name": "hwlab-workbench-redis-ingress", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-workbench-redis", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/cache-role": "workbench-derived-read", + "hwlab.pikastech.local/component": "workbench-runtime-cache", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/service-id": "hwlab-workbench-redis", + "hwlab.pikastech.local/source-commit": "1c448bc4b9fac145059b6ceffcb6c52e542aba13" + }, + "annotations": { + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", + "argocd.argoproj.io/sync-wave": "2" + } + }, + "spec": { + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "hwlab-workbench-redis" + } + }, + "policyTypes": [ + "Ingress" + ], + "ingress": [ + { + "from": [ + { + "podSelector": { + "matchLabels": { + "app.kubernetes.io/name": "hwlab-workbench-runtime" + } + } + } + ], + "ports": [ + { + "protocol": "TCP", + "port": 6379 + } + ] + } + ] + } + } + ] +} diff --git a/deploy/gitops/node/jd01/runtime-v03/workloads.yaml b/deploy/gitops/node/jd01/runtime-v03/workloads.yaml new file mode 100644 index 00000000..6a3454ca --- /dev/null +++ b/deploy/gitops/node/jd01/runtime-v03/workloads.yaml @@ -0,0 +1,1734 @@ +apiVersion: v1 +kind: List +items: + - apiVersion: v1 + kind: PersistentVolumeClaim + metadata: + labels: + app.kubernetes.io/name: hwlab-user-skills + hwlab.pikastech.local/service-id: hwlab-user-skills + app.kubernetes.io/part-of: hwlab + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + hwlab.pikastech.local/gitops-target: v03 + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + unidesk.ai/node-staging: "false" + name: hwlab-user-skills + namespace: hwlab-v03 + annotations: + hwlab.pikastech.local/gitops-note: node DEV GitOps target. + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 2Gi + - apiVersion: apps/v1 + kind: Deployment + metadata: + name: hwlab-project-management + namespace: hwlab-v03 + labels: + app.kubernetes.io/name: hwlab-project-management + hwlab.pikastech.local/service-id: hwlab-project-management + app.kubernetes.io/part-of: hwlab + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + hwlab.pikastech.local/gitops-target: v03 + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + unidesk.ai/node-staging: "false" + hwlab.pikastech.local/monitoring: disabled + annotations: + hwlab.pikastech.local/gitops-note: node DEV GitOps target. + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: hwlab-project-management + app.kubernetes.io/part-of: hwlab + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + template: + metadata: + labels: + app.kubernetes.io/name: hwlab-project-management + hwlab.pikastech.local/service-id: hwlab-project-management + app.kubernetes.io/part-of: hwlab + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + hwlab.pikastech.local/gitops-target: v03 + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/artifact-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/monitoring: disabled + hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout + hwlab.pikastech.local/boot-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + annotations: + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/artifact-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs + hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout + hwlab.pikastech.local/boot-repo: git@github.com:pikasTech/HWLAB.git + hwlab.pikastech.local/boot-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/boot-sh: deploy/runtime/boot/hwlab-project-management.sh + hwlab.pikastech.local/environment-digest: sha256:0c32f970d12f8f78d27df3fd0ed06a4adbf9cb476fbb1c933b8626d638dd7112 + hwlab.pikastech.local/environment-input-hash: 5ff41b539190849e76511ed722a4539f5921622e98eea1444b606475f8ef55aa + hwlab.pikastech.local/code-input-hash: c194b49c2cb463467e6f661bde2bfa984fd44731c6b280eae9a28b0174ea0207 + spec: + containers: + - name: hwlab-project-management + image: 127.0.0.1:5000/hwlab/hwlab-project-management-env@sha256:0c32f970d12f8f78d27df3fd0ed06a4adbf9cb476fbb1c933b8626d638dd7112 + ports: + - name: http + containerPort: 6672 + env: + - name: HWLAB_PROJECT_MANAGEMENT_PORT + value: "6672" + - name: TZ + value: Asia/Shanghai + - name: HWLAB_PROJECT_MANAGEMENT_DB_URL + valueFrom: + secretKeyRef: + name: hwlab-cloud-api-v03-db + key: database-url + optional: true + - name: HWLAB_PROJECT_MANAGEMENT_DB_CONNECT_TIMEOUT_MS + value: "5000" + - name: HWLAB_PROJECT_MANAGEMENT_SOURCE_ROOT + value: /workspace/hwlab-boot/repo + - name: HWLAB_PROJECT_MANAGEMENT_SOURCE_ID + value: hwlab-v03-mdtodo + - name: HWLAB_PROJECT_MANAGEMENT_SOURCE_NAME + value: HWLAB v0.3 MDTODO + - name: HWLAB_PROJECT_MANAGEMENT_PROJECT_ID + value: project_hwlab_v03 + - name: HWLAB_PROJECT_MANAGEMENT_MDTODO_TASK_DEFAULT_LIMIT + value: "200" + - name: HWLAB_PROJECT_MANAGEMENT_MDTODO_TASK_MAX_LIMIT + value: "500" + - name: HWLAB_PROJECT_MANAGEMENT_HWPOD_NODE_OPS_URL + value: http://hwlab-cloud-api.hwlab-v03.svc.cluster.local:6667/v1/hwpod-node-ops + - name: HWLAB_PROJECT_MANAGEMENT_HWPOD_NODE_OPS_API_KEY + valueFrom: + secretKeyRef: + name: hwlab-v03-master-server-admin-api-key + key: api-key + optional: true + - name: HWLAB_PROJECT_MANAGEMENT_BOOTSTRAP_SOURCES_PATH + value: /etc/hwlab/project-management/sources.json + - name: OTEL_EXPORTER_OTLP_TRACES_ENDPOINT + value: http://otel-collector.platform-infra.svc.cluster.local:4318/v1/traces + - name: OTEL_SERVICE_NAME + value: hwlab-project-management + - name: HWLAB_ENVIRONMENT + value: v03 + - name: HWLAB_COMMIT_ID + value: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + - name: HWLAB_IMAGE + value: 127.0.0.1:5000/hwlab/hwlab-project-management-env@sha256:0c32f970d12f8f78d27df3fd0ed06a4adbf9cb476fbb1c933b8626d638dd7112 + - name: HWLAB_IMAGE_TAG + value: env-5ff41b539190 + - name: HWLAB_GITOPS_TARGET + value: v03 + - name: HWLAB_GITOPS_PROFILE + value: v03 + - name: HWLAB_GITOPS_SOURCE_COMMIT + value: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + - name: HWLAB_RUNTIME_MODE + value: env-reuse-git-mirror-checkout + - name: HWLAB_BOOT_REPO + value: git@github.com:pikasTech/HWLAB.git + - name: HWLAB_BOOT_COMMIT + value: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + - name: HWLAB_BOOT_REF + value: v0.3 + - name: HWLAB_BOOT_SH + value: deploy/runtime/boot/hwlab-project-management.sh + - name: HWLAB_BOOT_READ_URL + value: http://git-mirror-http.devops-infra.svc.cluster.local:8080/pikasTech/HWLAB.git + - name: HWLAB_ENVIRONMENT_IMAGE + value: 127.0.0.1:5000/hwlab/hwlab-project-management-env:env-5ff41b539190 + - name: HWLAB_ENVIRONMENT_DIGEST + value: sha256:0c32f970d12f8f78d27df3fd0ed06a4adbf9cb476fbb1c933b8626d638dd7112 + - name: HWLAB_ENVIRONMENT_INPUT_HASH + value: 5ff41b539190849e76511ed722a4539f5921622e98eea1444b606475f8ef55aa + - name: HWLAB_CODE_INPUT_HASH + value: c194b49c2cb463467e6f661bde2bfa984fd44731c6b280eae9a28b0174ea0207 + - name: HWLAB_IMAGE_DIGEST + value: sha256:0c32f970d12f8f78d27df3fd0ed06a4adbf9cb476fbb1c933b8626d638dd7112 + readinessProbe: + httpGet: + path: /health/ready + port: http + timeoutSeconds: 10 + failureThreshold: 5 + livenessProbe: + httpGet: + path: /health/live + port: http + timeoutSeconds: 5 + failureThreshold: 6 + imagePullPolicy: IfNotPresent + volumeMounts: + - name: project-management-bootstrap + mountPath: /etc/hwlab/project-management + readOnly: true + startupProbe: + httpGet: + path: /health/ready + port: http + periodSeconds: 10 + timeoutSeconds: 10 + failureThreshold: 30 + successThreshold: 1 + volumes: + - name: project-management-bootstrap + configMap: + name: hwlab-v03-project-management-bootstrap + - apiVersion: apps/v1 + kind: Deployment + metadata: + name: hwlab-workbench-runtime + namespace: hwlab-v03 + labels: + app.kubernetes.io/name: hwlab-workbench-runtime + hwlab.pikastech.local/service-id: hwlab-workbench-runtime + app.kubernetes.io/part-of: hwlab + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + hwlab.pikastech.local/gitops-target: v03 + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + unidesk.ai/node-staging: "false" + hwlab.pikastech.local/monitoring: disabled + annotations: + hwlab.pikastech.local/gitops-note: node DEV GitOps target. + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: hwlab-workbench-runtime + app.kubernetes.io/part-of: hwlab + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + template: + metadata: + labels: + app.kubernetes.io/name: hwlab-workbench-runtime + hwlab.pikastech.local/service-id: hwlab-workbench-runtime + app.kubernetes.io/part-of: hwlab + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + hwlab.pikastech.local/gitops-target: v03 + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/artifact-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/monitoring: disabled + hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout + hwlab.pikastech.local/boot-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + annotations: + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/artifact-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs + hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout + hwlab.pikastech.local/boot-repo: git@github.com:pikasTech/HWLAB.git + hwlab.pikastech.local/boot-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/boot-sh: deploy/runtime/boot/hwlab-workbench-runtime.sh + hwlab.pikastech.local/environment-digest: sha256:c9d030b753ead3b66183a9e72e51c97627e253796ec7ef44480a930af621fb3d + hwlab.pikastech.local/environment-input-hash: 2cf8ee7ed635a31a8c16f5aa35c28d6cfbf1234d32176f2e6e8d40b1cceefb5d + hwlab.pikastech.local/code-input-hash: 5ac3e165aaf2b87a5138c404870feba94da8f7269e566dfa89a180b71d5ff7cb + spec: + containers: + - name: hwlab-workbench-runtime + image: 127.0.0.1:5000/hwlab/hwlab-workbench-runtime-env@sha256:c9d030b753ead3b66183a9e72e51c97627e253796ec7ef44480a930af621fb3d + ports: + - name: http + containerPort: 6671 + env: + - name: HWLAB_WORKBENCH_RUNTIME_PORT + value: "6671" + - name: TZ + value: Asia/Shanghai + - name: HWLAB_WORKBENCH_SESSIONS_SUMMARY_QUERY_MAX_ATTEMPTS + value: "1" + - name: HWLAB_WORKBENCH_SESSIONS_SUMMARY_QUERY_ATTEMPT_TIMEOUT_MS + value: "10000" + - name: HWLAB_WORKBENCH_SESSIONS_SUMMARY_QUERY_BACKOFF_MS + value: "0" + - name: HWLAB_WORKBENCH_RUNTIME_DB_POOL_MAX + value: "16" + - name: HWLAB_WORKBENCH_RUNTIME_QUERY_TIMEOUT_MS + value: "10000" + - name: HWLAB_WORKBENCH_RUNTIME_READY_TIMEOUT_MS + value: "10000" + - name: HWLAB_WORKBENCH_CACHE_REDIS_ENABLED + value: "1" + - name: HWLAB_WORKBENCH_CACHE_REDIS_NAMESPACE + value: hwlab-v03 + - name: HWLAB_WORKBENCH_CACHE_REDIS_SERVICE_NAME + value: hwlab-workbench-redis + - name: HWLAB_WORKBENCH_CACHE_REDIS_PORT + value: "6379" + - name: HWLAB_WORKBENCH_CACHE_REDIS_URL + value: redis://hwlab-workbench-redis.hwlab-v03.svc.cluster.local:6379/0 + - name: HWLAB_WORKBENCH_CACHE_REDIS_TTL_SESSIONS_SUMMARY_MS + value: "30000" + - name: HWLAB_WORKBENCH_CACHE_REDIS_TTL_TERMINAL_TURN_MS + value: "300000" + - name: HWLAB_WORKBENCH_CACHE_REDIS_TTL_TERMINAL_TRACE_PAGE_MS + value: "300000" + - name: HWLAB_WORKBENCH_CACHE_REDIS_TTL_RUNNING_PAGE_MS + value: "5000" + - name: HWLAB_WORKBENCH_CACHE_REDIS_MAX_KEY_BYTES + value: "512" + - name: HWLAB_WORKBENCH_CACHE_REDIS_MAX_PAYLOAD_BYTES + value: "262144" + - name: HWLAB_WORKBENCH_CACHE_REDIS_CONNECT_TIMEOUT_MS + value: "200" + - name: HWLAB_WORKBENCH_CACHE_REDIS_OPERATION_TIMEOUT_MS + value: "100" + - name: HWLAB_WORKBENCH_CACHE_REDIS_METRICS_LABELS + value: '{"lane":"v03","service":"hwlab-workbench-runtime","cacheKeyClass":"workbench-derived-read"}' + - name: HWLAB_WORKBENCH_CACHE_REDIS_UNAVAILABLE_LIVENESS_FAILURE + value: "0" + - name: HWLAB_WORKBENCH_CACHE_REDIS_UNAVAILABLE_READ_MODE + value: db-or-degraded + - name: HWLAB_WORKBENCH_CACHE_REDIS_UNAVAILABLE_FALLBACK_STATE_SOURCE + value: "0" + - name: HWLAB_WORKBENCH_RUNTIME_DB_URL + valueFrom: + secretKeyRef: + name: hwlab-cloud-api-v03-db + key: database-url + optional: true + - name: OTEL_EXPORTER_OTLP_TRACES_ENDPOINT + value: http://otel-collector.platform-infra.svc.cluster.local:4318/v1/traces + - name: OTEL_SERVICE_NAME + value: hwlab-workbench-runtime + - name: HWLAB_ENVIRONMENT + value: v03 + - name: HWLAB_COMMIT_ID + value: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + - name: HWLAB_IMAGE + value: 127.0.0.1:5000/hwlab/hwlab-workbench-runtime-env@sha256:c9d030b753ead3b66183a9e72e51c97627e253796ec7ef44480a930af621fb3d + - name: HWLAB_IMAGE_TAG + value: env-2cf8ee7ed635 + - name: HWLAB_GITOPS_TARGET + value: v03 + - name: HWLAB_GITOPS_PROFILE + value: v03 + - name: HWLAB_GITOPS_SOURCE_COMMIT + value: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + - name: HWLAB_RUNTIME_MODE + value: env-reuse-git-mirror-checkout + - name: HWLAB_BOOT_REPO + value: git@github.com:pikasTech/HWLAB.git + - name: HWLAB_BOOT_COMMIT + value: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + - name: HWLAB_BOOT_REF + value: v0.3 + - name: HWLAB_BOOT_SH + value: deploy/runtime/boot/hwlab-workbench-runtime.sh + - name: HWLAB_BOOT_READ_URL + value: http://git-mirror-http.devops-infra.svc.cluster.local:8080/pikasTech/HWLAB.git + - name: HWLAB_ENVIRONMENT_IMAGE + value: 127.0.0.1:5000/hwlab/hwlab-workbench-runtime-env:env-2cf8ee7ed635 + - name: HWLAB_ENVIRONMENT_DIGEST + value: sha256:c9d030b753ead3b66183a9e72e51c97627e253796ec7ef44480a930af621fb3d + - name: HWLAB_ENVIRONMENT_INPUT_HASH + value: 2cf8ee7ed635a31a8c16f5aa35c28d6cfbf1234d32176f2e6e8d40b1cceefb5d + - name: HWLAB_CODE_INPUT_HASH + value: 5ac3e165aaf2b87a5138c404870feba94da8f7269e566dfa89a180b71d5ff7cb + - name: HWLAB_IMAGE_DIGEST + value: sha256:c9d030b753ead3b66183a9e72e51c97627e253796ec7ef44480a930af621fb3d + readinessProbe: + httpGet: + path: /health/ready + port: http + timeoutSeconds: 10 + failureThreshold: 5 + livenessProbe: + httpGet: + path: /health/live + port: http + timeoutSeconds: 5 + failureThreshold: 6 + imagePullPolicy: IfNotPresent + startupProbe: + httpGet: + path: /health/ready + port: http + periodSeconds: 10 + timeoutSeconds: 10 + failureThreshold: 30 + successThreshold: 1 + volumes: [] + - apiVersion: apps/v1 + kind: Deployment + metadata: + name: hwlab-cloud-api + namespace: hwlab-v03 + labels: + app.kubernetes.io/name: hwlab-cloud-api + hwlab.pikastech.local/service-id: hwlab-cloud-api + app.kubernetes.io/part-of: hwlab + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + hwlab.pikastech.local/gitops-target: v03 + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + unidesk.ai/node-staging: "false" + hwlab.pikastech.local/monitoring: disabled + annotations: + hwlab.pikastech.local/gitops-note: node DEV GitOps target. + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: hwlab-cloud-api + app.kubernetes.io/part-of: hwlab + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + template: + metadata: + labels: + app.kubernetes.io/name: hwlab-cloud-api + hwlab.pikastech.local/service-id: hwlab-cloud-api + app.kubernetes.io/part-of: hwlab + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + hwlab.pikastech.local/gitops-target: v03 + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/artifact-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/monitoring: disabled + hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout + hwlab.pikastech.local/boot-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + annotations: + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/artifact-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs + hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout + hwlab.pikastech.local/boot-repo: git@github.com:pikasTech/HWLAB.git + hwlab.pikastech.local/boot-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/boot-sh: deploy/runtime/boot/hwlab-cloud-api.sh + hwlab.pikastech.local/environment-digest: sha256:c317276bb0d002bc82cb8d3cde6d5e596db18325585436d9f3592ebd173eb01d + hwlab.pikastech.local/environment-input-hash: 5ff41b539190849e76511ed722a4539f5921622e98eea1444b606475f8ef55aa + hwlab.pikastech.local/code-input-hash: e692ec9a4feee2d0ee983f1f9dc2eeebdfa1e4dd68dd9bcfdef19129d9bbb57a + spec: + initContainers: [] + containers: + - name: hwlab-cloud-api + image: 127.0.0.1:5000/hwlab/hwlab-cloud-api-env@sha256:c317276bb0d002bc82cb8d3cde6d5e596db18325585436d9f3592ebd173eb01d + ports: + - name: http + containerPort: 6667 + env: + - name: HWLAB_ENVIRONMENT + value: v03 + - name: HWLAB_PUBLIC_ENDPOINT + value: https://hwlab.pikapython.com + - name: HWLAB_CLOUD_API_PORT + value: "6667" + - name: HWLAB_COMMIT_ID + value: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + - name: HWLAB_IMAGE + value: 127.0.0.1:5000/hwlab/hwlab-cloud-api-env@sha256:c317276bb0d002bc82cb8d3cde6d5e596db18325585436d9f3592ebd173eb01d + - name: HWLAB_IMAGE_TAG + value: env-5ff41b539190 + - name: HWLAB_RUNTIME_SUBSTITUTE_FORBIDDEN + value: unidesk-backend,provider-gateway,microservice-proxy + - name: HWLAB_CLOUD_DB_URL + valueFrom: + secretKeyRef: + name: hwlab-cloud-api-v03-db + key: database-url + optional: true + - name: HWLAB_CLOUD_DB_SSL_MODE + value: disable + - name: HWLAB_CLOUD_DB_CONTRACT + value: v03-redacted-presence-only + - name: HWLAB_CLOUD_RUNTIME_ADAPTER + value: postgres + - name: HWLAB_CLOUD_RUNTIME_DURABLE + value: "true" + - name: HWLAB_M3_IO_CONTROL_ENABLED + value: "false" + - name: HWLAB_CODE_AGENT_TIMEOUT_MS + value: "1200000" + - name: NO_PROXY + value: hwlab-v03.svc.cluster.local,.svc,.cluster.local,hyueapi.com,.hyueapi.com,hyui.com,.hyui.com,127.0.0.1,localhost,::1,10.0.0.0/8,10.42.0.0/16,10.43.0.0/16,api.minimaxi.com,.minimaxi.com + - name: no_proxy + value: hwlab-v03.svc.cluster.local,.svc,.cluster.local,hyueapi.com,.hyueapi.com,hyui.com,.hyui.com,127.0.0.1,localhost,::1,10.0.0.0/8,10.42.0.0/16,10.43.0.0/16,api.minimaxi.com,.minimaxi.com + - name: HWLAB_CODE_AGENT_SKILLS_DIRS + value: /app/skills:/data/user-skills + - name: HWLAB_PREINSTALLED_SKILLS_DIR + value: /app/skills + - name: HWLAB_USER_SKILLS_DIR + value: /data/user-skills + - name: HWLAB_CODE_AGENT_DEFAULT_PROVIDER_PROFILE + value: codex + - name: HWLAB_CODE_AGENT_DEEPSEEK_MODEL + value: deepseek-chat + - name: HWLAB_CODE_AGENT_DEEPSEEK_BASE_URL + value: http://hwlab-deepseek-proxy.hwlab-v03.svc.cluster.local:4000/v1/responses + - name: HWLAB_CODE_AGENT_CODEX_API_MODEL + value: gpt-5.5 + - name: HWLAB_CODE_AGENT_CODEX_API_BASE_URL + value: http://127.0.0.1:49280/responses + - name: HWLAB_CODE_AGENT_CODEX_API_UPSTREAM_BASE_URL + value: https://hyueapi.com + - name: HWLAB_CODE_AGENT_CODEX_API_FORWARDER_PORT + value: "49280" + - name: TZ + value: Asia/Shanghai + - name: HWLAB_METRICS_NAMESPACE + value: hwlab-v03 + - name: HWLAB_OBSERVABILITY_CONFIG_REVISION + value: PJ2026-01060505-20260619-long-trace-timeout-mitigation + - name: HWLAB_CODE_AGENT_TURN_STATUS_REFRESH_TIMEOUT_MS + value: "30000" + - name: HWLAB_CODE_AGENT_AGENTRUN_NO_RESPONSE_TIMEOUT_MS + value: "600000" + - name: HWLAB_CODE_AGENT_AGENTRUN_DISPATCH_RETRY_MAX + value: "5" + - name: HWLAB_CODE_AGENT_AGENTRUN_DISPATCH_RETRY_BASE_MS + value: "1000" + - name: HWLAB_CODE_AGENT_AGENTRUN_DISPATCH_RETRY_MAX_DELAY_MS + value: "30000" + - name: HWLAB_CODE_AGENT_AGENTRUN_PROJECTION_SYNC_POLL_INTERVAL_MS + value: "1000" + - name: HWLAB_CODE_AGENT_AGENTRUN_PROJECTION_RESUME_ENABLED + value: "1" + - name: HWLAB_CODE_AGENT_AGENTRUN_PROJECTION_RESUME_INITIAL_DELAY_MS + value: "5000" + - name: HWLAB_CODE_AGENT_AGENTRUN_PROJECTION_RESUME_INTERVAL_MS + value: "60000" + - name: HWLAB_CODE_AGENT_AGENTRUN_PROJECTION_RESUME_MIN_AGE_MS + value: "30000" + - name: HWLAB_CODE_AGENT_AGENTRUN_PROJECTION_RESUME_BATCH_SIZE + value: "100" + - name: HWLAB_CODE_AGENT_AGENTRUN_PROJECTION_RESUME_JITTER_MS + value: "15000" + - name: HWLAB_CODE_AGENT_AGENTRUN_PROJECTION_RESUME_FAILURE_BACKOFF_MS + value: "120000" + - name: HWLAB_BOOTSTRAP_ADMIN_PASSWORD_HASH + valueFrom: + secretKeyRef: + name: hwlab-v03-bootstrap-admin + key: password-hash + optional: true + - name: HWLAB_PRESET_USER_HUIGGAO_PASSWORD_HASH + valueFrom: + secretKeyRef: + name: hwlab-v03-preset-users + key: huiggao-password-hash + optional: true + - name: HWLAB_ACCESS_CONTROL_USERS_JSON + value: '[{"id":"usr_v03_admin","username":"admin","displayName":"HWLAB v0.3 + Admin","email":null,"role":"admin","status":"active","navProfile":"admin-full","passwordHashEnv":"HWLAB_BOOTSTRAP_ADMIN_PASSWORD_HASH"},{"id":"usr_v03_huiggao","username":"huiggao@163.com","displayName":"huiggao@163.com","email":"huiggao@163.com","role":"user","status":"active","navProfile":"code-mdtodo-only","passwordHashEnv":"HWLAB_PRESET_USER_HUIGGAO_PASSWORD_HASH"}]' + - name: HWLAB_ACCESS_CONTROL_NAV_PROFILES_JSON + value: '[{"id":"admin-full","displayName":"Admin full + access","allowedIds":["*"]},{"id":"code-mdtodo-only","displayName":"Code + and MDTODO + only","allowedIds":["workbench.code","project.mdtodo"]}]' + - name: HWLAB_CLOUD_DB_POOL_MAX + value: "16" + - name: HWLAB_CLOUD_DB_PROBE_TIMEOUT_MS + value: "5000" + - name: HWLAB_CLOUD_DB_QUERY_RETRY_MAX_ATTEMPTS + value: "5" + - name: HWLAB_CLOUD_DB_QUERY_RETRY_INITIAL_DELAY_MS + value: "250" + - name: HWLAB_CLOUD_DB_QUERY_RETRY_MAX_DELAY_MS + value: "5000" + - name: HWLAB_WORKBENCH_RUNTIME_TIMEOUT_MS + value: "3000" + - name: HWLAB_WORKBENCH_FACTS_QUERY_MAX_ATTEMPTS + value: "1" + - name: HWLAB_WORKBENCH_FACTS_QUERY_BACKOFF_BASE_MS + value: "0" + - name: HWLAB_WORKBENCH_FACTS_QUERY_BACKOFF_MAX_MS + value: "1" + - name: HWLAB_ACCESS_CONTROL_REQUIRED + value: "1" + - name: HWLAB_BOOTSTRAP_ADMIN_ID + value: usr_v03_admin + - name: HWLAB_BOOTSTRAP_ADMIN_USERNAME + value: admin + - name: HWLAB_BOOTSTRAP_ADMIN_DISPLAY_NAME + value: HWLAB v0.3 Admin + - name: HWLAB_BOOTSTRAP_ADMIN_API_KEY_ID + value: key_master_server_admin + - name: HWLAB_BOOTSTRAP_ADMIN_API_KEY + valueFrom: + secretKeyRef: + name: hwlab-v03-master-server-admin-api-key + key: api-key + optional: true + - name: HWLAB_USER_BILLING_URL + value: http://hwlab-user-billing.hwlab-v03.svc.cluster.local:6670 + - name: HWLAB_WORKBENCH_RUNTIME_URL + value: http://hwlab-workbench-runtime.hwlab-v03.svc.cluster.local:6671 + - name: HWLAB_PROJECT_MANAGEMENT_URL + value: http://hwlab-project-management.hwlab-v03.svc.cluster.local:6672 + - name: HWLAB_HWPOD_SPEC_REGISTRY_DIRS + value: /etc/hwlab/hwpod-specs + - name: HWLAB_USER_BILLING_LOGIN_RETRY_ATTEMPTS + value: "2" + - name: HWLAB_USER_BILLING_LOGIN_RETRY_DELAY_MS + value: "250" + - name: HWLAB_USER_BILLING_CODE_AGENT_ENABLED + value: "1" + - name: HWLAB_USER_BILLING_CODE_AGENT_ESTIMATED_CREDITS + value: "1" + - name: HWLAB_USER_BILLING_CODE_AGENT_USED_CREDITS + value: "1" + - name: HWLAB_KEYCLOAK_ISSUER + value: https://auth.74-48-78-17.nip.io/realms/hwlab + - name: HWLAB_KEYCLOAK_CLIENT_ID + value: hwlab-cloud-web + - name: HWLAB_KEYCLOAK_CLIENT_SECRET + valueFrom: + secretKeyRef: + name: hwlab-cloud-web-client + key: client-secret + optional: true + - name: HWLAB_CODE_AGENT_ADAPTER + value: agentrun-v02 + - name: OTEL_EXPORTER_OTLP_TRACES_ENDPOINT + value: http://otel-collector.platform-infra.svc.cluster.local:4318/v1/traces + - name: OTEL_SERVICE_NAME + value: hwlab-cloud-api + - name: AGENTRUN_MGR_URL + value: http://agentrun-mgr.agentrun-v02.svc.cluster.local:8080 + - name: AGENTRUN_API_KEY + valueFrom: + secretKeyRef: + name: hwlab-v03-master-server-admin-api-key + key: api-key + - name: HWLAB_CODE_AGENT_AGENTRUN_RUNNER_NAMESPACE + value: agentrun-v02 + - name: HWLAB_CODE_AGENT_AGENTRUN_SECRET_NAMESPACE + value: agentrun-v02 + - name: HWLAB_CODE_AGENT_AGENTRUN_REPO_URL + value: http://git-mirror-http.devops-infra.svc.cluster.local:8080/pikasTech/HWLAB.git + - name: HWLAB_WORKBENCH_EMPTY_SESSION_GC_ENABLED + value: "1" + - name: HWLAB_WORKBENCH_EMPTY_SESSION_TTL_MS + value: "600000" + - name: HWLAB_WORKBENCH_EMPTY_SESSION_GC_INTERVAL_MS + value: "60000" + - name: HWLAB_WORKBENCH_EMPTY_SESSION_GC_INITIAL_DELAY_MS + value: "5000" + - name: HWLAB_WORKBENCH_EMPTY_SESSION_GC_BATCH_SIZE + value: "100" + - name: HWLAB_WORKBENCH_EMPTY_SESSION_GC_JITTER_MS + value: "15000" + - name: HWLAB_WORKBENCH_EMPTY_SESSION_GC_FAILURE_BACKOFF_MS + value: "120000" + - name: HWLAB_SECRET_PLANE_SMOKE + valueFrom: + secretKeyRef: + name: hwlab-secret-plane-smoke + key: password + optional: true + - name: HWLAB_GITOPS_TARGET + value: v03 + - name: HWLAB_GITOPS_PROFILE + value: v03 + - name: HWLAB_GITOPS_SOURCE_COMMIT + value: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + - name: HWLAB_CODE_AGENT_AGENTRUN_SOURCE_COMMIT + value: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + - name: HWLAB_RUNTIME_MODE + value: env-reuse-git-mirror-checkout + - name: HWLAB_BOOT_REPO + value: git@github.com:pikasTech/HWLAB.git + - name: HWLAB_BOOT_COMMIT + value: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + - name: HWLAB_BOOT_REF + value: v0.3 + - name: HWLAB_BOOT_SH + value: deploy/runtime/boot/hwlab-cloud-api.sh + - name: HWLAB_BOOT_READ_URL + value: http://git-mirror-http.devops-infra.svc.cluster.local:8080/pikasTech/HWLAB.git + - name: HWLAB_ENVIRONMENT_IMAGE + value: 127.0.0.1:5000/hwlab/hwlab-cloud-api-env:env-5ff41b539190 + - name: HWLAB_ENVIRONMENT_DIGEST + value: sha256:c317276bb0d002bc82cb8d3cde6d5e596db18325585436d9f3592ebd173eb01d + - name: HWLAB_ENVIRONMENT_INPUT_HASH + value: 5ff41b539190849e76511ed722a4539f5921622e98eea1444b606475f8ef55aa + - name: HWLAB_CODE_INPUT_HASH + value: e692ec9a4feee2d0ee983f1f9dc2eeebdfa1e4dd68dd9bcfdef19129d9bbb57a + - name: HWLAB_IMAGE_DIGEST + value: sha256:c317276bb0d002bc82cb8d3cde6d5e596db18325585436d9f3592ebd173eb01d + - name: HWLAB_WORKBENCH_SSE_DRAIN_TIMEOUT_MS + value: "2500" + - name: HWLAB_CODE_AGENT_AGENTRUN_PROVIDER_ID + value: JD01 + - name: HWLAB_OPENFGA_MODE + value: enforce + - name: HWLAB_OPENFGA_API_URL + value: http://hwlab-openfga.hwlab-v03.svc.cluster.local:8080 + - name: HWLAB_OPENFGA_AUTHN_TOKEN + valueFrom: + secretKeyRef: + name: hwlab-v03-openfga + key: authn-preshared-key + optional: true + - name: UNIDESK_MAIN_SERVER_IP + value: http://74.48.78.17:18081 + - name: HWLAB_CODE_AGENT_CODEX_STDIO_SUPERVISOR + value: repo-owned + readinessProbe: + httpGet: + path: /health/live + port: http + timeoutSeconds: 3 + failureThreshold: 5 + livenessProbe: + httpGet: + path: /health/live + port: http + periodSeconds: 20 + timeoutSeconds: 5 + failureThreshold: 6 + volumeMounts: + - name: hwlab-user-skills + mountPath: /data/user-skills + - name: hwpod-preinstalled-specs + mountPath: /etc/hwlab/hwpod-specs + readOnly: true + imagePullPolicy: IfNotPresent + startupProbe: + httpGet: + path: /health/live + port: http + periodSeconds: 10 + timeoutSeconds: 3 + failureThreshold: 30 + successThreshold: 1 + lifecycle: + preStop: + exec: + command: + - sh + - -c + - "port=\"${PORT:-${HWLAB_PORT:-${HWLAB_CLOUD_API_PORT:-6\ + 667}}}\"; + url=\"http://127.0.0.1:${port}/v1/internal/workbench/dr\ + ain\"; /usr/local/bin/bun -e 'const [url, hostname] = + process.argv.slice(2); await fetch(url, { method: + \"POST\", headers: { \"x-hwlab-drain-hostname\": + hostname || \"\" } }).catch(() => {});' \"$url\" + \"${HOSTNAME:-}\" >/dev/null 2>&1 || true; sleep 3" + - name: hwlab-codex-api-forwarder + image: 127.0.0.1:5000/hwlab/hwlab-cloud-api-env@sha256:c317276bb0d002bc82cb8d3cde6d5e596db18325585436d9f3592ebd173eb01d + ports: + - name: codex-api + containerPort: 49280 + env: + - name: HWLAB_CODE_AGENT_CODEX_API_FORWARDER_HOST + value: 127.0.0.1 + - name: HWLAB_CODE_AGENT_CODEX_API_FORWARDER_PORT + value: "49280" + - name: HWLAB_CODE_AGENT_CODEX_API_UPSTREAM_BASE_URL + value: https://hyueapi.com + - name: NO_PROXY + value: hwlab-v03.svc.cluster.local,.svc,.cluster.local,hyueapi.com,.hyueapi.com,hyui.com,.hyui.com,127.0.0.1,localhost,::1,10.0.0.0/8,10.42.0.0/16,10.43.0.0/16,api.minimaxi.com,.minimaxi.com + - name: no_proxy + value: hwlab-v03.svc.cluster.local,.svc,.cluster.local,hyueapi.com,.hyueapi.com,hyui.com,.hyui.com,127.0.0.1,localhost,::1,10.0.0.0/8,10.42.0.0/16,10.43.0.0/16,api.minimaxi.com,.minimaxi.com + - name: HWLAB_M3_IO_CONTROL_ENABLED + value: "false" + - name: HWLAB_ENVIRONMENT + value: v03 + - name: HWLAB_PUBLIC_ENDPOINT + value: https://hwlab.pikapython.com + - name: HWLAB_CLOUD_API_PORT + value: "6667" + - name: HWLAB_RUNTIME_SUBSTITUTE_FORBIDDEN + value: unidesk-backend,provider-gateway,microservice-proxy + - name: HWLAB_CLOUD_DB_URL + valueFrom: + secretKeyRef: + name: hwlab-cloud-api-v03-db + key: database-url + optional: true + - name: HWLAB_CLOUD_DB_SSL_MODE + value: disable + - name: HWLAB_CLOUD_DB_CONTRACT + value: v03-redacted-presence-only + - name: HWLAB_CLOUD_RUNTIME_ADAPTER + value: postgres + - name: HWLAB_CLOUD_RUNTIME_DURABLE + value: "true" + - name: HWLAB_CODE_AGENT_TIMEOUT_MS + value: "1200000" + - name: HWLAB_CODE_AGENT_SKILLS_DIRS + value: /app/skills:/data/user-skills + - name: HWLAB_PREINSTALLED_SKILLS_DIR + value: /app/skills + - name: HWLAB_USER_SKILLS_DIR + value: /data/user-skills + - name: HWLAB_CODE_AGENT_DEFAULT_PROVIDER_PROFILE + value: deepseek + - name: HWLAB_CODE_AGENT_DEEPSEEK_MODEL + value: deepseek-chat + - name: HWLAB_CODE_AGENT_DEEPSEEK_BASE_URL + value: http://hwlab-deepseek-proxy.hwlab-v03.svc.cluster.local:4000/v1/responses + - name: HWLAB_CODE_AGENT_CODEX_API_MODEL + value: gpt-5.5 + - name: HWLAB_CODE_AGENT_CODEX_API_BASE_URL + value: http://127.0.0.1:49280/responses + - name: TZ + value: Asia/Shanghai + - name: HWLAB_METRICS_NAMESPACE + value: hwlab-v03 + - name: HWLAB_OBSERVABILITY_CONFIG_REVISION + value: PJ2026-01060505-20260619-long-trace-timeout-mitigation + - name: HWLAB_CODE_AGENT_TURN_STATUS_REFRESH_TIMEOUT_MS + value: "30000" + - name: HWLAB_CODE_AGENT_AGENTRUN_NO_RESPONSE_TIMEOUT_MS + value: "600000" + - name: HWLAB_CODE_AGENT_AGENTRUN_DISPATCH_RETRY_MAX + value: "5" + - name: HWLAB_CODE_AGENT_AGENTRUN_DISPATCH_RETRY_BASE_MS + value: "1000" + - name: HWLAB_CODE_AGENT_AGENTRUN_DISPATCH_RETRY_MAX_DELAY_MS + value: "30000" + - name: HWLAB_CODE_AGENT_AGENTRUN_PROJECTION_SYNC_POLL_INTERVAL_MS + value: "1000" + - name: HWLAB_CODE_AGENT_AGENTRUN_PROJECTION_RESUME_ENABLED + value: "1" + - name: HWLAB_CODE_AGENT_AGENTRUN_PROJECTION_RESUME_INITIAL_DELAY_MS + value: "5000" + - name: HWLAB_CODE_AGENT_AGENTRUN_PROJECTION_RESUME_INTERVAL_MS + value: "60000" + - name: HWLAB_CODE_AGENT_AGENTRUN_PROJECTION_RESUME_MIN_AGE_MS + value: "30000" + - name: HWLAB_CODE_AGENT_AGENTRUN_PROJECTION_RESUME_BATCH_SIZE + value: "100" + - name: HWLAB_CODE_AGENT_AGENTRUN_PROJECTION_RESUME_JITTER_MS + value: "15000" + - name: HWLAB_CODE_AGENT_AGENTRUN_PROJECTION_RESUME_FAILURE_BACKOFF_MS + value: "120000" + - name: HWLAB_BOOTSTRAP_ADMIN_PASSWORD_HASH + valueFrom: + secretKeyRef: + name: hwlab-v03-bootstrap-admin + key: password-hash + optional: true + - name: HWLAB_PRESET_USER_HUIGGAO_PASSWORD_HASH + valueFrom: + secretKeyRef: + name: hwlab-v03-preset-users + key: huiggao-password-hash + optional: true + - name: HWLAB_ACCESS_CONTROL_USERS_JSON + value: '[{"id":"usr_v03_admin","username":"admin","displayName":"HWLAB v0.3 + Admin","email":null,"role":"admin","status":"active","navProfile":"admin-full","passwordHashEnv":"HWLAB_BOOTSTRAP_ADMIN_PASSWORD_HASH"},{"id":"usr_v03_huiggao","username":"huiggao@163.com","displayName":"huiggao@163.com","email":"huiggao@163.com","role":"user","status":"active","navProfile":"code-mdtodo-only","passwordHashEnv":"HWLAB_PRESET_USER_HUIGGAO_PASSWORD_HASH"}]' + - name: HWLAB_ACCESS_CONTROL_NAV_PROFILES_JSON + value: '[{"id":"admin-full","displayName":"Admin full + access","allowedIds":["*"]},{"id":"code-mdtodo-only","displayName":"Code + and MDTODO + only","allowedIds":["workbench.code","project.mdtodo"]}]' + - name: HWLAB_CLOUD_DB_POOL_MAX + value: "16" + - name: HWLAB_CLOUD_DB_PROBE_TIMEOUT_MS + value: "5000" + - name: HWLAB_CLOUD_DB_QUERY_RETRY_MAX_ATTEMPTS + value: "5" + - name: HWLAB_CLOUD_DB_QUERY_RETRY_INITIAL_DELAY_MS + value: "250" + - name: HWLAB_CLOUD_DB_QUERY_RETRY_MAX_DELAY_MS + value: "5000" + - name: HWLAB_WORKBENCH_RUNTIME_TIMEOUT_MS + value: "3000" + - name: HWLAB_WORKBENCH_FACTS_QUERY_MAX_ATTEMPTS + value: "1" + - name: HWLAB_WORKBENCH_FACTS_QUERY_BACKOFF_BASE_MS + value: "0" + - name: HWLAB_WORKBENCH_FACTS_QUERY_BACKOFF_MAX_MS + value: "1" + - name: HWLAB_ACCESS_CONTROL_REQUIRED + value: "1" + - name: HWLAB_BOOTSTRAP_ADMIN_ID + value: usr_v03_admin + - name: HWLAB_BOOTSTRAP_ADMIN_USERNAME + value: admin + - name: HWLAB_BOOTSTRAP_ADMIN_DISPLAY_NAME + value: HWLAB v0.3 Admin + - name: HWLAB_BOOTSTRAP_ADMIN_API_KEY_ID + value: key_master_server_admin + - name: HWLAB_BOOTSTRAP_ADMIN_API_KEY + valueFrom: + secretKeyRef: + name: hwlab-v03-master-server-admin-api-key + key: api-key + optional: true + - name: HWLAB_USER_BILLING_URL + value: http://hwlab-user-billing.hwlab-v03.svc.cluster.local:6670 + - name: HWLAB_WORKBENCH_RUNTIME_URL + value: http://hwlab-workbench-runtime.hwlab-v03.svc.cluster.local:6671 + - name: HWLAB_PROJECT_MANAGEMENT_URL + value: http://hwlab-project-management.hwlab-v03.svc.cluster.local:6672 + - name: HWLAB_HWPOD_SPEC_REGISTRY_DIRS + value: /etc/hwlab/hwpod-specs + - name: HWLAB_USER_BILLING_LOGIN_RETRY_ATTEMPTS + value: "2" + - name: HWLAB_USER_BILLING_LOGIN_RETRY_DELAY_MS + value: "250" + - name: HWLAB_USER_BILLING_CODE_AGENT_ENABLED + value: "1" + - name: HWLAB_USER_BILLING_CODE_AGENT_ESTIMATED_CREDITS + value: "1" + - name: HWLAB_USER_BILLING_CODE_AGENT_USED_CREDITS + value: "1" + - name: HWLAB_KEYCLOAK_ISSUER + value: https://auth.74-48-78-17.nip.io/realms/hwlab + - name: HWLAB_KEYCLOAK_CLIENT_ID + value: hwlab-cloud-web + - name: HWLAB_KEYCLOAK_CLIENT_SECRET + valueFrom: + secretKeyRef: + name: hwlab-cloud-web-client + key: client-secret + optional: true + - name: HWLAB_CODE_AGENT_ADAPTER + value: agentrun-v01 + - name: OTEL_EXPORTER_OTLP_TRACES_ENDPOINT + value: http://otel-collector.platform-infra.svc.cluster.local:4318/v1/traces + - name: OTEL_SERVICE_NAME + value: hwlab-cloud-api + - name: AGENTRUN_MGR_URL + value: http://agentrun-mgr.agentrun-v02.svc.cluster.local:8080 + - name: AGENTRUN_API_KEY + valueFrom: + secretKeyRef: + name: hwlab-v03-master-server-admin-api-key + key: api-key + optional: true + - name: HWLAB_CODE_AGENT_AGENTRUN_RUNNER_NAMESPACE + value: agentrun-v02 + - name: HWLAB_CODE_AGENT_AGENTRUN_SECRET_NAMESPACE + value: agentrun-v02 + - name: HWLAB_CODE_AGENT_AGENTRUN_REPO_URL + value: http://git-mirror-http.devops-infra.svc.cluster.local:8080/pikasTech/HWLAB.git + - name: HWLAB_WORKBENCH_EMPTY_SESSION_GC_ENABLED + value: "1" + - name: HWLAB_WORKBENCH_EMPTY_SESSION_TTL_MS + value: "600000" + - name: HWLAB_WORKBENCH_EMPTY_SESSION_GC_INTERVAL_MS + value: "60000" + - name: HWLAB_WORKBENCH_EMPTY_SESSION_GC_INITIAL_DELAY_MS + value: "5000" + - name: HWLAB_WORKBENCH_EMPTY_SESSION_GC_BATCH_SIZE + value: "100" + - name: HWLAB_WORKBENCH_EMPTY_SESSION_GC_JITTER_MS + value: "15000" + - name: HWLAB_WORKBENCH_EMPTY_SESSION_GC_FAILURE_BACKOFF_MS + value: "120000" + - name: HWLAB_SECRET_PLANE_SMOKE + valueFrom: + secretKeyRef: + name: hwlab-secret-plane-smoke + key: password + optional: true + - name: HWLAB_COMMIT_ID + value: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + - name: HWLAB_IMAGE + value: 127.0.0.1:5000/hwlab/hwlab-cloud-api-env@sha256:c317276bb0d002bc82cb8d3cde6d5e596db18325585436d9f3592ebd173eb01d + - name: HWLAB_IMAGE_TAG + value: env-5ff41b539190 + - name: HWLAB_GITOPS_TARGET + value: v03 + - name: HWLAB_GITOPS_PROFILE + value: v03 + - name: HWLAB_GITOPS_SOURCE_COMMIT + value: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + - name: HWLAB_CODE_AGENT_AGENTRUN_SOURCE_COMMIT + value: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + - name: HWLAB_RUNTIME_MODE + value: env-reuse-git-mirror-checkout + - name: HWLAB_BOOT_REPO + value: git@github.com:pikasTech/HWLAB.git + - name: HWLAB_BOOT_COMMIT + value: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + - name: HWLAB_BOOT_REF + value: v0.3 + - name: HWLAB_BOOT_SH + value: deploy/runtime/boot/hwlab-codex-api-responses-forwarder.sh + - name: HWLAB_BOOT_READ_URL + value: http://git-mirror-http.devops-infra.svc.cluster.local:8080/pikasTech/HWLAB.git + - name: HWLAB_ENVIRONMENT_IMAGE + value: 127.0.0.1:5000/hwlab/hwlab-cloud-api-env:env-5ff41b539190 + - name: HWLAB_ENVIRONMENT_DIGEST + value: sha256:c317276bb0d002bc82cb8d3cde6d5e596db18325585436d9f3592ebd173eb01d + - name: HWLAB_ENVIRONMENT_INPUT_HASH + value: 5ff41b539190849e76511ed722a4539f5921622e98eea1444b606475f8ef55aa + - name: HWLAB_CODE_INPUT_HASH + value: e692ec9a4feee2d0ee983f1f9dc2eeebdfa1e4dd68dd9bcfdef19129d9bbb57a + - name: HWLAB_IMAGE_DIGEST + value: sha256:c317276bb0d002bc82cb8d3cde6d5e596db18325585436d9f3592ebd173eb01d + - name: HWLAB_WORKBENCH_SSE_DRAIN_TIMEOUT_MS + value: "2500" + - name: HWLAB_CODE_AGENT_AGENTRUN_PROVIDER_ID + value: JD01 + - name: HWLAB_OPENFGA_MODE + value: enforce + - name: HWLAB_OPENFGA_API_URL + value: http://hwlab-openfga.hwlab-v03.svc.cluster.local:8080 + - name: HWLAB_OPENFGA_AUTHN_TOKEN + valueFrom: + secretKeyRef: + name: hwlab-v03-openfga + key: authn-preshared-key + optional: true + - name: UNIDESK_MAIN_SERVER_IP + value: http://74.48.78.17:18081 + readinessProbe: + exec: + command: + - node + - -e + - "fetch('http://127.0.0.1:49280/health/readiness').then((r\ + esponse) => process.exit(response.ok ? 0 : 1)).catch(() => + process.exit(1))" + timeoutSeconds: 2 + livenessProbe: + exec: + command: + - node + - -e + - "fetch('http://127.0.0.1:49280/health/live').then((respon\ + se) => process.exit(response.ok ? 0 : 1)).catch(() => + process.exit(1))" + timeoutSeconds: 2 + volumeMounts: + - name: hwpod-preinstalled-specs + mountPath: /etc/hwlab/hwpod-specs + readOnly: true + imagePullPolicy: IfNotPresent + startupProbe: + exec: + command: + - node + - -e + - "fetch('http://127.0.0.1:49280/health/readiness').then((r\ + esponse) => process.exit(response.ok ? 0 : 1)).catch(() => + process.exit(1))" + timeoutSeconds: 2 + periodSeconds: 10 + failureThreshold: 30 + successThreshold: 1 + lifecycle: + preStop: + exec: + command: + - sh + - -c + - "port=\"${PORT:-${HWLAB_PORT:-${HWLAB_CLOUD_API_PORT:-6\ + 667}}}\"; + url=\"http://127.0.0.1:${port}/v1/internal/workbench/dr\ + ain\"; /usr/local/bin/bun -e 'const [url, hostname] = + process.argv.slice(2); await fetch(url, { method: + \"POST\", headers: { \"x-hwlab-drain-hostname\": + hostname || \"\" } }).catch(() => {});' \"$url\" + \"${HOSTNAME:-}\" >/dev/null 2>&1 || true; sleep 3" + volumes: + - name: hwlab-user-skills + persistentVolumeClaim: + claimName: hwlab-user-skills + - name: hwpod-preinstalled-specs + configMap: + name: hwlab-v03-hwpod-preinstalled-specs + - apiVersion: apps/v1 + kind: Deployment + metadata: + name: hwlab-user-billing + namespace: hwlab-v03 + labels: + app.kubernetes.io/name: hwlab-user-billing + hwlab.pikastech.local/service-id: hwlab-user-billing + app.kubernetes.io/part-of: hwlab + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + hwlab.pikastech.local/gitops-target: v03 + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + unidesk.ai/node-staging: "false" + hwlab.pikastech.local/monitoring: disabled + annotations: + hwlab.pikastech.local/gitops-note: node DEV GitOps target. + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: hwlab-user-billing + app.kubernetes.io/part-of: hwlab + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + template: + metadata: + labels: + app.kubernetes.io/name: hwlab-user-billing + hwlab.pikastech.local/service-id: hwlab-user-billing + app.kubernetes.io/part-of: hwlab + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + hwlab.pikastech.local/gitops-target: v03 + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/artifact-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/monitoring: disabled + hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout + hwlab.pikastech.local/boot-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + annotations: + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/artifact-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs + hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout + hwlab.pikastech.local/boot-repo: git@github.com:pikasTech/HWLAB.git + hwlab.pikastech.local/boot-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/boot-sh: deploy/runtime/boot/hwlab-user-billing.sh + hwlab.pikastech.local/environment-digest: sha256:0b0030ee57a8a603af6e7cc2673b4cd9dce52d9117b571b7f0dc5b39724ce7e3 + hwlab.pikastech.local/environment-input-hash: 2cf8ee7ed635a31a8c16f5aa35c28d6cfbf1234d32176f2e6e8d40b1cceefb5d + hwlab.pikastech.local/code-input-hash: 1c7f8090dc17d9a7dfc7cdd0714e7294bb231db899c396b388e4ab3642e5134e + spec: + containers: + - name: hwlab-user-billing + image: 127.0.0.1:5000/hwlab/hwlab-user-billing-env@sha256:0b0030ee57a8a603af6e7cc2673b4cd9dce52d9117b571b7f0dc5b39724ce7e3 + ports: + - name: http + containerPort: 6670 + env: + - name: HWLAB_USER_BILLING_PORT + value: "6670" + - name: HWLAB_USER_BILLING_STATE_AUTHORITY + value: pk01-postgres + - name: HWLAB_USER_BILLING_STATELESS + value: "true" + - name: TZ + value: Asia/Shanghai + - name: HWLAB_USER_BILLING_DB_URL + valueFrom: + secretKeyRef: + name: hwlab-cloud-api-v03-db + key: database-url + optional: true + - name: HWLAB_USER_BILLING_DB_POOL_MAX + value: "2" + - name: HWLAB_USER_BILLING_MIGRATION_TIMEOUT_SECONDS + value: "180" + - name: HWLAB_USER_BILLING_BOOTSTRAP_TIMEOUT_SECONDS + value: "60" + - name: HWLAB_BOOTSTRAP_ADMIN_ID + value: usr_v03_admin + - name: HWLAB_BOOTSTRAP_ADMIN_USERNAME + value: admin + - name: HWLAB_BOOTSTRAP_ADMIN_DISPLAY_NAME + value: HWLAB v0.3 Admin + - name: HWLAB_BOOTSTRAP_ADMIN_PASSWORD_HASH + valueFrom: + secretKeyRef: + name: hwlab-v03-bootstrap-admin + key: password-hash + optional: true + - name: HWLAB_USER_BILLING_EXTERNAL_DB_LABEL + value: pk01-external-postgres + - name: HWLAB_USER_BILLING_REGISTRATION_ENABLED + value: "1" + - name: HWLAB_USER_BILLING_INITIAL_CREDITS + value: "0" + - name: HWLAB_USER_BILLING_CREDIT_PER_1K_TOKENS + value: "1" + - name: HWLAB_USER_BILLING_MIGRATE_ON_START + value: "1" + - name: HWLAB_USER_BILLING_REDIS_URL + value: redis://hwlab-user-billing-redis.hwlab-v03.svc.cluster.local:6379/0 + - name: OTEL_EXPORTER_OTLP_TRACES_ENDPOINT + value: http://otel-collector.platform-infra.svc.cluster.local:4318/v1/traces + - name: OTEL_SERVICE_NAME + value: hwlab-user-billing + - name: HWLAB_ENVIRONMENT + value: v03 + - name: HWLAB_COMMIT_ID + value: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + - name: HWLAB_IMAGE + value: 127.0.0.1:5000/hwlab/hwlab-user-billing-env@sha256:0b0030ee57a8a603af6e7cc2673b4cd9dce52d9117b571b7f0dc5b39724ce7e3 + - name: HWLAB_IMAGE_TAG + value: env-2cf8ee7ed635 + - name: HWLAB_GITOPS_TARGET + value: v03 + - name: HWLAB_GITOPS_PROFILE + value: v03 + - name: HWLAB_GITOPS_SOURCE_COMMIT + value: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + - name: HWLAB_RUNTIME_MODE + value: env-reuse-git-mirror-checkout + - name: HWLAB_BOOT_REPO + value: git@github.com:pikasTech/HWLAB.git + - name: HWLAB_BOOT_COMMIT + value: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + - name: HWLAB_BOOT_REF + value: v0.3 + - name: HWLAB_BOOT_SH + value: deploy/runtime/boot/hwlab-user-billing.sh + - name: HWLAB_BOOT_READ_URL + value: http://git-mirror-http.devops-infra.svc.cluster.local:8080/pikasTech/HWLAB.git + - name: HWLAB_ENVIRONMENT_IMAGE + value: 127.0.0.1:5000/hwlab/hwlab-user-billing-env:env-2cf8ee7ed635 + - name: HWLAB_ENVIRONMENT_DIGEST + value: sha256:0b0030ee57a8a603af6e7cc2673b4cd9dce52d9117b571b7f0dc5b39724ce7e3 + - name: HWLAB_ENVIRONMENT_INPUT_HASH + value: 2cf8ee7ed635a31a8c16f5aa35c28d6cfbf1234d32176f2e6e8d40b1cceefb5d + - name: HWLAB_CODE_INPUT_HASH + value: 1c7f8090dc17d9a7dfc7cdd0714e7294bb231db899c396b388e4ab3642e5134e + - name: HWLAB_IMAGE_DIGEST + value: sha256:0b0030ee57a8a603af6e7cc2673b4cd9dce52d9117b571b7f0dc5b39724ce7e3 + readinessProbe: + httpGet: + path: /health/ready + port: http + timeoutSeconds: 10 + failureThreshold: 5 + livenessProbe: + httpGet: + path: /health/live + port: http + timeoutSeconds: 5 + failureThreshold: 6 + imagePullPolicy: IfNotPresent + startupProbe: + httpGet: + path: /health/ready + port: http + periodSeconds: 10 + timeoutSeconds: 10 + failureThreshold: 30 + successThreshold: 1 + volumes: [] + - apiVersion: apps/v1 + kind: Deployment + metadata: + name: hwlab-cloud-web + namespace: hwlab-v03 + labels: + app.kubernetes.io/name: hwlab-cloud-web + hwlab.pikastech.local/service-id: hwlab-cloud-web + app.kubernetes.io/part-of: hwlab + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + hwlab.pikastech.local/gitops-target: v03 + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + unidesk.ai/node-staging: "false" + hwlab.pikastech.local/monitoring: disabled + annotations: + hwlab.pikastech.local/gitops-note: node DEV GitOps target. + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: hwlab-cloud-web + app.kubernetes.io/part-of: hwlab + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + template: + metadata: + labels: + app.kubernetes.io/name: hwlab-cloud-web + hwlab.pikastech.local/service-id: hwlab-cloud-web + app.kubernetes.io/part-of: hwlab + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + hwlab.pikastech.local/gitops-target: v03 + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/artifact-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/monitoring: disabled + hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout + hwlab.pikastech.local/boot-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + annotations: + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/artifact-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs + hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout + hwlab.pikastech.local/boot-repo: git@github.com:pikasTech/HWLAB.git + hwlab.pikastech.local/boot-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/boot-sh: deploy/runtime/boot/hwlab-cloud-web.sh + hwlab.pikastech.local/environment-digest: sha256:3236077bdfde794202d1205cddbdb69c78a721b5b83f7221cfad9993185c5728 + hwlab.pikastech.local/environment-input-hash: 5ff41b539190849e76511ed722a4539f5921622e98eea1444b606475f8ef55aa + hwlab.pikastech.local/code-input-hash: 2f419dca5d5d7105222c1b087797b7369d6fc93207cd2c87c2eee18d75349e45 + spec: + containers: + - name: hwlab-cloud-web + image: 127.0.0.1:5000/hwlab/hwlab-cloud-web-env@sha256:3236077bdfde794202d1205cddbdb69c78a721b5b83f7221cfad9993185c5728 + ports: + - name: http + containerPort: 8080 + env: + - name: HWLAB_API_BASE_URL + value: http://hwlab-cloud-api.hwlab-v03.svc.cluster.local:6667 + - name: HWLAB_CLOUD_WEB_PROXY_TIMEOUT_MS + value: "1260000" + - name: HWLAB_COMMIT_ID + value: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + - name: HWLAB_IMAGE + value: 127.0.0.1:5000/hwlab/hwlab-cloud-web-env@sha256:3236077bdfde794202d1205cddbdb69c78a721b5b83f7221cfad9993185c5728 + - name: HWLAB_IMAGE_TAG + value: env-5ff41b539190 + - name: HWLAB_ENVIRONMENT + value: v03 + - name: HWLAB_CLOUD_WEB_DISPLAY_TIME_ZONE + value: Asia/Shanghai + - name: HWLAB_CLOUD_WEB_DISPLAY_TIME_LOCALE + value: zh-CN + - name: HWLAB_CLOUD_WEB_DISPLAY_TIME_LABEL + value: 北京时间 + - name: HWLAB_GITOPS_TARGET + value: v03 + - name: HWLAB_GITOPS_PROFILE + value: v03 + - name: HWLAB_GITOPS_SOURCE_COMMIT + value: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + - name: HWLAB_RUNTIME_MODE + value: env-reuse-git-mirror-checkout + - name: HWLAB_BOOT_REPO + value: git@github.com:pikasTech/HWLAB.git + - name: HWLAB_BOOT_COMMIT + value: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + - name: HWLAB_BOOT_REF + value: v0.3 + - name: HWLAB_BOOT_SH + value: deploy/runtime/boot/hwlab-cloud-web.sh + - name: HWLAB_BOOT_READ_URL + value: http://git-mirror-http.devops-infra.svc.cluster.local:8080/pikasTech/HWLAB.git + - name: HWLAB_ENVIRONMENT_IMAGE + value: 127.0.0.1:5000/hwlab/hwlab-cloud-web-env:env-5ff41b539190 + - name: HWLAB_ENVIRONMENT_DIGEST + value: sha256:3236077bdfde794202d1205cddbdb69c78a721b5b83f7221cfad9993185c5728 + - name: HWLAB_ENVIRONMENT_INPUT_HASH + value: 5ff41b539190849e76511ed722a4539f5921622e98eea1444b606475f8ef55aa + - name: HWLAB_CODE_INPUT_HASH + value: 2f419dca5d5d7105222c1b087797b7369d6fc93207cd2c87c2eee18d75349e45 + - name: HWLAB_IMAGE_DIGEST + value: sha256:3236077bdfde794202d1205cddbdb69c78a721b5b83f7221cfad9993185c5728 + - name: HWLAB_PUBLIC_ENDPOINT + value: https://hwlab.pikapython.com + - name: HWLAB_WORKBENCH_TRACE_AUTO_EXPAND_RUNNING + value: "0" + - name: HWLAB_WORKBENCH_TRACE_AUTO_COLLAPSE_TERMINAL + value: "0" + readinessProbe: + httpGet: + path: /health/live + port: http + livenessProbe: + httpGet: + path: /health/live + port: http + imagePullPolicy: IfNotPresent + startupProbe: + httpGet: + path: /health/live + port: http + periodSeconds: 10 + timeoutSeconds: 2 + failureThreshold: 30 + successThreshold: 1 + volumes: [] + - apiVersion: apps/v1 + kind: Deployment + metadata: + name: hwlab-gateway + namespace: hwlab-v03 + labels: + app.kubernetes.io/name: hwlab-gateway + hwlab.pikastech.local/service-id: hwlab-gateway + hwlab.pikastech.local/activation: manual + app.kubernetes.io/part-of: hwlab + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + hwlab.pikastech.local/gitops-target: v03 + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + unidesk.ai/node-staging: "false" + annotations: + hwlab.pikastech.local/gitops-note: node DEV GitOps target. + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + spec: + replicas: 0 + selector: + matchLabels: + app.kubernetes.io/name: hwlab-gateway + app.kubernetes.io/part-of: hwlab + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + template: + metadata: + labels: + app.kubernetes.io/name: hwlab-gateway + hwlab.pikastech.local/service-id: hwlab-gateway + app.kubernetes.io/part-of: hwlab + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + hwlab.pikastech.local/gitops-target: v03 + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/artifact-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout + hwlab.pikastech.local/boot-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + annotations: + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/artifact-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs + hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout + hwlab.pikastech.local/boot-repo: git@github.com:pikasTech/HWLAB.git + hwlab.pikastech.local/boot-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/boot-sh: deploy/runtime/boot/hwlab-gateway.sh + hwlab.pikastech.local/environment-digest: sha256:bfa144b3183fca784c2107c072744af959b352026d3841c8868db5cfd7a961a1 + hwlab.pikastech.local/environment-input-hash: 5ff41b539190849e76511ed722a4539f5921622e98eea1444b606475f8ef55aa + hwlab.pikastech.local/code-input-hash: 9693556c71091e3e85d61efc6ef7d62e1064fba145ec83b3b9c196477f0b2870 + spec: + containers: + - name: hwlab-gateway + image: 127.0.0.1:5000/hwlab/hwlab-gateway-env@sha256:bfa144b3183fca784c2107c072744af959b352026d3841c8868db5cfd7a961a1 + ports: + - name: http + containerPort: 7001 + env: + - name: HWLAB_GATEWAY_MODE + value: hardware-boundary + - name: HWLAB_ENVIRONMENT + value: v03 + - name: TZ + value: Asia/Shanghai + - name: HWLAB_COMMIT_ID + value: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + - name: HWLAB_IMAGE + value: 127.0.0.1:5000/hwlab/hwlab-gateway-env@sha256:bfa144b3183fca784c2107c072744af959b352026d3841c8868db5cfd7a961a1 + - name: HWLAB_IMAGE_TAG + value: env-5ff41b539190 + - name: HWLAB_GITOPS_TARGET + value: v03 + - name: HWLAB_GITOPS_PROFILE + value: v03 + - name: HWLAB_GITOPS_SOURCE_COMMIT + value: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + - name: HWLAB_RUNTIME_MODE + value: env-reuse-git-mirror-checkout + - name: HWLAB_BOOT_REPO + value: git@github.com:pikasTech/HWLAB.git + - name: HWLAB_BOOT_COMMIT + value: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + - name: HWLAB_BOOT_REF + value: v0.3 + - name: HWLAB_BOOT_SH + value: deploy/runtime/boot/hwlab-gateway.sh + - name: HWLAB_BOOT_READ_URL + value: http://git-mirror-http.devops-infra.svc.cluster.local:8080/pikasTech/HWLAB.git + - name: HWLAB_ENVIRONMENT_IMAGE + value: 127.0.0.1:5000/hwlab/hwlab-gateway-env:env-5ff41b539190 + - name: HWLAB_ENVIRONMENT_DIGEST + value: sha256:bfa144b3183fca784c2107c072744af959b352026d3841c8868db5cfd7a961a1 + - name: HWLAB_ENVIRONMENT_INPUT_HASH + value: 5ff41b539190849e76511ed722a4539f5921622e98eea1444b606475f8ef55aa + - name: HWLAB_CODE_INPUT_HASH + value: 9693556c71091e3e85d61efc6ef7d62e1064fba145ec83b3b9c196477f0b2870 + - name: HWLAB_IMAGE_DIGEST + value: sha256:bfa144b3183fca784c2107c072744af959b352026d3841c8868db5cfd7a961a1 + readinessProbe: + httpGet: + path: /health/live + port: http + livenessProbe: + httpGet: + path: /health/live + port: http + imagePullPolicy: IfNotPresent + startupProbe: + httpGet: + path: /health/live + port: http + periodSeconds: 10 + timeoutSeconds: 2 + failureThreshold: 30 + successThreshold: 1 + - apiVersion: apps/v1 + kind: Deployment + metadata: + name: hwlab-edge-proxy + namespace: hwlab-v03 + labels: + app.kubernetes.io/name: hwlab-edge-proxy + hwlab.pikastech.local/service-id: hwlab-edge-proxy + app.kubernetes.io/part-of: hwlab + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + hwlab.pikastech.local/gitops-target: v03 + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + unidesk.ai/node-staging: "false" + hwlab.pikastech.local/monitoring: disabled + annotations: + hwlab.pikastech.local/gitops-note: node DEV GitOps target. + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: hwlab-edge-proxy + app.kubernetes.io/part-of: hwlab + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + template: + metadata: + labels: + app.kubernetes.io/name: hwlab-edge-proxy + hwlab.pikastech.local/service-id: hwlab-edge-proxy + app.kubernetes.io/part-of: hwlab + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + hwlab.pikastech.local/gitops-target: v03 + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/artifact-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/monitoring: disabled + hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout + hwlab.pikastech.local/boot-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + annotations: + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/artifact-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs + hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout + hwlab.pikastech.local/boot-repo: git@github.com:pikasTech/HWLAB.git + hwlab.pikastech.local/boot-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/boot-sh: deploy/runtime/boot/hwlab-edge-proxy.sh + hwlab.pikastech.local/environment-digest: sha256:4f9e5d4a4d8b4c714a9d7127f9c15ce770640c84f8f5a1dde5e1727f53766165 + hwlab.pikastech.local/environment-input-hash: 5ff41b539190849e76511ed722a4539f5921622e98eea1444b606475f8ef55aa + hwlab.pikastech.local/code-input-hash: c97d19939c872e128a6931bdf73f28a75a684948a76a2b1af37508dd47481544 + spec: + containers: + - name: hwlab-edge-proxy + image: 127.0.0.1:5000/hwlab/hwlab-edge-proxy-env@sha256:4f9e5d4a4d8b4c714a9d7127f9c15ce770640c84f8f5a1dde5e1727f53766165 + ports: + - name: http + containerPort: 6667 + env: + - name: HWLAB_EDGE_LISTEN + value: 0.0.0.0:6667 + - name: HWLAB_EDGE_UPSTREAM + value: http://hwlab-cloud-api.hwlab-v03.svc.cluster.local:6667 + - name: HWLAB_EDGE_PROXY_TIMEOUT_MS + value: "1260000" + - name: HWLAB_EDGE_IDLE_TIMEOUT_SECONDS + value: "120" + - name: TZ + value: Asia/Shanghai + - name: HWLAB_ENVIRONMENT + value: v03 + - name: HWLAB_COMMIT_ID + value: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + - name: HWLAB_IMAGE + value: 127.0.0.1:5000/hwlab/hwlab-edge-proxy-env@sha256:4f9e5d4a4d8b4c714a9d7127f9c15ce770640c84f8f5a1dde5e1727f53766165 + - name: HWLAB_IMAGE_TAG + value: env-5ff41b539190 + - name: HWLAB_GITOPS_TARGET + value: v03 + - name: HWLAB_GITOPS_PROFILE + value: v03 + - name: HWLAB_GITOPS_SOURCE_COMMIT + value: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + - name: HWLAB_RUNTIME_MODE + value: env-reuse-git-mirror-checkout + - name: HWLAB_BOOT_REPO + value: git@github.com:pikasTech/HWLAB.git + - name: HWLAB_BOOT_COMMIT + value: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + - name: HWLAB_BOOT_REF + value: v0.3 + - name: HWLAB_BOOT_SH + value: deploy/runtime/boot/hwlab-edge-proxy.sh + - name: HWLAB_BOOT_READ_URL + value: http://git-mirror-http.devops-infra.svc.cluster.local:8080/pikasTech/HWLAB.git + - name: HWLAB_ENVIRONMENT_IMAGE + value: 127.0.0.1:5000/hwlab/hwlab-edge-proxy-env:env-5ff41b539190 + - name: HWLAB_ENVIRONMENT_DIGEST + value: sha256:4f9e5d4a4d8b4c714a9d7127f9c15ce770640c84f8f5a1dde5e1727f53766165 + - name: HWLAB_ENVIRONMENT_INPUT_HASH + value: 5ff41b539190849e76511ed722a4539f5921622e98eea1444b606475f8ef55aa + - name: HWLAB_CODE_INPUT_HASH + value: c97d19939c872e128a6931bdf73f28a75a684948a76a2b1af37508dd47481544 + - name: HWLAB_IMAGE_DIGEST + value: sha256:4f9e5d4a4d8b4c714a9d7127f9c15ce770640c84f8f5a1dde5e1727f53766165 + - name: HWLAB_PUBLIC_ENDPOINT + value: https://hwlab.pikapython.com + readinessProbe: + httpGet: + path: /health + port: http + timeoutSeconds: 3 + failureThreshold: 5 + livenessProbe: + httpGet: + path: /health + port: http + periodSeconds: 20 + timeoutSeconds: 5 + failureThreshold: 6 + imagePullPolicy: IfNotPresent + startupProbe: + httpGet: + path: /health/live + port: http + periodSeconds: 10 + timeoutSeconds: 3 + failureThreshold: 30 + successThreshold: 1 + volumes: [] + - apiVersion: apps/v1 + kind: Deployment + metadata: + name: hwlab-agent-skills + namespace: hwlab-v03 + labels: + app.kubernetes.io/name: hwlab-agent-skills + hwlab.pikastech.local/service-id: hwlab-agent-skills + app.kubernetes.io/part-of: hwlab + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + hwlab.pikastech.local/gitops-target: v03 + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + unidesk.ai/node-staging: "false" + hwlab.pikastech.local/monitoring: disabled + annotations: + hwlab.pikastech.local/gitops-note: node DEV GitOps target. + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: hwlab-agent-skills + app.kubernetes.io/part-of: hwlab + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + template: + metadata: + labels: + app.kubernetes.io/name: hwlab-agent-skills + hwlab.pikastech.local/service-id: hwlab-agent-skills + app.kubernetes.io/part-of: hwlab + hwlab.pikastech.local/environment: v03 + hwlab.pikastech.local/profile: v03 + hwlab.pikastech.local/gitops-target: v03 + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/artifact-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/monitoring: disabled + hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout + hwlab.pikastech.local/boot-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + annotations: + hwlab.pikastech.local/gitops-render-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/artifact-source-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs + hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout + hwlab.pikastech.local/boot-repo: git@github.com:pikasTech/HWLAB.git + hwlab.pikastech.local/boot-commit: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + hwlab.pikastech.local/boot-sh: deploy/runtime/boot/hwlab-agent-skills.sh + hwlab.pikastech.local/environment-digest: sha256:4b1d08b3afc4b4001d3a95b293ce99d1f94093ef6d0958f44658f5b5bfd16ca8 + hwlab.pikastech.local/environment-input-hash: 5ff41b539190849e76511ed722a4539f5921622e98eea1444b606475f8ef55aa + hwlab.pikastech.local/code-input-hash: 369ca524ae4010fb5d9adfd30b4290808a035804b4674755bc193fee743f3d5a + spec: + containers: + - name: hwlab-agent-skills + image: 127.0.0.1:5000/hwlab/hwlab-agent-skills-env@sha256:4b1d08b3afc4b4001d3a95b293ce99d1f94093ef6d0958f44658f5b5bfd16ca8 + ports: + - name: http + containerPort: 7430 + env: + - name: HWLAB_SKILLS_COMMIT_ID + value: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + - name: TZ + value: Asia/Shanghai + - name: HWLAB_ENVIRONMENT + value: v03 + - name: HWLAB_COMMIT_ID + value: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + - name: HWLAB_IMAGE + value: 127.0.0.1:5000/hwlab/hwlab-agent-skills-env@sha256:4b1d08b3afc4b4001d3a95b293ce99d1f94093ef6d0958f44658f5b5bfd16ca8 + - name: HWLAB_IMAGE_TAG + value: env-5ff41b539190 + - name: HWLAB_GITOPS_TARGET + value: v03 + - name: HWLAB_GITOPS_PROFILE + value: v03 + - name: HWLAB_GITOPS_SOURCE_COMMIT + value: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + - name: HWLAB_RUNTIME_MODE + value: env-reuse-git-mirror-checkout + - name: HWLAB_BOOT_REPO + value: git@github.com:pikasTech/HWLAB.git + - name: HWLAB_BOOT_COMMIT + value: 1c448bc4b9fac145059b6ceffcb6c52e542aba13 + - name: HWLAB_BOOT_REF + value: v0.3 + - name: HWLAB_BOOT_SH + value: deploy/runtime/boot/hwlab-agent-skills.sh + - name: HWLAB_BOOT_READ_URL + value: http://git-mirror-http.devops-infra.svc.cluster.local:8080/pikasTech/HWLAB.git + - name: HWLAB_ENVIRONMENT_IMAGE + value: 127.0.0.1:5000/hwlab/hwlab-agent-skills-env:env-5ff41b539190 + - name: HWLAB_ENVIRONMENT_DIGEST + value: sha256:4b1d08b3afc4b4001d3a95b293ce99d1f94093ef6d0958f44658f5b5bfd16ca8 + - name: HWLAB_ENVIRONMENT_INPUT_HASH + value: 5ff41b539190849e76511ed722a4539f5921622e98eea1444b606475f8ef55aa + - name: HWLAB_CODE_INPUT_HASH + value: 369ca524ae4010fb5d9adfd30b4290808a035804b4674755bc193fee743f3d5a + - name: HWLAB_IMAGE_DIGEST + value: sha256:4b1d08b3afc4b4001d3a95b293ce99d1f94093ef6d0958f44658f5b5bfd16ca8 + readinessProbe: + httpGet: + path: /health/live + port: http + livenessProbe: + httpGet: + path: /health/live + port: http + imagePullPolicy: IfNotPresent + startupProbe: + httpGet: + path: /health/live + port: http + periodSeconds: 10 + timeoutSeconds: 2 + failureThreshold: 30 + successThreshold: 1 + volumes: []