diff --git a/.github/workflows/agentk-cd.yaml b/.github/workflows/agentk-cd.yaml index be42c67067..bdbf75de12 100644 --- a/.github/workflows/agentk-cd.yaml +++ b/.github/workflows/agentk-cd.yaml @@ -24,11 +24,13 @@ jobs: shell: bash working-directory: go/kubernetes-agent steps: - - uses: actions/checkout@v6 - - uses: actions/setup-go@v6 + - uses: actions/checkout@v7 + - uses: actions/setup-go@v7 with: go-version-file: go/go.work - check-latest: true + cache-dependency-path: | + go/go.work.sum + go/kubernetes-agent/**/go.sum - run: PATH=$PATH:$GOPATH/bin make test image: @@ -48,7 +50,7 @@ jobs: runs-on: ${{ matrix.platforms.runner }} steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - name: Prepare @@ -58,25 +60,25 @@ jobs: echo "BUILD_TIME=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: ${{ env.REGISTRY_IMAGE }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Build and push by digest id: build - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: go file: go/kubernetes-agent/hack/docker/Dockerfile.agentk @@ -84,8 +86,8 @@ jobs: labels: ${{ steps.meta.outputs.labels }} platforms: ${{ matrix.platforms.platform }} outputs: type=image,push-by-digest=true,name-canonical=true,push=true - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=agentk-${{ env.PLATFORM_PAIR }} + cache-to: type=gha,mode=max,scope=agentk-${{ env.PLATFORM_PAIR }} build-args: | GIT_COMMIT=${{ github.sha }} VERSION=${{ steps.meta.outputs.version }} @@ -112,27 +114,27 @@ jobs: packages: 'write' steps: - name: Download digests - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: path: ${{ runner.temp }}/digests pattern: digests-* merge-multiple: true - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker Hub - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: | ghcr.io/pluralsh/agentk diff --git a/.github/workflows/agentk-ci.yaml b/.github/workflows/agentk-ci.yaml index dd20b572ba..67cc7f2633 100644 --- a/.github/workflows/agentk-ci.yaml +++ b/.github/workflows/agentk-ci.yaml @@ -21,6 +21,10 @@ env: GOPATH: /home/runner/go/ GOPROXY: "https://proxy.golang.org" REGISTRY_IMAGE: pluralsh/agentk +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -45,7 +49,7 @@ jobs: runs-on: ${{ matrix.platforms.runner }} steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - name: Prepare @@ -56,7 +60,7 @@ jobs: echo "IMAGE_SHA=${{ github.event.pull_request.head.sha || github.sha }}" >> $GITHUB_ENV - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: | ghcr.io/${{ env.REGISTRY_IMAGE }} @@ -66,24 +70,24 @@ jobs: type=ref,event=branch type=raw,value=latest,enable={{is_default_branch}} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Login to Container registry - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push by digest id: build - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: go file: go/kubernetes-agent/hack/docker/Dockerfile.agentk labels: ${{ steps.meta.outputs.labels }} platforms: ${{ matrix.platforms.platform }} outputs: type=image,name=ghcr.io/${{ env.REGISTRY_IMAGE }},push-by-digest=true,name-canonical=true,push=true - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=agentk-${{ env.PLATFORM_PAIR }} + cache-to: type=gha,mode=max,scope=agentk-${{ env.PLATFORM_PAIR }} build-args: | VERSION=v0.0.0-${{ env.IMAGE_SHA }} GIT_COMMIT=${{ env.IMAGE_SHA }} @@ -110,16 +114,16 @@ jobs: packages: 'write' steps: - name: Download digests - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: path: ${{ runner.temp }}/digests pattern: digests-* merge-multiple: true - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: | ghcr.io/${{ env.REGISTRY_IMAGE }} @@ -129,7 +133,7 @@ jobs: type=ref,event=branch type=raw,value=latest,enable={{is_default_branch}} - name: Login to Container registry - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} diff --git a/.github/workflows/ai-proxy-cd.yaml b/.github/workflows/ai-proxy-cd.yaml index a1c9703cea..c3d1c98651 100644 --- a/.github/workflows/ai-proxy-cd.yaml +++ b/.github/workflows/ai-proxy-cd.yaml @@ -28,6 +28,10 @@ env: REGISTRY_IMAGE: ghcr.io/pluralsh/ai-proxy DOCKER_METADATA_PR_HEAD_SHA: 'true' +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -44,10 +48,11 @@ jobs: shell: bash working-directory: go/ai-proxy steps: - - uses: actions/checkout@v6 - - uses: actions/setup-go@v6 + - uses: actions/checkout@v7 + - uses: actions/setup-go@v7 with: go-version-file: go/ai-proxy/go.mod + cache-dependency-path: go/ai-proxy/go.sum cache: true - run: go mod download - run: PATH=$PATH:$GOPATH/bin make test @@ -74,7 +79,7 @@ jobs: working-directory: go/ai-proxy steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - name: Prepare @@ -83,20 +88,20 @@ jobs: echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: ${{ env.REGISTRY_IMAGE }} - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Build and push by digest id: build - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: "." file: "./go/ai-proxy/Dockerfile" @@ -104,8 +109,8 @@ jobs: labels: ${{ steps.meta.outputs.labels }} platforms: ${{ matrix.platforms.platform }} outputs: type=image,push-by-digest=true,name-canonical=true,push=true - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=ai-proxy-${{ env.PLATFORM_PAIR }} + cache-to: type=gha,mode=max,scope=ai-proxy-${{ env.PLATFORM_PAIR }} build-args: | GIT_COMMIT=${{ github.sha }} VERSION=${{ steps.meta.outputs.version }} @@ -139,36 +144,36 @@ jobs: - docker.io/pluralsh/ai-proxy steps: - name: Download digests - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: path: ${{ runner.temp }}/digests pattern: digests-* merge-multiple: true - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - - uses: google-github-actions/auth@v1 + - uses: google-github-actions/auth@v3 with: workload_identity_provider: 'projects/${{ secrets.GOOGLE_PROJECT_ID }}/locations/global/workloadIdentityPools/github/providers/github' service_account: 'terraform@pluralsh.iam.gserviceaccount.com' token_format: 'access_token' create_credentials_file: true - - uses: google-github-actions/setup-gcloud@v1.0.1 + - uses: google-github-actions/setup-gcloud@v3.0.1 - name: Login to GCR run: gcloud auth configure-docker -q - name: Login to Docker - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: ${{ matrix.images }} tags: | diff --git a/.github/workflows/ai-proxy-ci.yaml b/.github/workflows/ai-proxy-ci.yaml index f5a3d57057..4e0fa2fff9 100644 --- a/.github/workflows/ai-proxy-ci.yaml +++ b/.github/workflows/ai-proxy-ci.yaml @@ -16,6 +16,10 @@ env: GOPATH: /home/runner/go/ GOPROXY: "https://proxy.golang.org" +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -32,10 +36,11 @@ jobs: shell: bash working-directory: go/ai-proxy steps: - - uses: actions/checkout@v6 - - uses: actions/setup-go@v6 + - uses: actions/checkout@v7 + - uses: actions/setup-go@v7 with: go-version-file: go/ai-proxy/go.mod + cache-dependency-path: go/ai-proxy/go.sum cache: true - run: go mod download - run: PATH=$PATH:$GOPATH/bin make build diff --git a/.github/workflows/chart.yaml b/.github/workflows/chart.yaml index a04355bcda..9520e9d6a2 100644 --- a/.github/workflows/chart.yaml +++ b/.github/workflows/chart.yaml @@ -14,7 +14,7 @@ jobs: packages: write steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 @@ -22,7 +22,7 @@ jobs: run: | git config user.name "$GITHUB_ACTOR" git config user.email "$GITHUB_ACTOR@users.noreply.github.com" - - uses: azure/setup-helm@v3 + - uses: azure/setup-helm@v5 - name: Add repos run: | @@ -35,23 +35,23 @@ jobs: helm repo add ory https://k8s.ory.sh/helm/charts - name: Run chart-releaser id: release - uses: helm/chart-releaser-action@v1.5.0 + uses: helm/chart-releaser-action@v1.7.0 with: config: "./.github/configs/cr.yaml" env: CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}" - name: console version id: console_vsn - uses: mikefarah/yq@master + uses: mikefarah/yq@v4 with: cmd: yq ".version" charts/console/Chart.yaml - - uses: google-github-actions/auth@v1 + - uses: google-github-actions/auth@v3 with: workload_identity_provider: "projects/${{ secrets.GOOGLE_PROJECT_ID }}/locations/global/workloadIdentityPools/github/providers/github" service_account: "terraform@pluralsh.iam.gserviceaccount.com" token_format: "access_token" create_credentials_file: true - - uses: google-github-actions/setup-gcloud@v1.0.1 + - uses: google-github-actions/setup-gcloud@v3.0.1 - name: Login to gcr run: gcloud auth configure-docker -q - name: Helm Login diff --git a/.github/workflows/check-pr.yaml b/.github/workflows/check-pr.yaml index 76a87cd4e6..c966e438c8 100644 --- a/.github/workflows/check-pr.yaml +++ b/.github/workflows/check-pr.yaml @@ -7,6 +7,10 @@ on: paths: - terraform/**/* +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -22,7 +26,7 @@ jobs: contents: 'read' pull-requests: read steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 name: checkout repo - name: "check pr body has Plural Flow: console to link with Plural" diff --git a/.github/workflows/chromatic.yml b/.github/workflows/chromatic.yml index 5dfc108b6c..5bdd073971 100644 --- a/.github/workflows/chromatic.yml +++ b/.github/workflows/chromatic.yml @@ -20,6 +20,10 @@ on: - "js/package.json" - "js/yarn.lock" +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -40,10 +44,10 @@ jobs: shell: bash working-directory: js steps: - - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 - - uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v6.5.0 + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 24.11.1 cache: yarn @@ -51,7 +55,7 @@ jobs: - run: corepack enable - run: yarn --immutable - run: yarn workspace @pluralsh/design-system build:storybook - - uses: chromaui/action@534eebfc19023579541d106f7b61d5ad70ed65c7 # v18.5.0 + - uses: chromaui/action@6b3c2820222d23bad770d57a4ad5e2d1c91f92e9 # v18.9.5 id: chromatic with: projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }} @@ -59,7 +63,7 @@ jobs: storybookBuildDir: storybook-static exitOnceUploaded: true - if: ${{ github.event_name == 'pull_request' && steps.chromatic.outcome == 'success' }} - uses: marocchino/sticky-pull-request-comment@773744901bac0e8cbb5a0dc842800d45e9b2b405 # v2.9.4 + uses: marocchino/sticky-pull-request-comment@5770ad5eb8f42dd2c4f34da00c94c5381e49af88 # v3.0.5 with: header: storybook message: | diff --git a/.github/workflows/cloud-query-cd.yaml b/.github/workflows/cloud-query-cd.yaml index 0e385559ee..857e3431d4 100644 --- a/.github/workflows/cloud-query-cd.yaml +++ b/.github/workflows/cloud-query-cd.yaml @@ -24,6 +24,10 @@ env: REGISTRY_IMAGE: ghcr.io/pluralsh/cloud-query REGISTRY_IMAGE_DB: ghcr.io/pluralsh/cloud-query-db DOCKER_METADATA_PR_HEAD_SHA: 'true' +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -41,11 +45,12 @@ jobs: working-directory: go/cloud-query steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 - name: Set up Go - uses: actions/setup-go@v6 + uses: actions/setup-go@v7 with: go-version-file: go/cloud-query/go.mod + cache-dependency-path: go/cloud-query/go.sum cache: true - name: Download dependencies run: go mod download @@ -73,7 +78,7 @@ jobs: working-directory: go/cloud-query steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - name: Prepare @@ -82,36 +87,34 @@ jobs: echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: ${{ env.REGISTRY_IMAGE_DB }} - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - - uses: google-github-actions/auth@v1 + - uses: google-github-actions/auth@v3 with: workload_identity_provider: 'projects/${{ secrets.GOOGLE_PROJECT_ID }}/locations/global/workloadIdentityPools/github/providers/github' service_account: 'terraform@pluralsh.iam.gserviceaccount.com' token_format: 'access_token' create_credentials_file: true - - uses: google-github-actions/setup-gcloud@v1.0.1 + - uses: google-github-actions/setup-gcloud@v3.0.1 - name: Login to GCR run: gcloud auth configure-docker -q - name: Login to Docker - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Build and push by digest id: build - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: "./go/cloud-query" file: "./go/cloud-query/db.Dockerfile" @@ -119,8 +122,8 @@ jobs: labels: ${{ steps.meta.outputs.labels }} platforms: ${{ matrix.platforms.platform }} outputs: type=image,push-by-digest=true,name-canonical=true,push=true - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=cloud-query-db-${{ env.PLATFORM_PAIR }} + cache-to: type=gha,mode=max,scope=cloud-query-db-${{ env.PLATFORM_PAIR }} build-args: | GIT_COMMIT=${{ github.sha }} VERSION=${{ steps.meta.outputs.version }} @@ -158,7 +161,7 @@ jobs: working-directory: go/cloud-query steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - name: Prepare @@ -168,36 +171,34 @@ jobs: echo "BUILD_TIME=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: ${{ env.REGISTRY_IMAGE }} - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - - uses: google-github-actions/auth@v1 + - uses: google-github-actions/auth@v3 with: workload_identity_provider: 'projects/${{ secrets.GOOGLE_PROJECT_ID }}/locations/global/workloadIdentityPools/github/providers/github' service_account: 'terraform@pluralsh.iam.gserviceaccount.com' token_format: 'access_token' create_credentials_file: true - - uses: google-github-actions/setup-gcloud@v1.0.1 + - uses: google-github-actions/setup-gcloud@v3.0.1 - name: Login to GCR run: gcloud auth configure-docker -q - name: Login to Docker - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Build and push by digest id: build - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: "./go/cloud-query" file: "./go/cloud-query/Dockerfile" @@ -205,8 +206,8 @@ jobs: labels: ${{ steps.meta.outputs.labels }} platforms: ${{ matrix.platforms.platform }} outputs: type=image,push-by-digest=true,name-canonical=true,push=true - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=cloud-query-${{ env.PLATFORM_PAIR }} + cache-to: type=gha,mode=max,scope=cloud-query-${{ env.PLATFORM_PAIR }} build-args: | GIT_COMMIT=${{ github.sha }} VERSION=${{ steps.meta.outputs.version }} @@ -240,36 +241,36 @@ jobs: runs-on: ubuntu-latest steps: - name: Download digests - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: path: ${{ runner.temp }}/digests pattern: digests-db-* merge-multiple: true - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - - uses: google-github-actions/auth@v1 + - uses: google-github-actions/auth@v3 with: workload_identity_provider: 'projects/${{ secrets.GOOGLE_PROJECT_ID }}/locations/global/workloadIdentityPools/github/providers/github' service_account: 'terraform@pluralsh.iam.gserviceaccount.com' token_format: 'access_token' create_credentials_file: true - - uses: google-github-actions/setup-gcloud@v1.0.1 + - uses: google-github-actions/setup-gcloud@v3.0.1 - name: Login to GCR run: gcloud auth configure-docker -q - name: Login to Docker Hub - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: ${{ matrix.images }} tags: | @@ -303,36 +304,36 @@ jobs: runs-on: ubuntu-latest steps: - name: Download digests - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: path: ${{ runner.temp }}/digests pattern: digests-cloudquery-* merge-multiple: true - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - - uses: google-github-actions/auth@v1 + - uses: google-github-actions/auth@v3 with: workload_identity_provider: 'projects/${{ secrets.GOOGLE_PROJECT_ID }}/locations/global/workloadIdentityPools/github/providers/github' service_account: 'terraform@pluralsh.iam.gserviceaccount.com' token_format: 'access_token' create_credentials_file: true - - uses: google-github-actions/setup-gcloud@v1.0.1 + - uses: google-github-actions/setup-gcloud@v3.0.1 - name: Login to GCR run: gcloud auth configure-docker -q - name: Login to Docker Hub - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: ${{ matrix.images }} tags: | diff --git a/.github/workflows/cloud-query-ci.yaml b/.github/workflows/cloud-query-ci.yaml index 3115acd27d..edcd47a67c 100644 --- a/.github/workflows/cloud-query-ci.yaml +++ b/.github/workflows/cloud-query-ci.yaml @@ -17,6 +17,10 @@ permissions: env: GOPATH: /home/runner/go/ GOPROXY: "https://proxy.golang.org" +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -24,35 +28,21 @@ jobs: permissions: contents: read - build: + build-test: needs: [vouch] - name: Build + name: Build and test runs-on: ubuntu-latest defaults: run: shell: bash working-directory: go/cloud-query steps: - - uses: actions/checkout@v6 - - uses: actions/setup-go@v6 + - uses: actions/checkout@v7 + - uses: actions/setup-go@v7 with: go-version-file: go/cloud-query/go.mod + cache-dependency-path: go/cloud-query/go.sum cache: true - run: go mod download - run: PATH=$PATH:$GOPATH/bin make build - test: - needs: [vouch] - name: Unit test - runs-on: ubuntu-latest - defaults: - run: - shell: bash - working-directory: go/cloud-query - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-go@v6 - with: - go-version-file: go/cloud-query/go.mod - cache: true - - run: go mod download - run: PATH=$PATH:$GOPATH/bin make test diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 0c7a57e0f8..6121c649ff 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -10,6 +10,10 @@ on: - '**/*.md' schedule: - cron: '0 0 * * 1' +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -30,7 +34,7 @@ jobs: matrix: language: [ 'typescript' ] steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 with: fetch-depth: 0 - uses: github/codeql-action/init@v4 diff --git a/.github/workflows/compatability-matrices.yaml b/.github/workflows/compatability-matrices.yaml index 674ede9cec..58d51ab481 100644 --- a/.github/workflows/compatability-matrices.yaml +++ b/.github/workflows/compatability-matrices.yaml @@ -20,10 +20,10 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v6 + uses: actions/checkout@v7 - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v4 + uses: aws-actions/configure-aws-credentials@v6 with: role-to-assume: arn:aws:iam::332124921534:role/github-actions/console-actions aws-region: us-east-2 diff --git a/.github/workflows/compatibility-schema-validation.yaml b/.github/workflows/compatibility-schema-validation.yaml index 523495bc41..242f804819 100644 --- a/.github/workflows/compatibility-schema-validation.yaml +++ b/.github/workflows/compatibility-schema-validation.yaml @@ -19,6 +19,10 @@ on: permissions: contents: read +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -31,10 +35,10 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v6 + uses: actions/checkout@v7 - name: Validate add-on compatibility tables - uses: dsanders11/json-schema-validate-action@eddf079f55830cc9a916a3c512ba9086240d2fea + uses: dsanders11/json-schema-validate-action@f04ef3bca791388d2bd9ff3a50b27d1b2572158e # v2.1.0 with: schema: static/compatibilities/schema.json files: | @@ -43,7 +47,7 @@ jobs: all-errors: true - name: Validate cloud add-on compatibility tables - uses: dsanders11/json-schema-validate-action@eddf079f55830cc9a916a3c512ba9086240d2fea + uses: dsanders11/json-schema-validate-action@f04ef3bca791388d2bd9ff3a50b27d1b2572158e # v2.1.0 with: schema: static/addons/schema.json files: | diff --git a/.github/workflows/controller-cd.yaml b/.github/workflows/controller-cd.yaml index 4e526ec911..e8e809cd1c 100644 --- a/.github/workflows/controller-cd.yaml +++ b/.github/workflows/controller-cd.yaml @@ -19,6 +19,10 @@ env: GOPROXY: "https://proxy.golang.org" REGISTRY_IMAGE: ghcr.io/pluralsh/deployment-controller DOCKER_METADATA_PR_HEAD_SHA: 'true' +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -36,11 +40,12 @@ jobs: working-directory: go/controller steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 - name: Set up Go - uses: actions/setup-go@v6 + uses: actions/setup-go@v7 with: go-version-file: go/controller/go.mod + cache-dependency-path: go/controller/go.sum cache: true - name: Download dependencies run: go mod download @@ -68,7 +73,7 @@ jobs: working-directory: go/controller steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - name: Prepare @@ -78,36 +83,34 @@ jobs: echo "BUILD_TIME=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: ${{ env.REGISTRY_IMAGE }} - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - - uses: google-github-actions/auth@v1 + - uses: google-github-actions/auth@v3 with: workload_identity_provider: 'projects/${{ secrets.GOOGLE_PROJECT_ID }}/locations/global/workloadIdentityPools/github/providers/github' service_account: 'terraform@pluralsh.iam.gserviceaccount.com' token_format: 'access_token' create_credentials_file: true - - uses: google-github-actions/setup-gcloud@v1.0.1 + - uses: google-github-actions/setup-gcloud@v3.0.1 - name: Login to GCR run: gcloud auth configure-docker -q - name: Login to Docker - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Build and push by digest id: build - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: "./go" file: "./go/controller/Dockerfile" @@ -115,8 +118,8 @@ jobs: labels: ${{ steps.meta.outputs.labels }} platforms: ${{ matrix.platforms.platform }} outputs: type=image,push-by-digest=true,name-canonical=true,push=true - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=controller-${{ env.PLATFORM_PAIR }} + cache-to: type=gha,mode=max,scope=controller-${{ env.PLATFORM_PAIR }} build-args: | GIT_COMMIT=${{ github.sha }} VERSION=${{ steps.meta.outputs.version }} @@ -150,36 +153,36 @@ jobs: runs-on: ubuntu-latest steps: - name: Download digests - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: path: ${{ runner.temp }}/digests pattern: digests-* merge-multiple: true - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - - uses: google-github-actions/auth@v1 + - uses: google-github-actions/auth@v3 with: workload_identity_provider: 'projects/${{ secrets.GOOGLE_PROJECT_ID }}/locations/global/workloadIdentityPools/github/providers/github' service_account: 'terraform@pluralsh.iam.gserviceaccount.com' token_format: 'access_token' create_credentials_file: true - - uses: google-github-actions/setup-gcloud@v1.0.1 + - uses: google-github-actions/setup-gcloud@v3.0.1 - name: Login to GCR run: gcloud auth configure-docker -q - name: Login to Docker Hub - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: ${{ matrix.images }} tags: | diff --git a/.github/workflows/controller-ci.yaml b/.github/workflows/controller-ci.yaml index 036e8670fe..d599dbdeb6 100644 --- a/.github/workflows/controller-ci.yaml +++ b/.github/workflows/controller-ci.yaml @@ -21,6 +21,10 @@ permissions: env: GOPATH: /home/runner/go/ GOPROXY: "https://proxy.golang.org" +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -28,39 +32,23 @@ jobs: permissions: contents: read - build: + test: needs: [vouch] - name: Build + name: Test runs-on: ubuntu-latest defaults: run: shell: bash working-directory: go/controller steps: - - uses: actions/checkout@v6 - - uses: actions/setup-go@v6 + - uses: actions/checkout@v7 + - uses: actions/setup-go@v7 with: go-version-file: go/controller/go.mod + cache-dependency-path: go/controller/go.sum cache: true - name: Download dependencies run: go mod download - - run: PATH=$PATH:$GOPATH/bin make build - unit-test: - needs: [vouch] - name: Unit tests - runs-on: ubuntu-latest - defaults: - run: - shell: bash - working-directory: go/controller - steps: - - name: Checkout - uses: actions/checkout@v6 - - name: Set up Go - uses: actions/setup-go@v6 - with: - go-version-file: go/controller/go.mod - cache: true - name: Test run: PATH=$PATH:$GOPATH/bin make test check-docs: @@ -68,7 +56,7 @@ jobs: name: verify controller docs runs-on: ubuntu-latest steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 - name: Check docs run: make codegen-crd-docs working-directory: go/controller diff --git a/.github/workflows/cron.yaml b/.github/workflows/cron.yaml index b2a0672bdd..54657673a8 100644 --- a/.github/workflows/cron.yaml +++ b/.github/workflows/cron.yaml @@ -21,7 +21,7 @@ jobs: # id-token: 'write' # pull-requests: 'write' # steps: - # - uses: actions/checkout@v6 + # - uses: actions/checkout@v7 # - run: make liquid-docs # - id: date # run: echo "date=$(date +%Y%m%d%H%M%S)" >> $GITHUB_OUTPUT @@ -44,15 +44,15 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v6 + uses: actions/checkout@v7 - - uses: actions/setup-python@v6 + - uses: actions/setup-python@v7 with: python-version: '3.13' cache: 'pip' # caching pip dependencies - name: Install Helm - uses: azure/setup-helm@v3 + uses: azure/setup-helm@v5 with: version: latest @@ -89,9 +89,9 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v6 + uses: actions/checkout@v7 - - uses: actions/setup-python@v6 + - uses: actions/setup-python@v7 with: python-version: '3.13' cache: 'pip' # caching pip dependencies @@ -126,15 +126,15 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v6 + uses: actions/checkout@v7 - - uses: actions/setup-python@v6 + - uses: actions/setup-python@v7 with: python-version: '3.13' cache: 'pip' # caching pip dependencies - name: configure aws credentials - uses: aws-actions/configure-aws-credentials@a159d7bb5354cf786f855f2f5d1d8d768d9a08d1 + uses: aws-actions/configure-aws-credentials@e1253824e5c10ff9df46874f81ed3ec929e19cfd # v6.3.0 with: role-to-assume: arn:aws:iam::312272277431:role/github-actions/console-actions role-session-name: eks-addons diff --git a/.github/workflows/datastore-cd.yaml b/.github/workflows/datastore-cd.yaml index a05df9c8b4..641616a7e4 100644 --- a/.github/workflows/datastore-cd.yaml +++ b/.github/workflows/datastore-cd.yaml @@ -19,6 +19,10 @@ env: GOPROXY: "https://proxy.golang.org" REGISTRY_IMAGE: ghcr.io/pluralsh/datastore-controller DOCKER_METADATA_PR_HEAD_SHA: 'true' +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -36,11 +40,12 @@ jobs: working-directory: go/datastore steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 - name: Set up Go - uses: actions/setup-go@v6 + uses: actions/setup-go@v7 with: go-version-file: go/datastore/go.mod + cache-dependency-path: go/datastore/go.sum cache: true - name: Download dependencies run: go mod download @@ -68,7 +73,7 @@ jobs: working-directory: go/datastore steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - name: Prepare @@ -77,36 +82,34 @@ jobs: echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: ${{ env.REGISTRY_IMAGE }} - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - - uses: google-github-actions/auth@v1 + - uses: google-github-actions/auth@v3 with: workload_identity_provider: 'projects/${{ secrets.GOOGLE_PROJECT_ID }}/locations/global/workloadIdentityPools/github/providers/github' service_account: 'terraform@pluralsh.iam.gserviceaccount.com' token_format: 'access_token' create_credentials_file: true - - uses: google-github-actions/setup-gcloud@v1.0.1 + - uses: google-github-actions/setup-gcloud@v3.0.1 - name: Login to GCR run: gcloud auth configure-docker -q - name: Login to Docker - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Build and push by digest id: build - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: "./go" file: "./go/datastore/Dockerfile" @@ -114,8 +117,8 @@ jobs: labels: ${{ steps.meta.outputs.labels }} platforms: ${{ matrix.platforms.platform }} outputs: type=image,push-by-digest=true,name-canonical=true,push=true - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=datastore-${{ env.PLATFORM_PAIR }} + cache-to: type=gha,mode=max,scope=datastore-${{ env.PLATFORM_PAIR }} build-args: | GIT_COMMIT=${{ github.sha }} VERSION=${{ steps.meta.outputs.version }} @@ -148,36 +151,36 @@ jobs: runs-on: ubuntu-latest steps: - name: Download digests - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: path: ${{ runner.temp }}/digests pattern: digests-* merge-multiple: true - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - - uses: google-github-actions/auth@v1 + - uses: google-github-actions/auth@v3 with: workload_identity_provider: 'projects/${{ secrets.GOOGLE_PROJECT_ID }}/locations/global/workloadIdentityPools/github/providers/github' service_account: 'terraform@pluralsh.iam.gserviceaccount.com' token_format: 'access_token' create_credentials_file: true - - uses: google-github-actions/setup-gcloud@v1.0.1 + - uses: google-github-actions/setup-gcloud@v3.0.1 - name: Login to GCR run: gcloud auth configure-docker -q - name: Login to Docker Hub - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: ${{ matrix.images }} tags: | diff --git a/.github/workflows/datastore-ci.yaml b/.github/workflows/datastore-ci.yaml index acf478c2a3..ca054a5998 100644 --- a/.github/workflows/datastore-ci.yaml +++ b/.github/workflows/datastore-ci.yaml @@ -21,6 +21,10 @@ permissions: env: GOPATH: /home/runner/go/ GOPROXY: "https://proxy.golang.org" +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -28,38 +32,22 @@ jobs: permissions: contents: read - build: + test: needs: [vouch] - name: Build + name: Test runs-on: ubuntu-latest defaults: run: shell: bash working-directory: go/datastore steps: - - uses: actions/checkout@v6 - - uses: actions/setup-go@v6 + - uses: actions/checkout@v7 + - uses: actions/setup-go@v7 with: go-version-file: go/datastore/go.mod + cache-dependency-path: go/datastore/go.sum cache: true - name: Download dependencies run: go mod download - - run: PATH=$PATH:$GOPATH/bin make build - unit-test: - needs: [vouch] - name: Unit tests - runs-on: ubuntu-latest - defaults: - run: - shell: bash - working-directory: go/datastore - steps: - - name: Checkout - uses: actions/checkout@v6 - - name: Set up Go - uses: actions/setup-go@v6 - with: - go-version-file: go/datastore/go.mod - cache: true - name: Test run: PATH=$PATH:$GOPATH/bin make test diff --git a/.github/workflows/demo-cd.yaml b/.github/workflows/demo-cd.yaml index c955659944..2e7f45d6d8 100644 --- a/.github/workflows/demo-cd.yaml +++ b/.github/workflows/demo-cd.yaml @@ -16,6 +16,10 @@ env: GOBIN: /home/runner/go/bin GOPROXY: "https://proxy.golang.org" +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -36,12 +40,12 @@ jobs: id-token: 'write' packages: 'write' steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 with: fetch-depth: 0 - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: # list of Docker images to use as base name for tags images: | @@ -51,14 +55,14 @@ jobs: type=sha type=ref,event=pr type=ref,event=branch - - uses: docker/login-action@v3 + - uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - - uses: docker/setup-qemu-action@v3 - - uses: docker/setup-buildx-action@v3 - - uses: docker/build-push-action@v6 + - uses: docker/setup-qemu-action@v4 + - uses: docker/setup-buildx-action@v4 + - uses: docker/build-push-action@v7 with: context: "./go/demo/flaky-service" file: "./go/demo/flaky-service/Dockerfile" @@ -66,8 +70,8 @@ jobs: tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} platforms: linux/amd64, linux/arm64 - cache-from: type=gha - cache-to: type=gha, mode=max + cache-from: type=gha,scope=flaky-service + cache-to: type=gha,mode=max,scope=flaky-service build-args: | GIT_COMMIT=${{ github.sha }} VERSION=${{ steps.meta.outputs.version }} diff --git a/.github/workflows/deployment-operator-cd-agent-harness.yaml b/.github/workflows/deployment-operator-cd-agent-harness.yaml index 8e303148f7..068aea39ae 100644 --- a/.github/workflows/deployment-operator-cd-agent-harness.yaml +++ b/.github/workflows/deployment-operator-cd-agent-harness.yaml @@ -25,6 +25,10 @@ env: DOCKER_METADATA_PR_HEAD_SHA: 'true' REGISTRY_IMAGE: pluralsh/agent-harness-base +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -77,7 +81,7 @@ jobs: runs-on: ${{ matrix.platforms.runner }} steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - name: Prepare @@ -86,27 +90,25 @@ jobs: echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: ${{ env.REGISTRY_IMAGE }} - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Build and push by digest id: build - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: "./go" file: "./go/deployment-operator/dockerfiles/agent-harness/base.Dockerfile" @@ -114,8 +116,8 @@ jobs: labels: ${{ steps.meta.outputs.labels }} platforms: ${{ matrix.platforms.platform }} outputs: type=image,push-by-digest=true,name-canonical=true,push=true - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=agent-harness-base-${{ env.PLATFORM_PAIR }} + cache-to: type=gha,mode=max,scope=agent-harness-base-${{ env.PLATFORM_PAIR }} build-args: | VERSION=${{ steps.meta.outputs.version }} - name: Export digest @@ -143,27 +145,27 @@ jobs: version: ${{ steps.meta.outputs.version }} steps: - name: Download digests - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: path: ${{ runner.temp }}/digests pattern: digests-* merge-multiple: true - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker Hub - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: | ghcr.io/pluralsh/agent-harness-base @@ -203,12 +205,12 @@ jobs: packages: write steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: # list of Docker images to use as base name for tags images: | @@ -220,22 +222,22 @@ jobs: type=sha,suffix=-${{ matrix.agents.name }}-${{ matrix.agents.version }},priority=800 type=ref,event=pr,suffix=-${{ matrix.agents.name }}-${{ matrix.agents.version }},priority=600 - name: Set up QEMU - uses: docker/setup-qemu-action@v3 + uses: docker/setup-qemu-action@v4 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Build and push - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: "./go" file: "./go/deployment-operator/dockerfiles/agent-harness/${{ matrix.agents.name }}.Dockerfile" @@ -243,8 +245,8 @@ jobs: tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} platforms: linux/amd64,linux/arm64 - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=agent-harness-${{ matrix.agents.name }} + cache-to: type=gha,mode=max,scope=agent-harness-${{ matrix.agents.name }} build-args: | NODE_VERSION=${{ needs.output-versions.outputs.node }} AGENT_VERSION=${{ matrix.agents.version }} diff --git a/.github/workflows/deployment-operator-cd-harness.yaml b/.github/workflows/deployment-operator-cd-harness.yaml index 2588814548..2033d974ca 100644 --- a/.github/workflows/deployment-operator-cd-harness.yaml +++ b/.github/workflows/deployment-operator-cd-harness.yaml @@ -19,6 +19,10 @@ env: DOCKER_METADATA_PR_HEAD_SHA: 'true' REGISTRY_IMAGE: pluralsh/stackrun-harness-base +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -44,7 +48,7 @@ jobs: runs-on: ${{ matrix.platforms.runner }} steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - name: Prepare @@ -53,27 +57,25 @@ jobs: echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: ${{ env.REGISTRY_IMAGE }} - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Build and push by digest id: build - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: "./go" file: "./go/deployment-operator/dockerfiles/harness/base.Dockerfile" @@ -81,8 +83,8 @@ jobs: labels: ${{ steps.meta.outputs.labels }} platforms: ${{ matrix.platforms.platform }} outputs: type=image,push-by-digest=true,name-canonical=true,push=true - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=stackrun-harness-base-${{ env.PLATFORM_PAIR }} + cache-to: type=gha,mode=max,scope=stackrun-harness-base-${{ env.PLATFORM_PAIR }} build-args: | VERSION=${{ steps.meta.outputs.version }} - name: Export digest @@ -110,27 +112,27 @@ jobs: version: ${{ steps.meta.outputs.version }} steps: - name: Download digests - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: path: ${{ runner.temp }}/digests pattern: digests-* merge-multiple: true - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker Hub - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: | ghcr.io/pluralsh/stackrun-harness-base @@ -191,12 +193,12 @@ jobs: packages: write steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: # list of Docker images to use as base name for tags images: | @@ -210,22 +212,22 @@ jobs: type=ref,event=pr,suffix=-terraform-${{ matrix.versions.full }},priority=600 type=ref,event=pr,suffix=-terraform-${{ matrix.versions.minor }},priority=600 - name: Set up QEMU - uses: docker/setup-qemu-action@v3 + uses: docker/setup-qemu-action@v4 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Build and push - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: "./go" file: "./go/deployment-operator/dockerfiles/harness/terraform.Dockerfile" @@ -233,8 +235,8 @@ jobs: tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} platforms: linux/amd64,linux/arm64 - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=stackrun-harness-terraform-${{ matrix.versions.minor }} + cache-to: type=gha,mode=max,scope=stackrun-harness-terraform-${{ matrix.versions.minor }} build-args: | TERRAFORM_IMAGE_TAG=${{ matrix.versions.full }} HARNESS_BASE_IMAGE_REPO=ghcr.io/pluralsh/stackrun-harness-base @@ -287,12 +289,12 @@ jobs: packages: write steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: | ghcr.io/pluralsh/harness @@ -305,22 +307,22 @@ jobs: type=ref,event=pr,suffix=-terragrunt-${{ matrix.versions.full }},priority=600 type=ref,event=pr,suffix=-terragrunt-${{ matrix.versions.minor }},priority=600 - name: Set up QEMU - uses: docker/setup-qemu-action@v3 + uses: docker/setup-qemu-action@v4 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Build and push - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: "./go" file: "./go/deployment-operator/dockerfiles/harness/terragrunt.Dockerfile" @@ -328,8 +330,8 @@ jobs: tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} platforms: linux/amd64,linux/arm64 - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=stackrun-harness-terragrunt-${{ matrix.versions.minor }} + cache-to: type=gha,mode=max,scope=stackrun-harness-terragrunt-${{ matrix.versions.minor }} build-args: | TERRAFORM_IMAGE_TAG=${{ matrix.versions.full }} OPENTOFU_IMAGE_TAG=${{ env.OPENTOFU_VERSION }} @@ -359,12 +361,12 @@ jobs: packages: write steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: | ghcr.io/pluralsh/harness @@ -377,22 +379,22 @@ jobs: type=ref,event=pr,suffix=-pulumi-${{ matrix.versions.full }},priority=600 type=ref,event=pr,suffix=-pulumi-${{ matrix.versions.minor }},priority=600 - name: Set up QEMU - uses: docker/setup-qemu-action@v3 + uses: docker/setup-qemu-action@v4 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Build and push - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: "./go" file: "./go/deployment-operator/dockerfiles/harness/pulumi.Dockerfile" @@ -400,8 +402,8 @@ jobs: tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} platforms: linux/amd64,linux/arm64 - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=stackrun-harness-pulumi-${{ matrix.versions.minor }} + cache-to: type=gha,mode=max,scope=stackrun-harness-pulumi-${{ matrix.versions.minor }} build-args: | PULUMI_VERSION=${{ matrix.versions.full }} HARNESS_BASE_IMAGE_REPO=ghcr.io/pluralsh/stackrun-harness-base @@ -445,12 +447,12 @@ jobs: packages: write steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: | ghcr.io/pluralsh/harness @@ -463,22 +465,22 @@ jobs: type=ref,event=pr,suffix=-ansible-${{ matrix.versions.ansible }},priority=600 type=ref,event=pr,suffix=-ansible-${{ matrix.versions.minor }},priority=600 - name: Set up QEMU - uses: docker/setup-qemu-action@v3 + uses: docker/setup-qemu-action@v4 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Build and push - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: "./go" file: "./go/deployment-operator/dockerfiles/harness/ansible.Dockerfile" @@ -486,8 +488,8 @@ jobs: tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} platforms: linux/amd64,linux/arm64 - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=stackrun-harness-ansible-${{ matrix.versions.minor }} + cache-to: type=gha,mode=max,scope=stackrun-harness-ansible-${{ matrix.versions.minor }} build-args: | ANSIBLE_VERSION=${{ matrix.versions.ansible }} PYTHON_VERSION=${{ matrix.versions.python }} @@ -505,12 +507,12 @@ jobs: packages: write steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: | ghcr.io/pluralsh/harness @@ -520,22 +522,22 @@ jobs: type=sha,suffix=-custom,priority=800 type=ref,event=pr,suffix=-custom,priority=600 - name: Set up QEMU - uses: docker/setup-qemu-action@v3 + uses: docker/setup-qemu-action@v4 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Build and push - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: "./go" file: "./go/deployment-operator/dockerfiles/harness/custom.Dockerfile" @@ -543,8 +545,8 @@ jobs: tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} platforms: linux/amd64,linux/arm64 - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=stackrun-harness-custom + cache-to: type=gha,mode=max,scope=stackrun-harness-custom build-args: | HARNESS_BASE_IMAGE_REPO=ghcr.io/pluralsh/stackrun-harness-base HARNESS_BASE_IMAGE_TAG=${{ needs.publish-base-image.outputs.version }} diff --git a/.github/workflows/deployment-operator-cd-sentinel-harness.yaml b/.github/workflows/deployment-operator-cd-sentinel-harness.yaml index 4621638b11..6e7d196668 100644 --- a/.github/workflows/deployment-operator-cd-sentinel-harness.yaml +++ b/.github/workflows/deployment-operator-cd-sentinel-harness.yaml @@ -26,6 +26,10 @@ env: DOCKER_METADATA_PR_HEAD_SHA: 'true' REGISTRY_IMAGE: pluralsh/sentinel-harness-base +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -51,7 +55,7 @@ jobs: runs-on: ${{ matrix.platforms.runner }} steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - name: Prepare @@ -60,27 +64,25 @@ jobs: echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: ${{ env.REGISTRY_IMAGE }} - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Build and push by digest id: build - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: "./go" file: "./go/deployment-operator/dockerfiles/sentinel-harness/base.Dockerfile" @@ -88,8 +90,8 @@ jobs: labels: ${{ steps.meta.outputs.labels }} platforms: ${{ matrix.platforms.platform }} outputs: type=image,push-by-digest=true,name-canonical=true,push=true - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=sentinel-harness-base-${{ env.PLATFORM_PAIR }} + cache-to: type=gha,mode=max,scope=sentinel-harness-base-${{ env.PLATFORM_PAIR }} build-args: | VERSION=${{ steps.meta.outputs.version }} - name: Export digest @@ -117,27 +119,27 @@ jobs: version: ${{ steps.meta.outputs.version }} steps: - name: Download digests - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: path: ${{ runner.temp }}/digests pattern: digests-* merge-multiple: true - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker Hub - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: | ghcr.io/pluralsh/sentinel-harness-base @@ -166,12 +168,12 @@ jobs: packages: write steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: # list of Docker images to use as base name for tags images: | @@ -183,22 +185,22 @@ jobs: type=sha,priority=800 type=ref,event=pr,priority=600 - name: Set up QEMU - uses: docker/setup-qemu-action@v3 + uses: docker/setup-qemu-action@v4 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Build and push - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: "./go" file: "./go/deployment-operator/dockerfiles/sentinel-harness/terratest.Dockerfile" @@ -206,8 +208,8 @@ jobs: tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} platforms: linux/amd64,linux/arm64 - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=sentinel-harness-terratest + cache-to: type=gha,mode=max,scope=sentinel-harness-terratest build-args: | GO_VERSION=1.27.1 SENTINEL_HARNESS_BASE_IMAGE_REPO=ghcr.io/pluralsh/sentinel-harness-base diff --git a/.github/workflows/deployment-operator-cd.yaml b/.github/workflows/deployment-operator-cd.yaml index f59e20ca6b..3fc267d815 100644 --- a/.github/workflows/deployment-operator-cd.yaml +++ b/.github/workflows/deployment-operator-cd.yaml @@ -19,10 +19,11 @@ jobs: shell: bash working-directory: go/deployment-operator steps: - - uses: actions/checkout@v6 - - uses: actions/setup-go@v6 + - uses: actions/checkout@v7 + - uses: actions/setup-go@v7 with: go-version-file: go/deployment-operator/go.mod + cache-dependency-path: go/deployment-operator/go.sum cache: true - name: Download dependencies run: go mod download @@ -45,7 +46,7 @@ jobs: runs-on: ${{ matrix.platforms.runner }} steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - name: Prepare @@ -54,27 +55,25 @@ jobs: echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: ${{ env.REGISTRY_IMAGE }} - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Build and push by digest id: build - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: "./go" file: "./go/deployment-operator/Dockerfile" @@ -82,8 +81,8 @@ jobs: labels: ${{ steps.meta.outputs.labels }} platforms: ${{ matrix.platforms.platform }} outputs: type=image,push-by-digest=true,name-canonical=true,push=true - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=deployment-operator-${{ env.PLATFORM_PAIR }} + cache-to: type=gha,mode=max,scope=deployment-operator-${{ env.PLATFORM_PAIR }} build-args: | GIT_COMMIT=${{ github.sha }} - name: Export digest @@ -107,27 +106,27 @@ jobs: packages: 'write' steps: - name: Download digests - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: path: ${{ runner.temp }}/digests pattern: digests-* merge-multiple: true - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker Hub - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: | docker.io/pluralsh/deployment-operator diff --git a/.github/workflows/deployment-operator-ci.yaml b/.github/workflows/deployment-operator-ci.yaml index e9a098440c..4e0e12191e 100644 --- a/.github/workflows/deployment-operator-ci.yaml +++ b/.github/workflows/deployment-operator-ci.yaml @@ -24,6 +24,10 @@ on: permissions: contents: read +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -31,50 +35,24 @@ jobs: permissions: contents: read - build: - needs: [vouch] - name: Build - runs-on: ubuntu-latest - defaults: - run: - shell: bash - working-directory: go/deployment-operator - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-go@v6 - with: - go-version-file: go/deployment-operator/go.mod - cache: true - - name: Download dependencies - run: go mod download - - run: make agent test: needs: [vouch] - name: Unit test + name: Test and verify CRD docs runs-on: ubuntu-latest defaults: run: shell: bash working-directory: go/deployment-operator steps: - - uses: actions/checkout@v6 - - uses: actions/setup-go@v6 + - uses: actions/checkout@v7 + - uses: actions/setup-go@v7 with: go-version-file: go/deployment-operator/go.mod + cache-dependency-path: go/deployment-operator/go.sum cache: true - name: Download dependencies run: go mod download - run: make test - check-docs: - needs: [vouch] - name: Verify CRD docs - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-go@v6 - with: - go-version-file: go/deployment-operator/go.mod - cache: true - name: Check docs working-directory: go/deployment-operator run: make crd-docs @@ -87,7 +65,7 @@ jobs: } build-image: name: Build image - needs: [ build, test ] + needs: [test] permissions: contents: 'read' id-token: 'write' @@ -103,7 +81,7 @@ jobs: runs-on: ${{ matrix.platforms.runner }} steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - name: Prepare @@ -112,21 +90,19 @@ jobs: echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: ${{ env.REGISTRY_IMAGE }} - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Login to Docker Hub - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Build and push by digest id: build - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: "./go" file: "./go/deployment-operator/Dockerfile" @@ -134,8 +110,8 @@ jobs: labels: ${{ steps.meta.outputs.labels }} platforms: ${{ matrix.platforms.platform }} outputs: type=image,push-by-digest=true,name-canonical=true,push=true - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=deployment-operator-${{ env.PLATFORM_PAIR }} + cache-to: type=gha,mode=max,scope=deployment-operator-${{ env.PLATFORM_PAIR }} build-args: | GIT_COMMIT=${{ github.sha }} - name: Export digest @@ -159,27 +135,27 @@ jobs: packages: 'write' steps: - name: Download digests - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: path: ${{ runner.temp }}/digests pattern: digests-* merge-multiple: true - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker Hub - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: | ghcr.io/pluralsh/deployment-operator diff --git a/.github/workflows/deployment-operator-pr.yaml b/.github/workflows/deployment-operator-pr.yaml index 643fd6d44e..31cb0de29e 100644 --- a/.github/workflows/deployment-operator-pr.yaml +++ b/.github/workflows/deployment-operator-pr.yaml @@ -16,6 +16,10 @@ on: permissions: contents: 'read' +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -28,7 +32,7 @@ jobs: # runs-on: ubuntu-latest # steps: # - name: Check pull request title - # uses: amannn/action-semantic-pull-request@v5 + # uses: amannn/action-semantic-pull-request@v6 # env: # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} body: diff --git a/.github/workflows/documentation-cd.yaml b/.github/workflows/documentation-cd.yaml index b23c2e3738..dc3cd2fe80 100644 --- a/.github/workflows/documentation-cd.yaml +++ b/.github/workflows/documentation-cd.yaml @@ -27,6 +27,10 @@ on: env: DOCKER_METADATA_PR_HEAD_SHA: 'true' +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -44,12 +48,12 @@ jobs: packages: 'write' steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: | ghcr.io/pluralsh/documentation @@ -58,18 +62,16 @@ jobs: type=ref,event=pr type=ref,event=branch type=match,pattern=documentation/(v.*),group=1 - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: . file: js/documentation/Dockerfile @@ -77,8 +79,8 @@ jobs: tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} platforms: linux/amd64 - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=documentation + cache-to: type=gha,mode=max,scope=documentation build-args: | NEXT_PUBLIC_ROOT_URL="https://docs.plural.sh" NEXT_PUBLIC_GA_ID=${{ vars.NEXT_PUBLIC_GA_ID }} diff --git a/.github/workflows/documentation-sync.yaml b/.github/workflows/documentation-sync.yaml index 1ff7f719d7..9c52e45779 100644 --- a/.github/workflows/documentation-sync.yaml +++ b/.github/workflows/documentation-sync.yaml @@ -15,11 +15,12 @@ jobs: pull-requests: 'write' steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 - name: Set up Go - uses: actions/setup-go@v6 + uses: actions/setup-go@v7 with: go-version-file: go/controller/go.mod + cache-dependency-path: go/controller/go.sum cache: true - name: Regenerate console controller docs working-directory: go/controller diff --git a/.github/workflows/documentation.yaml b/.github/workflows/documentation.yaml index 281974a2dd..72e4b01aa3 100644 --- a/.github/workflows/documentation.yaml +++ b/.github/workflows/documentation.yaml @@ -31,6 +31,10 @@ on: permissions: contents: read +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -47,8 +51,8 @@ jobs: shell: bash working-directory: js steps: - - uses: actions/checkout@v6 - - uses: actions/setup-node@v6 + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 with: node-version: 24.11.1 cache: yarn @@ -66,7 +70,7 @@ jobs: shell: bash working-directory: js/documentation steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 - name: Sync docs run: make sync - name: Verify changed files @@ -85,10 +89,10 @@ jobs: shell: bash working-directory: js/documentation steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 with: fetch-depth: 0 - - uses: actions/setup-node@v6 + - uses: actions/setup-node@v7 with: node-version: 24.11.1 cache: yarn diff --git a/.github/workflows/eslint-config-publish.yaml b/.github/workflows/eslint-config-publish.yaml index b6abfaac8b..849f713868 100644 --- a/.github/workflows/eslint-config-publish.yaml +++ b/.github/workflows/eslint-config-publish.yaml @@ -29,10 +29,10 @@ jobs: name: Publish npm package runs-on: ubuntu-latest steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 with: fetch-depth: 0 - - uses: actions/setup-node@v6 + - uses: actions/setup-node@v7 with: node-version: 24.11.1 cache: yarn diff --git a/.github/workflows/go-ci.yaml b/.github/workflows/go-ci.yaml index 6ef70bf2af..241c37c436 100644 --- a/.github/workflows/go-ci.yaml +++ b/.github/workflows/go-ci.yaml @@ -19,6 +19,10 @@ permissions: env: GOPATH: /home/runner/go/ GOPROXY: "https://proxy.golang.org" +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -35,11 +39,13 @@ jobs: shell: bash working-directory: go/ steps: - - uses: actions/checkout@v6 - - uses: actions/setup-go@v6 + - uses: actions/checkout@v7 + - uses: actions/setup-go@v7 with: go-version-file: go/go.work - check-latest: true + cache-dependency-path: | + go/go.work.sum + go/**/go.sum - id: lint-packages run: | packages=$(make --no-print-directory lint-packages) @@ -59,11 +65,11 @@ jobs: shell: bash working-directory: go/tools steps: - - uses: actions/checkout@v6 - - uses: actions/setup-go@v6 + - uses: actions/checkout@v7 + - uses: actions/setup-go@v7 with: go-version-file: go/go.work - check-latest: true + cache-dependency-path: go/tools/go.sum - name: Verify tools module and install goimports run: | go mod verify diff --git a/.github/workflows/helm-test-ci.yaml b/.github/workflows/helm-test-ci.yaml index 68af51490f..4a5fe417ae 100644 --- a/.github/workflows/helm-test-ci.yaml +++ b/.github/workflows/helm-test-ci.yaml @@ -17,6 +17,10 @@ env: GOPATH: /home/runner/go/ GOPROXY: "https://proxy.golang.org" +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -33,10 +37,11 @@ jobs: shell: bash working-directory: go/helm-test steps: - - uses: actions/checkout@v6 - - uses: actions/setup-go@v6 + - uses: actions/checkout@v7 + - uses: actions/setup-go@v7 with: go-version-file: go/helm-test/go.mod + cache-dependency-path: go/helm-test/go.sum cache: true - run: go mod download - run: PATH=$PATH:$GOPATH/bin make test diff --git a/.github/workflows/helm.yaml b/.github/workflows/helm.yaml index c273637237..5ff4b60d2b 100644 --- a/.github/workflows/helm.yaml +++ b/.github/workflows/helm.yaml @@ -5,6 +5,10 @@ on: - "*" permissions: contents: read +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -24,8 +28,8 @@ jobs: - charts/controller steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - - uses: azure/setup-helm@v4.2.0 + - uses: azure/setup-helm@v5.0.1 - run: helm template ${{ matrix.chart }} --set dashboard.app.security.csrfKey=dummycsrfkey diff --git a/.github/workflows/js-ci.yaml b/.github/workflows/js-ci.yaml index 1d72d630ab..a678ad8de8 100644 --- a/.github/workflows/js-ci.yaml +++ b/.github/workflows/js-ci.yaml @@ -29,6 +29,10 @@ on: permissions: contents: read +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -45,8 +49,8 @@ jobs: shell: bash working-directory: js steps: - - uses: actions/checkout@v6 - - uses: actions/setup-node@v6 + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 with: node-version: 24.11.1 cache: yarn @@ -75,8 +79,8 @@ jobs: shell: bash working-directory: js steps: - - uses: actions/checkout@v6 - - uses: actions/setup-node@v6 + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 with: node-version: 24.11.1 cache: yarn @@ -96,8 +100,8 @@ jobs: shell: bash working-directory: js steps: - - uses: actions/checkout@v6 - - uses: actions/setup-node@v6 + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 with: node-version: 24.11.1 cache: yarn diff --git a/.github/workflows/kubernetes-agent-cd.yaml b/.github/workflows/kubernetes-agent-cd.yaml index 56c79436a7..386ba2130a 100644 --- a/.github/workflows/kubernetes-agent-cd.yaml +++ b/.github/workflows/kubernetes-agent-cd.yaml @@ -24,11 +24,13 @@ jobs: shell: bash working-directory: go/kubernetes-agent steps: - - uses: actions/checkout@v6 - - uses: actions/setup-go@v6 + - uses: actions/checkout@v7 + - uses: actions/setup-go@v7 with: go-version-file: go/go.work - check-latest: true + cache-dependency-path: | + go/go.work.sum + go/kubernetes-agent/**/go.sum - run: PATH=$PATH:$GOPATH/bin make test image: @@ -48,7 +50,7 @@ jobs: runs-on: ${{ matrix.platforms.runner }} steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - name: Prepare @@ -58,25 +60,25 @@ jobs: echo "BUILD_TIME=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: ${{ env.REGISTRY_IMAGE }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Build and push by digest id: build - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: go file: go/kubernetes-agent/hack/docker/Dockerfile @@ -84,8 +86,8 @@ jobs: labels: ${{ steps.meta.outputs.labels }} platforms: ${{ matrix.platforms.platform }} outputs: type=image,push-by-digest=true,name-canonical=true,push=true - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=kubernetes-agent-${{ env.PLATFORM_PAIR }} + cache-to: type=gha,mode=max,scope=kubernetes-agent-${{ env.PLATFORM_PAIR }} build-args: | GIT_COMMIT=${{ github.sha }} VERSION=${{ steps.meta.outputs.version }} @@ -112,27 +114,27 @@ jobs: packages: 'write' steps: - name: Download digests - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: path: ${{ runner.temp }}/digests pattern: digests-* merge-multiple: true - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker Hub - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: | ghcr.io/pluralsh/kubernetes-agent diff --git a/.github/workflows/kubernetes-agent-ci.yaml b/.github/workflows/kubernetes-agent-ci.yaml index e4bc0dd3dd..fa16647b8a 100644 --- a/.github/workflows/kubernetes-agent-ci.yaml +++ b/.github/workflows/kubernetes-agent-ci.yaml @@ -21,6 +21,10 @@ env: GOPATH: /home/runner/go/ GOPROXY: "https://proxy.golang.org" REGISTRY_IMAGE: pluralsh/kubernetes-agent +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -28,63 +32,9 @@ jobs: permissions: contents: read - build-api: - needs: [vouch] - name: Build API - runs-on: ubuntu-latest - permissions: - contents: 'read' - defaults: - run: - shell: bash - working-directory: go/kubernetes-agent - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-go@v6 - with: - go-version-file: go/go.work - check-latest: true - - run: PATH=$PATH:$GOPATH/bin TARGET_DIRECTORY=. make -C api build - - build-kas: - needs: [vouch] - name: Build kas - runs-on: ubuntu-latest - permissions: - contents: 'read' - defaults: - run: - shell: bash - working-directory: go/kubernetes-agent - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-go@v6 - with: - go-version-file: go/go.work - check-latest: true - - run: PATH=$PATH:$GOPATH/bin TARGET_DIRECTORY=. make -C kas build-kas - - build-agentk: - needs: [vouch] - name: Build agentk - runs-on: ubuntu-latest - permissions: - contents: 'read' - defaults: - run: - shell: bash - working-directory: go/kubernetes-agent - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-go@v6 - with: - go-version-file: go/go.work - check-latest: true - - run: PATH=$PATH:$GOPATH/bin TARGET_DIRECTORY=. make -C kas build-agentk - test: needs: [vouch] - name: Unit test + name: Test runs-on: ubuntu-latest permissions: contents: 'read' @@ -93,11 +43,13 @@ jobs: shell: bash working-directory: go/kubernetes-agent steps: - - uses: actions/checkout@v6 - - uses: actions/setup-go@v6 + - uses: actions/checkout@v7 + - uses: actions/setup-go@v7 with: go-version-file: go/go.work - check-latest: true + cache-dependency-path: | + go/go.work.sum + go/kubernetes-agent/**/go.sum - run: PATH=$PATH:$GOPATH/bin make test build-image: @@ -117,7 +69,7 @@ jobs: runs-on: ${{ matrix.platforms.runner }} steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - name: Prepare @@ -128,7 +80,7 @@ jobs: echo "IMAGE_SHA=${{ github.event.pull_request.head.sha || github.sha }}" >> $GITHUB_ENV - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: | ghcr.io/${{ env.REGISTRY_IMAGE }} @@ -138,24 +90,24 @@ jobs: type=ref,event=branch type=raw,value=latest,enable={{is_default_branch}} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Login to Container registry - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push by digest id: build - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: go file: go/kubernetes-agent/hack/docker/Dockerfile labels: ${{ steps.meta.outputs.labels }} platforms: ${{ matrix.platforms.platform }} outputs: type=image,name=ghcr.io/${{ env.REGISTRY_IMAGE }},push-by-digest=true,name-canonical=true,push=true - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=kubernetes-agent-${{ env.PLATFORM_PAIR }} + cache-to: type=gha,mode=max,scope=kubernetes-agent-${{ env.PLATFORM_PAIR }} build-args: | VERSION=v0.0.0-${{ env.IMAGE_SHA }} GIT_COMMIT=${{ env.IMAGE_SHA }} @@ -182,16 +134,16 @@ jobs: packages: 'write' steps: - name: Download digests - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: path: ${{ runner.temp }}/digests pattern: digests-* merge-multiple: true - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: | ghcr.io/${{ env.REGISTRY_IMAGE }} @@ -201,7 +153,7 @@ jobs: type=ref,event=branch type=raw,value=latest,enable={{is_default_branch}} - name: Login to Container registry - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} diff --git a/.github/workflows/nexus-cd.yaml b/.github/workflows/nexus-cd.yaml index fa8520e618..3136550a46 100644 --- a/.github/workflows/nexus-cd.yaml +++ b/.github/workflows/nexus-cd.yaml @@ -38,10 +38,11 @@ jobs: shell: bash working-directory: go/nexus steps: - - uses: actions/checkout@v6 - - uses: actions/setup-go@v6 + - uses: actions/checkout@v7 + - uses: actions/setup-go@v7 with: go-version-file: go/nexus/go.mod + cache-dependency-path: go/nexus/go.sum cache: true - run: go mod download - run: PATH=$PATH:$GOPATH/bin make test @@ -68,7 +69,7 @@ jobs: working-directory: go/nexus steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - name: Prepare @@ -78,36 +79,34 @@ jobs: echo "BUILD_TIME=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: ${{ env.REGISTRY_IMAGE }} - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - - uses: google-github-actions/auth@v1 + - uses: google-github-actions/auth@v3 with: workload_identity_provider: 'projects/${{ secrets.GOOGLE_PROJECT_ID }}/locations/global/workloadIdentityPools/github/providers/github' service_account: 'terraform@pluralsh.iam.gserviceaccount.com' token_format: 'access_token' create_credentials_file: true - - uses: google-github-actions/setup-gcloud@v1.0.1 + - uses: google-github-actions/setup-gcloud@v3.0.1 - name: Login to GCR run: gcloud auth configure-docker -q - name: Login to Docker - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Build and push by digest id: build - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: "./go/nexus" file: "./go/nexus/Dockerfile" @@ -115,8 +114,8 @@ jobs: labels: ${{ steps.meta.outputs.labels }} platforms: ${{ matrix.platforms.platform }} outputs: type=image,push-by-digest=true,name-canonical=true,push=true - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=nexus-${{ env.PLATFORM_PAIR }} + cache-to: type=gha,mode=max,scope=nexus-${{ env.PLATFORM_PAIR }} build-args: | GIT_COMMIT=${{ github.sha }} VERSION=${{ steps.meta.outputs.version }} @@ -151,33 +150,33 @@ jobs: runs-on: ubuntu-latest steps: - name: Download digests - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: path: ${{ runner.temp }}/digests pattern: digests-nexus-* merge-multiple: true - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - - uses: google-github-actions/auth@v1 + - uses: google-github-actions/auth@v3 with: workload_identity_provider: 'projects/${{ secrets.GOOGLE_PROJECT_ID }}/locations/global/workloadIdentityPools/github/providers/github' service_account: 'terraform@pluralsh.iam.gserviceaccount.com' token_format: 'access_token' create_credentials_file: true - - uses: google-github-actions/setup-gcloud@v1.0.1 + - uses: google-github-actions/setup-gcloud@v3.0.1 - name: Login to GCR run: gcloud auth configure-docker -q - name: Login to Docker Hub - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Resolve tag version id: tag_version if: startsWith(github.ref, 'refs/tags/') @@ -185,7 +184,7 @@ jobs: echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT" - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: ${{ matrix.images }} tags: | diff --git a/.github/workflows/nexus-ci.yaml b/.github/workflows/nexus-ci.yaml index 51c694cf75..e261b70c9f 100644 --- a/.github/workflows/nexus-ci.yaml +++ b/.github/workflows/nexus-ci.yaml @@ -15,6 +15,10 @@ env: GOPROXY: "https://proxy.golang.org" REGISTRY_IMAGE: ghcr.io/pluralsh/nexus +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -22,43 +26,31 @@ jobs: permissions: contents: read - test: - needs: [vouch] - name: Test - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v6 - - - name: Set up Go - uses: actions/setup-go@v6 - with: - go-version-file: go/nexus/go.mod - - - name: Run tests - run: make test - working-directory: go/nexus - - build: + build-test: needs: [vouch] - name: Build + name: Build and test runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@v6 + uses: actions/checkout@v7 - name: Set up Go - uses: actions/setup-go@v6 + uses: actions/setup-go@v7 with: go-version-file: go/nexus/go.mod + cache-dependency-path: go/nexus/go.sum - name: Build binary run: make build working-directory: go/nexus + - name: Run tests + run: make test + working-directory: go/nexus + build-image: name: Build image - needs: [ build, test ] + needs: [build-test] permissions: contents: 'read' id-token: 'write' @@ -74,7 +66,7 @@ jobs: runs-on: ${{ matrix.platforms.runner }} steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - name: Prepare @@ -84,22 +76,20 @@ jobs: echo "BUILD_TIME=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: ${{ env.REGISTRY_IMAGE }} - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push by digest id: build - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: go/nexus file: go/nexus/Dockerfile @@ -107,8 +97,8 @@ jobs: labels: ${{ steps.meta.outputs.labels }} platforms: ${{ matrix.platforms.platform }} outputs: type=image,push-by-digest=true,name-canonical=true,push=true - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=nexus-${{ env.PLATFORM_PAIR }} + cache-to: type=gha,mode=max,scope=nexus-${{ env.PLATFORM_PAIR }} build-args: | GIT_COMMIT=${{ github.sha }} VERSION=${{ steps.meta.outputs.version }} @@ -132,22 +122,22 @@ jobs: runs-on: ubuntu-latest steps: - name: Download digests - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: path: ${{ runner.temp }}/digests pattern: digests-* merge-multiple: true - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: | ${{ env.REGISTRY_IMAGE }} diff --git a/.github/workflows/observability-proxy-cd.yaml b/.github/workflows/observability-proxy-cd.yaml index 5f9ef3ed24..92186afae5 100644 --- a/.github/workflows/observability-proxy-cd.yaml +++ b/.github/workflows/observability-proxy-cd.yaml @@ -37,10 +37,11 @@ jobs: shell: bash working-directory: go/observability-proxy steps: - - uses: actions/checkout@v6 - - uses: actions/setup-go@v6 + - uses: actions/checkout@v7 + - uses: actions/setup-go@v7 with: go-version-file: go/observability-proxy/go.mod + cache-dependency-path: go/observability-proxy/go.sum cache: true - run: go mod download - run: GOCACHE=/tmp/go-build go test ./... @@ -63,7 +64,7 @@ jobs: runs-on: ${{ matrix.platforms.runner }} steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 @@ -74,44 +75,42 @@ jobs: - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: ${{ env.REGISTRY_IMAGE }} - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - - uses: google-github-actions/auth@v1 + - uses: google-github-actions/auth@v3 with: workload_identity_provider: "projects/${{ secrets.GOOGLE_PROJECT_ID }}/locations/global/workloadIdentityPools/github/providers/github" service_account: "terraform@pluralsh.iam.gserviceaccount.com" token_format: "access_token" create_credentials_file: true - - uses: google-github-actions/setup-gcloud@v1.0.1 + - uses: google-github-actions/setup-gcloud@v3.0.1 - name: Login to GCR run: gcloud auth configure-docker -q - name: Login to Docker Hub - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Build and push by digest id: build - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: ./go/observability-proxy file: ./go/observability-proxy/Dockerfile @@ -119,8 +118,8 @@ jobs: labels: ${{ steps.meta.outputs.labels }} platforms: ${{ matrix.platforms.platform }} outputs: type=image,push-by-digest=true,name-canonical=true,push=true - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=observability-proxy-${{ env.PLATFORM_PAIR }} + cache-to: type=gha,mode=max,scope=observability-proxy-${{ env.PLATFORM_PAIR }} - name: Export digest run: | @@ -153,39 +152,39 @@ jobs: runs-on: ubuntu-latest steps: - name: Download digests - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: path: ${{ runner.temp }}/digests pattern: digests-observability-proxy-* merge-multiple: true - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - - uses: google-github-actions/auth@v1 + - uses: google-github-actions/auth@v3 with: workload_identity_provider: "projects/${{ secrets.GOOGLE_PROJECT_ID }}/locations/global/workloadIdentityPools/github/providers/github" service_account: "terraform@pluralsh.iam.gserviceaccount.com" token_format: "access_token" create_credentials_file: true - - uses: google-github-actions/setup-gcloud@v1.0.1 + - uses: google-github-actions/setup-gcloud@v3.0.1 - name: Login to GCR run: gcloud auth configure-docker -q - name: Login to Docker Hub - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Resolve tag version id: tag_version @@ -195,7 +194,7 @@ jobs: - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: ${{ matrix.images }} tags: | diff --git a/.github/workflows/observability-proxy-ci.yaml b/.github/workflows/observability-proxy-ci.yaml index c42df4ba66..59c5f6e778 100644 --- a/.github/workflows/observability-proxy-ci.yaml +++ b/.github/workflows/observability-proxy-ci.yaml @@ -14,6 +14,10 @@ env: GOPROXY: "https://proxy.golang.org" REGISTRY_IMAGE: ghcr.io/pluralsh/observability-proxy +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -27,38 +31,22 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@v6 + uses: actions/checkout@v7 - name: Set up Go - uses: actions/setup-go@v6 + uses: actions/setup-go@v7 with: go-version-file: go/observability-proxy/go.mod + cache-dependency-path: go/observability-proxy/go.sum - name: Run tests - run: GOCACHE=/tmp/go-build go test ./... - working-directory: go/observability-proxy - - build: - needs: [vouch] - name: Build - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v6 - - - name: Set up Go - uses: actions/setup-go@v6 - with: - go-version-file: go/observability-proxy/go.mod - - - name: Build binary - run: make build + run: go test ./... working-directory: go/observability-proxy build-image: name: Build image if: ${{ github.event.pull_request.head.repo.full_name == github.repository }} - needs: [build, test] + needs: [test] permissions: contents: read packages: write @@ -73,7 +61,7 @@ jobs: runs-on: ${{ matrix.platforms.runner }} steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 @@ -84,18 +72,16 @@ jobs: - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: ${{ env.REGISTRY_IMAGE }} - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} @@ -103,7 +89,7 @@ jobs: - name: Build and push by digest id: build - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: go/observability-proxy file: go/observability-proxy/Dockerfile @@ -111,8 +97,8 @@ jobs: labels: ${{ steps.meta.outputs.labels }} platforms: ${{ matrix.platforms.platform }} outputs: type=image,push-by-digest=true,name-canonical=true,push=true - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=observability-proxy-${{ env.PLATFORM_PAIR }} + cache-to: type=gha,mode=max,scope=observability-proxy-${{ env.PLATFORM_PAIR }} - name: Export digest run: | @@ -138,25 +124,25 @@ jobs: packages: write steps: - name: Download digests - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: path: ${{ runner.temp }}/digests pattern: digests-observability-proxy-* merge-multiple: true - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: ${{ env.REGISTRY_IMAGE }} tags: | diff --git a/.github/workflows/oci-auth-cd.yaml b/.github/workflows/oci-auth-cd.yaml index 155974c718..2ee646a0f0 100644 --- a/.github/workflows/oci-auth-cd.yaml +++ b/.github/workflows/oci-auth-cd.yaml @@ -21,6 +21,10 @@ env: REGISTRY_IMAGE: ghcr.io/pluralsh/oci-auth DOCKER_METADATA_PR_HEAD_SHA: 'true' +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -37,10 +41,11 @@ jobs: shell: bash working-directory: go/oci-auth steps: - - uses: actions/checkout@v6 - - uses: actions/setup-go@v6 + - uses: actions/checkout@v7 + - uses: actions/setup-go@v7 with: go-version-file: go/oci-auth/go.mod + cache-dependency-path: go/oci-auth/go.sum cache: true - run: go mod download - run: PATH=$PATH:$GOPATH/bin make test @@ -66,7 +71,7 @@ jobs: working-directory: go/oci-auth steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - name: Prepare @@ -75,20 +80,20 @@ jobs: echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: ${{ env.REGISTRY_IMAGE }} - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Build and push by digest id: build - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: "./go" file: "./go/oci-auth/Dockerfile" @@ -96,8 +101,8 @@ jobs: labels: ${{ steps.meta.outputs.labels }} platforms: ${{ matrix.platforms.platform }} outputs: type=image,push-by-digest=true,name-canonical=true,push=true - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=oci-auth-${{ env.PLATFORM_PAIR }} + cache-to: type=gha,mode=max,scope=oci-auth-${{ env.PLATFORM_PAIR }} build-args: | GIT_COMMIT=${{ github.sha }} VERSION=${{ steps.meta.outputs.version }} @@ -131,36 +136,36 @@ jobs: - docker.io/pluralsh/oci-auth steps: - name: Download digests - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: path: ${{ runner.temp }}/digests pattern: digests-* merge-multiple: true - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - - uses: google-github-actions/auth@v1 + - uses: google-github-actions/auth@v3 with: workload_identity_provider: 'projects/${{ secrets.GOOGLE_PROJECT_ID }}/locations/global/workloadIdentityPools/github/providers/github' service_account: 'terraform@pluralsh.iam.gserviceaccount.com' token_format: 'access_token' create_credentials_file: true - - uses: google-github-actions/setup-gcloud@v1.0.1 + - uses: google-github-actions/setup-gcloud@v3.0.1 - name: Login to GCR run: gcloud auth configure-docker -q - name: Login to Docker Hub - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: ${{ matrix.images }} tags: | diff --git a/.github/workflows/oci-auth-ci.yaml b/.github/workflows/oci-auth-ci.yaml index 437f58d68d..2d2c624866 100644 --- a/.github/workflows/oci-auth-ci.yaml +++ b/.github/workflows/oci-auth-ci.yaml @@ -17,6 +17,10 @@ permissions: env: GOPATH: /home/runner/go/ GOPROXY: "https://proxy.golang.org" +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -24,35 +28,20 @@ jobs: permissions: contents: read - build: - needs: [vouch] - name: Build - runs-on: ubuntu-latest - defaults: - run: - shell: bash - working-directory: go/oci-auth - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-go@v6 - with: - go-version-file: go/oci-auth/go.mod - cache: true - - run: go mod download - - run: PATH=$PATH:$GOPATH/bin make build - unit-test: + test: needs: [vouch] - name: Unit tests + name: Test runs-on: ubuntu-latest defaults: run: shell: bash working-directory: go/oci-auth steps: - - uses: actions/checkout@v6 - - uses: actions/setup-go@v6 + - uses: actions/checkout@v7 + - uses: actions/setup-go@v7 with: go-version-file: go/oci-auth/go.mod + cache-dependency-path: go/oci-auth/go.sum cache: true - run: go mod download - run: PATH=$PATH:$GOPATH/bin make test diff --git a/.github/workflows/oci-charts-ghcr.yaml b/.github/workflows/oci-charts-ghcr.yaml index fc8f347842..8417320e05 100644 --- a/.github/workflows/oci-charts-ghcr.yaml +++ b/.github/workflows/oci-charts-ghcr.yaml @@ -15,6 +15,10 @@ permissions: contents: read packages: write +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -35,11 +39,11 @@ jobs: repository: pluralsh/test-charts steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - - uses: azure/setup-helm@v4 + - uses: azure/setup-helm@v5 - name: Add repos run: | @@ -76,11 +80,11 @@ jobs: repository: pluralsh/controller-chart steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - - uses: azure/setup-helm@v4 + - uses: azure/setup-helm@v5 - name: Add repos run: | diff --git a/.github/workflows/polly-ci.yaml b/.github/workflows/polly-ci.yaml index 09a727a81e..e65887ad22 100644 --- a/.github/workflows/polly-ci.yaml +++ b/.github/workflows/polly-ci.yaml @@ -15,6 +15,10 @@ on: env: GOPATH: /home/runner/go/ GOPROXY: "https://proxy.golang.org" +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -22,33 +26,20 @@ jobs: permissions: contents: read - build: - needs: [vouch] - name: Build - runs-on: ubuntu-latest - defaults: - run: - shell: bash - working-directory: go/polly - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-go@v6 - with: - go-version-file: go/go.work - check-latest: true - - run: PATH=$PATH:$GOPATH/bin make build test: needs: [vouch] - name: Unit test + name: Test runs-on: ubuntu-latest defaults: run: shell: bash working-directory: go/polly steps: - - uses: actions/checkout@v6 - - uses: actions/setup-go@v6 + - uses: actions/checkout@v7 + - uses: actions/setup-go@v7 with: go-version-file: go/go.work - check-latest: true + cache-dependency-path: | + go/go.work.sum + go/polly/go.sum - run: PATH=$PATH:$GOPATH/bin make test diff --git a/.github/workflows/pr-labels-agent.yaml b/.github/workflows/pr-labels-agent.yaml index f212318fb6..84b71857ac 100644 --- a/.github/workflows/pr-labels-agent.yaml +++ b/.github/workflows/pr-labels-agent.yaml @@ -8,6 +8,10 @@ permissions: contents: read pull-requests: write +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -21,7 +25,7 @@ jobs: if: startsWith(github.event.pull_request.head.ref, 'agent/') runs-on: ubuntu-latest steps: - - uses: actions/github-script@v8 + - uses: actions/github-script@v9 with: script: | const issue_number = context.payload.pull_request.number diff --git a/.github/workflows/pr-labels.yaml b/.github/workflows/pr-labels.yaml index 9477d18b5e..a3316a726d 100644 --- a/.github/workflows/pr-labels.yaml +++ b/.github/workflows/pr-labels.yaml @@ -3,6 +3,10 @@ on: pull_request: branches: [ master ] types: [opened, labeled, unlabeled, synchronize] +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -19,7 +23,7 @@ jobs: steps: - name: Classify documentation pull requests if: startsWith(github.event.pull_request.title, 'docs:') - uses: actions/github-script@v8 + uses: actions/github-script@v9 with: script: | await github.rest.issues.addLabels({ @@ -28,7 +32,7 @@ jobs: issue_number: context.issue.number, labels: ['documentation'], }) - - uses: mheap/github-action-required-labels@v2 + - uses: mheap/github-action-required-labels@v5 with: mode: exactly count: 1 diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index 0b3e127fe4..c20d4a68f2 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -8,17 +8,17 @@ jobs: test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 - uses: erlef/setup-beam@v1 with: version-file: .tool-versions version-type: strict - uses: dtolnay/rust-toolchain@stable - - uses: azure/setup-helm@v3 + - uses: azure/setup-helm@v5 with: version: latest - name: Login to Docker - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} @@ -64,12 +64,12 @@ jobs: packages: "write" steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: # list of Docker images to use as base name for tags images: | @@ -80,17 +80,15 @@ jobs: # generate Docker tags based on the following events/attributes tags: | type=semver,pattern={{version}} - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - uses: google-github-actions/auth@v1 + uses: docker/setup-buildx-action@v4 + - uses: google-github-actions/auth@v3 with: workload_identity_provider: "projects/${{ secrets.GOOGLE_PROJECT_ID }}/locations/global/workloadIdentityPools/github/providers/github" service_account: "terraform@pluralsh.iam.gserviceaccount.com" token_format: "access_token" create_credentials_file: true - - uses: google-github-actions/setup-gcloud@v1.0.1 + - uses: google-github-actions/setup-gcloud@v3.0.1 - name: Login to gcr run: gcloud auth configure-docker -q - name: installing plural @@ -99,19 +97,19 @@ jobs: with: email: gh-actions@plural.sh - name: Login to plural registry - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: dkr.plural.sh username: gh-actions@plural.sh password: ${{ steps.plrl.outputs.token }} - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} @@ -121,7 +119,7 @@ jobs: # env: # JWT_PUBLIC_KEY: ${{ secrets.JWT_PUBLIC_KEY }} - name: Build and push - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: "." file: "./Dockerfile" @@ -129,8 +127,8 @@ jobs: tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} platforms: linux/amd64 - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=console + cache-to: type=gha,mode=max,scope=console build-args: | GIT_COMMIT=${{ github.sha }} VITE_PROD_SECRET_KEY=${{ secrets.VITE_PROD_SECRET_KEY }} @@ -154,7 +152,7 @@ jobs: pull-requests: write steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - name: Generate release notes @@ -164,7 +162,7 @@ jobs: RELEASE_NOTES_FILE: release-notes.md run: python3 .github/scripts/generate-release-notes.py "${{ github.ref_name }}" --changelog CHANGELOG.md - name: Release - uses: softprops/action-gh-release@v1 + uses: softprops/action-gh-release@v3 with: body_path: release-notes.md draft: false @@ -192,13 +190,14 @@ jobs: pull-requests: write steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: persist-credentials: false fetch-depth: 0 # otherwise, you will failed to push refs to dest repo - - uses: actions/setup-go@v6 + - uses: actions/setup-go@v7 with: go-version: "^1.21.3" + cache: false # - name: update controller crds # working-directory: controller # run: make chart-crds @@ -222,15 +221,15 @@ jobs: release: ${{github.ref_name}} - name: controller version id: controller_vsn - uses: mikefarah/yq@master + uses: mikefarah/yq@v4 with: cmd: yq ".version" charts/controller/Chart.yaml - name: update byok - uses: mikefarah/yq@master + uses: mikefarah/yq@v4 with: cmd: yq -i '.dependencies[] |= select(.name == "controller").version="${{ steps.controller_vsn.outputs.result }}"' charts/console/Chart.yaml - name: update byok rapid - uses: mikefarah/yq@master + uses: mikefarah/yq@v4 with: cmd: yq -i '.dependencies[] |= select(.name == "controller").version="${{ steps.controller_vsn.outputs.result }}"' charts/console-rapid/Chart.yaml - name: helm-dependencies @@ -256,13 +255,14 @@ jobs: pull-requests: write steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: persist-credentials: false fetch-depth: 0 # otherwise, you will failed to push refs to dest repo - - uses: actions/setup-go@v6 + - uses: actions/setup-go@v7 with: go-version: "^1.21.3" + cache: false - name: push byok chart uses: pluralsh/chart-releaser@v0.1.3 with: @@ -275,11 +275,11 @@ jobs: release: ${{github.ref_name}} - name: controller version id: controller_vsn - uses: mikefarah/yq@master + uses: mikefarah/yq@v4 with: cmd: yq ".version" charts/controller/Chart.yaml - name: update byok - uses: mikefarah/yq@master + uses: mikefarah/yq@v4 with: cmd: yq -i '.dependencies[] |= select(.name == "controller").version="${{ steps.controller_vsn.outputs.result }}"' charts/console-rapid/Chart.yaml - name: helm-dependencies diff --git a/.github/workflows/repository-prebake-console.yaml b/.github/workflows/repository-prebake-console.yaml index 2e9a59c25d..ff7d84861c 100644 --- a/.github/workflows/repository-prebake-console.yaml +++ b/.github/workflows/repository-prebake-console.yaml @@ -37,34 +37,34 @@ jobs: packages: write steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 ref: ${{ github.sha }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - - uses: google-github-actions/auth@v1 + - uses: google-github-actions/auth@v3 with: workload_identity_provider: 'projects/${{ secrets.GOOGLE_PROJECT_ID }}/locations/global/workloadIdentityPools/github/providers/github' service_account: 'terraform@pluralsh.iam.gserviceaccount.com' token_format: 'access_token' create_credentials_file: true - - uses: google-github-actions/setup-gcloud@v1.0.1 + - uses: google-github-actions/setup-gcloud@v3.0.1 - name: Login to GCR run: gcloud auth configure-docker -q - name: Login to Docker Hub - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} @@ -76,7 +76,7 @@ jobs: - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: | gcr.io/pluralsh/repository-prebake @@ -90,7 +90,7 @@ jobs: type=sha,prefix=dev-,format=short,priority=800,enable=${{ github.event_name == 'push' }} - name: Build and push - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: go/repository-prebake file: repository-prebake/base/Dockerfile @@ -110,7 +110,7 @@ jobs: contents: read steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 ref: ${{ github.sha }} @@ -138,10 +138,10 @@ jobs: fi - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Login to Docker Hub - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} @@ -152,7 +152,7 @@ jobs: - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: ${{ env.CONSOLE_IMAGE }} flavor: | @@ -163,7 +163,7 @@ jobs: type=sha,prefix=dev-,format=short,priority=800,enable=${{ github.event_name == 'push' }} - name: Build and push - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: . file: repository-prebake/console/Dockerfile diff --git a/.github/workflows/softserve-cd.yaml b/.github/workflows/softserve-cd.yaml index 0d0bef4ee5..70a53eca97 100644 --- a/.github/workflows/softserve-cd.yaml +++ b/.github/workflows/softserve-cd.yaml @@ -17,6 +17,10 @@ permissions: env: DOCKER_METADATA_PR_HEAD_SHA: 'true' +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -32,20 +36,19 @@ jobs: run: shell: bash steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 with: fetch-depth: 0 - - uses: docker/setup-qemu-action@v3 - - uses: docker/setup-buildx-action@v3 + - uses: docker/setup-buildx-action@v4 - name: Build softserve image for local test - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: "./dockerfiles" file: "./dockerfiles/Dockerfile.softserve" load: true tags: softserve-local:test platforms: linux/amd64 - cache-from: type=gha + cache-from: type=gha,scope=softserve - name: Run softserve container run: | docker run -d --name softserve-test \ @@ -79,11 +82,11 @@ jobs: id-token: 'write' packages: 'write' steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 with: fetch-depth: 0 - id: meta-softserve - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: | ghcr.io/pluralsh/git-server @@ -95,29 +98,28 @@ jobs: type=ref,event=tag type=ref,event=pr type=sha - - uses: google-github-actions/auth@v1 + - uses: google-github-actions/auth@v3 with: workload_identity_provider: 'projects/${{ secrets.GOOGLE_PROJECT_ID }}/locations/global/workloadIdentityPools/github/providers/github' service_account: 'terraform@pluralsh.iam.gserviceaccount.com' token_format: 'access_token' create_credentials_file: true - - uses: google-github-actions/setup-gcloud@v1.0.1 + - uses: google-github-actions/setup-gcloud@v3.0.1 - name: Login to gcr run: gcloud auth configure-docker -q - name: Login to Docker - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - - uses: docker/login-action@v3 + - uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - - uses: docker/setup-qemu-action@v3 - - uses: docker/setup-buildx-action@v3 + - uses: docker/setup-buildx-action@v4 - name: Build and push softserve - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: "./dockerfiles" file: "./dockerfiles/Dockerfile.softserve" @@ -125,5 +127,5 @@ jobs: tags: ${{ steps.meta-softserve.outputs.tags }} labels: ${{ steps.meta-softserve.outputs.labels }} platforms: linux/amd64 - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=softserve + cache-to: type=gha,mode=max,scope=softserve diff --git a/.github/workflows/stylelint-config-publish.yaml b/.github/workflows/stylelint-config-publish.yaml index 2aff012af4..d020e5a50d 100644 --- a/.github/workflows/stylelint-config-publish.yaml +++ b/.github/workflows/stylelint-config-publish.yaml @@ -29,10 +29,10 @@ jobs: name: Publish npm package runs-on: ubuntu-latest steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 with: fetch-depth: 0 - - uses: actions/setup-node@v6 + - uses: actions/setup-node@v7 with: node-version: 24.11.1 cache: yarn diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index ddfae500dd..58bfdfd01b 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -8,6 +8,10 @@ on: branches: [master] pull_request: branches: ["*"] +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -21,12 +25,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: # list of Docker images to use as base name for tags images: | @@ -39,7 +43,7 @@ jobs: type=ref,event=branch - name: Docker meta id: meta-ubuntu - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: # list of Docker images to use as base name for tags images: | @@ -50,15 +54,15 @@ jobs: type=ref,event=pr type=ref,event=branch - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Login to GHCR - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} @@ -68,7 +72,7 @@ jobs: # env: # JWT_PUBLIC_KEY: ${{ secrets.JWT_PUBLIC_KEY }} - name: Test Build console image - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: "." file: "./Dockerfile" @@ -85,7 +89,7 @@ jobs: SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }} # - name: Build and push ubuntu images - # uses: docker/build-push-action@v6 + # uses: docker/build-push-action@v7 # with: # context: "." # file: "./Dockerfile" @@ -108,17 +112,17 @@ jobs: permissions: contents: read steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 - uses: erlef/setup-beam@v1 with: version-file: .tool-versions version-type: strict - uses: dtolnay/rust-toolchain@stable - - uses: azure/setup-helm@v3 + - uses: azure/setup-helm@v5 with: version: latest - name: Login to Docker - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: mjgpluralsh password: ${{ secrets.DOCKER_ACCESS_TOKEN }} @@ -167,16 +171,17 @@ jobs: name: Check that Schema is up to date runs-on: ubuntu-latest steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 - uses: erlef/setup-beam@v1 with: version-file: .tool-versions version-type: strict - uses: dtolnay/rust-toolchain@stable - name: Set up Go - uses: actions/setup-go@v6 + uses: actions/setup-go@v7 with: go-version-file: go/client/go.mod + cache-dependency-path: go/client/go.sum cache: true - name: Restore dependencies cache uses: actions/cache@v6 diff --git a/.github/workflows/trivy.yaml b/.github/workflows/trivy.yaml index ac47f2fecc..c2465742f3 100644 --- a/.github/workflows/trivy.yaml +++ b/.github/workflows/trivy.yaml @@ -9,6 +9,10 @@ on: - main schedule: - cron: "0 0 * * *" +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: vouch: name: Vouch @@ -26,9 +30,9 @@ jobs: actions: read steps: - name: Checkout code - uses: actions/checkout@v6 + uses: actions/checkout@v7 - name: Run Trivy vulnerability scanner in IaC mode - uses: aquasecurity/trivy-action@master + uses: aquasecurity/trivy-action@ed142fd0673e97e23eac54620cfb913e5ce36c25 # v0.36.0 with: scan-type: 'fs' hide-progress: false diff --git a/.github/workflows/vouch-check-pr.yml b/.github/workflows/vouch-check-pr.yml index 39024da010..d33c6b2058 100644 --- a/.github/workflows/vouch-check-pr.yml +++ b/.github/workflows/vouch-check-pr.yml @@ -12,6 +12,10 @@ permissions: pull-requests: write actions: write +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + jobs: check: name: Check PR author is vouched @@ -22,7 +26,7 @@ jobs: github.event.issue.pull_request && contains(github.event.comment.body, '/recheck')) steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 with: persist-credentials: false diff --git a/.github/workflows/vouch-manage-by-issue.yml b/.github/workflows/vouch-manage-by-issue.yml index b42657a92e..534c9fb9c1 100644 --- a/.github/workflows/vouch-manage-by-issue.yml +++ b/.github/workflows/vouch-manage-by-issue.yml @@ -23,7 +23,7 @@ jobs: contains(github.event.comment.body, '!unvouch') runs-on: ubuntu-latest steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 - uses: mitchellh/vouch/action/manage-by-issue@d66fa29a64600490892131ad87597c30c91fcac4 # v1.5.0 with: diff --git a/.github/workflows/vouch-sync-codeowners.yml b/.github/workflows/vouch-sync-codeowners.yml index 444210a1c2..e952bab368 100644 --- a/.github/workflows/vouch-sync-codeowners.yml +++ b/.github/workflows/vouch-sync-codeowners.yml @@ -19,7 +19,7 @@ jobs: name: Sync CODEOWNERS into VOUCHED.td runs-on: ubuntu-latest steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 - uses: mitchellh/vouch/action/sync-codeowners@d66fa29a64600490892131ad87597c30c91fcac4 # v1.5.0 with: diff --git a/charts/console-rapid/charts/controller-0.0.214.tgz b/charts/console-rapid/charts/controller-0.0.214.tgz index 7dd8ff1bf5..2a07591095 100644 Binary files a/charts/console-rapid/charts/controller-0.0.214.tgz and b/charts/console-rapid/charts/controller-0.0.214.tgz differ diff --git a/charts/console/charts/controller-0.0.214.tgz b/charts/console/charts/controller-0.0.214.tgz index e52c46b55b..2a07591095 100644 Binary files a/charts/console/charts/controller-0.0.214.tgz and b/charts/console/charts/controller-0.0.214.tgz differ diff --git a/charts/controller/crds/deployments.plural.sh_dashboards.yaml b/charts/controller/crds/deployments.plural.sh_dashboards.yaml new file mode 100644 index 0000000000..3ccebf4055 --- /dev/null +++ b/charts/controller/crds/deployments.plural.sh_dashboards.yaml @@ -0,0 +1,389 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.19.0 + name: dashboards.deployments.plural.sh +spec: + group: deployments.plural.sh + names: + kind: Dashboard + listKind: DashboardList + plural: dashboards + singular: dashboard + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: ID of the Dashboard in the Console API. + jsonPath: .status.id + name: ID + type: string + - description: Whether the Dashboard is ready. + jsonPath: .status.conditions[?(@.type=="Ready")].status + name: READY + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + description: |- + Dashboard represents an observability dashboard owned by a Workbench. It consists of graphs + arranged on a grid, each backed by an observability tool datasource, and optional user-configurable inputs. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: Spec defines the desired state of the Dashboard. + properties: + description: + description: Description is an optional dashboard description. + type: string + graphs: + description: |- + Graphs arranged on the dashboard grid. Graph identifiers must be unique within the dashboard. + Graphs can be grouped by setting sectionId to the identifier of a SECTION graph. + Note that overlapping graph layouts are only validated by the Console API. + items: + description: DashboardGraph is a single graph placed on the dashboard + grid. + properties: + datasource: + description: Datasource is the tool call used to fetch external + data. + properties: + input: + description: Input is passed to the observability tool. + type: object + x-kubernetes-preserve-unknown-fields: true + tool: + description: Tool is the name of the observability tool + used to fetch the data. + minLength: 1 + type: string + type: + description: Type is the kind of data returned by the datasource. + enum: + - LOGS + - METRICS + - TRACES + - LABELS + type: string + required: + - input + - tool + - type + type: object + description: + description: Description is an optional graph description. + type: string + identifier: + description: Identifier is a stable identifier unique within + the dashboard. + maxLength: 128 + minLength: 1 + type: string + layout: + description: Layout is the grid position and size of the graph. + properties: + h: + description: H is the height in grid rows. + format: int64 + minimum: 1 + type: integer + w: + description: W is the width in grid columns. + format: int64 + minimum: 1 + type: integer + x: + description: X is the zero-based horizontal grid coordinate. + format: int64 + minimum: 0 + type: integer + "y": + description: Y is the zero-based vertical grid coordinate. + format: int64 + minimum: 0 + type: integer + required: + - h + - w + - x + - "y" + type: object + markdown: + description: Markdown is the content for MARKDOWN graphs. + type: string + options: + description: Options are visualization-specific display options. + Sections may set collapsed. + type: object + x-kubernetes-preserve-unknown-fields: true + sectionId: + description: SectionID is the identifier of the SECTION graph + containing this graph. Sections cannot be nested. + maxLength: 128 + type: string + title: + description: Title is the graph title. + type: string + type: + description: Type is the graph visualization type. + enum: + - TIMESERIES + - GAUGE + - LOGS + - MARKDOWN + - TABLE + - STAT + - BAR + - PIE + - HEATMAP + - TRACES + - SECTION + maxLength: 16 + type: string + required: + - identifier + - layout + - type + type: object + x-kubernetes-validations: + - message: markdown must be set for MARKDOWN graphs + rule: self.type != 'MARKDOWN' || has(self.markdown) + - message: sections cannot be nested, SECTION graphs cannot set + sectionId + rule: self.type != 'SECTION' || !has(self.sectionId) || size(self.sectionId) + == 0 + maxItems: 200 + type: array + x-kubernetes-list-map-keys: + - identifier + x-kubernetes-list-type: map + inputs: + description: Inputs are user-configurable dashboard variables. + items: + description: DashboardInput is a user-configurable dashboard variable. + properties: + datasource: + description: Datasource is the tool query used to populate input + options, such as metric label search. + properties: + input: + description: Input is passed to the observability tool. + type: object + x-kubernetes-preserve-unknown-fields: true + tool: + description: Tool is the name of the observability tool + used to fetch the data. + minLength: 1 + type: string + type: + description: Type is the kind of data returned by the datasource. + enum: + - LOGS + - METRICS + - TRACES + - LABELS + type: string + required: + - input + - tool + - type + type: object + default: + description: Default is the default input value. + type: string + description: + description: Description is an optional input description. + type: string + label: + description: Label is a human-readable input label. + type: string + name: + description: Name is the variable name referenced by graph datasource + inputs. + minLength: 1 + type: string + options: + description: Options are the allowed values for select inputs. + items: + type: string + type: array + required: + description: Required defines whether a value is required when + rendering. + type: boolean + type: + description: Type is the input control type. + enum: + - TEXT + - NUMBER + - BOOLEAN + - SELECT + - MULTI_SELECT + - TIME_RANGE + type: string + required: + - name + - type + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + name: + description: |- + Name is the dashboard name, unique within its workbench. + If not set, metadata.name is used. + type: string + reconciliation: + description: Reconciliation settings for this resource. + properties: + driftDetection: + default: true + description: |- + DriftDetection enables drift detection for this resource. + It is destined to detect changes made to the related + resources that are not referenced with owner ref. + Use with Interval to set how often drift detection runs. + example: false + type: boolean + interval: + default: 30m + description: |- + Interval for the drift detection mechanism. + It is subject to jitter to avoid the thundering herd problem, + it is calculated as a random value between 50% and 150% of the given duration. + example: 5m30s + type: string + type: object + workbenchRef: + description: |- + WorkbenchRef references the Workbench that owns this dashboard. + The Workbench must be in the same namespace as the dashboard. + It is immutable, a dashboard cannot be moved to a different workbench. + properties: + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + type: object + x-kubernetes-map-type: atomic + x-kubernetes-validations: + - message: name is required + rule: has(self.name) && size(self.name) > 0 + - message: workbenchRef is immutable + rule: self == oldSelf + required: + - workbenchRef + type: object + x-kubernetes-validations: + - message: sectionId must reference an existing SECTION graph + rule: '!has(self.graphs) || self.graphs.all(g, !has(g.sectionId) || + size(g.sectionId) == 0 || self.graphs.exists(s, s.type == ''SECTION'' + && s.identifier == g.sectionId))' + status: + description: Status represents the current state of this resource. + properties: + conditions: + description: Represents the observations of a PrAutomation's current + state. + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + id: + description: ID of the resource in the Console API. + type: string + readonly: + default: false + description: ReadOnly indicates whether the resource is read-only. + type: boolean + sha: + description: SHA of last applied configuration. + type: string + required: + - readonly + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} diff --git a/charts/controller/crds/deployments.plural.sh_monitors.yaml b/charts/controller/crds/deployments.plural.sh_monitors.yaml new file mode 100644 index 0000000000..1d99e2c4bf --- /dev/null +++ b/charts/controller/crds/deployments.plural.sh_monitors.yaml @@ -0,0 +1,526 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.19.0 + name: monitors.deployments.plural.sh +spec: + group: deployments.plural.sh + names: + kind: Monitor + listKind: MonitorList + plural: monitors + singular: monitor + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: ID of the Monitor in the Console API. + jsonPath: .status.id + name: ID + type: string + - description: Monitor data type. + jsonPath: .spec.type + name: TYPE + type: string + - description: Severity of alerts generated by this Monitor. + jsonPath: .spec.severity + name: SEVERITY + type: string + - description: Whether the Monitor is ready. + jsonPath: .status.conditions[?(@.type=="Ready")].status + name: READY + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + description: |- + Monitor represents an observability monitor attached to a service deployment. It periodically + evaluates a log or metrics query against a threshold and fires alerts when it is crossed. + Optionally, it can be attached to a workbench to start an investigation when it fires. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: Spec defines the desired state of the Monitor. + properties: + alertTemplate: + description: AlertTemplate is an optional template used when rendering + alert messages for this monitor. + type: string + description: + description: Description is an optional free-form description of what + this monitor is checking. + type: string + evaluationCron: + description: |- + EvaluationCron is the cron schedule defining when the monitor is evaluated (e.g. */5 * * * *). + It must be a cron expression with 5 fields (or 6 with an optional year), separated by single spaces, + or one of the @yearly, @annually, @monthly, @weekly, @daily, @midnight, @hourly, @minutely, + @secondly or @reboot shortcuts. Field values are validated by the Console API. + minLength: 1 + pattern: ^(@(?i:yearly|annually|monthly|weekly|daily|midnight|hourly|minutely|secondly|reboot)|[^ + ]+( [^ ]+){4,5})$ + type: string + modes: + description: Modes defines mode-specific options for monitor-triggered + workbench jobs. + properties: + budget: + description: Budget defines budget limits for the job. + properties: + cost: + description: |- + Cost is the maximum cost budget for the job. + It is a string to allow decimal values (e.g. "12.5"). + pattern: ^[0-9]+(\.[0-9]+)?$ + type: string + tokens: + description: Tokens is the maximum token budget for the job. + format: int64 + minimum: 0 + type: integer + type: object + coding: + description: Coding defines coding mode options for the job. + properties: + approval: + description: Approval requires approval before coding agent + runs continue. + type: boolean + babysit: + description: Babysit enables babysit mode for coding agent + runs. + type: boolean + review: + description: Review enables pull request review mode for coding + agent runs. + type: boolean + type: object + kubernetes: + description: Kubernetes defines kubernetes action options for + the job. + properties: + delete: + description: Delete enables kubernetes delete actions. + type: boolean + drain: + description: Drain enables kubernetes node drain actions. + type: boolean + excludeNamespaces: + description: ExcludeNamespaces are namespaces the agent can + never act in. + items: + type: string + type: array + exec: + description: Exec enables kubernetes exec actions. + type: boolean + requireNamespaces: + description: RequireNamespaces, if set, are the only namespaces + the agent is allowed to act in. + items: + type: string + type: array + update: + description: Update enables kubernetes update actions. + type: boolean + type: object + model: + description: Model overrides the AI model used for the job. + properties: + model: + description: Model is the model name for the job. + minLength: 1 + type: string + provider: + description: Provider is the AI provider for the job. + enum: + - OPENAI + - ANTHROPIC + - OLLAMA + - AZURE + - BEDROCK + - VERTEX + - OPENAI_COMPATIBLE + - XAI + type: string + required: + - model + - provider + type: object + plan: + description: Plan enables planning mode for the job. + type: boolean + verification: + description: Verification enables verification mode for the job. + type: boolean + type: object + name: + description: |- + Name is the short name used to identify this monitor in the Console API. + If not set, metadata.name is used. + type: string + prompt: + description: Prompt is used when the monitor starts a workbench investigation. + maxLength: 2048 + type: string + query: + description: Query is the underlying query configuration used to fetch + data for this monitor. + properties: + log: + description: Log query used when the monitor type is LOG. + properties: + bucketSize: + description: BucketSize is the time bucket size (e.g. 5m) + used when aggregating log results. + pattern: ^[0-9]+[dmhs]$ + type: string + duration: + description: Duration is the lookback duration for the log + query (e.g. 1h, 10m, 30s). + pattern: ^[0-9]+[dmhs]$ + type: string + facets: + description: Facets are optional key/value facets applied + as additional filters on the log query. + items: + description: MonitorFacet is a key/value facet used to further + filter log queries. + properties: + key: + description: Key is the facet key (e.g. kubernetes namespace + or pod label name). + type: string + value: + description: Value is the facet value to match for the + given key. + type: string + required: + - key + - value + type: object + type: array + operator: + default: OR + description: |- + Operator to use when combining multiple log queries. + Defaults to OR, which is also the Console API default. + enum: + - OR + - AND + type: string + options: + description: Options are provider-specific log query options. + properties: + azure: + description: Azure log query options. + properties: + resourceId: + description: ResourceID is the Azure resource ID to + query logs for. + type: string + type: object + type: object + query: + description: Query is the log query string passed through + to the underlying log provider. + minLength: 1 + type: string + tool: + description: Tool is the named workbench logs tool. When omitted, + the native Plural logs provider is used. + type: string + required: + - bucketSize + - query + type: object + metrics: + description: Metrics query used when the monitor type is METRICS. + properties: + duration: + description: Duration is the lookback duration for the metrics + query (e.g. 1h). + pattern: ^[0-9]+[dmhs]$ + type: string + options: + description: Options are provider-specific metrics query options. + properties: + azure: + description: Azure metrics query options. + properties: + aggregation: + description: Aggregation is the Azure metrics aggregation + type. + type: string + filter: + description: Filter is the Azure metrics filter expression. + type: string + metricsEndpoint: + description: MetricsEndpoint is the Azure metrics + endpoint override. + type: string + metricsNamespace: + description: MetricsNamespace is the Azure metrics + namespace. + type: string + orderBy: + description: OrderBy is the Azure metrics ordering + expression. + type: string + resourceId: + description: ResourceID is the Azure resource ID to + query metrics for. + type: string + rollUpBy: + description: RollUpBy is the Azure metrics dimension + to roll up by. + type: string + type: object + type: object + query: + description: Query is the metrics query string passed through + to the underlying metrics provider. + minLength: 1 + type: string + step: + description: Step is the metrics query step (e.g. 5m). + pattern: ^[0-9]+[dmhs]$ + type: string + tool: + description: Tool is the named workbench metrics tool. When + omitted, the native Plural metrics provider is used. + type: string + required: + - query + type: object + type: object + x-kubernetes-validations: + - message: only one of log or metrics can be set + rule: '!(has(self.log) && has(self.metrics))' + reconciliation: + description: Reconciliation settings for this resource. + properties: + driftDetection: + default: true + description: |- + DriftDetection enables drift detection for this resource. + It is destined to detect changes made to the related + resources that are not referenced with owner ref. + Use with Interval to set how often drift detection runs. + example: false + type: boolean + interval: + default: 30m + description: |- + Interval for the drift detection mechanism. + It is subject to jitter to avoid the thundering herd problem, + it is calculated as a random value between 50% and 150% of the given duration. + example: 5m30s + type: string + type: object + service: + description: |- + Service references an existing service in the Console API this monitor is attached to, + in the format "cluster-handle/service-name" (e.g. mgmt/console). Use it to attach + a monitor to a service that is not managed by a ServiceDeployment resource. + Either ServiceRef or Service must be set. + example: mgmt/console + pattern: ^[^/]+/[^/]+$ + type: string + serviceRef: + description: |- + ServiceRef references the ServiceDeployment resource this monitor is attached to. + The ServiceDeployment must be in the same namespace as the monitor. + Either ServiceRef or Service must be set. + properties: + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + type: object + x-kubernetes-map-type: atomic + x-kubernetes-validations: + - message: name is required + rule: has(self.name) && size(self.name) > 0 + severity: + description: Severity is the severity level applied to alerts generated + by this monitor. + enum: + - LOW + - MEDIUM + - HIGH + - CRITICAL + - UNDEFINED + type: string + threshold: + description: Threshold is the configuration that determines when the + monitor should fire. + properties: + aggregate: + description: Aggregate is the aggregation function applied over + the result set. + enum: + - MAX + - MIN + - AVG + type: string + value: + description: |- + Value is the numeric value the aggregated metric must cross to trigger the alert. + It is a string to allow decimal values (e.g. "0.95"). + pattern: ^-?[0-9]+(\.[0-9]+)?$ + type: string + required: + - aggregate + - value + type: object + type: + description: Type is the monitor data type. + enum: + - LOG + - METRICS + type: string + workbenchRef: + description: |- + WorkbenchRef references the Workbench this monitor is attached to. + When set, the monitor can start a workbench investigation when it fires. + It is required if the query uses a named workbench tool. + The Workbench must be in the same namespace as the monitor. + properties: + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + type: object + x-kubernetes-map-type: atomic + x-kubernetes-validations: + - message: name is required + rule: has(self.name) && size(self.name) > 0 + required: + - evaluationCron + - query + - severity + - threshold + - type + type: object + x-kubernetes-validations: + - message: exactly one of serviceRef or service must be set + rule: has(self.serviceRef) != has(self.service) + - message: query.log must be set when type is LOG + rule: self.type != 'LOG' || has(self.query.log) + - message: query.metrics must be set when type is METRICS + rule: self.type != 'METRICS' || has(self.query.metrics) + - message: workbenchRef is required for tool-backed monitor queries + rule: has(self.workbenchRef) || !((has(self.query.log) && has(self.query.log.tool)) + || (has(self.query.metrics) && has(self.query.metrics.tool))) + status: + description: Status represents the current state of this resource. + properties: + conditions: + description: Represents the observations of a PrAutomation's current + state. + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + id: + description: ID of the resource in the Console API. + type: string + readonly: + default: false + description: ReadOnly indicates whether the resource is read-only. + type: boolean + sha: + description: SHA of last applied configuration. + type: string + required: + - readonly + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} diff --git a/charts/controller/values.yaml b/charts/controller/values.yaml index f8767282a1..a4046ebbdf 100644 --- a/charts/controller/values.yaml +++ b/charts/controller/values.yaml @@ -89,6 +89,7 @@ rbac: - compliancereportgenerators - customcompatibilitymatrices - customstackruns + - dashboards - deploymentsettings - federatedcredentials - flows @@ -100,6 +101,7 @@ rbac: - infrastructurestacks - managednamespaces - mcpservers + - monitors - namespacecredentials - notificationrouters - notificationsinks diff --git a/go/client/client.go b/go/client/client.go index 42bc87a23b..ee9f65a430 100644 --- a/go/client/client.go +++ b/go/client/client.go @@ -110,6 +110,7 @@ type ConsoleClient interface { GetServiceDeploymentComponents(ctx context.Context, id string, interceptors ...clientv2.RequestInterceptor) (*GetServiceDeploymentComponents, error) GetServiceDeploymentForAgent(ctx context.Context, id string, interceptors ...clientv2.RequestInterceptor) (*GetServiceDeploymentForAgent, error) GetServiceDeploymentByHandle(ctx context.Context, cluster string, name string, interceptors ...clientv2.RequestInterceptor) (*GetServiceDeploymentByHandle, error) + GetServiceDeploymentTinyByHandle(ctx context.Context, cluster string, name string, interceptors ...clientv2.RequestInterceptor) (*GetServiceDeploymentTinyByHandle, error) GetServiceTarball(ctx context.Context, id string, interceptors ...clientv2.RequestInterceptor) (*GetServiceTarball, error) ListServiceDeployment(ctx context.Context, after *string, before *string, last *int64, clusterID *string, interceptors ...clientv2.RequestInterceptor) (*ListServiceDeployment, error) PagedClusterServices(ctx context.Context, after *string, first *int64, before *string, last *int64, interceptors ...clientv2.RequestInterceptor) (*PagedClusterServices, error) @@ -185,6 +186,14 @@ type ConsoleClient interface { GetMCPServer(ctx context.Context, id string, interceptors ...clientv2.RequestInterceptor) (*GetMCPServer, error) UpsertMCPServer(ctx context.Context, attributes McpServerAttributes, interceptors ...clientv2.RequestInterceptor) (*UpsertMCPServer, error) DeleteMCPServer(ctx context.Context, id string, interceptors ...clientv2.RequestInterceptor) (*DeleteMCPServer, error) + GetMonitor(ctx context.Context, id string, interceptors ...clientv2.RequestInterceptor) (*GetMonitor, error) + CreateMonitor(ctx context.Context, attributes MonitorAttributes, interceptors ...clientv2.RequestInterceptor) (*CreateMonitor, error) + UpdateMonitor(ctx context.Context, id string, attributes MonitorAttributes, interceptors ...clientv2.RequestInterceptor) (*UpdateMonitor, error) + DeleteMonitor(ctx context.Context, id string, interceptors ...clientv2.RequestInterceptor) (*DeleteMonitor, error) + GetWorkbenchDashboard(ctx context.Context, id string, interceptors ...clientv2.RequestInterceptor) (*GetWorkbenchDashboard, error) + CreateDashboard(ctx context.Context, attributes DashboardAttributes, interceptors ...clientv2.RequestInterceptor) (*CreateDashboard, error) + UpdateDashboard(ctx context.Context, id string, attributes DashboardAttributes, interceptors ...clientv2.RequestInterceptor) (*UpdateDashboard, error) + DeleteDashboard(ctx context.Context, id string, interceptors ...clientv2.RequestInterceptor) (*DeleteDashboard, error) ListNamespaces(ctx context.Context, after *string, first *int64, before *string, last *int64, interceptors ...clientv2.RequestInterceptor) (*ListNamespaces, error) ListClusterNamespaces(ctx context.Context, after *string, first *int64, before *string, last *int64, interceptors ...clientv2.RequestInterceptor) (*ListClusterNamespaces, error) GetNamespace(ctx context.Context, id string, interceptors ...clientv2.RequestInterceptor) (*GetNamespace, error) @@ -3868,6 +3877,63 @@ func (t *AISettingsFragment) GetAnthropic() *AISettingsFragment_Anthropic { return t.Anthropic } +type MonitorFragment struct { + ID string "json:\"id\" graphql:\"id\"" + Name string "json:\"name\" graphql:\"name\"" + Service *MonitorFragment_Service "json:\"service,omitempty\" graphql:\"service\"" + Workbench *MonitorFragment_Workbench "json:\"workbench,omitempty\" graphql:\"workbench\"" +} + +func (t *MonitorFragment) GetID() string { + if t == nil { + t = &MonitorFragment{} + } + return t.ID +} +func (t *MonitorFragment) GetName() string { + if t == nil { + t = &MonitorFragment{} + } + return t.Name +} +func (t *MonitorFragment) GetService() *MonitorFragment_Service { + if t == nil { + t = &MonitorFragment{} + } + return t.Service +} +func (t *MonitorFragment) GetWorkbench() *MonitorFragment_Workbench { + if t == nil { + t = &MonitorFragment{} + } + return t.Workbench +} + +type WorkbenchDashboardFragment struct { + ID string "json:\"id\" graphql:\"id\"" + Name string "json:\"name\" graphql:\"name\"" + Workbench *WorkbenchDashboardFragment_Workbench "json:\"workbench,omitempty\" graphql:\"workbench\"" +} + +func (t *WorkbenchDashboardFragment) GetID() string { + if t == nil { + t = &WorkbenchDashboardFragment{} + } + return t.ID +} +func (t *WorkbenchDashboardFragment) GetName() string { + if t == nil { + t = &WorkbenchDashboardFragment{} + } + return t.Name +} +func (t *WorkbenchDashboardFragment) GetWorkbench() *WorkbenchDashboardFragment_Workbench { + if t == nil { + t = &WorkbenchDashboardFragment{} + } + return t.Workbench +} + type ManagedNamespaceEdgeFragment struct { Cursor *string "json:\"cursor,omitempty\" graphql:\"cursor\"" Node *ManagedNamespaceMinimalFragment "json:\"node,omitempty\" graphql:\"node\"" @@ -9749,6 +9815,60 @@ func (t *AISettingsFragment_Anthropic) GetModel() *string { return t.Model } +type MonitorFragment_Service struct { + ID string "json:\"id\" graphql:\"id\"" + Name string "json:\"name\" graphql:\"name\"" +} + +func (t *MonitorFragment_Service) GetID() string { + if t == nil { + t = &MonitorFragment_Service{} + } + return t.ID +} +func (t *MonitorFragment_Service) GetName() string { + if t == nil { + t = &MonitorFragment_Service{} + } + return t.Name +} + +type MonitorFragment_Workbench struct { + ID string "json:\"id\" graphql:\"id\"" + Name string "json:\"name\" graphql:\"name\"" +} + +func (t *MonitorFragment_Workbench) GetID() string { + if t == nil { + t = &MonitorFragment_Workbench{} + } + return t.ID +} +func (t *MonitorFragment_Workbench) GetName() string { + if t == nil { + t = &MonitorFragment_Workbench{} + } + return t.Name +} + +type WorkbenchDashboardFragment_Workbench struct { + ID string "json:\"id\" graphql:\"id\"" + Name string "json:\"name\" graphql:\"name\"" +} + +func (t *WorkbenchDashboardFragment_Workbench) GetID() string { + if t == nil { + t = &WorkbenchDashboardFragment_Workbench{} + } + return t.ID +} +func (t *WorkbenchDashboardFragment_Workbench) GetName() string { + if t == nil { + t = &WorkbenchDashboardFragment_Workbench{} + } + return t.Name +} + type PersonaFragment_Configuration_PersonaConfigurationFragment_Deployments struct { AddOns *bool "json:\"addOns,omitempty\" graphql:\"addOns\"" Clusters *bool "json:\"clusters,omitempty\" graphql:\"clusters\"" @@ -23974,6 +24094,24 @@ func (t *GetServiceDeploymentByHandle_ServiceDeployment_ServiceDeploymentExtende return t.Stack } +type GetServiceDeploymentTinyByHandle_ServiceDeployment struct { + ID string "json:\"id\" graphql:\"id\"" + Name string "json:\"name\" graphql:\"name\"" +} + +func (t *GetServiceDeploymentTinyByHandle_ServiceDeployment) GetID() string { + if t == nil { + t = &GetServiceDeploymentTinyByHandle_ServiceDeployment{} + } + return t.ID +} +func (t *GetServiceDeploymentTinyByHandle_ServiceDeployment) GetName() string { + if t == nil { + t = &GetServiceDeploymentTinyByHandle_ServiceDeployment{} + } + return t.Name +} + type GetServiceTarball_ServiceTarball struct { Content string "json:\"content\" graphql:\"content\"" Path string "json:\"path\" graphql:\"path\"" @@ -25685,6 +25823,190 @@ func (t *DeleteMCPServer_DeleteMcpServer) GetID() string { return t.ID } +type GetMonitor_Monitor_MonitorFragment_Service struct { + ID string "json:\"id\" graphql:\"id\"" + Name string "json:\"name\" graphql:\"name\"" +} + +func (t *GetMonitor_Monitor_MonitorFragment_Service) GetID() string { + if t == nil { + t = &GetMonitor_Monitor_MonitorFragment_Service{} + } + return t.ID +} +func (t *GetMonitor_Monitor_MonitorFragment_Service) GetName() string { + if t == nil { + t = &GetMonitor_Monitor_MonitorFragment_Service{} + } + return t.Name +} + +type GetMonitor_Monitor_MonitorFragment_Workbench struct { + ID string "json:\"id\" graphql:\"id\"" + Name string "json:\"name\" graphql:\"name\"" +} + +func (t *GetMonitor_Monitor_MonitorFragment_Workbench) GetID() string { + if t == nil { + t = &GetMonitor_Monitor_MonitorFragment_Workbench{} + } + return t.ID +} +func (t *GetMonitor_Monitor_MonitorFragment_Workbench) GetName() string { + if t == nil { + t = &GetMonitor_Monitor_MonitorFragment_Workbench{} + } + return t.Name +} + +type CreateMonitor_CreateMonitor_MonitorFragment_Service struct { + ID string "json:\"id\" graphql:\"id\"" + Name string "json:\"name\" graphql:\"name\"" +} + +func (t *CreateMonitor_CreateMonitor_MonitorFragment_Service) GetID() string { + if t == nil { + t = &CreateMonitor_CreateMonitor_MonitorFragment_Service{} + } + return t.ID +} +func (t *CreateMonitor_CreateMonitor_MonitorFragment_Service) GetName() string { + if t == nil { + t = &CreateMonitor_CreateMonitor_MonitorFragment_Service{} + } + return t.Name +} + +type CreateMonitor_CreateMonitor_MonitorFragment_Workbench struct { + ID string "json:\"id\" graphql:\"id\"" + Name string "json:\"name\" graphql:\"name\"" +} + +func (t *CreateMonitor_CreateMonitor_MonitorFragment_Workbench) GetID() string { + if t == nil { + t = &CreateMonitor_CreateMonitor_MonitorFragment_Workbench{} + } + return t.ID +} +func (t *CreateMonitor_CreateMonitor_MonitorFragment_Workbench) GetName() string { + if t == nil { + t = &CreateMonitor_CreateMonitor_MonitorFragment_Workbench{} + } + return t.Name +} + +type UpdateMonitor_UpdateMonitor_MonitorFragment_Service struct { + ID string "json:\"id\" graphql:\"id\"" + Name string "json:\"name\" graphql:\"name\"" +} + +func (t *UpdateMonitor_UpdateMonitor_MonitorFragment_Service) GetID() string { + if t == nil { + t = &UpdateMonitor_UpdateMonitor_MonitorFragment_Service{} + } + return t.ID +} +func (t *UpdateMonitor_UpdateMonitor_MonitorFragment_Service) GetName() string { + if t == nil { + t = &UpdateMonitor_UpdateMonitor_MonitorFragment_Service{} + } + return t.Name +} + +type UpdateMonitor_UpdateMonitor_MonitorFragment_Workbench struct { + ID string "json:\"id\" graphql:\"id\"" + Name string "json:\"name\" graphql:\"name\"" +} + +func (t *UpdateMonitor_UpdateMonitor_MonitorFragment_Workbench) GetID() string { + if t == nil { + t = &UpdateMonitor_UpdateMonitor_MonitorFragment_Workbench{} + } + return t.ID +} +func (t *UpdateMonitor_UpdateMonitor_MonitorFragment_Workbench) GetName() string { + if t == nil { + t = &UpdateMonitor_UpdateMonitor_MonitorFragment_Workbench{} + } + return t.Name +} + +type DeleteMonitor_DeleteMonitor struct { + ID string "json:\"id\" graphql:\"id\"" +} + +func (t *DeleteMonitor_DeleteMonitor) GetID() string { + if t == nil { + t = &DeleteMonitor_DeleteMonitor{} + } + return t.ID +} + +type GetWorkbenchDashboard_WorkbenchDashboard_WorkbenchDashboardFragment_Workbench struct { + ID string "json:\"id\" graphql:\"id\"" + Name string "json:\"name\" graphql:\"name\"" +} + +func (t *GetWorkbenchDashboard_WorkbenchDashboard_WorkbenchDashboardFragment_Workbench) GetID() string { + if t == nil { + t = &GetWorkbenchDashboard_WorkbenchDashboard_WorkbenchDashboardFragment_Workbench{} + } + return t.ID +} +func (t *GetWorkbenchDashboard_WorkbenchDashboard_WorkbenchDashboardFragment_Workbench) GetName() string { + if t == nil { + t = &GetWorkbenchDashboard_WorkbenchDashboard_WorkbenchDashboardFragment_Workbench{} + } + return t.Name +} + +type CreateDashboard_CreateDashboard_WorkbenchDashboardFragment_Workbench struct { + ID string "json:\"id\" graphql:\"id\"" + Name string "json:\"name\" graphql:\"name\"" +} + +func (t *CreateDashboard_CreateDashboard_WorkbenchDashboardFragment_Workbench) GetID() string { + if t == nil { + t = &CreateDashboard_CreateDashboard_WorkbenchDashboardFragment_Workbench{} + } + return t.ID +} +func (t *CreateDashboard_CreateDashboard_WorkbenchDashboardFragment_Workbench) GetName() string { + if t == nil { + t = &CreateDashboard_CreateDashboard_WorkbenchDashboardFragment_Workbench{} + } + return t.Name +} + +type UpdateDashboard_UpdateDashboard_WorkbenchDashboardFragment_Workbench struct { + ID string "json:\"id\" graphql:\"id\"" + Name string "json:\"name\" graphql:\"name\"" +} + +func (t *UpdateDashboard_UpdateDashboard_WorkbenchDashboardFragment_Workbench) GetID() string { + if t == nil { + t = &UpdateDashboard_UpdateDashboard_WorkbenchDashboardFragment_Workbench{} + } + return t.ID +} +func (t *UpdateDashboard_UpdateDashboard_WorkbenchDashboardFragment_Workbench) GetName() string { + if t == nil { + t = &UpdateDashboard_UpdateDashboard_WorkbenchDashboardFragment_Workbench{} + } + return t.Name +} + +type DeleteDashboard_DeleteDashboard struct { + ID string "json:\"id\" graphql:\"id\"" +} + +func (t *DeleteDashboard_DeleteDashboard) GetID() string { + if t == nil { + t = &DeleteDashboard_DeleteDashboard{} + } + return t.ID +} + type ListNamespaces_ManagedNamespaces struct { Edges []*ManagedNamespaceEdgeFragment "json:\"edges,omitempty\" graphql:\"edges\"" PageInfo PageInfoFragment "json:\"pageInfo\" graphql:\"pageInfo\"" @@ -46124,6 +46446,17 @@ func (t *GetServiceDeploymentByHandle) GetServiceDeployment() *ServiceDeployment return t.ServiceDeployment } +type GetServiceDeploymentTinyByHandle struct { + ServiceDeployment *GetServiceDeploymentTinyByHandle_ServiceDeployment "json:\"serviceDeployment,omitempty\" graphql:\"serviceDeployment\"" +} + +func (t *GetServiceDeploymentTinyByHandle) GetServiceDeployment() *GetServiceDeploymentTinyByHandle_ServiceDeployment { + if t == nil { + t = &GetServiceDeploymentTinyByHandle{} + } + return t.ServiceDeployment +} + type GetServiceTarball struct { ServiceTarball []*GetServiceTarball_ServiceTarball "json:\"serviceTarball,omitempty\" graphql:\"serviceTarball\"" } @@ -46949,6 +47282,94 @@ func (t *DeleteMCPServer) GetDeleteMcpServer() *DeleteMCPServer_DeleteMcpServer return t.DeleteMcpServer } +type GetMonitor struct { + Monitor *MonitorFragment "json:\"monitor,omitempty\" graphql:\"monitor\"" +} + +func (t *GetMonitor) GetMonitor() *MonitorFragment { + if t == nil { + t = &GetMonitor{} + } + return t.Monitor +} + +type CreateMonitor struct { + CreateMonitor *MonitorFragment "json:\"createMonitor,omitempty\" graphql:\"createMonitor\"" +} + +func (t *CreateMonitor) GetCreateMonitor() *MonitorFragment { + if t == nil { + t = &CreateMonitor{} + } + return t.CreateMonitor +} + +type UpdateMonitor struct { + UpdateMonitor *MonitorFragment "json:\"updateMonitor,omitempty\" graphql:\"updateMonitor\"" +} + +func (t *UpdateMonitor) GetUpdateMonitor() *MonitorFragment { + if t == nil { + t = &UpdateMonitor{} + } + return t.UpdateMonitor +} + +type DeleteMonitor struct { + DeleteMonitor *DeleteMonitor_DeleteMonitor "json:\"deleteMonitor,omitempty\" graphql:\"deleteMonitor\"" +} + +func (t *DeleteMonitor) GetDeleteMonitor() *DeleteMonitor_DeleteMonitor { + if t == nil { + t = &DeleteMonitor{} + } + return t.DeleteMonitor +} + +type GetWorkbenchDashboard struct { + WorkbenchDashboard *WorkbenchDashboardFragment "json:\"workbenchDashboard,omitempty\" graphql:\"workbenchDashboard\"" +} + +func (t *GetWorkbenchDashboard) GetWorkbenchDashboard() *WorkbenchDashboardFragment { + if t == nil { + t = &GetWorkbenchDashboard{} + } + return t.WorkbenchDashboard +} + +type CreateDashboard struct { + CreateDashboard *WorkbenchDashboardFragment "json:\"createDashboard,omitempty\" graphql:\"createDashboard\"" +} + +func (t *CreateDashboard) GetCreateDashboard() *WorkbenchDashboardFragment { + if t == nil { + t = &CreateDashboard{} + } + return t.CreateDashboard +} + +type UpdateDashboard struct { + UpdateDashboard *WorkbenchDashboardFragment "json:\"updateDashboard,omitempty\" graphql:\"updateDashboard\"" +} + +func (t *UpdateDashboard) GetUpdateDashboard() *WorkbenchDashboardFragment { + if t == nil { + t = &UpdateDashboard{} + } + return t.UpdateDashboard +} + +type DeleteDashboard struct { + DeleteDashboard *DeleteDashboard_DeleteDashboard "json:\"deleteDashboard,omitempty\" graphql:\"deleteDashboard\"" +} + +func (t *DeleteDashboard) GetDeleteDashboard() *DeleteDashboard_DeleteDashboard { + if t == nil { + t = &DeleteDashboard{} + } + return t.DeleteDashboard +} + type ListNamespaces struct { ManagedNamespaces *ListNamespaces_ManagedNamespaces "json:\"managedNamespaces,omitempty\" graphql:\"managedNamespaces\"" } @@ -57549,6 +57970,32 @@ func (c *Client) GetServiceDeploymentByHandle(ctx context.Context, cluster strin return &res, nil } +const GetServiceDeploymentTinyByHandleDocument = `query GetServiceDeploymentTinyByHandle ($cluster: String!, $name: String!) { + serviceDeployment(cluster: $cluster, name: $name) { + id + name + } +} +` + +func (c *Client) GetServiceDeploymentTinyByHandle(ctx context.Context, cluster string, name string, interceptors ...clientv2.RequestInterceptor) (*GetServiceDeploymentTinyByHandle, error) { + vars := map[string]any{ + "cluster": cluster, + "name": name, + } + + var res GetServiceDeploymentTinyByHandle + if err := c.Client.Post(ctx, "GetServiceDeploymentTinyByHandle", GetServiceDeploymentTinyByHandleDocument, &res, vars, interceptors...); err != nil { + if c.Client.ParseDataWhenErrors { + return &res, err + } + + return nil, err + } + + return &res, nil +} + const GetServiceTarballDocument = `query GetServiceTarball ($id: ID!) { serviceTarball(id: $id) { path @@ -61234,6 +61681,260 @@ func (c *Client) DeleteMCPServer(ctx context.Context, id string, interceptors .. return &res, nil } +const GetMonitorDocument = `query GetMonitor ($id: ID!) { + monitor(id: $id) { + ... MonitorFragment + } +} +fragment MonitorFragment on Monitor { + id + name + service { + id + name + } + workbench { + id + name + } +} +` + +func (c *Client) GetMonitor(ctx context.Context, id string, interceptors ...clientv2.RequestInterceptor) (*GetMonitor, error) { + vars := map[string]any{ + "id": id, + } + + var res GetMonitor + if err := c.Client.Post(ctx, "GetMonitor", GetMonitorDocument, &res, vars, interceptors...); err != nil { + if c.Client.ParseDataWhenErrors { + return &res, err + } + + return nil, err + } + + return &res, nil +} + +const CreateMonitorDocument = `mutation CreateMonitor ($attributes: MonitorAttributes!) { + createMonitor(attributes: $attributes) { + ... MonitorFragment + } +} +fragment MonitorFragment on Monitor { + id + name + service { + id + name + } + workbench { + id + name + } +} +` + +func (c *Client) CreateMonitor(ctx context.Context, attributes MonitorAttributes, interceptors ...clientv2.RequestInterceptor) (*CreateMonitor, error) { + vars := map[string]any{ + "attributes": attributes, + } + + var res CreateMonitor + if err := c.Client.Post(ctx, "CreateMonitor", CreateMonitorDocument, &res, vars, interceptors...); err != nil { + if c.Client.ParseDataWhenErrors { + return &res, err + } + + return nil, err + } + + return &res, nil +} + +const UpdateMonitorDocument = `mutation UpdateMonitor ($id: ID!, $attributes: MonitorAttributes!) { + updateMonitor(id: $id, attributes: $attributes) { + ... MonitorFragment + } +} +fragment MonitorFragment on Monitor { + id + name + service { + id + name + } + workbench { + id + name + } +} +` + +func (c *Client) UpdateMonitor(ctx context.Context, id string, attributes MonitorAttributes, interceptors ...clientv2.RequestInterceptor) (*UpdateMonitor, error) { + vars := map[string]any{ + "id": id, + "attributes": attributes, + } + + var res UpdateMonitor + if err := c.Client.Post(ctx, "UpdateMonitor", UpdateMonitorDocument, &res, vars, interceptors...); err != nil { + if c.Client.ParseDataWhenErrors { + return &res, err + } + + return nil, err + } + + return &res, nil +} + +const DeleteMonitorDocument = `mutation DeleteMonitor ($id: ID!) { + deleteMonitor(id: $id) { + id + } +} +` + +func (c *Client) DeleteMonitor(ctx context.Context, id string, interceptors ...clientv2.RequestInterceptor) (*DeleteMonitor, error) { + vars := map[string]any{ + "id": id, + } + + var res DeleteMonitor + if err := c.Client.Post(ctx, "DeleteMonitor", DeleteMonitorDocument, &res, vars, interceptors...); err != nil { + if c.Client.ParseDataWhenErrors { + return &res, err + } + + return nil, err + } + + return &res, nil +} + +const GetWorkbenchDashboardDocument = `query GetWorkbenchDashboard ($id: ID!) { + workbenchDashboard(id: $id) { + ... WorkbenchDashboardFragment + } +} +fragment WorkbenchDashboardFragment on WorkbenchDashboard { + id + name + workbench { + id + name + } +} +` + +func (c *Client) GetWorkbenchDashboard(ctx context.Context, id string, interceptors ...clientv2.RequestInterceptor) (*GetWorkbenchDashboard, error) { + vars := map[string]any{ + "id": id, + } + + var res GetWorkbenchDashboard + if err := c.Client.Post(ctx, "GetWorkbenchDashboard", GetWorkbenchDashboardDocument, &res, vars, interceptors...); err != nil { + if c.Client.ParseDataWhenErrors { + return &res, err + } + + return nil, err + } + + return &res, nil +} + +const CreateDashboardDocument = `mutation CreateDashboard ($attributes: DashboardAttributes!) { + createDashboard(attributes: $attributes) { + ... WorkbenchDashboardFragment + } +} +fragment WorkbenchDashboardFragment on WorkbenchDashboard { + id + name + workbench { + id + name + } +} +` + +func (c *Client) CreateDashboard(ctx context.Context, attributes DashboardAttributes, interceptors ...clientv2.RequestInterceptor) (*CreateDashboard, error) { + vars := map[string]any{ + "attributes": attributes, + } + + var res CreateDashboard + if err := c.Client.Post(ctx, "CreateDashboard", CreateDashboardDocument, &res, vars, interceptors...); err != nil { + if c.Client.ParseDataWhenErrors { + return &res, err + } + + return nil, err + } + + return &res, nil +} + +const UpdateDashboardDocument = `mutation UpdateDashboard ($id: ID!, $attributes: DashboardAttributes!) { + updateDashboard(id: $id, attributes: $attributes) { + ... WorkbenchDashboardFragment + } +} +fragment WorkbenchDashboardFragment on WorkbenchDashboard { + id + name + workbench { + id + name + } +} +` + +func (c *Client) UpdateDashboard(ctx context.Context, id string, attributes DashboardAttributes, interceptors ...clientv2.RequestInterceptor) (*UpdateDashboard, error) { + vars := map[string]any{ + "id": id, + "attributes": attributes, + } + + var res UpdateDashboard + if err := c.Client.Post(ctx, "UpdateDashboard", UpdateDashboardDocument, &res, vars, interceptors...); err != nil { + if c.Client.ParseDataWhenErrors { + return &res, err + } + + return nil, err + } + + return &res, nil +} + +const DeleteDashboardDocument = `mutation DeleteDashboard ($id: ID!) { + deleteDashboard(id: $id) { + id + } +} +` + +func (c *Client) DeleteDashboard(ctx context.Context, id string, interceptors ...clientv2.RequestInterceptor) (*DeleteDashboard, error) { + vars := map[string]any{ + "id": id, + } + + var res DeleteDashboard + if err := c.Client.Post(ctx, "DeleteDashboard", DeleteDashboardDocument, &res, vars, interceptors...); err != nil { + if c.Client.ParseDataWhenErrors { + return &res, err + } + + return nil, err + } + + return &res, nil +} + const ListNamespacesDocument = `query ListNamespaces ($after: String, $first: Int, $before: String, $last: Int) { managedNamespaces(after: $after, first: $first, before: $before, last: $last) { pageInfo { @@ -74754,6 +75455,7 @@ var DocumentOperationNames = map[string]string{ GetServiceDeploymentComponentsDocument: "GetServiceDeploymentComponents", GetServiceDeploymentForAgentDocument: "GetServiceDeploymentForAgent", GetServiceDeploymentByHandleDocument: "GetServiceDeploymentByHandle", + GetServiceDeploymentTinyByHandleDocument: "GetServiceDeploymentTinyByHandle", GetServiceTarballDocument: "GetServiceTarball", ListServiceDeploymentDocument: "ListServiceDeployment", PagedClusterServicesDocument: "PagedClusterServices", @@ -74829,6 +75531,14 @@ var DocumentOperationNames = map[string]string{ GetMCPServerDocument: "GetMCPServer", UpsertMCPServerDocument: "UpsertMCPServer", DeleteMCPServerDocument: "DeleteMCPServer", + GetMonitorDocument: "GetMonitor", + CreateMonitorDocument: "CreateMonitor", + UpdateMonitorDocument: "UpdateMonitor", + DeleteMonitorDocument: "DeleteMonitor", + GetWorkbenchDashboardDocument: "GetWorkbenchDashboard", + CreateDashboardDocument: "CreateDashboard", + UpdateDashboardDocument: "UpdateDashboard", + DeleteDashboardDocument: "DeleteDashboard", ListNamespacesDocument: "ListNamespaces", ListClusterNamespacesDocument: "ListClusterNamespaces", GetNamespaceDocument: "GetNamespace", diff --git a/go/client/declarative_inputs.go b/go/client/declarative_inputs.go new file mode 100644 index 0000000000..1572d631f2 --- /dev/null +++ b/go/client/declarative_inputs.go @@ -0,0 +1,78 @@ +package client + +import ( + "encoding/json" + "fmt" + "reflect" + "strings" +) + +// Generated inputs omit nil and empty fields, and Console keeps the stored value of omitted fields. +// Monitor and dashboard inputs describe the full desired state, so they send every field instead: +// nil pointers as null and nil lists as [] (Console rejects null for embedded lists). + +// MarshalJSON sends all fields of the monitor attributes, see above. +func (in MonitorAttributes) MarshalJSON() ([]byte, error) { + return marshalFullInput(reflect.ValueOf(in)) +} + +// MarshalJSON sends all fields of the dashboard attributes, see above. +func (in DashboardAttributes) MarshalJSON() ([]byte, error) { + return marshalFullInput(reflect.ValueOf(in)) +} + +// marshalFullInput encodes a value without omitting fields. It walks structs directly, +// ignoring their MarshalJSON methods, which prevents infinite recursion. +func marshalFullInput(v reflect.Value) ([]byte, error) { + switch v.Kind() { + case reflect.Invalid: + return []byte("null"), nil + case reflect.Pointer, reflect.Interface: + if v.IsNil() { + return []byte("null"), nil + } + return marshalFullInput(v.Elem()) + case reflect.Slice, reflect.Array: + items := make([]json.RawMessage, 0, v.Len()) + for i := range v.Len() { + item, err := marshalFullInput(v.Index(i)) + if err != nil { + return nil, err + } + items = append(items, item) + } + return json.Marshal(items) + case reflect.Struct: + t := v.Type() + fields := make(map[string]json.RawMessage, t.NumField()) + for i := range t.NumField() { + field := t.Field(i) + if !field.IsExported() { + continue + } + + name := jsonFieldName(field) + if name == "-" { + continue + } + + value, err := marshalFullInput(v.Field(i)) + if err != nil { + return nil, fmt.Errorf("failed to encode %s.%s: %w", t.Name(), field.Name, err) + } + fields[name] = value + } + return json.Marshal(fields) + default: + // Scalars and enums (enums implement json.Marshaler). + return json.Marshal(v.Interface()) + } +} + +func jsonFieldName(field reflect.StructField) string { + name, _, _ := strings.Cut(field.Tag.Get("json"), ",") + if name == "" { + return field.Name + } + return name +} diff --git a/go/client/declarative_inputs_test.go b/go/client/declarative_inputs_test.go new file mode 100644 index 0000000000..96ec2e5881 --- /dev/null +++ b/go/client/declarative_inputs_test.go @@ -0,0 +1,167 @@ +package client + +import ( + "context" + "encoding/json" + "reflect" + "testing" + + "github.com/gqlgo/gqlgenc/clientv2" +) + +// encodeVariables encodes the input the same way generated client methods encode request variables. +func encodeVariables(t *testing.T, attributes any) map[string]any { + t.Helper() + + encoded, err := clientv2.MarshalJSON(context.Background(), map[string]any{"attributes": attributes}) + if err != nil { + t.Fatalf("failed to encode variables: %v", err) + } + + var variables map[string]any + if err := json.Unmarshal(encoded, &variables); err != nil { + t.Fatalf("failed to decode variables %s: %v", encoded, err) + } + + attrs, ok := variables["attributes"].(map[string]any) + if !ok { + t.Fatalf("attributes are not an object: %s", encoded) + } + return attrs +} + +func expectField(t *testing.T, object map[string]any, key string, expected any) { + t.Helper() + + value, ok := object[key] + if !ok { + t.Fatalf("expected field %q to be sent, got %v", key, object) + } + if !reflect.DeepEqual(value, expected) { + t.Fatalf("expected field %q to be %#v, got %#v", key, expected, value) + } +} + +func expectObject(t *testing.T, object map[string]any, key string) map[string]any { + t.Helper() + + value, ok := object[key].(map[string]any) + if !ok { + t.Fatalf("expected field %q to be an object, got %#v", key, object[key]) + } + return value +} + +func TestMonitorAttributesSendAllFields(t *testing.T) { + step := "1m" + attrs := encodeVariables(t, MonitorAttributes{ + ServiceID: "service-id", + Name: "monitor", + Severity: AlertSeverityHigh, + Type: MonitorTypeMetrics, + EvaluationCron: "*/5 * * * *", + Query: MonitorQueryAttributes{ + Metrics: &MonitorMetricsQueryAttributes{Query: "up", Step: &step}, + }, + Threshold: MonitorThresholdAttributes{Aggregate: MonitorAggregateMax, Value: 0.5}, + }) + + expectField(t, attrs, "serviceId", "service-id") + expectField(t, attrs, "severity", "HIGH") + expectField(t, attrs, "type", "METRICS") + for _, key := range []string{"workbenchId", "prompt", "modes", "description", "alertTemplate"} { + expectField(t, attrs, key, nil) + } + + threshold := expectObject(t, attrs, "threshold") + expectField(t, threshold, "aggregate", "MAX") + expectField(t, threshold, "value", 0.5) + + query := expectObject(t, attrs, "query") + expectField(t, query, "log", nil) + + metrics := expectObject(t, query, "metrics") + expectField(t, metrics, "query", "up") + expectField(t, metrics, "step", "1m") + for _, key := range []string{"tool", "duration", "options"} { + expectField(t, metrics, key, nil) + } +} + +func TestMonitorAttributesSendEmptyLists(t *testing.T) { + attrs := encodeVariables(t, MonitorAttributes{ + Type: MonitorTypeLog, + Query: MonitorQueryAttributes{ + Log: &MonitorLogQueryAttributes{Query: "error", BucketSize: "5m"}, + }, + Modes: &WorkbenchJobModesAttributes{ + Kubernetes: &WorkbenchJobKubernetesModesAttributes{}, + }, + }) + + log := expectObject(t, expectObject(t, attrs, "query"), "log") + expectField(t, log, "facets", []any{}) + expectField(t, log, "options", nil) + expectField(t, expectObject(t, attrs, "query"), "metrics", nil) + + modes := expectObject(t, attrs, "modes") + for _, key := range []string{"plan", "verification", "model", "coding", "budget"} { + expectField(t, modes, key, nil) + } + kubernetes := expectObject(t, modes, "kubernetes") + expectField(t, kubernetes, "excludeNamespaces", []any{}) + expectField(t, kubernetes, "requireNamespaces", []any{}) + expectField(t, kubernetes, "update", nil) +} + +func TestDashboardAttributesSendAllFields(t *testing.T) { + workbenchID := "workbench-id" + name := "dashboard" + + attrs := encodeVariables(t, DashboardAttributes{WorkbenchID: &workbenchID, Name: &name}) + expectField(t, attrs, "workbenchId", workbenchID) + expectField(t, attrs, "name", name) + expectField(t, attrs, "description", nil) + expectField(t, attrs, "graphs", []any{}) + expectField(t, attrs, "inputs", []any{}) + + options := `{"collapsed":true}` + attrs = encodeVariables(t, DashboardAttributes{ + Graphs: []*DashboardGraphAttributes{{ + Identifier: "overview", + Type: DashboardGraphTypeSection, + Options: &options, + Layout: DashboardGraphLayoutAttributes{X: 0, Y: 1, W: 12, H: 2}, + }}, + Inputs: []*DashboardInputAttributes{{Name: "namespace", Type: DashboardInputTypeText}}, + }) + + graphs, ok := attrs["graphs"].([]any) + if !ok || len(graphs) != 1 { + t.Fatalf("expected one graph, got %#v", attrs["graphs"]) + } + graph := graphs[0].(map[string]any) + expectField(t, graph, "identifier", "overview") + expectField(t, graph, "type", "SECTION") + expectField(t, graph, "options", options) + expectField(t, graph, "layout", map[string]any{"x": 0.0, "y": 1.0, "w": 12.0, "h": 2.0}) + for _, key := range []string{"title", "description", "sectionId", "markdown", "datasource"} { + expectField(t, graph, key, nil) + } + + inputs, ok := attrs["inputs"].([]any) + if !ok || len(inputs) != 1 { + t.Fatalf("expected one input, got %#v", attrs["inputs"]) + } + input := inputs[0].(map[string]any) + expectField(t, input, "options", []any{}) + expectField(t, input, "datasource", nil) +} + +func TestOtherInputsStillOmitEmptyFields(t *testing.T) { + // Only monitor and dashboard attributes send the full state, other inputs keep the generated behavior. + attrs := encodeVariables(t, WorkbenchJobModesAttributes{}) + if len(attrs) != 0 { + t.Fatalf("expected empty fields to be omitted, got %v", attrs) + } +} diff --git a/go/client/generated/persisted-queries/queries.json b/go/client/generated/persisted-queries/queries.json index cdf0888b34..702b143c70 100644 --- a/go/client/generated/persisted-queries/queries.json +++ b/go/client/generated/persisted-queries/queries.json @@ -1 +1 @@ -{"operations":{"sha256:00103bd4468d331dceccf9f2cf1c3770fe14da6023e65301de2f423934a180df":"query GetNamespaceByName ($name: String!) {\n\tmanagedNamespace(name: $name) {\n\t\t... ManagedNamespaceFragment\n\t}\n}\nfragment ManagedNamespaceFragment on ManagedNamespace {\n\tid\n\tname\n\tdescription\n\tlabels\n\tannotations\n\tpullSecrets\n\tservice {\n\t\t... ServiceTemplateFragment\n\t}\n\ttarget {\n\t\t... ClusterTargetFragment\n\t}\n\tdeletedAt\n}\nfragment ServiceTemplateFragment on ServiceTemplate {\n\tname\n\tnamespace\n\ttemplated\n\trepositoryId\n\tcontexts\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tsyncConfig {\n\t\t... SyncConfigFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment SyncConfigFragment on SyncConfig {\n\tcreateNamespace\n\tnamespaceMetadata {\n\t\t... NamespaceMetadataFragment\n\t}\n}\nfragment NamespaceMetadataFragment on NamespaceMetadata {\n\tlabels\n\tannotations\n}\nfragment ClusterTargetFragment on ClusterTarget {\n\ttags\n\tdistro\n}\n","sha256:0079baec6ec668221625f6674e7a6d3e9732fb54295023d0694fb597a5655fed":"mutation CreateAgentRun ($runtimeId: ID!, $attributes: AgentRunAttributes!) {\n\tcreateAgentRun(runtimeId: $runtimeId, attributes: $attributes) {\n\t\t... AgentRunFragment\n\t}\n}\nfragment AgentRunFragment on AgentRun {\n\tid\n\tprompt\n\trepository\n\tbranch\n\theadBranch\n\tmode\n\treviewDepth\n\tlanguage\n\tlanguageVersion\n\ttodos {\n\t\t... AgentTodoFragment\n\t}\n\tprompts {\n\t\t... AgentPromptFragment\n\t}\n\tskills {\n\t\tname\n\t\tdescription\n\t\tcontents\n\t}\n\tstatus\n\tpodReference {\n\t\t... AgentPodReferenceFragment\n\t}\n\terror\n\tanalysis {\n\t\t... AgentAnalysisFragment\n\t}\n\tusage {\n\t\tinputTokens\n\t\toutputTokens\n\t\ttotalTokens\n\t\tcachedTokens\n\t\treasoningTokens\n\t\tinputCost\n\t\toutputCost\n\t\ttotalCost\n\t}\n\tscmCreds {\n\t\t... ScmCredentialFragment\n\t}\n\tpluralCreds {\n\t\t... PluralCredsFragment\n\t}\n\tworkbenchMcpUrl\n\truntime {\n\t\t... AgentRuntimeFragment\n\t}\n\tuser {\n\t\tid\n\t\tname\n\t\temail\n\t}\n\tflow {\n\t\tid\n\t\tname\n\t}\n\tpullRequests {\n\t\t... PullRequestFragment\n\t}\n\tupload {\n\t\t... AgentRunUploadFragment\n\t}\n\tbabysit\n\tbabysitInterval\n\tapproval\n\tapprovedAt\n\tfollowup\n\tfollowupPrUrl\n}\nfragment AgentTodoFragment on AgentTodo {\n\tdescription\n\tdone\n\ttitle\n}\nfragment AgentPromptFragment on AgentPrompt {\n\tid\n\tprompt\n\tseq\n}\nfragment AgentPodReferenceFragment on AgentPodReference {\n\tname\n\tnamespace\n}\nfragment AgentAnalysisFragment on AgentAnalysis {\n\tsummary\n\tanalysis\n\tbullets\n}\nfragment ScmCredentialFragment on ScmCreds {\n\ttoken\n\tusername\n\texaKey\n}\nfragment PluralCredsFragment on PluralCreds {\n\ttoken\n\turl\n}\nfragment AgentRuntimeFragment on AgentRuntime {\n\tid\n\tname\n\ttype\n\taiProxy\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tcreateBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment PullRequestFragment on PullRequest {\n\tid\n\tstatus\n\turl\n\ttitle\n\tcreator\n\tref\n}\nfragment AgentRunUploadFragment on AgentRunUpload {\n\tid\n\tsession\n\tscreenRecording\n\tpatch\n}\n","sha256:00cc798d4efba980df734ed908f4a6eff35ea9532ba5a24ce2e678c47b9e4edd":"mutation DeleteGitRepository ($id: ID!) {\n\tdeleteGitRepository(id: $id) {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\n","sha256:0495efe67b265523309e91230a439c44a3566aa4f54eae8038c54b08e197da4a":"mutation CreatePullRequest ($id: ID!, $identifier: String, $branch: String, $context: Json) {\n\tcreatePullRequest(id: $id, identifier: $identifier, branch: $branch, context: $context) {\n\t\t... PullRequestFragment\n\t}\n}\nfragment PullRequestFragment on PullRequest {\n\tid\n\tstatus\n\turl\n\ttitle\n\tcreator\n\tref\n}\n","sha256:04f446a7241e2a77f9c03860529c22f6097f0b065b8a91812af367db06c51783":"mutation DeletePipeline ($id: ID!) {\n\tdeletePipeline(id: $id) {\n\t\t... PipelineFragmentId\n\t}\n}\nfragment PipelineFragmentId on Pipeline {\n\tid\n}\n","sha256:05614f559b29689b95f90bfb84adf304e3898a429c26fc3b55dda779621f3d26":"mutation UpsertCatalog ($attributes: CatalogAttributes) {\n\tupsertCatalog(attributes: $attributes) {\n\t\t... CatalogFragment\n\t}\n}\nfragment CatalogFragment on Catalog {\n\tid\n\tname\n\tdescription\n\tcategory\n\tauthor\n\tproject {\n\t\t... ProjectFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment ProjectFragment on Project {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\tdefault\n\tdescription\n\tdisableInsights\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:071e713551ffc28f4196427c367142ecc5fa316d0b9fc17c0dfc682f6b1dca67":"query GetProjectTiny ($id: ID, $name: String) {\n\tproject(id: $id, name: $name) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:07fc34a5e5b6a6de044a6b35bf40e5218106f2849f0528e71f8f23287a498858":"mutation UpdateCloudConnection ($id: ID!, $attributes: CloudConnectionAttributes!) {\n\tupdateCloudConnection(id: $id, attributes: $attributes) {\n\t\t... CloudConnectionFragment\n\t}\n}\nfragment CloudConnectionFragment on CloudConnection {\n\tid\n\tname\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tprovider\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:08223278347596ef0a0f5ab698ed517803e9dcf41027abe6e1b00e1765a24534":"mutation UpdateAgentRunTodos ($id: ID!, $todos: [AgentTodoAttributes]) {\n\tupdateAgentRunTodos(id: $id, todos: $todos) {\n\t\t... AgentRunBaseFragment\n\t}\n}\nfragment AgentRunBaseFragment on AgentRun {\n\tid\n\tprompt\n\trepository\n\tmode\n\tlanguage\n\tlanguageVersion\n\ttodos {\n\t\t... AgentTodoFragment\n\t}\n}\nfragment AgentTodoFragment on AgentTodo {\n\tdescription\n\tdone\n\ttitle\n}\n","sha256:085357a60e4fc347e143328a81f9de10226eed039c1bf5c65180c4a22e0cabbf":"mutation CreateGlobalServiceDeploymentFromTemplate ($attributes: GlobalServiceAttributes!) {\n\tcreateGlobalService(attributes: $attributes) {\n\t\t... GlobalServiceFragment\n\t}\n}\nfragment GlobalServiceFragment on GlobalService {\n\tid\n\tname\n\tdistro\n\tprovider {\n\t\tid\n\t}\n\tservice {\n\t\tid\n\t}\n\ttags {\n\t\t... ClusterTags\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:08538e2a930e5635cdf567d936c4e328614f999e32a060237d625a4bf0a0d818":"query GetPreviewEnvironmentTemplate ($id: ID, $flowId: ID, $name: String) {\n\tpreviewEnvironmentTemplate(id: $id, flowId: $flowId, name: $name) {\n\t\t... PreviewEnvironmentTemplateFragment\n\t}\n}\nfragment PreviewEnvironmentTemplateFragment on PreviewEnvironmentTemplate {\n\tid\n\tname\n\tcommentTemplate\n\tflow {\n\t\tid\n\t}\n\tconnection {\n\t\tid\n\t}\n\ttemplate {\n\t\tname\n\t}\n}\n","sha256:0860bf6411f3d79915d4229c914b2f6f01f790c4f060cb845172f57cc919db2f":"mutation UpdateAgentRun ($id: ID!, $attributes: AgentRunStatusAttributes!) {\n\tupdateAgentRun(id: $id, attributes: $attributes) {\n\t\t... AgentRunFragment\n\t}\n}\nfragment AgentRunFragment on AgentRun {\n\tid\n\tprompt\n\trepository\n\tbranch\n\theadBranch\n\tmode\n\treviewDepth\n\tlanguage\n\tlanguageVersion\n\ttodos {\n\t\t... AgentTodoFragment\n\t}\n\tprompts {\n\t\t... AgentPromptFragment\n\t}\n\tskills {\n\t\tname\n\t\tdescription\n\t\tcontents\n\t}\n\tstatus\n\tpodReference {\n\t\t... AgentPodReferenceFragment\n\t}\n\terror\n\tanalysis {\n\t\t... AgentAnalysisFragment\n\t}\n\tusage {\n\t\tinputTokens\n\t\toutputTokens\n\t\ttotalTokens\n\t\tcachedTokens\n\t\treasoningTokens\n\t\tinputCost\n\t\toutputCost\n\t\ttotalCost\n\t}\n\tscmCreds {\n\t\t... ScmCredentialFragment\n\t}\n\tpluralCreds {\n\t\t... PluralCredsFragment\n\t}\n\tworkbenchMcpUrl\n\truntime {\n\t\t... AgentRuntimeFragment\n\t}\n\tuser {\n\t\tid\n\t\tname\n\t\temail\n\t}\n\tflow {\n\t\tid\n\t\tname\n\t}\n\tpullRequests {\n\t\t... PullRequestFragment\n\t}\n\tupload {\n\t\t... AgentRunUploadFragment\n\t}\n\tbabysit\n\tbabysitInterval\n\tapproval\n\tapprovedAt\n\tfollowup\n\tfollowupPrUrl\n}\nfragment AgentTodoFragment on AgentTodo {\n\tdescription\n\tdone\n\ttitle\n}\nfragment AgentPromptFragment on AgentPrompt {\n\tid\n\tprompt\n\tseq\n}\nfragment AgentPodReferenceFragment on AgentPodReference {\n\tname\n\tnamespace\n}\nfragment AgentAnalysisFragment on AgentAnalysis {\n\tsummary\n\tanalysis\n\tbullets\n}\nfragment ScmCredentialFragment on ScmCreds {\n\ttoken\n\tusername\n\texaKey\n}\nfragment PluralCredsFragment on PluralCreds {\n\ttoken\n\turl\n}\nfragment AgentRuntimeFragment on AgentRuntime {\n\tid\n\tname\n\ttype\n\taiProxy\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tcreateBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment PullRequestFragment on PullRequest {\n\tid\n\tstatus\n\turl\n\ttitle\n\tcreator\n\tref\n}\nfragment AgentRunUploadFragment on AgentRunUpload {\n\tid\n\tsession\n\tscreenRecording\n\tpatch\n}\n","sha256:087514315644018028c9097e305b44d39b6d2a04bbc27db80624db6f7cc0ca72":"query GetCloudConnection ($id: ID, $name: String) {\n\tcloudConnection(id: $id, name: $name) {\n\t\t... CloudConnectionFragment\n\t}\n}\nfragment CloudConnectionFragment on CloudConnection {\n\tid\n\tname\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tprovider\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:0a28bd1898f2387165f13394e8eef522528534c85f28548d81706a42b2711b11":"mutation CreateProject ($attributes: ProjectAttributes!) {\n\tcreateProject(attributes: $attributes) {\n\t\t... ProjectFragment\n\t}\n}\nfragment ProjectFragment on Project {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\tdefault\n\tdescription\n\tdisableInsights\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:0bc7753b4e8e392d65a52f75255bc48a95cdea84ee46118b08f141280cb5aa18":"query ListStackRuns ($id: ID!, $after: String, $before: String, $first: Int, $last: Int) {\n\tinfrastructureStack(id: $id) {\n\t\truns(after: $after, before: $before, first: $first, last: $last) {\n\t\t\tpageInfo {\n\t\t\t\t... PageInfoFragment\n\t\t\t}\n\t\t\tedges {\n\t\t\t\tnode {\n\t\t\t\t\t... StackRunFragment\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment StackRunFragment on StackRun {\n\tid\n\ttype\n\tstatus\n\tapproval\n\tapprovedAt\n\ttarball\n\tworkdir\n\tmanageState\n\tvariables\n\tdryRun\n\tstateUrls {\n\t\tterraform {\n\t\t\taddress\n\t\t\tlock\n\t\t\tunlock\n\t\t}\n\t}\n\tpluralCreds {\n\t\turl\n\t\ttoken\n\t}\n\tactor {\n\t\t... UserFragment\n\t}\n\tstack {\n\t\t... InfrastructureStackFragment\n\t}\n\tstate {\n\t\t... StackStateFragment\n\t}\n\tsteps {\n\t\t... RunStepFragment\n\t}\n\tfiles {\n\t\t... StackFileFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n\tenvironment {\n\t\t... StackEnvironmentFragment\n\t}\n\toutput {\n\t\t... StackOutputFragment\n\t}\n\terrors {\n\t\t... ServiceErrorFragment\n\t}\n\tviolations {\n\t\t... StackPolicyViolationFragment\n\t}\n\tpolicyEngine {\n\t\t... PolicyEngineFragment\n\t}\n\tapprover {\n\t\t... UserFragment\n\t}\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment InfrastructureStackFragment on InfrastructureStack {\n\tid\n\tname\n\ttype\n\tvariables\n\tapproval\n\tworkdir\n\tmanageState\n\tdeletedAt\n\tgit {\n\t\t... GitRefFragment\n\t}\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tfiles {\n\t\t... StackFileFragment\n\t}\n\tenvironment {\n\t\t... StackEnvironmentFragment\n\t}\n\toutput {\n\t\t... StackOutputFragment\n\t}\n\tstate {\n\t\t... StackStateFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tpolicyEngine {\n\t\t... PolicyEngineFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment StackConfigurationFragment on StackConfiguration {\n\timage\n\tversion\n\ttag\n\thooks {\n\t\t... StackHookFragment\n\t}\n\tterraform {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tterragrunt {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tpulumi {\n\t\tparallel\n\t\trefresh\n\t\tapproveEmpty\n\t\tstack\n\t\tbackendUrl\n\t}\n\tansible {\n\t\tinventory\n\t\tplaybook\n\t\tprivateKeyFile\n\t\tconfigFile\n\t}\n}\nfragment StackHookFragment on StackHook {\n\tcmd\n\targs\n\tafterStage\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment StackFileFragment on StackFile {\n\tpath\n\tcontent\n}\nfragment StackEnvironmentFragment on StackEnvironment {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackStateFragment on StackState {\n\tid\n\tplan\n\tplanJson\n\tstate {\n\t\t... StackStateResourceFragment\n\t}\n}\nfragment StackStateResourceFragment on StackStateResource {\n\tidentifier\n\tresource\n\tname\n\tconfiguration\n\tlinks\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment PolicyEngineFragment on PolicyEngine {\n\ttype\n\tmaxSeverity\n\tcustomPolicies\n}\nfragment RunStepFragment on RunStep {\n\tid\n\tstatus\n\tstage\n\tname\n\tcmd\n\targs\n\trequireApproval\n\tindex\n}\nfragment ServiceErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\nfragment StackPolicyViolationFragment on StackPolicyViolation {\n\tid\n\ttitle\n\tdescription\n\tpolicyId\n\tpolicyModule\n\tpolicyUrl\n\tseverity\n\tresolution\n\tcauses {\n\t\t... StackViolationCauseFragment\n\t}\n}\nfragment StackViolationCauseFragment on StackViolationCause {\n\tstart\n\tend\n\tresource\n\tfilename\n\tlines {\n\t\t... StackViolationCauseLineFragment\n\t}\n}\nfragment StackViolationCauseLineFragment on StackViolationCauseLine {\n\tfirst\n\tlast\n\tcontent\n\tline\n}\n","sha256:0c0af919e2a1ba02a7c44e25fe40583b263f45bc1a1639ae2d730c016a86fdbe":"query GetStackRun ($id: ID!) {\n\tstackRun(id: $id) {\n\t\t... StackRunFragment\n\t}\n}\nfragment StackRunFragment on StackRun {\n\tid\n\ttype\n\tstatus\n\tapproval\n\tapprovedAt\n\ttarball\n\tworkdir\n\tmanageState\n\tvariables\n\tdryRun\n\tstateUrls {\n\t\tterraform {\n\t\t\taddress\n\t\t\tlock\n\t\t\tunlock\n\t\t}\n\t}\n\tpluralCreds {\n\t\turl\n\t\ttoken\n\t}\n\tactor {\n\t\t... UserFragment\n\t}\n\tstack {\n\t\t... InfrastructureStackFragment\n\t}\n\tstate {\n\t\t... StackStateFragment\n\t}\n\tsteps {\n\t\t... RunStepFragment\n\t}\n\tfiles {\n\t\t... StackFileFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n\tenvironment {\n\t\t... StackEnvironmentFragment\n\t}\n\toutput {\n\t\t... StackOutputFragment\n\t}\n\terrors {\n\t\t... ServiceErrorFragment\n\t}\n\tviolations {\n\t\t... StackPolicyViolationFragment\n\t}\n\tpolicyEngine {\n\t\t... PolicyEngineFragment\n\t}\n\tapprover {\n\t\t... UserFragment\n\t}\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment InfrastructureStackFragment on InfrastructureStack {\n\tid\n\tname\n\ttype\n\tvariables\n\tapproval\n\tworkdir\n\tmanageState\n\tdeletedAt\n\tgit {\n\t\t... GitRefFragment\n\t}\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tfiles {\n\t\t... StackFileFragment\n\t}\n\tenvironment {\n\t\t... StackEnvironmentFragment\n\t}\n\toutput {\n\t\t... StackOutputFragment\n\t}\n\tstate {\n\t\t... StackStateFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tpolicyEngine {\n\t\t... PolicyEngineFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment StackConfigurationFragment on StackConfiguration {\n\timage\n\tversion\n\ttag\n\thooks {\n\t\t... StackHookFragment\n\t}\n\tterraform {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tterragrunt {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tpulumi {\n\t\tparallel\n\t\trefresh\n\t\tapproveEmpty\n\t\tstack\n\t\tbackendUrl\n\t}\n\tansible {\n\t\tinventory\n\t\tplaybook\n\t\tprivateKeyFile\n\t\tconfigFile\n\t}\n}\nfragment StackHookFragment on StackHook {\n\tcmd\n\targs\n\tafterStage\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment StackFileFragment on StackFile {\n\tpath\n\tcontent\n}\nfragment StackEnvironmentFragment on StackEnvironment {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackStateFragment on StackState {\n\tid\n\tplan\n\tplanJson\n\tstate {\n\t\t... StackStateResourceFragment\n\t}\n}\nfragment StackStateResourceFragment on StackStateResource {\n\tidentifier\n\tresource\n\tname\n\tconfiguration\n\tlinks\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment PolicyEngineFragment on PolicyEngine {\n\ttype\n\tmaxSeverity\n\tcustomPolicies\n}\nfragment RunStepFragment on RunStep {\n\tid\n\tstatus\n\tstage\n\tname\n\tcmd\n\targs\n\trequireApproval\n\tindex\n}\nfragment ServiceErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\nfragment StackPolicyViolationFragment on StackPolicyViolation {\n\tid\n\ttitle\n\tdescription\n\tpolicyId\n\tpolicyModule\n\tpolicyUrl\n\tseverity\n\tresolution\n\tcauses {\n\t\t... StackViolationCauseFragment\n\t}\n}\nfragment StackViolationCauseFragment on StackViolationCause {\n\tstart\n\tend\n\tresource\n\tfilename\n\tlines {\n\t\t... StackViolationCauseLineFragment\n\t}\n}\nfragment StackViolationCauseLineFragment on StackViolationCauseLine {\n\tfirst\n\tlast\n\tcontent\n\tline\n}\n","sha256:0c4c1df078093fe381c14fb9f8ab6e669fedf3a631a8508dbad33ac9cfba8d93":"mutation DeleteWorkbenchTool ($id: ID!) {\n\tdeleteWorkbenchTool(id: $id) {\n\t\t... WorkbenchToolFragment\n\t}\n}\nfragment WorkbenchToolFragment on WorkbenchTool {\n\tid\n\tname\n\ttool\n\tcategories\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tmcpServer {\n\t\t... MCPServerFragment\n\t}\n\tcloudConnection {\n\t\t... CloudConnectionFragment\n\t}\n\tscmConnection {\n\t\tid\n\t\tname\n\t\ttype\n\t}\n\tconfiguration {\n\t\thttp {\n\t\t\turl\n\t\t\tmethod\n\t\t\tfunction\n\t\t\theaders {\n\t\t\t\tname\n\t\t\t\tvalue\n\t\t\t}\n\t\t\tbody\n\t\t\tinputSchema\n\t\t}\n\t\telastic {\n\t\t\tindex\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\topensearch {\n\t\t\thost\n\t\t\tindex\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t\tassumeRoleArn\n\t\t\tusePodIdentity\n\t\t}\n\t\tprometheus {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t\tawsSigv4\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t}\n\t\tloki {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tvictoriaLogs {\n\t\t\turl\n\t\t\tusername\n\t\t\taccountId\n\t\t\tprojectId\n\t\t}\n\t\tsplunk {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\ttempo {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tjaeger {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\tdatadog {\n\t\t\tsite\n\t\t}\n\t\tdynatrace {\n\t\t\turl\n\t\t}\n\t\tcloudwatch {\n\t\t\tregion\n\t\t\tlogGroupNames\n\t\t\troleArn\n\t\t\troleSessionName\n\t\t}\n\t\tazure {\n\t\t\tsubscriptionId\n\t\t\ttenantId\n\t\t\tclientId\n\t\t\tprometheusUrl\n\t\t}\n\t\tsentry {\n\t\t\turl\n\t\t}\n\t\tlinear {\n\t\t\turl\n\t\t}\n\t\tslack {\n\t\t\turl\n\t\t}\n\t\tpagerduty {\n\t\t\turl\n\t\t}\n\t\tteams {\n\t\t\tclientId\n\t\t\ttenantId\n\t\t}\n\t\tatlassian {\n\t\t\turl\n\t\t\temail\n\t\t}\n\t\texa {\n\t\t\turl\n\t\t}\n\t\tgithub {\n\t\t\turl\n\t\t\ttoolset\n\t\t\tappId\n\t\t\tinstallationId\n\t\t}\n\t\tgitlab {\n\t\t\turl\n\t\t}\n\t\tbitbucket {\n\t\t\turl\n\t\t}\n\t\tbitbucketDatacenter {\n\t\t\turl\n\t\t}\n\t\tazureDevops {\n\t\t\turl\n\t\t}\n\t\tlambda {\n\t\t\tlambdaArn\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tcloudRun {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tazureFunction {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tdocker {\n\t\t\turl\n\t\t\tprovider\n\t\t\tproxy {\n\t\t\t\turl\n\t\t\t\tnoproxy\n\t\t\t}\n\t\t}\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment MCPServerFragment on McpServer {\n\tid\n\tname\n\turl\n\tauthentication {\n\t\tplural\n\t\theaders {\n\t\t\tname\n\t\t\tvalue\n\t\t}\n\t}\n\tconfirm\n}\nfragment CloudConnectionFragment on CloudConnection {\n\tid\n\tname\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tprovider\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:0d0a41b5dfa910c86743e2020189205095d82cfdaff768c950becb55d86e2b18":"query GetPrAutomationTiny ($id: ID, $name: String) {\n\tprAutomation(id: $id, name: $name) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:0e44517bb19e961ba5072de436b6c59ae5f5f26a0abe32ae3e8ddee5f69a6aa2":"query GetInfrastructureStack ($id: ID, $name: String) {\n\tinfrastructureStack(id: $id, name: $name) {\n\t\t... InfrastructureStackFragment\n\t}\n}\nfragment InfrastructureStackFragment on InfrastructureStack {\n\tid\n\tname\n\ttype\n\tvariables\n\tapproval\n\tworkdir\n\tmanageState\n\tdeletedAt\n\tgit {\n\t\t... GitRefFragment\n\t}\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tfiles {\n\t\t... StackFileFragment\n\t}\n\tenvironment {\n\t\t... StackEnvironmentFragment\n\t}\n\toutput {\n\t\t... StackOutputFragment\n\t}\n\tstate {\n\t\t... StackStateFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tpolicyEngine {\n\t\t... PolicyEngineFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment StackConfigurationFragment on StackConfiguration {\n\timage\n\tversion\n\ttag\n\thooks {\n\t\t... StackHookFragment\n\t}\n\tterraform {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tterragrunt {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tpulumi {\n\t\tparallel\n\t\trefresh\n\t\tapproveEmpty\n\t\tstack\n\t\tbackendUrl\n\t}\n\tansible {\n\t\tinventory\n\t\tplaybook\n\t\tprivateKeyFile\n\t\tconfigFile\n\t}\n}\nfragment StackHookFragment on StackHook {\n\tcmd\n\targs\n\tafterStage\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment StackFileFragment on StackFile {\n\tpath\n\tcontent\n}\nfragment StackEnvironmentFragment on StackEnvironment {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackStateFragment on StackState {\n\tid\n\tplan\n\tplanJson\n\tstate {\n\t\t... StackStateResourceFragment\n\t}\n}\nfragment StackStateResourceFragment on StackStateResource {\n\tidentifier\n\tresource\n\tname\n\tconfiguration\n\tlinks\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment PolicyEngineFragment on PolicyEngine {\n\ttype\n\tmaxSeverity\n\tcustomPolicies\n}\n","sha256:0f0760bb85acd02798886990edc78e9aac44db50fa883f250d5972519ffa9ce3":"query GetGitRepository ($id: ID, $url: String) {\n\tgitRepository(id: $id, url: $url) {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\n","sha256:0f2aa1a8d7ef81b1122c7d75ae4e54e7f47f04ec942981b778e1d6899309f374":"mutation DeleteCustomCompatibilityMatrix ($name: String!) {\n\tdeleteCustomCompatibilityMatrix(name: $name) {\n\t\tid\n\t}\n}\n","sha256:0fa340d64f20a24b0474d3d73ba219d190d314d53d35e1cd3cba85f0c08b3e9b":"query ListClusterNamespaces ($after: String, $first: Int, $before: String, $last: Int) {\n\tclusterManagedNamespaces(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\t... ManagedNamespaceEdgeFragment\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment ManagedNamespaceEdgeFragment on ManagedNamespaceEdge {\n\tcursor\n\tnode {\n\t\t... ManagedNamespaceMinimalFragment\n\t}\n}\nfragment ManagedNamespaceMinimalFragment on ManagedNamespace {\n\tid\n\tname\n\tdescription\n}\n","sha256:113ac0549d0fcfd701e5bd6f98913d91d1b5c93a64d33494d301d8a0512d0c3b":"mutation DeleteCluster ($id: ID!) {\n\tdeleteCluster(id: $id) {\n\t\tid\n\t}\n}\n","sha256:1241ee42efef6bee48784022906e25828de81d27b66b8b2661a6696b25bf8096":"query ListPolicyConstraints ($after: String, $first: Int, $before: String, $last: Int, $namespace: String, $kind: String, $q: String) {\n\tpolicyConstraints(after: $after, first: $first, before: $before, last: $last, namespace: $namespace, kind: $kind, q: $q) {\n\t\t... PolicyConstraintConnectionFragment\n\t}\n}\nfragment PolicyConstraintConnectionFragment on PolicyConstraintConnection {\n\tpageInfo {\n\t\t... PageInfoFragment\n\t}\n\tedges {\n\t\t... PolicyConstraintEdgeFragment\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment PolicyConstraintEdgeFragment on PolicyConstraintEdge {\n\tcursor\n\tnode {\n\t\t... PolicyConstraintFragment\n\t}\n}\nfragment PolicyConstraintFragment on PolicyConstraint {\n\tid\n\tname\n\tdescription\n\trecommendation\n\tviolationCount\n\tref {\n\t\t... ConstraintRefFragment\n\t}\n\tviolations {\n\t\t... ViolationFragment\n\t}\n}\nfragment ConstraintRefFragment on ConstraintRef {\n\tkind\n\tname\n}\nfragment ViolationFragment on Violation {\n\tid\n\tgroup\n\tversion\n\tkind\n\tnamespace\n\tname\n\tmessage\n}\n","sha256:12978d7990d091e6a41e14baa02a3eec74a42fa51d13c7123407753af75206d5":"mutation DeleteMCPServer ($id: ID!) {\n\tdeleteMcpServer(id: $id) {\n\t\tid\n\t}\n}\n","sha256:14dab7763ca34c91224365fb4ee687491114c4f8417edf9242c56b2471d8e8aa":"mutation UpsertObserver ($attributes: ObserverAttributes!) {\n\tupsertObserver(attributes: $attributes) {\n\t\t... ObserverFragment\n\t}\n}\nfragment ObserverFragment on Observer {\n\tid\n\tname\n\tstatus\n\tcrontab\n\ttarget {\n\t\t... ObserverTargetFragment\n\t}\n\tactions {\n\t\t... ObserverActionFragment\n\t}\n\tproject {\n\t\t... ProjectFragment\n\t}\n\terrors {\n\t\t... ErrorFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment ObserverTargetFragment on ObserverTarget {\n\thelm {\n\t\t... ObserverHelmRepoFragment\n\t}\n\toci {\n\t\t... ObserverOciRepoFragment\n\t}\n}\nfragment ObserverHelmRepoFragment on ObserverHelmRepo {\n\turl\n\tchart\n\tprovider\n}\nfragment ObserverOciRepoFragment on ObserverOciRepo {\n\turl\n\tprovider\n}\nfragment ObserverActionFragment on ObserverAction {\n\ttype\n\tconfiguration {\n\t\t... ObserverActionConfigurationFragment\n\t}\n}\nfragment ObserverActionConfigurationFragment on ObserverActionConfiguration {\n\tpr {\n\t\t... ObserverPrActionFragment\n\t}\n\tpipeline {\n\t\t... ObserverPipelineActionFragment\n\t}\n}\nfragment ObserverPrActionFragment on ObserverPrAction {\n\tautomationId\n\trepository\n\tbranchTemplate\n\tcontext\n}\nfragment ObserverPipelineActionFragment on ObserverPipelineAction {\n\tpipelineId\n\tcontext\n}\nfragment ProjectFragment on Project {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\tdefault\n\tdescription\n\tdisableInsights\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment ErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\n","sha256:156bc954626bd533fcb5d6b04f8818932bf0aac8fe3b75559b80c0fdba618249":"query GetServiceContext ($name: String!) {\n\tserviceContext(name: $name) {\n\t\t... ServiceContextFragment\n\t}\n}\nfragment ServiceContextFragment on ServiceContext {\n\tid\n\tname\n\tconfiguration\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:15709e3e6be95a817cd82440cad42dff3e321b122c6dd4a244b34c11c83e0d60":"mutation AddClusterAuditLog ($audit: ClusterAuditAttributes, $audits: [ClusterAuditAttributes!]) {\n\taddClusterAuditLog(audit: $audit, audits: $audits)\n}\n","sha256:167f4296a579145d132b20e16834fe927e5cbcf3207bc99ee1e4224cde76c0ca":"mutation TriggerRun ($id: ID!) {\n\ttriggerRun(id: $id) {\n\t\t... StackRunBaseFragment\n\t}\n}\nfragment StackRunBaseFragment on StackRun {\n\tid\n\ttype\n\tstatus\n\tapproval\n\tapprovedAt\n\ttarball\n\tworkdir\n\tmanageState\n\tvariables\n\tdryRun\n\tstateUrls {\n\t\tterraform {\n\t\t\taddress\n\t\t\tlock\n\t\t\tunlock\n\t\t}\n\t}\n\tpluralCreds {\n\t\turl\n\t\ttoken\n\t}\n\tactor {\n\t\t... UserFragment\n\t}\n\tstack {\n\t\t... InfrastructureStackFragment\n\t}\n\tstate {\n\t\t... StackStateFragment\n\t}\n\tsteps {\n\t\t... RunStepFragment\n\t}\n\tfiles {\n\t\t... StackFileFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n\tenvironment {\n\t\t... StackEnvironmentFragment\n\t}\n\toutput {\n\t\t... StackOutputFragment\n\t}\n\terrors {\n\t\t... ServiceErrorFragment\n\t}\n\tviolations {\n\t\t... StackPolicyViolationFragment\n\t}\n\tpolicyEngine {\n\t\t... PolicyEngineFragment\n\t}\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment InfrastructureStackFragment on InfrastructureStack {\n\tid\n\tname\n\ttype\n\tvariables\n\tapproval\n\tworkdir\n\tmanageState\n\tdeletedAt\n\tgit {\n\t\t... GitRefFragment\n\t}\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tfiles {\n\t\t... StackFileFragment\n\t}\n\tenvironment {\n\t\t... StackEnvironmentFragment\n\t}\n\toutput {\n\t\t... StackOutputFragment\n\t}\n\tstate {\n\t\t... StackStateFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tpolicyEngine {\n\t\t... PolicyEngineFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment StackConfigurationFragment on StackConfiguration {\n\timage\n\tversion\n\ttag\n\thooks {\n\t\t... StackHookFragment\n\t}\n\tterraform {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tterragrunt {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tpulumi {\n\t\tparallel\n\t\trefresh\n\t\tapproveEmpty\n\t\tstack\n\t\tbackendUrl\n\t}\n\tansible {\n\t\tinventory\n\t\tplaybook\n\t\tprivateKeyFile\n\t\tconfigFile\n\t}\n}\nfragment StackHookFragment on StackHook {\n\tcmd\n\targs\n\tafterStage\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment StackFileFragment on StackFile {\n\tpath\n\tcontent\n}\nfragment StackEnvironmentFragment on StackEnvironment {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackStateFragment on StackState {\n\tid\n\tplan\n\tplanJson\n\tstate {\n\t\t... StackStateResourceFragment\n\t}\n}\nfragment StackStateResourceFragment on StackStateResource {\n\tidentifier\n\tresource\n\tname\n\tconfiguration\n\tlinks\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment PolicyEngineFragment on PolicyEngine {\n\ttype\n\tmaxSeverity\n\tcustomPolicies\n}\nfragment RunStepFragment on RunStep {\n\tid\n\tstatus\n\tstage\n\tname\n\tcmd\n\targs\n\trequireApproval\n\tindex\n}\nfragment ServiceErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\nfragment StackPolicyViolationFragment on StackPolicyViolation {\n\tid\n\ttitle\n\tdescription\n\tpolicyId\n\tpolicyModule\n\tpolicyUrl\n\tseverity\n\tresolution\n\tcauses {\n\t\t... StackViolationCauseFragment\n\t}\n}\nfragment StackViolationCauseFragment on StackViolationCause {\n\tstart\n\tend\n\tresource\n\tfilename\n\tlines {\n\t\t... StackViolationCauseLineFragment\n\t}\n}\nfragment StackViolationCauseLineFragment on StackViolationCauseLine {\n\tfirst\n\tlast\n\tcontent\n\tline\n}\n","sha256:173a6ff059c298faca0983bed5cd23dd2618146a475ba1b318c6df57571088fe":"mutation DetachCluster ($id: ID!) {\n\tdetachCluster(id: $id) {\n\t\tid\n\t}\n}\n","sha256:18dd5f16f5b5edea59cefc781dd47a75481f7fbf8e82fe78bd0b282bdea8ecb1":"query GetServiceContextTiny ($name: String!) {\n\tserviceContext(name: $name) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:19d5a50725b33d0f729cfab39941f60c599fa65fd3b62bc8ccaf516d466d61bd":"mutation DeleteCloudConnection ($id: ID!) {\n\tdeleteCloudConnection(id: $id) {\n\t\t... CloudConnectionFragment\n\t}\n}\nfragment CloudConnectionFragment on CloudConnection {\n\tid\n\tname\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tprovider\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:1b46f5f5487d9da23d5fefe4e9c687345d8262c0c56cc51fba038dcb114804fb":"mutation UpdateClusterRegistration ($id: ID!, $attributes: ClusterRegistrationUpdateAttributes!) {\n\tupdateClusterRegistration(id: $id, attributes: $attributes) {\n\t\t... ClusterRegistrationFragment\n\t}\n}\nfragment ClusterRegistrationFragment on ClusterRegistration {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tmachineId\n\tname\n\thandle\n\tmetadata\n\ttags {\n\t\t... ClusterTags\n\t}\n\tcreator {\n\t\t... UserFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:1b8cbf2dcdf2de8865c73a61fa9d6c804e98ab333aa265a4662e88187f1102c8":"query GetServiceTarball ($id: ID!) {\n\tserviceTarball(id: $id) {\n\t\tpath\n\t\tcontent\n\t}\n}\n","sha256:1bda12b2e70df63429dc0f9828860174e95a031e50753a96c7df1d8fbbc31e5f":"mutation CompletesStackRun ($id: ID!, $attributes: StackRunAttributes!) {\n\tcompleteStackRun(id: $id, attributes: $attributes) {\n\t\t... StackRunIdFragment\n\t}\n}\nfragment StackRunIdFragment on StackRun {\n\tid\n}\n","sha256:1cefc75c539e6334a815541ea29d5b313d62320a0891add20d37aadcb87e2f86":"mutation UpdateGitRepository ($id: ID!, $attributes: GitAttributes!) {\n\tupdateGitRepository(id: $id, attributes: $attributes) {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\n","sha256:1d4359e183ae6b47f7415ab6785626c59d818e2b146ae91e3098c10ef74e4635":"mutation UpdateWorkbenchTool ($id: ID!, $attributes: WorkbenchToolAttributes!) {\n\tupdateWorkbenchTool(id: $id, attributes: $attributes) {\n\t\t... WorkbenchToolFragment\n\t}\n}\nfragment WorkbenchToolFragment on WorkbenchTool {\n\tid\n\tname\n\ttool\n\tcategories\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tmcpServer {\n\t\t... MCPServerFragment\n\t}\n\tcloudConnection {\n\t\t... CloudConnectionFragment\n\t}\n\tscmConnection {\n\t\tid\n\t\tname\n\t\ttype\n\t}\n\tconfiguration {\n\t\thttp {\n\t\t\turl\n\t\t\tmethod\n\t\t\tfunction\n\t\t\theaders {\n\t\t\t\tname\n\t\t\t\tvalue\n\t\t\t}\n\t\t\tbody\n\t\t\tinputSchema\n\t\t}\n\t\telastic {\n\t\t\tindex\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\topensearch {\n\t\t\thost\n\t\t\tindex\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t\tassumeRoleArn\n\t\t\tusePodIdentity\n\t\t}\n\t\tprometheus {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t\tawsSigv4\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t}\n\t\tloki {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tvictoriaLogs {\n\t\t\turl\n\t\t\tusername\n\t\t\taccountId\n\t\t\tprojectId\n\t\t}\n\t\tsplunk {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\ttempo {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tjaeger {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\tdatadog {\n\t\t\tsite\n\t\t}\n\t\tdynatrace {\n\t\t\turl\n\t\t}\n\t\tcloudwatch {\n\t\t\tregion\n\t\t\tlogGroupNames\n\t\t\troleArn\n\t\t\troleSessionName\n\t\t}\n\t\tazure {\n\t\t\tsubscriptionId\n\t\t\ttenantId\n\t\t\tclientId\n\t\t\tprometheusUrl\n\t\t}\n\t\tsentry {\n\t\t\turl\n\t\t}\n\t\tlinear {\n\t\t\turl\n\t\t}\n\t\tslack {\n\t\t\turl\n\t\t}\n\t\tpagerduty {\n\t\t\turl\n\t\t}\n\t\tteams {\n\t\t\tclientId\n\t\t\ttenantId\n\t\t}\n\t\tatlassian {\n\t\t\turl\n\t\t\temail\n\t\t}\n\t\texa {\n\t\t\turl\n\t\t}\n\t\tgithub {\n\t\t\turl\n\t\t\ttoolset\n\t\t\tappId\n\t\t\tinstallationId\n\t\t}\n\t\tgitlab {\n\t\t\turl\n\t\t}\n\t\tbitbucket {\n\t\t\turl\n\t\t}\n\t\tbitbucketDatacenter {\n\t\t\turl\n\t\t}\n\t\tazureDevops {\n\t\t\turl\n\t\t}\n\t\tlambda {\n\t\t\tlambdaArn\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tcloudRun {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tazureFunction {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tdocker {\n\t\t\turl\n\t\t\tprovider\n\t\t\tproxy {\n\t\t\t\turl\n\t\t\t\tnoproxy\n\t\t\t}\n\t\t}\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment MCPServerFragment on McpServer {\n\tid\n\tname\n\turl\n\tauthentication {\n\t\tplural\n\t\theaders {\n\t\t\tname\n\t\t\tvalue\n\t\t}\n\t}\n\tconfirm\n}\nfragment CloudConnectionFragment on CloudConnection {\n\tid\n\tname\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tprovider\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:1e351c0a49167a35fcecf3cd2357422f8d0d46d815b2cefbe94af6a2eea3e050":"mutation UpsertUser ($attributes: UserAttributes!) {\n\tupsertUser(attributes: $attributes) {\n\t\t... UserFragment\n\t}\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:1e3e1e2790a3766fa468050e82832991f68555001110778be9611b060369753e":"mutation CreatePipelineContext ($pipelineId: ID!, $attributes: PipelineContextAttributes!) {\n\tcreatePipelineContext(pipelineId: $pipelineId, attributes: $attributes) {\n\t\t... PipelineContextFragment\n\t}\n}\nfragment PipelineContextFragment on PipelineContext {\n\tid\n\tcontext\n}\n","sha256:1f6e3f1f3f3453e925cba533c56cd78e169a56f9276e8795f8aa63576dd56a24":"mutation UpsertUpgradePlanCallout ($attributes: UpgradePlanCalloutAttributes!) {\n\tupsertUpgradePlanCallout(attributes: $attributes) {\n\t\t... UpgradePlanCalloutFragment\n\t}\n}\nfragment UpgradePlanCalloutFragment on UpgradePlanCallout {\n\tid\n\tname\n}\n","sha256:1f6f1a1489995b77678694f2575e16e943eeee4736e05a91dec811f0f15983f3":"mutation CreateFederatedCredential ($attributes: FederatedCredentialAttributes!) {\n\tcreateFederatedCredential(attributes: $attributes) {\n\t\t... FederatedCredentialFragment\n\t}\n}\nfragment FederatedCredentialFragment on FederatedCredential {\n\tid\n\tclaimsLike\n\tissuer\n\tscopes\n\tinsertedAt\n\tupdatedAt\n\tuser {\n\t\tid\n\t\tname\n\t\temail\n\t}\n}\n","sha256:1ffea4d7cf10ecfd70c134cdf5bfb7dbeaf6434a6a643a55cff81fd9ebbcec0c":"mutation SaveUpgradeInsights ($insights: [UpgradeInsightAttributes], $addons: [CloudAddonAttributes]) {\n\tsaveUpgradeInsights(insights: $insights, addons: $addons) {\n\t\tid\n\t\tname\n\t\tversion\n\t}\n}\n","sha256:203d28df2014c4b7e9a0b2207cf6ccc8a5ef26fdf3e2601c5a3d62109c6837ea":"query ListStackDefinitions ($after: String, $first: Int, $before: String, $last: Int) {\n\tstackDefinitions(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... StackDefinitionFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment StackDefinitionFragment on StackDefinition {\n\tid\n\tname\n\tdescription\n\tinsertedAt\n\tupdatedAt\n\tconfiguration {\n\t\timage\n\t\ttag\n\t\tversion\n\t\thooks {\n\t\t\tcmd\n\t\t\targs\n\t\t\tafterStage\n\t\t}\n\t}\n\tsteps {\n\t\tcmd\n\t\targs\n\t\tstage\n\t\trequireApproval\n\t}\n\tdeleteSteps {\n\t\tcmd\n\t\targs\n\t\tstage\n\t\trequireApproval\n\t}\n}\n","sha256:221cb5170a90de1dc482ba3e31377437aa9b15a97c7b8ff3230177b70e08bfe4":"query GetHelmRepositoryTiny ($url: String!) {\n\thelmRepository(url: $url) {\n\t\tid\n\t}\n}\n","sha256:2345924629957866fb322bc4c388a43686af182cbbddf270b0f30f8a3b377dd0":"query GetGlobalServiceDeployment ($id: ID!) {\n\tglobalService(id: $id) {\n\t\t... GlobalServiceFragment\n\t}\n}\nfragment GlobalServiceFragment on GlobalService {\n\tid\n\tname\n\tdistro\n\tprovider {\n\t\tid\n\t}\n\tservice {\n\t\tid\n\t}\n\ttags {\n\t\t... ClusterTags\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:23583acdae3cdcc986ffa4a7e1a2b55d5e7a3bde0311c3ec5718bfbbea14f219":"query GetGlobalServiceDeploymentByName ($name: String!) {\n\tglobalService(name: $name) {\n\t\t... GlobalServiceFragment\n\t}\n}\nfragment GlobalServiceFragment on GlobalService {\n\tid\n\tname\n\tdistro\n\tprovider {\n\t\tid\n\t}\n\tservice {\n\t\tid\n\t}\n\ttags {\n\t\t... ClusterTags\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:23bb559098a8c85f67e0edcbff659daa6e752c76f0892c65d77432d568398bee":"query GetClusterRestore ($id: ID!) {\n\tclusterRestore(id: $id) {\n\t\t... ClusterRestoreFragment\n\t}\n}\nfragment ClusterRestoreFragment on ClusterRestore {\n\tid\n\tstatus\n\tbackup {\n\t\t... ClusterBackupFragment\n\t}\n}\nfragment ClusterBackupFragment on ClusterBackup {\n\tid\n\tname\n\tcluster {\n\t\tid\n\t}\n\tgarbageCollected\n}\n","sha256:24a3dde607ba5f19327deea354f30f58b8184bcc9d2bbc102fb49b51c5f422b5":"query GetNotificationRouter ($id: ID!) {\n\tnotificationRouter(id: $id) {\n\t\t... NotificationRouterFragment\n\t}\n}\nfragment NotificationRouterFragment on NotificationRouter {\n\tid\n\tname\n\tsinks {\n\t\t... NotificationSinkFragment\n\t}\n\tevents\n}\nfragment NotificationSinkFragment on NotificationSink {\n\tid\n\tname\n\ttype\n\tconfiguration {\n\t\t... SinkConfigurationFragment\n\t}\n\tnotificationBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment SinkConfigurationFragment on SinkConfiguration {\n\tid\n\tslack {\n\t\t... UrlSinkConfigurationFragment\n\t}\n\tteams {\n\t\t... UrlSinkConfigurationFragment\n\t}\n}\nfragment UrlSinkConfigurationFragment on UrlSinkConfiguration {\n\turl\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:25a4c7c811b4dd79d86e145181462499315c7b476c5caaaa60518db1f57f95d9":"mutation SavePipeline ($name: String!, $attributes: PipelineAttributes!) {\n\tsavePipeline(name: $name, attributes: $attributes) {\n\t\t... PipelineFragmentMinimal\n\t}\n}\nfragment PipelineFragmentMinimal on Pipeline {\n\tid\n\tname\n}\n","sha256:2623408de61d79178f6ee987a04e0df092546078b563e89b072b162af6f15ffe":"mutation GetWorkbenchWebhook ($id: ID!) {\n\tgetWorkbenchWebhook(id: $id) {\n\t\t... WorkbenchWebhookFragment\n\t}\n}\nfragment WorkbenchWebhookFragment on WorkbenchWebhook {\n\tid\n\tname\n\tprompt\n\tpriority\n\tmatches {\n\t\tregex\n\t\tsubstring\n\t\tcaseInsensitive\n\t}\n\twebhook {\n\t\tid\n\t\tname\n\t}\n\tissueWebhook {\n\t\tid\n\t\tname\n\t}\n\tworkbench {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:263be051e9e86e4a69b64064ebf9971db9f14ff4827e881b0a9ea988c3d0870e":"mutation DeleteObservabilityProvider ($id: ID!) {\n\tdeleteObservabilityProvider(id: $id) {\n\t\t... ObservabilityProviderFragment\n\t}\n}\nfragment ObservabilityProviderFragment on ObservabilityProvider {\n\tid\n\tname\n\ttype\n\tupdatedAt\n\tinsertedAt\n}\n","sha256:299b1ad1887219aef8605421301e00b36aabb4a1cbd34f3ba1f7c4717612eadf":"mutation DeletePrGovernance ($id: ID!) {\n\tdeletePrGovernance(id: $id) {\n\t\t... PrGovernanceFragment\n\t}\n}\nfragment PrGovernanceFragment on PrGovernance {\n\tid\n\tname\n}\n","sha256:29a58c567342ed6668f8af22b9ff8d5ed8c55c74151c93d87accd3827bc39faf":"mutation CreateBootstrapToken ($attributes: BootstrapTokenAttributes!) {\n\tcreateBootstrapToken(attributes: $attributes) {\n\t\t... BootstrapTokenBase\n\t}\n}\nfragment BootstrapTokenBase on BootstrapToken {\n\tid\n\ttoken\n}\n","sha256:2a1fd145f179ee0d1e6ce186d9d3633981ac99bf3752b07c815b1ce2f659c430":"mutation CreateClusterProvider ($attributes: ClusterProviderAttributes!) {\n\tcreateClusterProvider(attributes: $attributes) {\n\t\t... ClusterProviderFragment\n\t}\n}\nfragment ClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\tdeletedAt\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tservice {\n\t\t... ServiceDeploymentFragment\n\t}\n\tcredentials {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\n","sha256:2a9a8fbe23cdfbbf00c854bb4f8332064dff6c8a552ac756b506395bd25100c7":"mutation UpdateClusterProvider ($id: ID!, $attributes: ClusterProviderUpdateAttributes!) {\n\tupdateClusterProvider(id: $id, attributes: $attributes) {\n\t\t... ClusterProviderFragment\n\t}\n}\nfragment ClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\tdeletedAt\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tservice {\n\t\t... ServiceDeploymentFragment\n\t}\n\tcredentials {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\n","sha256:2cfa322ebeb5f421f7cd23fad60e385d43d70b18962d71d0fede0f594cc1b46d":"mutation UpdateSentinel ($id: ID!, $attributes: SentinelAttributes) {\n\tupdateSentinel(id: $id, attributes: $attributes) {\n\t\t... SentinelFragment\n\t}\n}\nfragment SentinelFragment on Sentinel {\n\tid\n\tname\n\tdescription\n\tgit {\n\t\t... GitRefFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tchecks {\n\t\t... SentinelCheckFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment SentinelCheckFragment on SentinelCheck {\n\tid\n\tname\n\ttype\n\truleFile\n\tconfiguration {\n\t\t... SentinelCheckConfigurationFragment\n\t}\n}\nfragment SentinelCheckConfigurationFragment on SentinelCheckConfiguration {\n\tlog {\n\t\t... SentinelCheckLogConfigurationFragment\n\t}\n\tkubernetes {\n\t\t... SentinelCheckKubernetesConfigurationFragment\n\t}\n\tintegrationTest {\n\t\t... SentinelCheckIntegrationTestConfigurationFragment\n\t}\n}\nfragment SentinelCheckLogConfigurationFragment on SentinelCheckLogConfiguration {\n\tnamespaces\n\tquery\n\tclusterId\n\tfacets {\n\t\tkey\n\t\tvalue\n\t}\n\tduration\n}\nfragment SentinelCheckKubernetesConfigurationFragment on SentinelCheckKubernetesConfiguration {\n\tgroup\n\tversion\n\tkind\n\tname\n\tnamespace\n}\nfragment SentinelCheckIntegrationTestConfigurationFragment on SentinelCheckIntegrationTestConfiguration {\n\tdistro\n\ttags\n\trerunFailures\n\trerunFailuresCount\n\tpostrunScript\n\tgotestsum {\n\t\tp\n\t\tparallel\n\t}\n\tjob {\n\t\t... JobSpecFragment\n\t}\n\tcases {\n\t\t... TestCaseConfigurationFragment\n\t}\n\tdefault {\n\t\t... SentinelCheckIntegrationTestDefaultConfigurationFragment\n\t}\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment TestCaseConfigurationFragment on SentinelCheckIntegrationTestCaseConfiguration {\n\tname\n\ttype\n\tcoredns {\n\t\tdialFqdns\n\t\tdelay\n\t\tretries\n\t}\n\tloadbalancer {\n\t\tannotations\n\t\tlabels\n\t\tnamePrefix\n\t\tnamespace\n\t\tdnsProbe {\n\t\t\tfqdn\n\t\t\tdelay\n\t\t\tretries\n\t\t}\n\t}\n\tpvc {\n\t\tnamePrefix\n\t\tstorageClass\n\t\tsize\n\t}\n\traw {\n\t\tyaml\n\t\texpectedResult\n\t}\n}\nfragment SentinelCheckIntegrationTestDefaultConfigurationFragment on SentinelCheckIntegrationTestDefaultConfiguration {\n\tignore\n\tnamespaceAnnotations\n\tnamespaceLabels\n\tregistry\n\tresourceAnnotations\n\tresourceLabels\n}\n","sha256:2d79ab2f196f1d63931d3806a4477b92870750014a086d6f2561e55cb6a67af3":"mutation CreateUser ($attributes: UserAttributes!) {\n\tcreateUser(attributes: $attributes) {\n\t\t... UserFragment\n\t}\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:2e5118d5c1872f1f474c40362070af9ad131edef31a6fcfa53ffc550957cb86d":"mutation CreateAgentPullRequest ($runId: ID!, $attributes: AgentPullRequestAttributes!) {\n\tagentPullRequest(runId: $runId, attributes: $attributes) {\n\t\t... PullRequestFragment\n\t}\n}\nfragment PullRequestFragment on PullRequest {\n\tid\n\tstatus\n\turl\n\ttitle\n\tcreator\n\tref\n}\n","sha256:2e5a060183ca0f115ca2fd5c98f051bd8f260fa00902992c20ad8fcf46523699":"query GetFederatedCredentialTiny ($id: ID!) {\n\tfederatedCredential(id: $id) {\n\t\tid\n\t}\n}\n","sha256:2ed4e4848a2483a8d60683df43dcf2668484b6af513db89072d7b9163cb91e40":"mutation UpdateNamespace ($id: ID!, $attributes: ManagedNamespaceAttributes!) {\n\tupdateManagedNamespace(id: $id, attributes: $attributes) {\n\t\t... ManagedNamespaceFragment\n\t}\n}\nfragment ManagedNamespaceFragment on ManagedNamespace {\n\tid\n\tname\n\tdescription\n\tlabels\n\tannotations\n\tpullSecrets\n\tservice {\n\t\t... ServiceTemplateFragment\n\t}\n\ttarget {\n\t\t... ClusterTargetFragment\n\t}\n\tdeletedAt\n}\nfragment ServiceTemplateFragment on ServiceTemplate {\n\tname\n\tnamespace\n\ttemplated\n\trepositoryId\n\tcontexts\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tsyncConfig {\n\t\t... SyncConfigFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment SyncConfigFragment on SyncConfig {\n\tcreateNamespace\n\tnamespaceMetadata {\n\t\t... NamespaceMetadataFragment\n\t}\n}\nfragment NamespaceMetadataFragment on NamespaceMetadata {\n\tlabels\n\tannotations\n}\nfragment ClusterTargetFragment on ClusterTarget {\n\ttags\n\tdistro\n}\n","sha256:2f962b9a1cf08b3ac5eb37f0935bf9fb9553825da92e773f0198f564812ddcca":"query GetClusterGate ($id: ID!) {\n\tclusterGate(id: $id) {\n\t\t... PipelineGateFragment\n\t}\n}\nfragment PipelineGateFragment on PipelineGate {\n\tid\n\tname\n\ttype\n\tstate\n\tupdatedAt\n\tspec {\n\t\t... GateSpecFragment\n\t}\n\tstatus {\n\t\t... GateStatusFragment\n\t}\n}\nfragment GateSpecFragment on GateSpec {\n\tjob {\n\t\t... JobSpecFragment\n\t}\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment GateStatusFragment on GateStatus {\n\tjobRef {\n\t\t... JobReferenceFragment\n\t}\n}\nfragment JobReferenceFragment on JobReference {\n\tname\n\tnamespace\n}\n","sha256:2fb0280705bd95774e0830e6b69482a17a4bdea51b60aae031c878e7622bfb31":"query ListAccessTokens ($cursor: String, $before: String, $last: Int) {\n\taccessTokens(after: $cursor, first: 100, before: $before, last: $last) {\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... AccessTokenFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment AccessTokenFragment on AccessToken {\n\tid\n\ttoken\n}\n","sha256:3153ef98895d30c2c6f51cf864b6461c951e4385c408e4736ab5c85909c55967":"query GetWorkbenchTool ($id: ID, $name: String) {\n\tworkbenchTool(id: $id, name: $name) {\n\t\t... WorkbenchToolFragment\n\t}\n}\nfragment WorkbenchToolFragment on WorkbenchTool {\n\tid\n\tname\n\ttool\n\tcategories\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tmcpServer {\n\t\t... MCPServerFragment\n\t}\n\tcloudConnection {\n\t\t... CloudConnectionFragment\n\t}\n\tscmConnection {\n\t\tid\n\t\tname\n\t\ttype\n\t}\n\tconfiguration {\n\t\thttp {\n\t\t\turl\n\t\t\tmethod\n\t\t\tfunction\n\t\t\theaders {\n\t\t\t\tname\n\t\t\t\tvalue\n\t\t\t}\n\t\t\tbody\n\t\t\tinputSchema\n\t\t}\n\t\telastic {\n\t\t\tindex\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\topensearch {\n\t\t\thost\n\t\t\tindex\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t\tassumeRoleArn\n\t\t\tusePodIdentity\n\t\t}\n\t\tprometheus {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t\tawsSigv4\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t}\n\t\tloki {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tvictoriaLogs {\n\t\t\turl\n\t\t\tusername\n\t\t\taccountId\n\t\t\tprojectId\n\t\t}\n\t\tsplunk {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\ttempo {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tjaeger {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\tdatadog {\n\t\t\tsite\n\t\t}\n\t\tdynatrace {\n\t\t\turl\n\t\t}\n\t\tcloudwatch {\n\t\t\tregion\n\t\t\tlogGroupNames\n\t\t\troleArn\n\t\t\troleSessionName\n\t\t}\n\t\tazure {\n\t\t\tsubscriptionId\n\t\t\ttenantId\n\t\t\tclientId\n\t\t\tprometheusUrl\n\t\t}\n\t\tsentry {\n\t\t\turl\n\t\t}\n\t\tlinear {\n\t\t\turl\n\t\t}\n\t\tslack {\n\t\t\turl\n\t\t}\n\t\tpagerduty {\n\t\t\turl\n\t\t}\n\t\tteams {\n\t\t\tclientId\n\t\t\ttenantId\n\t\t}\n\t\tatlassian {\n\t\t\turl\n\t\t\temail\n\t\t}\n\t\texa {\n\t\t\turl\n\t\t}\n\t\tgithub {\n\t\t\turl\n\t\t\ttoolset\n\t\t\tappId\n\t\t\tinstallationId\n\t\t}\n\t\tgitlab {\n\t\t\turl\n\t\t}\n\t\tbitbucket {\n\t\t\turl\n\t\t}\n\t\tbitbucketDatacenter {\n\t\t\turl\n\t\t}\n\t\tazureDevops {\n\t\t\turl\n\t\t}\n\t\tlambda {\n\t\t\tlambdaArn\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tcloudRun {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tazureFunction {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tdocker {\n\t\t\turl\n\t\t\tprovider\n\t\t\tproxy {\n\t\t\t\turl\n\t\t\t\tnoproxy\n\t\t\t}\n\t\t}\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment MCPServerFragment on McpServer {\n\tid\n\tname\n\turl\n\tauthentication {\n\t\tplural\n\t\theaders {\n\t\t\tname\n\t\t\tvalue\n\t\t}\n\t}\n\tconfirm\n}\nfragment CloudConnectionFragment on CloudConnection {\n\tid\n\tname\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tprovider\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:31c87507e58e544b9660476a49191db9bb682a97098db47b0a24f6ab6b7c7099":"mutation DeleteWorkbenchPrompt ($id: ID!) {\n\tdeleteWorkbenchPrompt(id: $id) {\n\t\tid\n\t}\n}\n","sha256:3328865733a3222c979c5635979280018cbe8a54f6eea8f28e32314b39c6a6a6":"mutation UpdateStackDefinition ($id: ID!, $attributes: StackDefinitionAttributes!) {\n\tupdateStackDefinition(id: $id, attributes: $attributes) {\n\t\t... StackDefinitionFragment\n\t}\n}\nfragment StackDefinitionFragment on StackDefinition {\n\tid\n\tname\n\tdescription\n\tinsertedAt\n\tupdatedAt\n\tconfiguration {\n\t\timage\n\t\ttag\n\t\tversion\n\t\thooks {\n\t\t\tcmd\n\t\t\targs\n\t\t\tafterStage\n\t\t}\n\t}\n\tsteps {\n\t\tcmd\n\t\targs\n\t\tstage\n\t\trequireApproval\n\t}\n\tdeleteSteps {\n\t\tcmd\n\t\targs\n\t\tstage\n\t\trequireApproval\n\t}\n}\n","sha256:344d00a3e2e6e10a36de6867db2b9deba25bdebc3547c897fe6f2548738724a7":"query GetStackDefinitionTiny ($id: ID!) {\n\tstackDefinition(id: $id) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:3557f778cd80f66482868b2bc6d0df507b4a2eb9cc6249877b001bdcc2c2c455":"mutation CreateSentinel ($attributes: SentinelAttributes) {\n\tcreateSentinel(attributes: $attributes) {\n\t\t... SentinelFragment\n\t}\n}\nfragment SentinelFragment on Sentinel {\n\tid\n\tname\n\tdescription\n\tgit {\n\t\t... GitRefFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tchecks {\n\t\t... SentinelCheckFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment SentinelCheckFragment on SentinelCheck {\n\tid\n\tname\n\ttype\n\truleFile\n\tconfiguration {\n\t\t... SentinelCheckConfigurationFragment\n\t}\n}\nfragment SentinelCheckConfigurationFragment on SentinelCheckConfiguration {\n\tlog {\n\t\t... SentinelCheckLogConfigurationFragment\n\t}\n\tkubernetes {\n\t\t... SentinelCheckKubernetesConfigurationFragment\n\t}\n\tintegrationTest {\n\t\t... SentinelCheckIntegrationTestConfigurationFragment\n\t}\n}\nfragment SentinelCheckLogConfigurationFragment on SentinelCheckLogConfiguration {\n\tnamespaces\n\tquery\n\tclusterId\n\tfacets {\n\t\tkey\n\t\tvalue\n\t}\n\tduration\n}\nfragment SentinelCheckKubernetesConfigurationFragment on SentinelCheckKubernetesConfiguration {\n\tgroup\n\tversion\n\tkind\n\tname\n\tnamespace\n}\nfragment SentinelCheckIntegrationTestConfigurationFragment on SentinelCheckIntegrationTestConfiguration {\n\tdistro\n\ttags\n\trerunFailures\n\trerunFailuresCount\n\tpostrunScript\n\tgotestsum {\n\t\tp\n\t\tparallel\n\t}\n\tjob {\n\t\t... JobSpecFragment\n\t}\n\tcases {\n\t\t... TestCaseConfigurationFragment\n\t}\n\tdefault {\n\t\t... SentinelCheckIntegrationTestDefaultConfigurationFragment\n\t}\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment TestCaseConfigurationFragment on SentinelCheckIntegrationTestCaseConfiguration {\n\tname\n\ttype\n\tcoredns {\n\t\tdialFqdns\n\t\tdelay\n\t\tretries\n\t}\n\tloadbalancer {\n\t\tannotations\n\t\tlabels\n\t\tnamePrefix\n\t\tnamespace\n\t\tdnsProbe {\n\t\t\tfqdn\n\t\t\tdelay\n\t\t\tretries\n\t\t}\n\t}\n\tpvc {\n\t\tnamePrefix\n\t\tstorageClass\n\t\tsize\n\t}\n\traw {\n\t\tyaml\n\t\texpectedResult\n\t}\n}\nfragment SentinelCheckIntegrationTestDefaultConfigurationFragment on SentinelCheckIntegrationTestDefaultConfiguration {\n\tignore\n\tnamespaceAnnotations\n\tnamespaceLabels\n\tregistry\n\tresourceAnnotations\n\tresourceLabels\n}\n","sha256:3617cd964a5282e8fbdbbb88a2dfddc82c9392725b259d6db7e10b87adb28e91":"mutation SaveServiceContext ($name: String!, $attributes: ServiceContextAttributes!) {\n\tsaveServiceContext(name: $name, attributes: $attributes) {\n\t\t... ServiceContextFragment\n\t}\n}\nfragment ServiceContextFragment on ServiceContext {\n\tid\n\tname\n\tconfiguration\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:3642d7afaa157713cb448c26f4f3362a53ba61ba9f368233782e709637054dbe":"mutation DeletePrAutomation ($id: ID!) {\n\tdeletePrAutomation(id: $id) {\n\t\t... PrAutomationFragment\n\t}\n}\nfragment PrAutomationFragment on PrAutomation {\n\tid\n\tname\n\ttitle\n\taddon\n\tmessage\n\tidentifier\n\tinsertedAt\n\tupdatedAt\n}\n","sha256:368c82946025827b9e5a282df168753546a94ae38c4eba8077c45f32ae92ab54":"mutation DeleteObserver ($id: ID!) {\n\tdeleteObserver(id: $id) {\n\t\t... ObserverFragment\n\t}\n}\nfragment ObserverFragment on Observer {\n\tid\n\tname\n\tstatus\n\tcrontab\n\ttarget {\n\t\t... ObserverTargetFragment\n\t}\n\tactions {\n\t\t... ObserverActionFragment\n\t}\n\tproject {\n\t\t... ProjectFragment\n\t}\n\terrors {\n\t\t... ErrorFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment ObserverTargetFragment on ObserverTarget {\n\thelm {\n\t\t... ObserverHelmRepoFragment\n\t}\n\toci {\n\t\t... ObserverOciRepoFragment\n\t}\n}\nfragment ObserverHelmRepoFragment on ObserverHelmRepo {\n\turl\n\tchart\n\tprovider\n}\nfragment ObserverOciRepoFragment on ObserverOciRepo {\n\turl\n\tprovider\n}\nfragment ObserverActionFragment on ObserverAction {\n\ttype\n\tconfiguration {\n\t\t... ObserverActionConfigurationFragment\n\t}\n}\nfragment ObserverActionConfigurationFragment on ObserverActionConfiguration {\n\tpr {\n\t\t... ObserverPrActionFragment\n\t}\n\tpipeline {\n\t\t... ObserverPipelineActionFragment\n\t}\n}\nfragment ObserverPrActionFragment on ObserverPrAction {\n\tautomationId\n\trepository\n\tbranchTemplate\n\tcontext\n}\nfragment ObserverPipelineActionFragment on ObserverPipelineAction {\n\tpipelineId\n\tcontext\n}\nfragment ProjectFragment on Project {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\tdefault\n\tdescription\n\tdisableInsights\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment ErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\n","sha256:36fea2d78373476143b536962a73f6b9eca5fdef00b5415ab69e1ab830908756":"mutation CreateStackDefinition ($attributes: StackDefinitionAttributes!) {\n\tcreateStackDefinition(attributes: $attributes) {\n\t\t... StackDefinitionFragment\n\t}\n}\nfragment StackDefinitionFragment on StackDefinition {\n\tid\n\tname\n\tdescription\n\tinsertedAt\n\tupdatedAt\n\tconfiguration {\n\t\timage\n\t\ttag\n\t\tversion\n\t\thooks {\n\t\t\tcmd\n\t\t\targs\n\t\t\tafterStage\n\t\t}\n\t}\n\tsteps {\n\t\tcmd\n\t\targs\n\t\tstage\n\t\trequireApproval\n\t}\n\tdeleteSteps {\n\t\tcmd\n\t\targs\n\t\tstage\n\t\trequireApproval\n\t}\n}\n","sha256:3715c332fc325a323b5c2baf5a93b97960d05d5a84c4480a8bec3ae6d2e2b3ba":"query GetBindingPolicyTiny ($id: ID!) {\n\tbindingPolicy(id: $id) {\n\t\tid\n\t}\n}\n","sha256:375a7c2c38b8646e8df33e517981225183365bcadcc689195c122f3d4ab5864c":"mutation UpdateGlobalServiceDeployment ($id: ID!, $attributes: GlobalServiceAttributes!) {\n\tupdateGlobalService(id: $id, attributes: $attributes) {\n\t\t... GlobalServiceFragment\n\t}\n}\nfragment GlobalServiceFragment on GlobalService {\n\tid\n\tname\n\tdistro\n\tprovider {\n\t\tid\n\t}\n\tservice {\n\t\tid\n\t}\n\ttags {\n\t\t... ClusterTags\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:376451d410f05aa32972a4ecfe1e4e9efab9bcd12428dfcee693eacfbe653ae9":"mutation CreateServiceDeploymentWithHandle ($cluster: String!, $attributes: ServiceDeploymentAttributes!) {\n\tcreateServiceDeployment(cluster: $cluster, attributes: $attributes) {\n\t\t... ServiceDeploymentExtended\n\t}\n}\nfragment ServiceDeploymentExtended on ServiceDeployment {\n\tcluster {\n\t\t... BaseClusterFragment\n\t}\n\terrors {\n\t\t... ErrorFragment\n\t}\n\trevision {\n\t\t... RevisionFragment\n\t}\n\tcontexts {\n\t\t... ServiceContextFragment\n\t}\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n\timports {\n\t\tstack {\n\t\t\t... InfrastructureStackTinyFragment\n\t\t}\n\t\toutputs {\n\t\t\t... StackOutputFragment\n\t\t}\n\t}\n}\nfragment BaseClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tdistro\n\tpingedAt\n\tcurrentVersion\n\tkasUrl\n\tmetadata\n\ttags {\n\t\t... ClusterTags\n\t}\n\tcredential {\n\t\t... ProviderCredentialFragment\n\t}\n\tprovider {\n\t\t... BaseClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment BaseClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment ErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\nfragment RevisionFragment on Revision {\n\tid\n\tsha\n\tgit {\n\t\tref\n\t\tfolder\n\t}\n}\nfragment ServiceContextFragment on ServiceContext {\n\tid\n\tname\n\tconfiguration\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment InfrastructureStackTinyFragment on InfrastructureStack {\n\tid\n\tname\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\n","sha256:37a8038a21b33330a0321ceaa792807a8a959323c31d52b87f71cd557f5e8529":"query MyCluster {\n\tmyCluster {\n\t\t... {\n\t\t\tid\n\t\t\tname\n\t\t\tdistro\n\t\t\tsupportedAddons\n\t\t\trestore {\n\t\t\t\t... ClusterRestoreFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment ClusterRestoreFragment on ClusterRestore {\n\tid\n\tstatus\n\tbackup {\n\t\t... ClusterBackupFragment\n\t}\n}\nfragment ClusterBackupFragment on ClusterBackup {\n\tid\n\tname\n\tcluster {\n\t\tid\n\t}\n\tgarbageCollected\n}\n","sha256:383f1a8e3b789b58df1c1b5e1de4ada6be3b0ef5e3cd24f6a79109ff2a6ef6ec":"mutation DeleteAccessToken ($token: String!) {\n\tdeleteAccessToken(token: $token) {\n\t\t... AccessTokenFragment\n\t}\n}\nfragment AccessTokenFragment on AccessToken {\n\tid\n\ttoken\n}\n","sha256:38cf2b80e79145a83cf653ef5dd530c09492427bbc5c2f2b2b00a99f63081a6d":"mutation DeleteServiceDeployment ($id: ID!) {\n\tdeleteServiceDeployment(id: $id) {\n\t\t... ServiceDeploymentFragment\n\t}\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\n","sha256:39189795df275ba5770b0f0fdc2167fef15a2ef105f13bb69b95d1e3d75ef749":"mutation UpsertVirtualCluster ($parentID: ID!, $attributes: ClusterAttributes!) {\n\tupsertVirtualCluster(parentId: $parentID, attributes: $attributes) {\n\t\tdeployToken\n\t\t... ClusterFragment\n\t}\n}\nfragment ClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tinsertedAt\n\tpingedAt\n\tprotect\n\tcurrentVersion\n\tkasUrl\n\tdeletedAt\n\tmetadata\n\tdistro\n\ttags {\n\t\t... ClusterTags\n\t}\n\tprovider {\n\t\t... ClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tstatus {\n\t\t... ClusterStatusFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\tdeletedAt\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tservice {\n\t\t... ServiceDeploymentFragment\n\t}\n\tcredentials {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment ClusterStatusFragment on ClusterStatus {\n\tconditions {\n\t\t... ClusterConditionFragment\n\t}\n}\nfragment ClusterConditionFragment on ClusterCondition {\n\tstatus\n\ttype\n\tmessage\n\treason\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:391a0d44f56daaa9236742e4c686aed180e197f9d2e8fe4fd007d58e3fb89d14":"query GetPersona ($id: ID!) {\n\tpersona(id: $id) {\n\t\t... PersonaFragment\n\t}\n}\nfragment PersonaFragment on Persona {\n\tid\n\tname\n\tdescription\n\tconfiguration {\n\t\t... PersonaConfigurationFragment\n\t}\n\tbindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PersonaConfigurationFragment on PersonaConfiguration {\n\tall\n\tdeployments {\n\t\taddOns\n\t\tclusters\n\t\tpipelines\n\t\tproviders\n\t\trepositories\n\t\tservices\n\t}\n\thome {\n\t\tmanager\n\t\tsecurity\n\t}\n\tflows {\n\t\tpermissions\n\t\tstartWorkbenchJob\n\t\tpipelines\n\t\tpreviews\n\t\tworkbenches\n\t}\n\tsidebar {\n\t\taudits\n\t\tflows\n\t\tkubernetes\n\t\tpullRequests\n\t\tsettings\n\t\tbackups\n\t\tstacks\n\t\tworkbenches\n\t\tcd\n\t\tai\n\t}\n\tsettings {\n\t\taccessTokens\n\t\tai\n\t\taudits\n\t\tchatbots\n\t\tcloudConnections\n\t\tglobal\n\t\tnotifications\n\t\tprojects\n\t\tuserManagement\n\t\twebhooks\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:395be562633ea07aa14a2848d97c2662d5a27f2bc3b0306ff8fb328b80c35562":"query ListObservabilityProviders ($after: String, $first: Int, $before: String, $last: Int) {\n\tobservabilityProviders(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... ObservabilityProviderFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment ObservabilityProviderFragment on ObservabilityProvider {\n\tid\n\tname\n\ttype\n\tupdatedAt\n\tinsertedAt\n}\n","sha256:3a5b26fabfbcb1813210e97107878f8cf880da4efec00b5d807733890b99c663":"mutation UpdateDeploymentSettings ($attributes: DeploymentSettingsAttributes!) {\n\tupdateDeploymentSettings(attributes: $attributes) {\n\t\t... DeploymentSettingsFragment\n\t}\n}\nfragment DeploymentSettingsFragment on DeploymentSettings {\n\tid\n\tname\n\tagentHelmValues\n\tagentHelmValuesTemplateable\n\tagentVsn\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tcreateBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tartifactRepository {\n\t\t... GitRepositoryFragment\n\t}\n\tdeployerRepository {\n\t\t... GitRepositoryFragment\n\t}\n\tai {\n\t\t... AISettingsFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment AISettingsFragment on AiSettings {\n\tenabled\n\tprovider\n\topenai {\n\t\tmodel\n\t}\n\tanthropic {\n\t\tmodel\n\t}\n}\n","sha256:3c3311c918109c032947b1352a1b4229f13ac85fc9e6ae86c4feda508041cde9":"mutation CreateAgentRunUpload ($runId: ID!, $session: Upload, $screenRecording: Upload, $patch: Upload) {\n\tcreateAgentRunUpload(runId: $runId, attributes: {session:$session,screenRecording:$screenRecording,patch:$patch}) {\n\t\t... AgentRunUploadFragment\n\t}\n}\nfragment AgentRunUploadFragment on AgentRunUpload {\n\tid\n\tsession\n\tscreenRecording\n\tpatch\n}\n","sha256:3c447e070c14ecaac431c794c559ba5fa606bc15df98c00bcc81e24809315a4f":"mutation DeleteCustomStackRun ($id: ID!) {\n\tdeleteCustomStackRun(id: $id) {\n\t\t... CustomStackRunFragment\n\t}\n}\nfragment CustomStackRunFragment on CustomStackRun {\n\tid\n\tname\n\tstack {\n\t\tid\n\t}\n\tdocumentation\n\tcommands {\n\t\t... StackCommandFragment\n\t}\n\tconfiguration {\n\t\t... PrConfigurationFragment\n\t}\n}\nfragment StackCommandFragment on StackCommand {\n\tcmd\n\targs\n\tdir\n}\nfragment PrConfigurationFragment on PrConfiguration {\n\ttype\n\tname\n\tdefault\n\tdocumentation\n\tlongform\n\tplaceholder\n\toptional\n\tcondition {\n\t\t... PrConfigurationConditionFragment\n\t}\n}\nfragment PrConfigurationConditionFragment on PrConfigurationCondition {\n\toperation\n\tfield\n\tvalue\n}\n","sha256:3cbfaefd04ec40ea1887c27ae44dbbfd5bb148938afe070745b9f35951a4b791":"mutation UpsertCloudConnection ($attributes: CloudConnectionAttributes!) {\n\tupsertCloudConnection(attributes: $attributes) {\n\t\t... CloudConnectionFragment\n\t}\n}\nfragment CloudConnectionFragment on CloudConnection {\n\tid\n\tname\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tprovider\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:3d79eb2a713ca289a10f7515c20da885c422f3c2220a76d6d505e681d8021237":"mutation CreateGitRepository ($attributes: GitAttributes!) {\n\tcreateGitRepository(attributes: $attributes) {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\n","sha256:3e27a6a17cfbb6f6db0ee7472736f01ea3fc36b07c7654011e2f40c4f5405e75":"query GetSentinelTiny ($id: ID!) {\n\tsentinel(id: $id) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:3f077b2e9c8019b17de56676404222eb2dceb3f3cb76f6f40bccf9086217553b":"query GetDeploymentSettings {\n\tdeploymentSettings {\n\t\t... DeploymentSettingsFragment\n\t}\n}\nfragment DeploymentSettingsFragment on DeploymentSettings {\n\tid\n\tname\n\tagentHelmValues\n\tagentHelmValuesTemplateable\n\tagentVsn\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tcreateBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tartifactRepository {\n\t\t... GitRepositoryFragment\n\t}\n\tdeployerRepository {\n\t\t... GitRepositoryFragment\n\t}\n\tai {\n\t\t... AISettingsFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment AISettingsFragment on AiSettings {\n\tenabled\n\tprovider\n\topenai {\n\t\tmodel\n\t}\n\tanthropic {\n\t\tmodel\n\t}\n}\n","sha256:4098e8f5d7c1242768a4330163d671ffefb47a68245a8035f1347543f7c4254d":"mutation UpdateBindingPolicy ($id: ID!, $attributes: BindingPolicyUpdateAttributes!) {\n\tupdateBindingPolicy(id: $id, attributes: $attributes) {\n\t\t... BindingPolicyFragment\n\t}\n}\nfragment BindingPolicyFragment on BindingPolicy {\n\tid\n\ttype\n\tinterval\n\tnextPollAt\n\tmatches {\n\t\tworkbench {\n\t\t\tregexes\n\t\t}\n\t}\n\tpolicy {\n\t\t... TinyPolicyFragment\n\t}\n\tbindPolicy {\n\t\t... TinyPolicyFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyPolicyFragment on Policy {\n\tid\n\tname\n}\n","sha256:413142a1e1214ce0d2a445a9d9912d4b098d01e69aa9d6a35c619c0d05a8a7ed":"mutation CreateWorkbench ($attributes: WorkbenchAttributes!) {\n\tcreateWorkbench(attributes: $attributes) {\n\t\t... WorkbenchFragment\n\t}\n}\nfragment WorkbenchFragment on Workbench {\n\tid\n\tname\n\tdescription\n\tsystemPrompt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tagentRuntime {\n\t\t... TinyAgentRuntimeFragment\n\t}\n\tconfiguration {\n\t\tcoding {\n\t\t\tmode\n\t\t\trepositories\n\t\t}\n\t\tinfrastructure {\n\t\t\tservices\n\t\t\tstacks\n\t\t\tkubernetes\n\t\t}\n\t\tobservability {\n\t\t\tlogs\n\t\t\tmetrics\n\t\t}\n\t}\n\tskills {\n\t\tref {\n\t\t\tref\n\t\t\tfolder\n\t\t\tfiles\n\t\t}\n\t\tfiles\n\t}\n\ttools {\n\t\t... WorkbenchToolFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment TinyAgentRuntimeFragment on AgentRuntime {\n\tid\n\tname\n\ttype\n\tcluster {\n\t\tid\n\t\tname\n\t\thandle\n\t}\n}\nfragment WorkbenchToolFragment on WorkbenchTool {\n\tid\n\tname\n\ttool\n\tcategories\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tmcpServer {\n\t\t... MCPServerFragment\n\t}\n\tcloudConnection {\n\t\t... CloudConnectionFragment\n\t}\n\tscmConnection {\n\t\tid\n\t\tname\n\t\ttype\n\t}\n\tconfiguration {\n\t\thttp {\n\t\t\turl\n\t\t\tmethod\n\t\t\tfunction\n\t\t\theaders {\n\t\t\t\tname\n\t\t\t\tvalue\n\t\t\t}\n\t\t\tbody\n\t\t\tinputSchema\n\t\t}\n\t\telastic {\n\t\t\tindex\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\topensearch {\n\t\t\thost\n\t\t\tindex\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t\tassumeRoleArn\n\t\t\tusePodIdentity\n\t\t}\n\t\tprometheus {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t\tawsSigv4\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t}\n\t\tloki {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tvictoriaLogs {\n\t\t\turl\n\t\t\tusername\n\t\t\taccountId\n\t\t\tprojectId\n\t\t}\n\t\tsplunk {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\ttempo {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tjaeger {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\tdatadog {\n\t\t\tsite\n\t\t}\n\t\tdynatrace {\n\t\t\turl\n\t\t}\n\t\tcloudwatch {\n\t\t\tregion\n\t\t\tlogGroupNames\n\t\t\troleArn\n\t\t\troleSessionName\n\t\t}\n\t\tazure {\n\t\t\tsubscriptionId\n\t\t\ttenantId\n\t\t\tclientId\n\t\t\tprometheusUrl\n\t\t}\n\t\tsentry {\n\t\t\turl\n\t\t}\n\t\tlinear {\n\t\t\turl\n\t\t}\n\t\tslack {\n\t\t\turl\n\t\t}\n\t\tpagerduty {\n\t\t\turl\n\t\t}\n\t\tteams {\n\t\t\tclientId\n\t\t\ttenantId\n\t\t}\n\t\tatlassian {\n\t\t\turl\n\t\t\temail\n\t\t}\n\t\texa {\n\t\t\turl\n\t\t}\n\t\tgithub {\n\t\t\turl\n\t\t\ttoolset\n\t\t\tappId\n\t\t\tinstallationId\n\t\t}\n\t\tgitlab {\n\t\t\turl\n\t\t}\n\t\tbitbucket {\n\t\t\turl\n\t\t}\n\t\tbitbucketDatacenter {\n\t\t\turl\n\t\t}\n\t\tazureDevops {\n\t\t\turl\n\t\t}\n\t\tlambda {\n\t\t\tlambdaArn\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tcloudRun {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tazureFunction {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tdocker {\n\t\t\turl\n\t\t\tprovider\n\t\t\tproxy {\n\t\t\t\turl\n\t\t\t\tnoproxy\n\t\t\t}\n\t\t}\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment MCPServerFragment on McpServer {\n\tid\n\tname\n\turl\n\tauthentication {\n\t\tplural\n\t\theaders {\n\t\t\tname\n\t\t\tvalue\n\t\t}\n\t}\n\tconfirm\n}\nfragment CloudConnectionFragment on CloudConnection {\n\tid\n\tname\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tprovider\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:41e4f03ed32b05e32866db167f922d8092eef5aad38075b2245827da5d9ad23c":"query GetCatalogTiny ($id: ID, $name: String) {\n\tcatalog(id: $id, name: $name) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:42bc0bd98144dabaac9fef4c5455c391a5deb4b9a594273884aa88c59778dd9e":"query GetComplianceReportGenerator ($id: ID, $name: String) {\n\tcomplianceReportGenerator(id: $id, name: $name) {\n\t\t... ComplianceReportGeneratorFragment\n\t}\n}\nfragment ComplianceReportGeneratorFragment on ComplianceReportGenerator {\n\tid\n\tname\n\tformat\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:4356bc0c1808c4f31a7a47247affbdc702e039c898d4fa26a650774b3c9f8338":"query GetAgentRunTodos ($id: ID!) {\n\tagentRun(id: $id) {\n\t\ttodos {\n\t\t\t... AgentTodoFragment\n\t\t}\n\t}\n}\nfragment AgentTodoFragment on AgentTodo {\n\tdescription\n\tdone\n\ttitle\n}\n","sha256:45177eb025b2c2716b361dcca23690272398564a94ba297e06014bcb247068eb":"query GetAgentRun ($id: ID!) {\n\tagentRun(id: $id) {\n\t\t... AgentRunFragment\n\t}\n}\nfragment AgentRunFragment on AgentRun {\n\tid\n\tprompt\n\trepository\n\tbranch\n\theadBranch\n\tmode\n\treviewDepth\n\tlanguage\n\tlanguageVersion\n\ttodos {\n\t\t... AgentTodoFragment\n\t}\n\tprompts {\n\t\t... AgentPromptFragment\n\t}\n\tskills {\n\t\tname\n\t\tdescription\n\t\tcontents\n\t}\n\tstatus\n\tpodReference {\n\t\t... AgentPodReferenceFragment\n\t}\n\terror\n\tanalysis {\n\t\t... AgentAnalysisFragment\n\t}\n\tusage {\n\t\tinputTokens\n\t\toutputTokens\n\t\ttotalTokens\n\t\tcachedTokens\n\t\treasoningTokens\n\t\tinputCost\n\t\toutputCost\n\t\ttotalCost\n\t}\n\tscmCreds {\n\t\t... ScmCredentialFragment\n\t}\n\tpluralCreds {\n\t\t... PluralCredsFragment\n\t}\n\tworkbenchMcpUrl\n\truntime {\n\t\t... AgentRuntimeFragment\n\t}\n\tuser {\n\t\tid\n\t\tname\n\t\temail\n\t}\n\tflow {\n\t\tid\n\t\tname\n\t}\n\tpullRequests {\n\t\t... PullRequestFragment\n\t}\n\tupload {\n\t\t... AgentRunUploadFragment\n\t}\n\tbabysit\n\tbabysitInterval\n\tapproval\n\tapprovedAt\n\tfollowup\n\tfollowupPrUrl\n}\nfragment AgentTodoFragment on AgentTodo {\n\tdescription\n\tdone\n\ttitle\n}\nfragment AgentPromptFragment on AgentPrompt {\n\tid\n\tprompt\n\tseq\n}\nfragment AgentPodReferenceFragment on AgentPodReference {\n\tname\n\tnamespace\n}\nfragment AgentAnalysisFragment on AgentAnalysis {\n\tsummary\n\tanalysis\n\tbullets\n}\nfragment ScmCredentialFragment on ScmCreds {\n\ttoken\n\tusername\n\texaKey\n}\nfragment PluralCredsFragment on PluralCreds {\n\ttoken\n\turl\n}\nfragment AgentRuntimeFragment on AgentRuntime {\n\tid\n\tname\n\ttype\n\taiProxy\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tcreateBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment PullRequestFragment on PullRequest {\n\tid\n\tstatus\n\turl\n\ttitle\n\tcreator\n\tref\n}\nfragment AgentRunUploadFragment on AgentRunUpload {\n\tid\n\tsession\n\tscreenRecording\n\tpatch\n}\n","sha256:45568860a37d05e3d18ecb976ee1f222aed9a5e7a9c0fa7150c1251c9ef61fae":"mutation UpdateGlobalService ($id: ID!, $attributes: GlobalServiceAttributes!) {\n\tupdateGlobalService(id: $id, attributes: $attributes) {\n\t\t... GlobalServiceFragment\n\t}\n}\nfragment GlobalServiceFragment on GlobalService {\n\tid\n\tname\n\tdistro\n\tprovider {\n\t\tid\n\t}\n\tservice {\n\t\tid\n\t}\n\ttags {\n\t\t... ClusterTags\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:45b1488b1732a010d79649d4a39feb42ce81a6842f62fa9f9c801df10136e3f8":"mutation UpsertObservabilityProvider ($attributes: ObservabilityProviderAttributes!) {\n\tupsertObservabilityProvider(attributes: $attributes) {\n\t\t... ObservabilityProviderFragment\n\t}\n}\nfragment ObservabilityProviderFragment on ObservabilityProvider {\n\tid\n\tname\n\ttype\n\tupdatedAt\n\tinsertedAt\n}\n","sha256:45c1ed4b2d99d030559403440ac39f886badb154fcfd4f10e301ea0a056ab824":"query GetPipelineContext ($id: ID!) {\n\tpipelineContext(id: $id) {\n\t\t... PipelineContextFragment\n\t}\n}\nfragment PipelineContextFragment on PipelineContext {\n\tid\n\tcontext\n}\n","sha256:46566d1616e7e91db2d6216bad8fe25d3985df875d9c85d06ecc1d6a9ff761d4":"mutation UpsertNotificationRouter ($attributes: NotificationRouterAttributes!) {\n\tupsertNotificationRouter(attributes: $attributes) {\n\t\t... NotificationRouterFragment\n\t}\n}\nfragment NotificationRouterFragment on NotificationRouter {\n\tid\n\tname\n\tsinks {\n\t\t... NotificationSinkFragment\n\t}\n\tevents\n}\nfragment NotificationSinkFragment on NotificationSink {\n\tid\n\tname\n\ttype\n\tconfiguration {\n\t\t... SinkConfigurationFragment\n\t}\n\tnotificationBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment SinkConfigurationFragment on SinkConfiguration {\n\tid\n\tslack {\n\t\t... UrlSinkConfigurationFragment\n\t}\n\tteams {\n\t\t... UrlSinkConfigurationFragment\n\t}\n}\nfragment UrlSinkConfigurationFragment on UrlSinkConfiguration {\n\turl\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:4664a72f360d14d57f6c374965d8d12a4795cbca5c8af739d02349214a90e3c5":"query GetScmWebhook ($id: ID, $externalId: String) {\n\tscmWebhook(id: $id, externalId: $externalId) {\n\t\t... ScmWebhookFragment\n\t}\n}\nfragment ScmWebhookFragment on ScmWebhook {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\towner\n\ttype\n\turl\n}\n","sha256:4694b939a2c331cca99be014be0d45dd8756b9cfc8a2f7fed2fb0b2ae2b2b176":"query Me {\n\tme {\n\t\tid\n\t\temail\n\t\tname\n\t}\n}\n","sha256:46c0244b8b182a0be59a3619a9147a3686d4894a5403b47f4758ec7456437bbd":"query GetClusterIsoImage ($id: ID, $image: String) {\n\tclusterIsoImage(id: $id, image: $image) {\n\t\t... ClusterIsoImageFragment\n\t}\n}\nfragment ClusterIsoImageFragment on ClusterIsoImage {\n\tid\n\timage\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tregistry\n\tuser\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:4700694be9716b23c92b557c584739bdc4f7a86d0106842f5ade8d21da402adb":"mutation EnqueueWorkbenchPrFollowup ($url: String!, $attributes: QueuedPromptAttributes!) {\n\tenqueueWorkbenchPrFollowup(url: $url, attributes: $attributes) {\n\t\t... QueuedPromptFragment\n\t\tworkbenchJob {\n\t\t\tid\n\t\t\turl\n\t\t}\n\t}\n}\nfragment QueuedPromptFragment on QueuedPrompt {\n\tid\n\tprompt\n\tdequeableAt\n\tworkbenchJob {\n\t\tid\n\t}\n\tuser {\n\t\tid\n\t}\n}\n","sha256:47dc4b6bd1139a41dc445fb76faeb339207d650f0b1b9b6991e56dbc37777de6":"query GetClusterByHandle ($handle: String) {\n\tcluster(handle: $handle) {\n\t\t... ClusterFragment\n\t}\n}\nfragment ClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tinsertedAt\n\tpingedAt\n\tprotect\n\tcurrentVersion\n\tkasUrl\n\tdeletedAt\n\tmetadata\n\tdistro\n\ttags {\n\t\t... ClusterTags\n\t}\n\tprovider {\n\t\t... ClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tstatus {\n\t\t... ClusterStatusFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\tdeletedAt\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tservice {\n\t\t... ServiceDeploymentFragment\n\t}\n\tcredentials {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment ClusterStatusFragment on ClusterStatus {\n\tconditions {\n\t\t... ClusterConditionFragment\n\t}\n}\nfragment ClusterConditionFragment on ClusterCondition {\n\tstatus\n\ttype\n\tmessage\n\treason\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:4889a49b7bc53288977c1d827c7e540ef407641fd1b37faf467ad3aa1fae20eb":"query ListInfrastructureStacks ($after: String, $first: Int, $before: String, $last: Int) {\n\tinfrastructureStacks(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\t... InfrastructureStackEdgeFragment\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment InfrastructureStackEdgeFragment on InfrastructureStackEdge {\n\tnode {\n\t\t... InfrastructureStackFragment\n\t}\n}\nfragment InfrastructureStackFragment on InfrastructureStack {\n\tid\n\tname\n\ttype\n\tvariables\n\tapproval\n\tworkdir\n\tmanageState\n\tdeletedAt\n\tgit {\n\t\t... GitRefFragment\n\t}\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tfiles {\n\t\t... StackFileFragment\n\t}\n\tenvironment {\n\t\t... StackEnvironmentFragment\n\t}\n\toutput {\n\t\t... StackOutputFragment\n\t}\n\tstate {\n\t\t... StackStateFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tpolicyEngine {\n\t\t... PolicyEngineFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment StackConfigurationFragment on StackConfiguration {\n\timage\n\tversion\n\ttag\n\thooks {\n\t\t... StackHookFragment\n\t}\n\tterraform {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tterragrunt {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tpulumi {\n\t\tparallel\n\t\trefresh\n\t\tapproveEmpty\n\t\tstack\n\t\tbackendUrl\n\t}\n\tansible {\n\t\tinventory\n\t\tplaybook\n\t\tprivateKeyFile\n\t\tconfigFile\n\t}\n}\nfragment StackHookFragment on StackHook {\n\tcmd\n\targs\n\tafterStage\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment StackFileFragment on StackFile {\n\tpath\n\tcontent\n}\nfragment StackEnvironmentFragment on StackEnvironment {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackStateFragment on StackState {\n\tid\n\tplan\n\tplanJson\n\tstate {\n\t\t... StackStateResourceFragment\n\t}\n}\nfragment StackStateResourceFragment on StackStateResource {\n\tidentifier\n\tresource\n\tname\n\tconfiguration\n\tlinks\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment PolicyEngineFragment on PolicyEngine {\n\ttype\n\tmaxSeverity\n\tcustomPolicies\n}\n","sha256:4a0f99c5c1ed02f2c004bf4676a192e75731634bfe4e37218dd6a34a1c95b326":"query ServiceAccounts ($after: String, $first: Int, $before: String, $last: Int, $q: String) {\n\tserviceAccounts(after: $after, first: $first, before: $before, last: $last, q: $q) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... UserFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:4bb4613ac3d087f679e786b1d6a491b02d4333ca215fbdfc7233b43ab02d9f66":"query GetStackRunMinimal ($id: ID!) {\n\tstackRun(id: $id) {\n\t\t... StackRunMinimalFragment\n\t}\n}\nfragment StackRunMinimalFragment on StackRun {\n\tid\n\ttype\n\tstatus\n\tapproval\n\tapprovedAt\n\ttarball\n\tworkdir\n\tmanageState\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment StackConfigurationFragment on StackConfiguration {\n\timage\n\tversion\n\ttag\n\thooks {\n\t\t... StackHookFragment\n\t}\n\tterraform {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tterragrunt {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tpulumi {\n\t\tparallel\n\t\trefresh\n\t\tapproveEmpty\n\t\tstack\n\t\tbackendUrl\n\t}\n\tansible {\n\t\tinventory\n\t\tplaybook\n\t\tprivateKeyFile\n\t\tconfigFile\n\t}\n}\nfragment StackHookFragment on StackHook {\n\tcmd\n\targs\n\tafterStage\n}\n","sha256:4bc390a223f5151c820474b4ec055094ecbbc7fb3894f9f48baa6b612ce62161":"query GetAgentRuntime ($id: ID!) {\n\tagentRuntime(id: $id) {\n\t\t... AgentRuntimeFragment\n\t}\n}\nfragment AgentRuntimeFragment on AgentRuntime {\n\tid\n\tname\n\ttype\n\taiProxy\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tcreateBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:4beb4e8b7b5844428fa204b98d19c00119ab761ba14a33d1e40e1cdebdc2365a":"mutation UpdateStackRun ($id: ID!, $attributes: StackRunAttributes!) {\n\tupdateStackRun(id: $id, attributes: $attributes) {\n\t\t... StackRunIdFragment\n\t}\n}\nfragment StackRunIdFragment on StackRun {\n\tid\n}\n","sha256:4cb5452060ebdbaa1e8effa76d240b91af5cfe5e2fcc8780fa6607c298fa725d":"mutation WorkbenchPrFollowup ($url: String!, $attributes: WorkbenchMessageAttributes!) {\n\tworkbenchPrFollowup(url: $url, attributes: $attributes) {\n\t\tid\n\t\tprompt\n\t\ttype\n\t\tstatus\n\t}\n}\n","sha256:4ccc84b66170761dbc355854fbe36f2ad7914720d9026128e860a2ca679caa4b":"mutation AddStackRunLogs ($id: ID!, $attributes: RunLogAttributes!) {\n\taddRunLogs(stepId: $id, attributes: $attributes) {\n\t\tupdatedAt\n\t}\n}\n","sha256:4d391c1b966bca6a1f7392320cb12a42bb9d76c0ea06b9aee89eba25db04b08b":"mutation CreateScmWebhook ($connectionId: ID!, $owner: String!) {\n\tcreateScmWebhook(connectionId: $connectionId, owner: $owner) {\n\t\t... ScmWebhookFragment\n\t}\n}\nfragment ScmWebhookFragment on ScmWebhook {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\towner\n\ttype\n\turl\n}\n","sha256:4e817a16d60e0674f5530ba1e1249840f369e23853ca214d13863f299b8f7d0e":"query GetNotificationSink ($id: ID!) {\n\tnotificationSink(id: $id) {\n\t\t... NotificationSinkFragment\n\t}\n}\nfragment NotificationSinkFragment on NotificationSink {\n\tid\n\tname\n\ttype\n\tconfiguration {\n\t\t... SinkConfigurationFragment\n\t}\n\tnotificationBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment SinkConfigurationFragment on SinkConfiguration {\n\tid\n\tslack {\n\t\t... UrlSinkConfigurationFragment\n\t}\n\tteams {\n\t\t... UrlSinkConfigurationFragment\n\t}\n}\nfragment UrlSinkConfigurationFragment on UrlSinkConfiguration {\n\turl\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:4e9ae0595f3f41aeefd121080484f583351451a9ed9c4a2ac21d24b375d5ae8e":"mutation UpsertComplianceReportGenerator ($attributes: ComplianceReportGeneratorAttributes!) {\n\tupsertComplianceReportGenerator(attributes: $attributes) {\n\t\t... ComplianceReportGeneratorFragment\n\t}\n}\nfragment ComplianceReportGeneratorFragment on ComplianceReportGenerator {\n\tid\n\tname\n\tformat\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:50da97f82323246c4aec944e818a055833aabfcf3e4be9d67e061fe7776ae0df":"mutation UpdateServiceDeploymentWithHandle ($cluster: String!, $name: String!, $attributes: ServiceUpdateAttributes!) {\n\tupdateServiceDeployment(cluster: $cluster, name: $name, attributes: $attributes) {\n\t\t... ServiceDeploymentExtended\n\t}\n}\nfragment ServiceDeploymentExtended on ServiceDeployment {\n\tcluster {\n\t\t... BaseClusterFragment\n\t}\n\terrors {\n\t\t... ErrorFragment\n\t}\n\trevision {\n\t\t... RevisionFragment\n\t}\n\tcontexts {\n\t\t... ServiceContextFragment\n\t}\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n\timports {\n\t\tstack {\n\t\t\t... InfrastructureStackTinyFragment\n\t\t}\n\t\toutputs {\n\t\t\t... StackOutputFragment\n\t\t}\n\t}\n}\nfragment BaseClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tdistro\n\tpingedAt\n\tcurrentVersion\n\tkasUrl\n\tmetadata\n\ttags {\n\t\t... ClusterTags\n\t}\n\tcredential {\n\t\t... ProviderCredentialFragment\n\t}\n\tprovider {\n\t\t... BaseClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment BaseClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment ErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\nfragment RevisionFragment on Revision {\n\tid\n\tsha\n\tgit {\n\t\tref\n\t\tfolder\n\t}\n}\nfragment ServiceContextFragment on ServiceContext {\n\tid\n\tname\n\tconfiguration\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment InfrastructureStackTinyFragment on InfrastructureStack {\n\tid\n\tname\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\n","sha256:51ef8948450e9b14889936618653d431bd618dcbf0f0883aae0c4fb6d537be4a":"mutation UpdatePersona ($id: ID!, $attributes: PersonaAttributes!) {\n\tupdatePersona(id: $id, attributes: $attributes) {\n\t\t... PersonaFragment\n\t}\n}\nfragment PersonaFragment on Persona {\n\tid\n\tname\n\tdescription\n\tconfiguration {\n\t\t... PersonaConfigurationFragment\n\t}\n\tbindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PersonaConfigurationFragment on PersonaConfiguration {\n\tall\n\tdeployments {\n\t\taddOns\n\t\tclusters\n\t\tpipelines\n\t\tproviders\n\t\trepositories\n\t\tservices\n\t}\n\thome {\n\t\tmanager\n\t\tsecurity\n\t}\n\tflows {\n\t\tpermissions\n\t\tstartWorkbenchJob\n\t\tpipelines\n\t\tpreviews\n\t\tworkbenches\n\t}\n\tsidebar {\n\t\taudits\n\t\tflows\n\t\tkubernetes\n\t\tpullRequests\n\t\tsettings\n\t\tbackups\n\t\tstacks\n\t\tworkbenches\n\t\tcd\n\t\tai\n\t}\n\tsettings {\n\t\taccessTokens\n\t\tai\n\t\taudits\n\t\tchatbots\n\t\tcloudConnections\n\t\tglobal\n\t\tnotifications\n\t\tprojects\n\t\tuserManagement\n\t\twebhooks\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:527aebd2d9c8f2c1e9f845c3ab24baf3fdd536ce86a0206e14ec3b05132b3913":"mutation CreateAgentMessage ($runId: ID!, $attributes: AgentMessageAttributes!) {\n\tcreateAgentMessage(runId: $runId, attributes: $attributes) {\n\t\tid\n\t\tmessage\n\t}\n}\n","sha256:54910ed76d4c42ee7339454901466a271af34936ab345c88fb03ee4bdb763a3a":"query ListClustersWithParameters ($after: String, $first: Int, $before: String, $last: Int, $projectId: ID, $tagQuery: TagQuery) {\n\tclusters(after: $after, first: $first, before: $before, last: $last, projectId: $projectId, tagQuery: $tagQuery) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\t... ClusterEdgeFragment\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment ClusterEdgeFragment on ClusterEdge {\n\tnode {\n\t\t... ClusterFragment\n\t}\n}\nfragment ClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tinsertedAt\n\tpingedAt\n\tprotect\n\tcurrentVersion\n\tkasUrl\n\tdeletedAt\n\tmetadata\n\tdistro\n\ttags {\n\t\t... ClusterTags\n\t}\n\tprovider {\n\t\t... ClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tstatus {\n\t\t... ClusterStatusFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\tdeletedAt\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tservice {\n\t\t... ServiceDeploymentFragment\n\t}\n\tcredentials {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment ClusterStatusFragment on ClusterStatus {\n\tconditions {\n\t\t... ClusterConditionFragment\n\t}\n}\nfragment ClusterConditionFragment on ClusterCondition {\n\tstatus\n\ttype\n\tmessage\n\treason\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:54f9977d5571d11d430f63e03d6208e3a305b0e2bc32a06a1ebbebf6b4522fa3":"mutation DeletePreviewEnvironmentTemplate ($id: ID!) {\n\tdeletePreviewEnvironmentTemplate(id: $id) {\n\t\tid\n\t}\n}\n","sha256:5525b1c9bf332e1fc609b70c671ecb9ba088933b87b249f40fa1827d7db494f9":"mutation CreateClusterIsoImage ($attributes: ClusterIsoImageAttributes!) {\n\tcreateClusterIsoImage(attributes: $attributes) {\n\t\t... ClusterIsoImageFragment\n\t}\n}\nfragment ClusterIsoImageFragment on ClusterIsoImage {\n\tid\n\timage\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tregistry\n\tuser\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:556a981320a385d7d9776830051cbf6d2127e4e538b57d3d28d1473aad5dfd33":"mutation DeleteOIDCProvider ($id: ID!, $type: OidcProviderType!) {\n\tdeleteOidcProvider(id: $id, type: $type) {\n\t\t... OIDCProviderFragment\n\t}\n}\nfragment OIDCProviderFragment on OidcProvider {\n\tid\n\tname\n\tdescription\n\tclientId\n\tclientSecret\n\tauthMethod\n\tredirectUris\n\tbindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:56607343e0225629d380152b80a6aeaa8d46a2a306400b6c3f4e396595d33c33":"mutation CreateNamespace ($attributes: ManagedNamespaceAttributes!) {\n\tcreateManagedNamespace(attributes: $attributes) {\n\t\t... ManagedNamespaceFragment\n\t}\n}\nfragment ManagedNamespaceFragment on ManagedNamespace {\n\tid\n\tname\n\tdescription\n\tlabels\n\tannotations\n\tpullSecrets\n\tservice {\n\t\t... ServiceTemplateFragment\n\t}\n\ttarget {\n\t\t... ClusterTargetFragment\n\t}\n\tdeletedAt\n}\nfragment ServiceTemplateFragment on ServiceTemplate {\n\tname\n\tnamespace\n\ttemplated\n\trepositoryId\n\tcontexts\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tsyncConfig {\n\t\t... SyncConfigFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment SyncConfigFragment on SyncConfig {\n\tcreateNamespace\n\tnamespaceMetadata {\n\t\t... NamespaceMetadataFragment\n\t}\n}\nfragment NamespaceMetadataFragment on NamespaceMetadata {\n\tlabels\n\tannotations\n}\nfragment ClusterTargetFragment on ClusterTarget {\n\ttags\n\tdistro\n}\n","sha256:573648a4bd455ab3047a5627bd4188286785ec9d36d9a4a69d525c9999a7ead4":"mutation DeleteFederatedCredential ($id: ID!) {\n\tdeleteFederatedCredential(id: $id) {\n\t\tid\n\t}\n}\n","sha256:57790a6caa298edfdbc1f311bcb963189e1b8a519753c8029225bbc6a9d497ef":"query GetPolicy ($id: ID, $name: String) {\n\tpolicy(id: $id, name: $name) {\n\t\t... PolicyFragment\n\t}\n}\nfragment PolicyFragment on Policy {\n\tid\n\tname\n\ttype\n\tdescription\n\tpolicy\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:580fca816c2a2b2d59eb97ad4f2569218ef0685d0e724a2e0e5de4230db5aa93":"query ListGitRepositories ($cursor: String, $before: String, $last: Int) {\n\tgitRepositories(after: $cursor, first: 100, before: $before, last: $last) {\n\t\tedges {\n\t\t\t... GitRepositoryEdgeFragment\n\t\t}\n\t}\n}\nfragment GitRepositoryEdgeFragment on GitRepositoryEdge {\n\tnode {\n\t\t... GitRepositoryFragment\n\t}\n\tcursor\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\n","sha256:5893cd09a5fbd29b0b6ce255f5e5d50e08ff164d1da91525a124b44619b58d59":"mutation CreateWorkbenchPrompt ($workbenchId: ID!, $attributes: WorkbenchPromptAttributes!) {\n\tcreateWorkbenchPrompt(workbenchId: $workbenchId, attributes: $attributes) {\n\t\tid\n\t}\n}\n","sha256:58ea9b0116be68d9f4da2ac8110d93fde21e86df23bb1ef89b982e5a16aa11ed":"mutation UpdateClusterIsoImage ($id: ID!, $attributes: ClusterIsoImageAttributes!) {\n\tupdateClusterIsoImage(id: $id, attributes: $attributes) {\n\t\t... ClusterIsoImageFragment\n\t}\n}\nfragment ClusterIsoImageFragment on ClusterIsoImage {\n\tid\n\timage\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tregistry\n\tuser\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:594c9c271560981bef35235a0b0e29463631416f6dbf2aab24d2efb5f5395ba7":"query GetBindingPolicy ($id: ID!) {\n\tbindingPolicy(id: $id) {\n\t\t... BindingPolicyFragment\n\t}\n}\nfragment BindingPolicyFragment on BindingPolicy {\n\tid\n\ttype\n\tinterval\n\tnextPollAt\n\tmatches {\n\t\tworkbench {\n\t\t\tregexes\n\t\t}\n\t}\n\tpolicy {\n\t\t... TinyPolicyFragment\n\t}\n\tbindPolicy {\n\t\t... TinyPolicyFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyPolicyFragment on Policy {\n\tid\n\tname\n}\n","sha256:594cb032bccdf14d2cae9ade9f52b20d4b56e9ab6630e299927ee9d2c9801fa5":"mutation CreateWorkbenchCron ($workbenchId: ID!, $attributes: WorkbenchCronAttributes!) {\n\tcreateWorkbenchCron(workbenchId: $workbenchId, attributes: $attributes) {\n\t\t... WorkbenchCronFragment\n\t}\n}\nfragment WorkbenchCronFragment on WorkbenchCron {\n\tid\n\tcrontab\n\tprompt\n\tworkbench {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:5abc2071d4557f9edd21dfc6472a9473d4b1b267eb0c3e3b8437ee1eca0e91cb":"mutation ShareSecret ($attributes: SharedSecretAttributes!) {\n\tshareSecret(attributes: $attributes) {\n\t\tname\n\t\thandle\n\t\tsecret\n\t\tinsertedAt\n\t\tupdatedAt\n\t}\n}\n","sha256:5b27782cd5302beb56aec90bd5e986f67aea75a37582b480e0860ac9242293a0":"query GetIssueWebhook ($id: ID, $name: String) {\n\tissueWebhook(id: $id, name: $name) {\n\t\t... IssueWebhookFragment\n\t}\n}\nfragment IssueWebhookFragment on IssueWebhook {\n\tid\n\tname\n\tprovider\n}\n","sha256:5baa034c528aa2f193811366642087e0b6c75c88fe1a8c5c22bc06ee75d02427":"mutation DeleteServiceContext ($id: ID!) {\n\tdeleteServiceContext(id: $id) {\n\t\t... ServiceContextFragment\n\t}\n}\nfragment ServiceContextFragment on ServiceContext {\n\tid\n\tname\n\tconfiguration\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:5e4949060ce8bce3c89357a76aa82dcd88350b1965a30113a6eeeda2c424aa8d":"query ListNotificationSinks ($after: String, $first: Int, $before: String, $last: Int) {\n\tnotificationSinks(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\t... NotificationSinkEdgeFragment\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment NotificationSinkEdgeFragment on NotificationSinkEdge {\n\tcursor\n\tnode {\n\t\t... NotificationSinkFragment\n\t}\n}\nfragment NotificationSinkFragment on NotificationSink {\n\tid\n\tname\n\ttype\n\tconfiguration {\n\t\t... SinkConfigurationFragment\n\t}\n\tnotificationBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment SinkConfigurationFragment on SinkConfiguration {\n\tid\n\tslack {\n\t\t... UrlSinkConfigurationFragment\n\t}\n\tteams {\n\t\t... UrlSinkConfigurationFragment\n\t}\n}\nfragment UrlSinkConfigurationFragment on UrlSinkConfiguration {\n\turl\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:5e544cd179164a2409b455e448b0eed324f40742a26522fb344a1e997d2a3c80":"mutation DeleteObservabilityWebhook ($id: ID!) {\n\tdeleteObservabilityWebhook(id: $id) {\n\t\t... ObservabilityWebhookFragment\n\t}\n}\nfragment ObservabilityWebhookFragment on ObservabilityWebhook {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\ttype\n\turl\n}\n","sha256:5e94440e7b15f517f56955063550fd90e284a59c002e9121b8df3a45660c99fc":"query GetHelmRepository ($url: String!) {\n\thelmRepository(url: $url) {\n\t\t... HelmRepositoryFragment\n\t}\n}\nfragment HelmRepositoryFragment on HelmRepository {\n\tid\n\tinsertedAt\n\tupdatedAt\n\turl\n\tprovider\n\thealth\n}\n","sha256:60bb829fc0d5411b67d8e260b204b0c3118d75c022ffd368f18f7f9edc85bc5f":"query GetClusterProvider ($id: ID!) {\n\tclusterProvider(id: $id) {\n\t\t... ClusterProviderFragment\n\t}\n}\nfragment ClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\tdeletedAt\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tservice {\n\t\t... ServiceDeploymentFragment\n\t}\n\tcredentials {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\n","sha256:60de6586577e9cb81f7c41bcf3482947a47f5da53ca1e658ea5a5764d6343aac":"mutation CreateScmWebhookPointer ($attributes: ScmWebhookAttributes!) {\n\tcreateScmWebhookPointer(attributes: $attributes) {\n\t\t... ScmWebhookFragment\n\t}\n}\nfragment ScmWebhookFragment on ScmWebhook {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\towner\n\ttype\n\turl\n}\n","sha256:61ccd6c95eca788ecfe7ffe54fdf2bdb203432adc5790785ef82deadce19f219":"mutation DeletePersona ($id: ID!) {\n\tdeletePersona(id: $id) {\n\t\t... PersonaFragment\n\t}\n}\nfragment PersonaFragment on Persona {\n\tid\n\tname\n\tdescription\n\tconfiguration {\n\t\t... PersonaConfigurationFragment\n\t}\n\tbindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PersonaConfigurationFragment on PersonaConfiguration {\n\tall\n\tdeployments {\n\t\taddOns\n\t\tclusters\n\t\tpipelines\n\t\tproviders\n\t\trepositories\n\t\tservices\n\t}\n\thome {\n\t\tmanager\n\t\tsecurity\n\t}\n\tflows {\n\t\tpermissions\n\t\tstartWorkbenchJob\n\t\tpipelines\n\t\tpreviews\n\t\tworkbenches\n\t}\n\tsidebar {\n\t\taudits\n\t\tflows\n\t\tkubernetes\n\t\tpullRequests\n\t\tsettings\n\t\tbackups\n\t\tstacks\n\t\tworkbenches\n\t\tcd\n\t\tai\n\t}\n\tsettings {\n\t\taccessTokens\n\t\tai\n\t\taudits\n\t\tchatbots\n\t\tcloudConnections\n\t\tglobal\n\t\tnotifications\n\t\tprojects\n\t\tuserManagement\n\t\twebhooks\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:633dba4e06a7c190478b1c6d65302b9715ecbe84bc5f5bf1534286fc064c39fe":"query GetStackRunBase ($id: ID!) {\n\tstackRun(id: $id) {\n\t\t... StackRunBaseFragment\n\t}\n}\nfragment StackRunBaseFragment on StackRun {\n\tid\n\ttype\n\tstatus\n\tapproval\n\tapprovedAt\n\ttarball\n\tworkdir\n\tmanageState\n\tvariables\n\tdryRun\n\tstateUrls {\n\t\tterraform {\n\t\t\taddress\n\t\t\tlock\n\t\t\tunlock\n\t\t}\n\t}\n\tpluralCreds {\n\t\turl\n\t\ttoken\n\t}\n\tactor {\n\t\t... UserFragment\n\t}\n\tstack {\n\t\t... InfrastructureStackFragment\n\t}\n\tstate {\n\t\t... StackStateFragment\n\t}\n\tsteps {\n\t\t... RunStepFragment\n\t}\n\tfiles {\n\t\t... StackFileFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n\tenvironment {\n\t\t... StackEnvironmentFragment\n\t}\n\toutput {\n\t\t... StackOutputFragment\n\t}\n\terrors {\n\t\t... ServiceErrorFragment\n\t}\n\tviolations {\n\t\t... StackPolicyViolationFragment\n\t}\n\tpolicyEngine {\n\t\t... PolicyEngineFragment\n\t}\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment InfrastructureStackFragment on InfrastructureStack {\n\tid\n\tname\n\ttype\n\tvariables\n\tapproval\n\tworkdir\n\tmanageState\n\tdeletedAt\n\tgit {\n\t\t... GitRefFragment\n\t}\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tfiles {\n\t\t... StackFileFragment\n\t}\n\tenvironment {\n\t\t... StackEnvironmentFragment\n\t}\n\toutput {\n\t\t... StackOutputFragment\n\t}\n\tstate {\n\t\t... StackStateFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tpolicyEngine {\n\t\t... PolicyEngineFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment StackConfigurationFragment on StackConfiguration {\n\timage\n\tversion\n\ttag\n\thooks {\n\t\t... StackHookFragment\n\t}\n\tterraform {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tterragrunt {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tpulumi {\n\t\tparallel\n\t\trefresh\n\t\tapproveEmpty\n\t\tstack\n\t\tbackendUrl\n\t}\n\tansible {\n\t\tinventory\n\t\tplaybook\n\t\tprivateKeyFile\n\t\tconfigFile\n\t}\n}\nfragment StackHookFragment on StackHook {\n\tcmd\n\targs\n\tafterStage\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment StackFileFragment on StackFile {\n\tpath\n\tcontent\n}\nfragment StackEnvironmentFragment on StackEnvironment {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackStateFragment on StackState {\n\tid\n\tplan\n\tplanJson\n\tstate {\n\t\t... StackStateResourceFragment\n\t}\n}\nfragment StackStateResourceFragment on StackStateResource {\n\tidentifier\n\tresource\n\tname\n\tconfiguration\n\tlinks\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment PolicyEngineFragment on PolicyEngine {\n\ttype\n\tmaxSeverity\n\tcustomPolicies\n}\nfragment RunStepFragment on RunStep {\n\tid\n\tstatus\n\tstage\n\tname\n\tcmd\n\targs\n\trequireApproval\n\tindex\n}\nfragment ServiceErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\nfragment StackPolicyViolationFragment on StackPolicyViolation {\n\tid\n\ttitle\n\tdescription\n\tpolicyId\n\tpolicyModule\n\tpolicyUrl\n\tseverity\n\tresolution\n\tcauses {\n\t\t... StackViolationCauseFragment\n\t}\n}\nfragment StackViolationCauseFragment on StackViolationCause {\n\tstart\n\tend\n\tresource\n\tfilename\n\tlines {\n\t\t... StackViolationCauseLineFragment\n\t}\n}\nfragment StackViolationCauseLineFragment on StackViolationCauseLine {\n\tfirst\n\tlast\n\tcontent\n\tline\n}\n","sha256:6374f2075fc651ba96385d190f73e93a949d38a302c3a520b9aa7b48e14986d2":"mutation DeleteClusterRegistration ($id: ID!) {\n\tdeleteClusterRegistration(id: $id) {\n\t\t... ClusterRegistrationFragment\n\t}\n}\nfragment ClusterRegistrationFragment on ClusterRegistration {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tmachineId\n\tname\n\thandle\n\tmetadata\n\ttags {\n\t\t... ClusterTags\n\t}\n\tcreator {\n\t\t... UserFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:653bd2dca1e546786b5564738f50ef09c21243d55f0a8ff6af6613af43a6839d":"query ListClusterSentinelRunJobs ($after: String, $first: Int, $before: String, $last: Int) {\n\tclusterSentinelRunJobs(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... SentinelRunJobFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment SentinelRunJobFragment on SentinelRunJob {\n\tid\n\tcheck\n\tstatus\n\tformat\n\tusesGit\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\treference {\n\t\tname\n\t\tnamespace\n\t}\n\tsentinelRun {\n\t\t... SentinelRunFragment\n\t}\n\tcluster {\n\t\tid\n\t\tname\n\t\thandle\n\t\tdistro\n\t}\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment SentinelRunFragment on SentinelRun {\n\tid\n\tstatus\n\tsentinel {\n\t\tid\n\t}\n\tchecks {\n\t\t... SentinelCheckFragment\n\t}\n}\nfragment SentinelCheckFragment on SentinelCheck {\n\tid\n\tname\n\ttype\n\truleFile\n\tconfiguration {\n\t\t... SentinelCheckConfigurationFragment\n\t}\n}\nfragment SentinelCheckConfigurationFragment on SentinelCheckConfiguration {\n\tlog {\n\t\t... SentinelCheckLogConfigurationFragment\n\t}\n\tkubernetes {\n\t\t... SentinelCheckKubernetesConfigurationFragment\n\t}\n\tintegrationTest {\n\t\t... SentinelCheckIntegrationTestConfigurationFragment\n\t}\n}\nfragment SentinelCheckLogConfigurationFragment on SentinelCheckLogConfiguration {\n\tnamespaces\n\tquery\n\tclusterId\n\tfacets {\n\t\tkey\n\t\tvalue\n\t}\n\tduration\n}\nfragment SentinelCheckKubernetesConfigurationFragment on SentinelCheckKubernetesConfiguration {\n\tgroup\n\tversion\n\tkind\n\tname\n\tnamespace\n}\nfragment SentinelCheckIntegrationTestConfigurationFragment on SentinelCheckIntegrationTestConfiguration {\n\tdistro\n\ttags\n\trerunFailures\n\trerunFailuresCount\n\tpostrunScript\n\tgotestsum {\n\t\tp\n\t\tparallel\n\t}\n\tjob {\n\t\t... JobSpecFragment\n\t}\n\tcases {\n\t\t... TestCaseConfigurationFragment\n\t}\n\tdefault {\n\t\t... SentinelCheckIntegrationTestDefaultConfigurationFragment\n\t}\n}\nfragment TestCaseConfigurationFragment on SentinelCheckIntegrationTestCaseConfiguration {\n\tname\n\ttype\n\tcoredns {\n\t\tdialFqdns\n\t\tdelay\n\t\tretries\n\t}\n\tloadbalancer {\n\t\tannotations\n\t\tlabels\n\t\tnamePrefix\n\t\tnamespace\n\t\tdnsProbe {\n\t\t\tfqdn\n\t\t\tdelay\n\t\t\tretries\n\t\t}\n\t}\n\tpvc {\n\t\tnamePrefix\n\t\tstorageClass\n\t\tsize\n\t}\n\traw {\n\t\tyaml\n\t\texpectedResult\n\t}\n}\nfragment SentinelCheckIntegrationTestDefaultConfigurationFragment on SentinelCheckIntegrationTestDefaultConfiguration {\n\tignore\n\tnamespaceAnnotations\n\tnamespaceLabels\n\tregistry\n\tresourceAnnotations\n\tresourceLabels\n}\n","sha256:663074674ca5e1837c9a836c9ca87d011e3b82c7aee97c307816f923807f1403":"mutation CancelAgentRun ($id: ID!) {\n\tcancelAgentRun(id: $id) {\n\t\tid\n\t}\n}\n","sha256:672a471c01d8cea255bc474ee2c2b4b0bf19071e5c4cac93dd3d60de6af33c3a":"query ListBindingPolicies ($after: String, $first: Int, $before: String, $last: Int) {\n\tbindingPolicies(after: $after, first: $first, before: $before, last: $last) {\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... BindingPolicyFragment\n\t\t\t}\n\t\t}\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t}\n}\nfragment BindingPolicyFragment on BindingPolicy {\n\tid\n\ttype\n\tinterval\n\tnextPollAt\n\tmatches {\n\t\tworkbench {\n\t\t\tregexes\n\t\t}\n\t}\n\tpolicy {\n\t\t... TinyPolicyFragment\n\t}\n\tbindPolicy {\n\t\t... TinyPolicyFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyPolicyFragment on Policy {\n\tid\n\tname\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\n","sha256:676c685a9306b2973a2921f6f0158ec0e4785aced9987122ea6ef490c93ecfb4":"mutation UpdateWorkbenchCron ($id: ID!, $attributes: WorkbenchCronAttributes!) {\n\tupdateWorkbenchCron(id: $id, attributes: $attributes) {\n\t\t... WorkbenchCronFragment\n\t}\n}\nfragment WorkbenchCronFragment on WorkbenchCron {\n\tid\n\tcrontab\n\tprompt\n\tworkbench {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:68d98b7ac666f84eeb85897ef3519a78ecf00304af9b78e9ae3b4c25532a4982":"mutation DeleteStackDefinition ($id: ID!) {\n\tdeleteStackDefinition(id: $id) {\n\t\t... StackDefinitionFragment\n\t}\n}\nfragment StackDefinitionFragment on StackDefinition {\n\tid\n\tname\n\tdescription\n\tinsertedAt\n\tupdatedAt\n\tconfiguration {\n\t\timage\n\t\ttag\n\t\tversion\n\t\thooks {\n\t\t\tcmd\n\t\t\targs\n\t\t\tafterStage\n\t\t}\n\t}\n\tsteps {\n\t\tcmd\n\t\targs\n\t\tstage\n\t\trequireApproval\n\t}\n\tdeleteSteps {\n\t\tcmd\n\t\targs\n\t\tstage\n\t\trequireApproval\n\t}\n}\n","sha256:68fac5688e28798e6adbf158c70679ee2e327893121a12db46a02362ac47b68c":"mutation UpdateUser ($id: ID, $attributes: UserAttributes!) {\n\tupdateUser(id: $id, attributes: $attributes) {\n\t\t... UserFragment\n\t}\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:6c6860b13a9d0aaacfd7eb47b2c1a993768f0389f5fbe197efa64971d2e232df":"query ListHelmRepositories ($after: String, $first: Int, $before: String, $last: Int) {\n\thelmRepositories(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... HelmRepositoryFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment HelmRepositoryFragment on HelmRepository {\n\tid\n\tinsertedAt\n\tupdatedAt\n\turl\n\tprovider\n\thealth\n}\n","sha256:6cfac09e011997d8e43d520ffb21c7f2742981c3a59ba78e9274cfc750f3a991":"query ListScmWebhooks ($after: String, $before: String, $first: Int, $last: Int) {\n\tscmWebhooks(after: $after, before: $before, first: $first, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... ScmWebhookFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment ScmWebhookFragment on ScmWebhook {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\towner\n\ttype\n\turl\n}\n","sha256:6fb3a6d7b695c4168b976dedfcf9a53c6ab7783770a26d4f25fa705153dae6f0":"mutation RegisterRuntimeServices ($services: [RuntimeServiceAttributes], $layout: OperationalLayoutAttributes, $deprecated: [DeprecatedCustomResourceAttributes], $serviceId: ID) {\n\tregisterRuntimeServices(services: $services, layout: $layout, deprecated: $deprecated, serviceId: $serviceId)\n}\n","sha256:6fcb5448dc8bc96c565dab0bf002bb9bcb82ad8785717de59ad14a80e4d4e178":"query GetScmConnectionByName ($name: String!) {\n\tscmConnection(name: $name) {\n\t\t... ScmConnectionFragment\n\t}\n}\nfragment ScmConnectionFragment on ScmConnection {\n\tid\n\tname\n\tapiUrl\n\tbaseUrl\n\ttype\n\tusername\n\tinsertedAt\n\tupdatedAt\n}\n","sha256:6fe58e154caaddb59485ac72d26e0ffee5fb864c6e1a45b31b90082830872995":"mutation DetachServiceDeployment ($id: ID!) {\n\tdetachServiceDeployment(id: $id) {\n\t\t... ServiceDeploymentFragment\n\t}\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\n","sha256:6fec0d284e2f2884e65a4de72ee9ed2673b92adfc0b19e73d970364aa3410d79":"mutation CreateCluster ($attributes: ClusterAttributes!) {\n\tcreateCluster(attributes: $attributes) {\n\t\tdeployToken\n\t\t... ClusterFragment\n\t}\n}\nfragment ClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tinsertedAt\n\tpingedAt\n\tprotect\n\tcurrentVersion\n\tkasUrl\n\tdeletedAt\n\tmetadata\n\tdistro\n\ttags {\n\t\t... ClusterTags\n\t}\n\tprovider {\n\t\t... ClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tstatus {\n\t\t... ClusterStatusFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\tdeletedAt\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tservice {\n\t\t... ServiceDeploymentFragment\n\t}\n\tcredentials {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment ClusterStatusFragment on ClusterStatus {\n\tconditions {\n\t\t... ClusterConditionFragment\n\t}\n}\nfragment ClusterConditionFragment on ClusterCondition {\n\tstatus\n\ttype\n\tmessage\n\treason\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:7022709816c360b28f659e86985f545a415f48e96b2f30ef866ea3ae97f39fa9":"query GetClusterBackup ($id: ID, $clusterId: ID, $namespace: String, $name: String) {\n\tclusterBackup(id: $id, clusterId: $clusterId, namespace: $namespace, name: $name) {\n\t\t... ClusterBackupFragment\n\t}\n}\nfragment ClusterBackupFragment on ClusterBackup {\n\tid\n\tname\n\tcluster {\n\t\tid\n\t}\n\tgarbageCollected\n}\n","sha256:705e50fb64758842c60cce987d7ab0eb08cf21df44eaf506ee141324260481bb":"query GetAgentRunMinimal ($id: ID!) {\n\tagentRun(id: $id) {\n\t\t... AgentRunMinimalFragment\n\t}\n}\nfragment AgentRunMinimalFragment on AgentRun {\n\tid\n\tprompt\n\trepository\n\tbranch\n\theadBranch\n\truntime {\n\t\ttype\n\t}\n\tpullRequests {\n\t\tid\n\t\tstatus\n\t\turl\n\t\ttitle\n\t\tref\n\t}\n\tupload {\n\t\tsession\n\t\tpatch\n\t\tscreenRecording\n\t}\n}\n","sha256:70dd24813b99b33f0bd76a916a653bd40aefb7b4d1f950c1c6cfb349f5e064c7":"mutation DeleteCatalog ($id: ID!) {\n\tdeleteCatalog(id: $id) {\n\t\t... CatalogFragment\n\t}\n}\nfragment CatalogFragment on Catalog {\n\tid\n\tname\n\tdescription\n\tcategory\n\tauthor\n\tproject {\n\t\t... ProjectFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment ProjectFragment on Project {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\tdefault\n\tdescription\n\tdisableInsights\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:71211688078517de55856c131211f78a9b5f707fc2c3857726fd59a81123b2b9":"query GetWorkbenchToolTiny ($id: ID, $name: String) {\n\tworkbenchTool(id: $id, name: $name) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:75340df6d83e5cb03878a6914da84328432f6879320e6083d0cf6fd1ba1e0a35":"mutation RollbackService ($id: ID!, $revisionId: ID!) {\n\trollbackService(id: $id, revisionId: $revisionId) {\n\t\t... ServiceDeploymentFragment\n\t}\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\n","sha256:782b1bd26714e00f7908991d5ed8af1beee25bbdb038e0885378d17a277b1929":"query GetClusterProviderByCloud ($cloud: String!) {\n\tclusterProvider(cloud: $cloud) {\n\t\t... ClusterProviderFragment\n\t}\n}\nfragment ClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\tdeletedAt\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tservice {\n\t\t... ServiceDeploymentFragment\n\t}\n\tcredentials {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\n","sha256:78dbebdbef637a8412788971739ba9931f0eae3ae63eb7b0d0d75902620521fc":"query GetCustomStackRun ($id: ID!) {\n\tcustomStackRun(id: $id) {\n\t\t... CustomStackRunFragment\n\t}\n}\nfragment CustomStackRunFragment on CustomStackRun {\n\tid\n\tname\n\tstack {\n\t\tid\n\t}\n\tdocumentation\n\tcommands {\n\t\t... StackCommandFragment\n\t}\n\tconfiguration {\n\t\t... PrConfigurationFragment\n\t}\n}\nfragment StackCommandFragment on StackCommand {\n\tcmd\n\targs\n\tdir\n}\nfragment PrConfigurationFragment on PrConfiguration {\n\ttype\n\tname\n\tdefault\n\tdocumentation\n\tlongform\n\tplaceholder\n\toptional\n\tcondition {\n\t\t... PrConfigurationConditionFragment\n\t}\n}\nfragment PrConfigurationConditionFragment on PrConfigurationCondition {\n\toperation\n\tfield\n\tvalue\n}\n","sha256:7a35b4446780f4560edd416760772e7f4d9bd8193e64e39d945a0ca57e6d5799":"mutation UpdateAgentMessage ($id: ID!, $attributes: AgentMessageAttributes!) {\n\tupdateAgentMessage(id: $id, attributes: $attributes) {\n\t\tid\n\t\tmessage\n\t}\n}\n","sha256:7a526118f0ec20a508e94f419446156ab87b99bd9ff5700c13cf8612f6e8be8d":"query GetObserver ($id: ID, $name: String) {\n\tobserver(id: $id, name: $name) {\n\t\t... ObserverFragment\n\t}\n}\nfragment ObserverFragment on Observer {\n\tid\n\tname\n\tstatus\n\tcrontab\n\ttarget {\n\t\t... ObserverTargetFragment\n\t}\n\tactions {\n\t\t... ObserverActionFragment\n\t}\n\tproject {\n\t\t... ProjectFragment\n\t}\n\terrors {\n\t\t... ErrorFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment ObserverTargetFragment on ObserverTarget {\n\thelm {\n\t\t... ObserverHelmRepoFragment\n\t}\n\toci {\n\t\t... ObserverOciRepoFragment\n\t}\n}\nfragment ObserverHelmRepoFragment on ObserverHelmRepo {\n\turl\n\tchart\n\tprovider\n}\nfragment ObserverOciRepoFragment on ObserverOciRepo {\n\turl\n\tprovider\n}\nfragment ObserverActionFragment on ObserverAction {\n\ttype\n\tconfiguration {\n\t\t... ObserverActionConfigurationFragment\n\t}\n}\nfragment ObserverActionConfigurationFragment on ObserverActionConfiguration {\n\tpr {\n\t\t... ObserverPrActionFragment\n\t}\n\tpipeline {\n\t\t... ObserverPipelineActionFragment\n\t}\n}\nfragment ObserverPrActionFragment on ObserverPrAction {\n\tautomationId\n\trepository\n\tbranchTemplate\n\tcontext\n}\nfragment ObserverPipelineActionFragment on ObserverPipelineAction {\n\tpipelineId\n\tcontext\n}\nfragment ProjectFragment on Project {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\tdefault\n\tdescription\n\tdisableInsights\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment ErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\n","sha256:7bb99a71a060105e0369bd65dfbef40cfaefd3bf24f3a20be6bba8ebe0f5d151":"query ListPolicies ($after: String, $first: Int, $before: String, $last: Int, $projectId: ID, $q: String) {\n\tpolicies(after: $after, first: $first, before: $before, last: $last, projectId: $projectId, q: $q) {\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... PolicyFragment\n\t\t\t}\n\t\t}\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t}\n}\nfragment PolicyFragment on Policy {\n\tid\n\tname\n\ttype\n\tdescription\n\tpolicy\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\n","sha256:7bf259965e095c6f562ceabf64b53c96f2af8c279f8f585ae46150d432e15177":"mutation DeleteAgentRuntime ($id: ID!) {\n\tdeleteAgentRuntime(id: $id) {\n\t\tid\n\t}\n}\n","sha256:7c28e35a508edb6910ec148143db545bf6ceae2d3f89d99dd12108d55cbace2e":"query ListProviders {\n\tclusterProviders(first: 100) {\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... ClusterProviderFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment ClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\tdeletedAt\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tservice {\n\t\t... ServiceDeploymentFragment\n\t}\n\tcredentials {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\n","sha256:7d305588dda783d061b91186810d26c83dc96ce88ca6eadd3dc0aeb8e5c2b1e9":"query GetObservabilityWebhook ($id: ID, $name: String) {\n\tobservabilityWebhook(id: $id, name: $name) {\n\t\t... ObservabilityWebhookFragment\n\t}\n}\nfragment ObservabilityWebhookFragment on ObservabilityWebhook {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\ttype\n\turl\n}\n","sha256:7e2b1754c1a0096773632c812c86d3e0e73c8bd0ff4e4de4e783b3afc545c212":"query GetTinyCluster ($id: ID) {\n\tcluster(id: $id) {\n\t\t... TinyClusterFragment\n\t}\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:7fc3c4c26cd7f027d90210964398854eebe7e5ce7bb518f4c8839505a4b4fcb3":"mutation AddGroupMember ($groupId: ID!, $userId: ID!) {\n\tcreateGroupMember(groupId: $groupId, userId: $userId) {\n\t\t... GroupMemberFragment\n\t}\n}\nfragment GroupMemberFragment on GroupMember {\n\tid\n\tuser {\n\t\tid\n\t}\n\tgroup {\n\t\tid\n\t}\n}\n","sha256:806453fdd48b0a0eae70fc366b758b34c1fb7290ff39b393794e5181fe7664ae":"query GetGitRepositoryID ($url: String) {\n\tgitRepository(url: $url) {\n\t\t... {\n\t\t\tid\n\t\t}\n\t}\n}\n","sha256:808ebe4bf5034aa84eae9f40e3b4046bd9d0961b9c6c15acc96c29a5c2ba961b":"mutation CreateGlobalService ($attributes: GlobalServiceAttributes!) {\n\tcreateGlobalService(attributes: $attributes) {\n\t\t... GlobalServiceFragment\n\t}\n}\nfragment GlobalServiceFragment on GlobalService {\n\tid\n\tname\n\tdistro\n\tprovider {\n\t\tid\n\t}\n\tservice {\n\t\tid\n\t}\n\ttags {\n\t\t... ClusterTags\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:812b636e5bfc0c485832996d9aed1a5826dc9a1d48e1b65ff68774f2c97e89c9":"query ListClusterServices {\n\tclusterServices {\n\t\t... ServiceDeploymentBaseFragment\n\t}\n}\nfragment ServiceDeploymentBaseFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\n","sha256:825ebd6ac166846c04631143991b97b8170a7a9d266ebb1c9331a9976a20d30f":"query GetClusterGates {\n\tclusterGates {\n\t\t... PipelineGateFragment\n\t}\n}\nfragment PipelineGateFragment on PipelineGate {\n\tid\n\tname\n\ttype\n\tstate\n\tupdatedAt\n\tspec {\n\t\t... GateSpecFragment\n\t}\n\tstatus {\n\t\t... GateStatusFragment\n\t}\n}\nfragment GateSpecFragment on GateSpec {\n\tjob {\n\t\t... JobSpecFragment\n\t}\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment GateStatusFragment on GateStatus {\n\tjobRef {\n\t\t... JobReferenceFragment\n\t}\n}\nfragment JobReferenceFragment on JobReference {\n\tname\n\tnamespace\n}\n","sha256:82a9426820e1787f567e38edbce7759b05900a1ec3721d17f883dd62ebc6642c":"query GetPrAutomation ($id: ID!) {\n\tprAutomation(id: $id) {\n\t\t... PrAutomationFragment\n\t}\n}\nfragment PrAutomationFragment on PrAutomation {\n\tid\n\tname\n\ttitle\n\taddon\n\tmessage\n\tidentifier\n\tinsertedAt\n\tupdatedAt\n}\n","sha256:836475a72bf4f3ebb0e1fcd945018865862b53cb7616f62ba213c2fd5fe69d05":"query ListViolationStatistics ($field: ConstraintViolationField!) {\n\tviolationStatistics(field: $field) {\n\t\t... ViolationStatisticFragment\n\t}\n}\nfragment ViolationStatisticFragment on ViolationStatistic {\n\tvalue\n\tviolations\n\tcount\n}\n","sha256:83b4333debfd340763ef190910485c333c6dd49d47110057df60be57da770157":"mutation DeleteNotificationRouter ($id: ID!) {\n\tdeleteNotificationRouter(id: $id) {\n\t\t... NotificationRouterFragment\n\t}\n}\nfragment NotificationRouterFragment on NotificationRouter {\n\tid\n\tname\n\tsinks {\n\t\t... NotificationSinkFragment\n\t}\n\tevents\n}\nfragment NotificationSinkFragment on NotificationSink {\n\tid\n\tname\n\ttype\n\tconfiguration {\n\t\t... SinkConfigurationFragment\n\t}\n\tnotificationBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment SinkConfigurationFragment on SinkConfiguration {\n\tid\n\tslack {\n\t\t... UrlSinkConfigurationFragment\n\t}\n\tteams {\n\t\t... UrlSinkConfigurationFragment\n\t}\n}\nfragment UrlSinkConfigurationFragment on UrlSinkConfiguration {\n\turl\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:843362e6b99d63d6a55e850db9f69b9b09f86278c3eb97dca4f720100546283d":"query GetMCPServer ($id: ID!) {\n\tmcpServer(id: $id) {\n\t\t... MCPServerFragment\n\t}\n}\nfragment MCPServerFragment on McpServer {\n\tid\n\tname\n\turl\n\tauthentication {\n\t\tplural\n\t\theaders {\n\t\t\tname\n\t\t\tvalue\n\t\t}\n\t}\n\tconfirm\n}\n","sha256:851d296b63f9c0c937e82a454781e76d918b708a27c3e264069902f71eff5d6d":"mutation CreateStack ($attributes: StackAttributes!) {\n\tcreateStack(attributes: $attributes) {\n\t\t... InfrastructureStackFragment\n\t}\n}\nfragment InfrastructureStackFragment on InfrastructureStack {\n\tid\n\tname\n\ttype\n\tvariables\n\tapproval\n\tworkdir\n\tmanageState\n\tdeletedAt\n\tgit {\n\t\t... GitRefFragment\n\t}\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tfiles {\n\t\t... StackFileFragment\n\t}\n\tenvironment {\n\t\t... StackEnvironmentFragment\n\t}\n\toutput {\n\t\t... StackOutputFragment\n\t}\n\tstate {\n\t\t... StackStateFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tpolicyEngine {\n\t\t... PolicyEngineFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment StackConfigurationFragment on StackConfiguration {\n\timage\n\tversion\n\ttag\n\thooks {\n\t\t... StackHookFragment\n\t}\n\tterraform {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tterragrunt {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tpulumi {\n\t\tparallel\n\t\trefresh\n\t\tapproveEmpty\n\t\tstack\n\t\tbackendUrl\n\t}\n\tansible {\n\t\tinventory\n\t\tplaybook\n\t\tprivateKeyFile\n\t\tconfigFile\n\t}\n}\nfragment StackHookFragment on StackHook {\n\tcmd\n\targs\n\tafterStage\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment StackFileFragment on StackFile {\n\tpath\n\tcontent\n}\nfragment StackEnvironmentFragment on StackEnvironment {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackStateFragment on StackState {\n\tid\n\tplan\n\tplanJson\n\tstate {\n\t\t... StackStateResourceFragment\n\t}\n}\nfragment StackStateResourceFragment on StackStateResource {\n\tidentifier\n\tresource\n\tname\n\tconfiguration\n\tlinks\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment PolicyEngineFragment on PolicyEngine {\n\ttype\n\tmaxSeverity\n\tcustomPolicies\n}\n","sha256:857bac887a978a2ac4f093331e7384dfb57425924b0a1bd5a09ffa9e04844819":"mutation UpdateOIDCProvider ($id: ID!, $type: OidcProviderType!, $attributes: OidcProviderAttributes!) {\n\tupdateOidcProvider(id: $id, type: $type, attributes: $attributes) {\n\t\t... OIDCProviderFragment\n\t}\n}\nfragment OIDCProviderFragment on OidcProvider {\n\tid\n\tname\n\tdescription\n\tclientId\n\tclientSecret\n\tauthMethod\n\tredirectUris\n\tbindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:85df9e68d83e11a9f9321348538306287166a75d4ab75ab2b48855e80d8b39d2":"mutation DeleteBootstrapToken ($id: ID!) {\n\tdeleteBootstrapToken(id: $id) {\n\t\tid\n\t}\n}\n","sha256:8670eabfee3682802dbfd5c68f5e72b37119ec31e909f425655206ed9d5a18ec":"mutation UpdateFederatedCredential ($id: ID!, $attributes: FederatedCredentialAttributes!) {\n\tupdateFederatedCredential(id: $id, attributes: $attributes) {\n\t\t... FederatedCredentialFragment\n\t}\n}\nfragment FederatedCredentialFragment on FederatedCredential {\n\tid\n\tclaimsLike\n\tissuer\n\tscopes\n\tinsertedAt\n\tupdatedAt\n\tuser {\n\t\tid\n\t\tname\n\t\temail\n\t}\n}\n","sha256:86eb778bec88542b242c634b49a9073f61d1a6ea3c569519f7ac3281203bdf6f":"mutation DeleteBindingPolicy ($id: ID!) {\n\tdeleteBindingPolicy(id: $id) {\n\t\t... BindingPolicyFragment\n\t}\n}\nfragment BindingPolicyFragment on BindingPolicy {\n\tid\n\ttype\n\tinterval\n\tnextPollAt\n\tmatches {\n\t\tworkbench {\n\t\t\tregexes\n\t\t}\n\t}\n\tpolicy {\n\t\t... TinyPolicyFragment\n\t}\n\tbindPolicy {\n\t\t... TinyPolicyFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyPolicyFragment on Policy {\n\tid\n\tname\n}\n","sha256:891cd1d4fbd8a953702cf2564d83f04e8bc76746d689988b9200ec64b2553336":"mutation RunSentinel ($id: ID!, $overrides: SentinelRunOverrides) {\n\trunSentinel(id: $id, overrides: $overrides) {\n\t\t... SentinelRunFragment\n\t}\n}\nfragment SentinelRunFragment on SentinelRun {\n\tid\n\tstatus\n\tsentinel {\n\t\tid\n\t}\n\tchecks {\n\t\t... SentinelCheckFragment\n\t}\n}\nfragment SentinelCheckFragment on SentinelCheck {\n\tid\n\tname\n\ttype\n\truleFile\n\tconfiguration {\n\t\t... SentinelCheckConfigurationFragment\n\t}\n}\nfragment SentinelCheckConfigurationFragment on SentinelCheckConfiguration {\n\tlog {\n\t\t... SentinelCheckLogConfigurationFragment\n\t}\n\tkubernetes {\n\t\t... SentinelCheckKubernetesConfigurationFragment\n\t}\n\tintegrationTest {\n\t\t... SentinelCheckIntegrationTestConfigurationFragment\n\t}\n}\nfragment SentinelCheckLogConfigurationFragment on SentinelCheckLogConfiguration {\n\tnamespaces\n\tquery\n\tclusterId\n\tfacets {\n\t\tkey\n\t\tvalue\n\t}\n\tduration\n}\nfragment SentinelCheckKubernetesConfigurationFragment on SentinelCheckKubernetesConfiguration {\n\tgroup\n\tversion\n\tkind\n\tname\n\tnamespace\n}\nfragment SentinelCheckIntegrationTestConfigurationFragment on SentinelCheckIntegrationTestConfiguration {\n\tdistro\n\ttags\n\trerunFailures\n\trerunFailuresCount\n\tpostrunScript\n\tgotestsum {\n\t\tp\n\t\tparallel\n\t}\n\tjob {\n\t\t... JobSpecFragment\n\t}\n\tcases {\n\t\t... TestCaseConfigurationFragment\n\t}\n\tdefault {\n\t\t... SentinelCheckIntegrationTestDefaultConfigurationFragment\n\t}\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment TestCaseConfigurationFragment on SentinelCheckIntegrationTestCaseConfiguration {\n\tname\n\ttype\n\tcoredns {\n\t\tdialFqdns\n\t\tdelay\n\t\tretries\n\t}\n\tloadbalancer {\n\t\tannotations\n\t\tlabels\n\t\tnamePrefix\n\t\tnamespace\n\t\tdnsProbe {\n\t\t\tfqdn\n\t\t\tdelay\n\t\t\tretries\n\t\t}\n\t}\n\tpvc {\n\t\tnamePrefix\n\t\tstorageClass\n\t\tsize\n\t}\n\traw {\n\t\tyaml\n\t\texpectedResult\n\t}\n}\nfragment SentinelCheckIntegrationTestDefaultConfigurationFragment on SentinelCheckIntegrationTestDefaultConfiguration {\n\tignore\n\tnamespaceAnnotations\n\tnamespaceLabels\n\tregistry\n\tresourceAnnotations\n\tresourceLabels\n}\n","sha256:897d62511eba988b849bd933c4ecb4586c6cf041aa66da4bc33967b3304da588":"mutation DeleteProject ($id: ID!) {\n\tdeleteProject(id: $id) {\n\t\t... ProjectFragment\n\t}\n}\nfragment ProjectFragment on Project {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\tdefault\n\tdescription\n\tdisableInsights\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:8c0caea577e1915120cdd7b5231a7f1a58eb0c339d1aaf024f8aa120902a7442":"mutation CreateClusterBackup ($attributes: BackupAttributes!) {\n\tcreateClusterBackup(attributes: $attributes) {\n\t\t... ClusterBackupFragment\n\t}\n}\nfragment ClusterBackupFragment on ClusterBackup {\n\tid\n\tname\n\tcluster {\n\t\tid\n\t}\n\tgarbageCollected\n}\n","sha256:8c44743ad7a874271ddb162b00027395262b0ac38d0322a4f09afe48f5c442e2":"mutation UpdateAgentRunAnalysis ($id: ID!, $attributes: AgentAnalysisAttributes!) {\n\tupdateAgentRunAnalysis(id: $id, attributes: $attributes) {\n\t\t... AgentRunBaseFragment\n\t}\n}\nfragment AgentRunBaseFragment on AgentRun {\n\tid\n\tprompt\n\trepository\n\tmode\n\tlanguage\n\tlanguageVersion\n\ttodos {\n\t\t... AgentTodoFragment\n\t}\n}\nfragment AgentTodoFragment on AgentTodo {\n\tdescription\n\tdone\n\ttitle\n}\n","sha256:8ca4f731dfc18a56ba661dcbba9c673f55aee501b263dbf655e67788eefec1eb":"query ListClusterMinimalStacks ($after: String, $first: Int, $before: String, $last: Int) {\n\tclusterStackRuns(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\t... MinimalStackRunEdgeFragment\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment MinimalStackRunEdgeFragment on StackRunEdge {\n\tnode {\n\t\t... StackRunMinimalFragment\n\t}\n}\nfragment StackRunMinimalFragment on StackRun {\n\tid\n\ttype\n\tstatus\n\tapproval\n\tapprovedAt\n\ttarball\n\tworkdir\n\tmanageState\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment StackConfigurationFragment on StackConfiguration {\n\timage\n\tversion\n\ttag\n\thooks {\n\t\t... StackHookFragment\n\t}\n\tterraform {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tterragrunt {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tpulumi {\n\t\tparallel\n\t\trefresh\n\t\tapproveEmpty\n\t\tstack\n\t\tbackendUrl\n\t}\n\tansible {\n\t\tinventory\n\t\tplaybook\n\t\tprivateKeyFile\n\t\tconfigFile\n\t}\n}\nfragment StackHookFragment on StackHook {\n\tcmd\n\targs\n\tafterStage\n}\n","sha256:8d30669f0383e625d9b639af9cf66ccdb9458850496a8cbf656780348b7c7766":"mutation UpdateWorkbenchWebhook ($id: ID!, $attributes: WorkbenchWebhookAttributes!) {\n\tupdateWorkbenchWebhook(id: $id, attributes: $attributes) {\n\t\t... WorkbenchWebhookFragment\n\t}\n}\nfragment WorkbenchWebhookFragment on WorkbenchWebhook {\n\tid\n\tname\n\tprompt\n\tpriority\n\tmatches {\n\t\tregex\n\t\tsubstring\n\t\tcaseInsensitive\n\t}\n\twebhook {\n\t\tid\n\t\tname\n\t}\n\tissueWebhook {\n\t\tid\n\t\tname\n\t}\n\tworkbench {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:8d31d95b1fa3ae035864ae7aab5e31a31347f5c3a9654ea25237813800fb2c6c":"query GetSentinel ($id: ID!) {\n\tsentinel(id: $id) {\n\t\t... SentinelFragment\n\t}\n}\nfragment SentinelFragment on Sentinel {\n\tid\n\tname\n\tdescription\n\tgit {\n\t\t... GitRefFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tchecks {\n\t\t... SentinelCheckFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment SentinelCheckFragment on SentinelCheck {\n\tid\n\tname\n\ttype\n\truleFile\n\tconfiguration {\n\t\t... SentinelCheckConfigurationFragment\n\t}\n}\nfragment SentinelCheckConfigurationFragment on SentinelCheckConfiguration {\n\tlog {\n\t\t... SentinelCheckLogConfigurationFragment\n\t}\n\tkubernetes {\n\t\t... SentinelCheckKubernetesConfigurationFragment\n\t}\n\tintegrationTest {\n\t\t... SentinelCheckIntegrationTestConfigurationFragment\n\t}\n}\nfragment SentinelCheckLogConfigurationFragment on SentinelCheckLogConfiguration {\n\tnamespaces\n\tquery\n\tclusterId\n\tfacets {\n\t\tkey\n\t\tvalue\n\t}\n\tduration\n}\nfragment SentinelCheckKubernetesConfigurationFragment on SentinelCheckKubernetesConfiguration {\n\tgroup\n\tversion\n\tkind\n\tname\n\tnamespace\n}\nfragment SentinelCheckIntegrationTestConfigurationFragment on SentinelCheckIntegrationTestConfiguration {\n\tdistro\n\ttags\n\trerunFailures\n\trerunFailuresCount\n\tpostrunScript\n\tgotestsum {\n\t\tp\n\t\tparallel\n\t}\n\tjob {\n\t\t... JobSpecFragment\n\t}\n\tcases {\n\t\t... TestCaseConfigurationFragment\n\t}\n\tdefault {\n\t\t... SentinelCheckIntegrationTestDefaultConfigurationFragment\n\t}\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment TestCaseConfigurationFragment on SentinelCheckIntegrationTestCaseConfiguration {\n\tname\n\ttype\n\tcoredns {\n\t\tdialFqdns\n\t\tdelay\n\t\tretries\n\t}\n\tloadbalancer {\n\t\tannotations\n\t\tlabels\n\t\tnamePrefix\n\t\tnamespace\n\t\tdnsProbe {\n\t\t\tfqdn\n\t\t\tdelay\n\t\t\tretries\n\t\t}\n\t}\n\tpvc {\n\t\tnamePrefix\n\t\tstorageClass\n\t\tsize\n\t}\n\traw {\n\t\tyaml\n\t\texpectedResult\n\t}\n}\nfragment SentinelCheckIntegrationTestDefaultConfigurationFragment on SentinelCheckIntegrationTestDefaultConfiguration {\n\tignore\n\tnamespaceAnnotations\n\tnamespaceLabels\n\tregistry\n\tresourceAnnotations\n\tresourceLabels\n}\n","sha256:8e8fd8e272f046273e47c808d99bd0dd91b158e3c23175488c07482dc99b3a2b":"mutation UpsertNotificationSink ($attributes: NotificationSinkAttributes!) {\n\tupsertNotificationSink(attributes: $attributes) {\n\t\t... NotificationSinkFragment\n\t}\n}\nfragment NotificationSinkFragment on NotificationSink {\n\tid\n\tname\n\ttype\n\tconfiguration {\n\t\t... SinkConfigurationFragment\n\t}\n\tnotificationBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment SinkConfigurationFragment on SinkConfiguration {\n\tid\n\tslack {\n\t\t... UrlSinkConfigurationFragment\n\t}\n\tteams {\n\t\t... UrlSinkConfigurationFragment\n\t}\n}\nfragment UrlSinkConfigurationFragment on UrlSinkConfiguration {\n\turl\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:8f12d8cad53529ad1067b2ad72f6dc4ca662168c0268c3bbc027db8f662ef925":"query GetAgentUrl ($id: ID!) {\n\tcluster(id: $id) {\n\t\tagentUrl\n\t}\n}\n","sha256:8fa6f7a3f1ca23ce9e7d886bb84c023f4be92f923d057ce7bd97e95a41e541a0":"query GetDeploymentSettingsMinimal {\n\tdeploymentSettings {\n\t\t... DeploymentSettingsMinimalFragment\n\t}\n}\nfragment DeploymentSettingsMinimalFragment on DeploymentSettings {\n\tagentHelmValues\n\tagentVsn\n}\n","sha256:901e2e68afb969b6cc521cb1f1f3e0d134e6f0f11b9f24dcb288b95cc2a6e39e":"mutation CreateServiceAccount ($attributes: ServiceAccountAttributes!) {\n\tcreateServiceAccount(attributes: $attributes) {\n\t\t... UserFragment\n\t}\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:90314a4b07d2a45508cf458997cf53a19dd5eb958764462f71e43f062128f3db":"query GetMCPServers ($q: String, $first: Int, $after: String, $before: String, $last: Int) {\n\tmcpServers(q: $q, first: $first, after: $after, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... MCPServerFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment MCPServerFragment on McpServer {\n\tid\n\tname\n\turl\n\tauthentication {\n\t\tplural\n\t\theaders {\n\t\t\tname\n\t\t\tvalue\n\t\t}\n\t}\n\tconfirm\n}\n","sha256:910b361b6f8a5a95c6ddfd9d86bbeba38445e6242537e44f8a71f1294a098d31":"mutation UpsertVulnerabilities ($vulnerabilities: [VulnerabilityReportAttributes]) {\n\tupsertVulnerabilities(vulnerabilities: $vulnerabilities)\n}\n","sha256:91104bc566948580b79bda2fc4bf5cac926cf9bf185468a2e32653a9aaef8292":"mutation UpdateCluster ($id: ID!, $attributes: ClusterUpdateAttributes!) {\n\tupdateCluster(id: $id, attributes: $attributes) {\n\t\t... ClusterFragment\n\t}\n}\nfragment ClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tinsertedAt\n\tpingedAt\n\tprotect\n\tcurrentVersion\n\tkasUrl\n\tdeletedAt\n\tmetadata\n\tdistro\n\ttags {\n\t\t... ClusterTags\n\t}\n\tprovider {\n\t\t... ClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tstatus {\n\t\t... ClusterStatusFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\tdeletedAt\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tservice {\n\t\t... ServiceDeploymentFragment\n\t}\n\tcredentials {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment ClusterStatusFragment on ClusterStatus {\n\tconditions {\n\t\t... ClusterConditionFragment\n\t}\n}\nfragment ClusterConditionFragment on ClusterCondition {\n\tstatus\n\ttype\n\tmessage\n\treason\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:9189c9e78cd7eb57a9e67c9b09905683e01f2864e5e49516cac6beeaae44ce28":"query ListObservabilityWebhooks ($after: String, $before: String, $first: Int, $last: Int) {\n\tobservabilityWebhooks(after: $after, before: $before, first: $first, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... ObservabilityWebhookFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment ObservabilityWebhookFragment on ObservabilityWebhook {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\ttype\n\turl\n}\n","sha256:921369b1661c3b6001335e7a580e5d3b9e04a2792231cde13dc7b98159790d97":"mutation UpdatePrAutomation ($id: ID!, $attributes: PrAutomationAttributes!) {\n\tupdatePrAutomation(id: $id, attributes: $attributes) {\n\t\t... PrAutomationFragment\n\t}\n}\nfragment PrAutomationFragment on PrAutomation {\n\tid\n\tname\n\ttitle\n\taddon\n\tmessage\n\tidentifier\n\tinsertedAt\n\tupdatedAt\n}\n","sha256:929cc36181b7f6e09352f8e2776a66a3876c5fdd3ce60ab2637ac4dad4340cc0":"query PagedClusterServicesForAgent ($after: String, $first: Int, $before: String, $last: Int) {\n\tpagedClusterServices(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\t... ServiceDeploymentEdgeFragmentForAgent\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment ServiceDeploymentEdgeFragmentForAgent on ServiceDeploymentEdge {\n\tnode {\n\t\t... ServiceDeploymentForAgent\n\t}\n}\nfragment ServiceDeploymentForAgent on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\ttarball\n\tdeletedAt\n\tdryRun\n\ttemplated\n\tsha\n\tstatus\n\tcluster {\n\t\tid\n\t\tname\n\t\thandle\n\t\tself\n\t\tversion\n\t\tpingedAt\n\t\tmetadata\n\t\ttags {\n\t\t\t... ClusterTags\n\t\t}\n\t\tcurrentVersion\n\t\tkasUrl\n\t\tdistro\n\t}\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\thelm {\n\t\trelease\n\t\tvaluesFiles\n\t\tvalues\n\t\tignoreHooks\n\t\tignoreCrds\n\t\tluaScript\n\t\tluaFile\n\t\tluaFolder\n\t\tpythonScript\n\t\tpythonFile\n\t\tpythonFolder\n\t\tkustomizePostrender\n\t}\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tcontexts {\n\t\tname\n\t\tconfiguration\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tdeleteNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\trevision {\n\t\tid\n\t}\n\timports {\n\t\tid\n\t\tstack {\n\t\t\tid\n\t\t\tname\n\t\t}\n\t\toutputs {\n\t\t\tname\n\t\t\tvalue\n\t\t\tsecret\n\t\t}\n\t}\n\trenderers {\n\t\t... RendererFragment\n\t}\n\tdependencies {\n\t\t... ServiceDependencyFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment RendererFragment on Renderer {\n\tpath\n\ttype\n\thelm {\n\t\t... HelmMinimalFragment\n\t}\n}\nfragment HelmMinimalFragment on HelmMinimal {\n\tvalues\n\tvaluesFiles\n\trelease\n\tignoreHooks\n}\nfragment ServiceDependencyFragment on ServiceDependency {\n\tid\n\tname\n}\n","sha256:930b441c217f098b4a06fe5ee2b3413b71ddfeb7a14fd5a3f34e9eb094cf38c7":"query GetNotificationSinkByName ($name: String) {\n\tnotificationSink(name: $name) {\n\t\t... NotificationSinkFragment\n\t}\n}\nfragment NotificationSinkFragment on NotificationSink {\n\tid\n\tname\n\ttype\n\tconfiguration {\n\t\t... SinkConfigurationFragment\n\t}\n\tnotificationBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment SinkConfigurationFragment on SinkConfiguration {\n\tid\n\tslack {\n\t\t... UrlSinkConfigurationFragment\n\t}\n\tteams {\n\t\t... UrlSinkConfigurationFragment\n\t}\n}\nfragment UrlSinkConfigurationFragment on UrlSinkConfiguration {\n\turl\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:9408ad873dfdbd82d7e41d8dbff8b46185dea3a6f1fa49dec03cd60ebbc1e830":"query GetGroupTiny ($name: String!) {\n\tgroup(name: $name) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:945929e80092a3ddfffa063c66ef0f3daaf82409c169e3e7127fafed50a14ab2":"query ListNamespaces ($after: String, $first: Int, $before: String, $last: Int) {\n\tmanagedNamespaces(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\t... ManagedNamespaceEdgeFragment\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment ManagedNamespaceEdgeFragment on ManagedNamespaceEdge {\n\tcursor\n\tnode {\n\t\t... ManagedNamespaceMinimalFragment\n\t}\n}\nfragment ManagedNamespaceMinimalFragment on ManagedNamespace {\n\tid\n\tname\n\tdescription\n}\n","sha256:953c6871b8ad6a66454c4be5f93053bbfb913d5da336e4a83e9ba1f702561273":"mutation DeleteUser ($id: ID!) {\n\tdeleteUser(id: $id) {\n\t\t... UserFragment\n\t}\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:95f63c044687b9aeb755352caddb8fae1cff74a694a8d44c20c2669e786b4f82":"query ListServiceDeployment ($after: String, $before: String, $last: Int, $clusterId: ID) {\n\tserviceDeployments(after: $after, first: 100, before: $before, last: $last, clusterId: $clusterId) {\n\t\tedges {\n\t\t\t... ServiceDeploymentEdgeFragment\n\t\t}\n\t}\n}\nfragment ServiceDeploymentEdgeFragment on ServiceDeploymentEdge {\n\tnode {\n\t\t... ServiceDeploymentBaseFragment\n\t}\n}\nfragment ServiceDeploymentBaseFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\n","sha256:960457be7108f80ff02c924d123a5a85a8ea8df66a779785b18eb8376f72f525":"mutation DeleteClusterIsoImage ($id: ID!) {\n\tdeleteClusterIsoImage(id: $id) {\n\t\t... ClusterIsoImageFragment\n\t}\n}\nfragment ClusterIsoImageFragment on ClusterIsoImage {\n\tid\n\timage\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tregistry\n\tuser\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:96e9ad521bf896ffa2f2b2b584ef7d8216073289a30bdfe8de3ca0e6241057f1":"mutation UpdateWorkbenchPrompt ($id: ID!, $attributes: WorkbenchPromptAttributes!) {\n\tupdateWorkbenchPrompt(id: $id, attributes: $attributes) {\n\t\tid\n\t}\n}\n","sha256:97134516f2bf93fd448744222727bc2d4b9c4778c529fecc1d68766696fc4ad5":"query GetScmConnection ($id: ID!) {\n\tscmConnection(id: $id) {\n\t\t... ScmConnectionFragment\n\t}\n}\nfragment ScmConnectionFragment on ScmConnection {\n\tid\n\tname\n\tapiUrl\n\tbaseUrl\n\ttype\n\tusername\n\tinsertedAt\n\tupdatedAt\n}\n","sha256:980afba6c180a980bcf9a8639972cfe0612f6251116bf78b86442ade3cda51c3":"query GetWorkbenchTiny ($id: ID, $name: String) {\n\tworkbench(id: $id, name: $name) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:9827fcdc2ff6a39a12b07c9f580189df66b547435d5077b4348d57534c3981f5":"query TokenExchange ($token: String!) {\n\ttokenExchange(token: $token) {\n\t\t... UserFragment\n\t\tgroups {\n\t\t\tid\n\t\t\tname\n\t\t}\n\t\tboundRoles {\n\t\t\tid\n\t\t\tname\n\t\t}\n\t}\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:98630448e8dfa27ddc91790290e32ffc4f4ebee749bd1a8f890940c6f637bcb8":"query PagedClusterGateIDs ($after: String, $first: Int, $before: String, $last: Int) {\n\tpagedClusterGates(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\t... PipelineGateIDsEdgeFragment\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment PipelineGateIDsEdgeFragment on PipelineGateEdge {\n\tnode {\n\t\t... {\n\t\t\tid\n\t\t}\n\t}\n}\n","sha256:99c515b3c841d29dd7c06d7a15866725fe3522f0a8d7e6c749ead1e4148bbb58":"query ListAgentRuntimePendingRuns ($id: ID!, $after: String, $first: Int, $before: String, $last: Int) {\n\tagentRuntime(id: $id) {\n\t\tpendingRuns(after: $after, first: $first, before: $before, last: $last) {\n\t\t\tedges {\n\t\t\t\tnode {\n\t\t\t\t\t... AgentRunFragment\n\t\t\t\t}\n\t\t\t}\n\t\t\tpageInfo {\n\t\t\t\t... PageInfoFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment AgentRunFragment on AgentRun {\n\tid\n\tprompt\n\trepository\n\tbranch\n\theadBranch\n\tmode\n\treviewDepth\n\tlanguage\n\tlanguageVersion\n\ttodos {\n\t\t... AgentTodoFragment\n\t}\n\tprompts {\n\t\t... AgentPromptFragment\n\t}\n\tskills {\n\t\tname\n\t\tdescription\n\t\tcontents\n\t}\n\tstatus\n\tpodReference {\n\t\t... AgentPodReferenceFragment\n\t}\n\terror\n\tanalysis {\n\t\t... AgentAnalysisFragment\n\t}\n\tusage {\n\t\tinputTokens\n\t\toutputTokens\n\t\ttotalTokens\n\t\tcachedTokens\n\t\treasoningTokens\n\t\tinputCost\n\t\toutputCost\n\t\ttotalCost\n\t}\n\tscmCreds {\n\t\t... ScmCredentialFragment\n\t}\n\tpluralCreds {\n\t\t... PluralCredsFragment\n\t}\n\tworkbenchMcpUrl\n\truntime {\n\t\t... AgentRuntimeFragment\n\t}\n\tuser {\n\t\tid\n\t\tname\n\t\temail\n\t}\n\tflow {\n\t\tid\n\t\tname\n\t}\n\tpullRequests {\n\t\t... PullRequestFragment\n\t}\n\tupload {\n\t\t... AgentRunUploadFragment\n\t}\n\tbabysit\n\tbabysitInterval\n\tapproval\n\tapprovedAt\n\tfollowup\n\tfollowupPrUrl\n}\nfragment AgentTodoFragment on AgentTodo {\n\tdescription\n\tdone\n\ttitle\n}\nfragment AgentPromptFragment on AgentPrompt {\n\tid\n\tprompt\n\tseq\n}\nfragment AgentPodReferenceFragment on AgentPodReference {\n\tname\n\tnamespace\n}\nfragment AgentAnalysisFragment on AgentAnalysis {\n\tsummary\n\tanalysis\n\tbullets\n}\nfragment ScmCredentialFragment on ScmCreds {\n\ttoken\n\tusername\n\texaKey\n}\nfragment PluralCredsFragment on PluralCreds {\n\ttoken\n\turl\n}\nfragment AgentRuntimeFragment on AgentRuntime {\n\tid\n\tname\n\ttype\n\taiProxy\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tcreateBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment PullRequestFragment on PullRequest {\n\tid\n\tstatus\n\turl\n\ttitle\n\tcreator\n\tref\n}\nfragment AgentRunUploadFragment on AgentRunUpload {\n\tid\n\tsession\n\tscreenRecording\n\tpatch\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\n","sha256:99cf665c8973fc5fbe75bbb8053212dd63bbd38fae367116c111ae69665385fb":"query ListScmConnections ($cursor: String, $before: String, $last: Int) {\n\tscmConnections(after: $cursor, first: 100, before: $before, last: $last) {\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... ScmConnectionFragment\n\t\t\t}\n\t\t\tcursor\n\t\t}\n\t}\n}\nfragment ScmConnectionFragment on ScmConnection {\n\tid\n\tname\n\tapiUrl\n\tbaseUrl\n\ttype\n\tusername\n\tinsertedAt\n\tupdatedAt\n}\n","sha256:9a1a0ff9faec767fdd76670f61d6f07e3bfb6f87e38e9f7258337ec4d55ef49c":"query GetServiceDeploymentByHandle ($cluster: String!, $name: String!) {\n\tserviceDeployment(cluster: $cluster, name: $name) {\n\t\t... ServiceDeploymentExtended\n\t}\n}\nfragment ServiceDeploymentExtended on ServiceDeployment {\n\tcluster {\n\t\t... BaseClusterFragment\n\t}\n\terrors {\n\t\t... ErrorFragment\n\t}\n\trevision {\n\t\t... RevisionFragment\n\t}\n\tcontexts {\n\t\t... ServiceContextFragment\n\t}\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n\timports {\n\t\tstack {\n\t\t\t... InfrastructureStackTinyFragment\n\t\t}\n\t\toutputs {\n\t\t\t... StackOutputFragment\n\t\t}\n\t}\n}\nfragment BaseClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tdistro\n\tpingedAt\n\tcurrentVersion\n\tkasUrl\n\tmetadata\n\ttags {\n\t\t... ClusterTags\n\t}\n\tcredential {\n\t\t... ProviderCredentialFragment\n\t}\n\tprovider {\n\t\t... BaseClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment BaseClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment ErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\nfragment RevisionFragment on Revision {\n\tid\n\tsha\n\tgit {\n\t\tref\n\t\tfolder\n\t}\n}\nfragment ServiceContextFragment on ServiceContext {\n\tid\n\tname\n\tconfiguration\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment InfrastructureStackTinyFragment on InfrastructureStack {\n\tid\n\tname\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\n","sha256:9c6c086b73a8e8893f47aebd4f4b3fa31e6a323f54e4f49bad3390f41ff55e77":"mutation UpdateProject ($id: ID!, $attributes: ProjectAttributes!) {\n\tupdateProject(id: $id, attributes: $attributes) {\n\t\t... ProjectFragment\n\t}\n}\nfragment ProjectFragment on Project {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\tdefault\n\tdescription\n\tdisableInsights\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:9fb8d63cdb26f2f0c24141600a2e63734c288a3721a76322410265f4f2979d35":"query GetClusterRegistrations ($after: String, $first: Int, $before: String, $last: Int) {\n\tclusterRegistrations(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... ClusterRegistrationFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment ClusterRegistrationFragment on ClusterRegistration {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tmachineId\n\tname\n\thandle\n\tmetadata\n\ttags {\n\t\t... ClusterTags\n\t}\n\tcreator {\n\t\t... UserFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:a09067ffa71e8f8b2a7a319ff96f0a79b1e54733cc99029952e2744ebcb93e8d":"mutation CreateGroup ($attributtes: GroupAttributes!) {\n\tcreateGroup(attributes: $attributtes) {\n\t\t... GroupFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\n","sha256:a16b1da2c5e2560270870aa279c534d36db2d0dc8abfb0c21578fc61fc7a6b00":"query ListPrAutomations ($cursor: String, $before: String, $last: Int) {\n\tprAutomations(after: $cursor, first: 100, before: $before, last: $last) {\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... PrAutomationFragment\n\t\t\t}\n\t\t\tcursor\n\t\t}\n\t}\n}\nfragment PrAutomationFragment on PrAutomation {\n\tid\n\tname\n\ttitle\n\taddon\n\tmessage\n\tidentifier\n\tinsertedAt\n\tupdatedAt\n}\n","sha256:a21b5e44c5251b2393d36641f8e80e67318a9fe5cbd5a5a5010c21ee2deeb985":"mutation DeleteWorkbenchCron ($id: ID!) {\n\tdeleteWorkbenchCron(id: $id) {\n\t\t... WorkbenchCronFragment\n\t}\n}\nfragment WorkbenchCronFragment on WorkbenchCron {\n\tid\n\tcrontab\n\tprompt\n\tworkbench {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:a334251e65b8ab49ef2c93cf1b71d07822fb6b8f9201095cd5490fd1deab6e8e":"query ListServiceDeployments ($cursor: String, $before: String, $last: Int) {\n\tserviceDeployments(after: $cursor, first: 100, before: $before, last: $last) {\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... ServiceDeploymentFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\n","sha256:a44c40a19e2a6fdec2c6ebc9a7d8d85f004466fc628e568ef27a4973c6e4ae38":"mutation GetWorkbenchCron ($id: ID!) {\n\tworkbenchCron(id: $id) {\n\t\t... WorkbenchCronFragment\n\t}\n}\nfragment WorkbenchCronFragment on WorkbenchCron {\n\tid\n\tcrontab\n\tprompt\n\tworkbench {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:a6982b6bb2f74922ef5d6e2368ac42f8a499ad17f16f819a0f64e89b0c20abe0":"mutation DeleteWorkbenchWebhook ($id: ID!) {\n\tdeleteWorkbenchWebhook(id: $id) {\n\t\t... WorkbenchWebhookFragment\n\t}\n}\nfragment WorkbenchWebhookFragment on WorkbenchWebhook {\n\tid\n\tname\n\tprompt\n\tpriority\n\tmatches {\n\t\tregex\n\t\tsubstring\n\t\tcaseInsensitive\n\t}\n\twebhook {\n\t\tid\n\t\tname\n\t}\n\tissueWebhook {\n\t\tid\n\t\tname\n\t}\n\tworkbench {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:a7c3ab7455fa73c5f0171b092aafbfee2c47186ef1e6053d5ba99e5b264b4b16":"query GetCatalog ($id: ID, $name: String) {\n\tcatalog(id: $id, name: $name) {\n\t\t... CatalogFragment\n\t}\n}\nfragment CatalogFragment on Catalog {\n\tid\n\tname\n\tdescription\n\tcategory\n\tauthor\n\tproject {\n\t\t... ProjectFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment ProjectFragment on Project {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\tdefault\n\tdescription\n\tdisableInsights\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:a84f8942424abe644392066d12e351e0835027df1720d80bfa24f202b38a9dfd":"query GetNamespace ($id: ID!) {\n\tmanagedNamespace(id: $id) {\n\t\t... ManagedNamespaceFragment\n\t}\n}\nfragment ManagedNamespaceFragment on ManagedNamespace {\n\tid\n\tname\n\tdescription\n\tlabels\n\tannotations\n\tpullSecrets\n\tservice {\n\t\t... ServiceTemplateFragment\n\t}\n\ttarget {\n\t\t... ClusterTargetFragment\n\t}\n\tdeletedAt\n}\nfragment ServiceTemplateFragment on ServiceTemplate {\n\tname\n\tnamespace\n\ttemplated\n\trepositoryId\n\tcontexts\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tsyncConfig {\n\t\t... SyncConfigFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment SyncConfigFragment on SyncConfig {\n\tcreateNamespace\n\tnamespaceMetadata {\n\t\t... NamespaceMetadataFragment\n\t}\n}\nfragment NamespaceMetadataFragment on NamespaceMetadata {\n\tlabels\n\tannotations\n}\nfragment ClusterTargetFragment on ClusterTarget {\n\ttags\n\tdistro\n}\n","sha256:a8ce65444a9c0e953ccc22260b021bf84771782d619f4d9f940867bdaf01d9df":"mutation DeleteStack ($id: ID!) {\n\tdeleteStack(id: $id) {\n\t\t... InfrastructureStackIdFragment\n\t}\n}\nfragment InfrastructureStackIdFragment on InfrastructureStack {\n\tid\n}\n","sha256:a91f084bbbd85931d0e231c6caf2d1280b97dd1f9c7a1fb574192f3710106563":"mutation UpsertHelmRepository ($url: String!, $attributes: HelmRepositoryAttributes) {\n\tupsertHelmRepository(url: $url, attributes: $attributes) {\n\t\t... HelmRepositoryFragment\n\t}\n}\nfragment HelmRepositoryFragment on HelmRepository {\n\tid\n\tinsertedAt\n\tupdatedAt\n\turl\n\tprovider\n\thealth\n}\n","sha256:a929072c59cbb7e762fec990adb41cf6cf80c06d00bbd0caa372f6bd4661b053":"query GetClusterWithToken ($id: ID, $handle: String) {\n\tcluster(id: $id, handle: $handle) {\n\t\t... ClusterFragment\n\t\tdeployToken\n\t}\n}\nfragment ClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tinsertedAt\n\tpingedAt\n\tprotect\n\tcurrentVersion\n\tkasUrl\n\tdeletedAt\n\tmetadata\n\tdistro\n\ttags {\n\t\t... ClusterTags\n\t}\n\tprovider {\n\t\t... ClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tstatus {\n\t\t... ClusterStatusFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\tdeletedAt\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tservice {\n\t\t... ServiceDeploymentFragment\n\t}\n\tcredentials {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment ClusterStatusFragment on ClusterStatus {\n\tconditions {\n\t\t... ClusterConditionFragment\n\t}\n}\nfragment ClusterConditionFragment on ClusterCondition {\n\tstatus\n\ttype\n\tmessage\n\treason\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:a9481fbef0ee5faac5f98ff86f1fcc351aef26a41e52daf22428135a715824b1":"query PagedClusterGates ($after: String, $first: Int, $before: String, $last: Int) {\n\tpagedClusterGates(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\t... PipelineGateEdgeFragment\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment PipelineGateEdgeFragment on PipelineGateEdge {\n\tnode {\n\t\t... PipelineGateFragment\n\t}\n}\nfragment PipelineGateFragment on PipelineGate {\n\tid\n\tname\n\ttype\n\tstate\n\tupdatedAt\n\tspec {\n\t\t... GateSpecFragment\n\t}\n\tstatus {\n\t\t... GateStatusFragment\n\t}\n}\nfragment GateSpecFragment on GateSpec {\n\tjob {\n\t\t... JobSpecFragment\n\t}\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment GateStatusFragment on GateStatus {\n\tjobRef {\n\t\t... JobReferenceFragment\n\t}\n}\nfragment JobReferenceFragment on JobReference {\n\tname\n\tnamespace\n}\n","sha256:aa077f5ef1fd98bb3909a063b4f4f6d722ee4355e2006aa48a80a5a3f34a988d":"mutation DeleteScmConnection ($id: ID!) {\n\tdeleteScmConnection(id: $id) {\n\t\t... ScmConnectionFragment\n\t}\n}\nfragment ScmConnectionFragment on ScmConnection {\n\tid\n\tname\n\tapiUrl\n\tbaseUrl\n\ttype\n\tusername\n\tinsertedAt\n\tupdatedAt\n}\n","sha256:aa987069b6edaf93d75eb44ab52356a7374b4ea4669b503729dc5209e4ba85e2":"query GetServiceDeploymentComponents ($id: ID!) {\n\tserviceDeployment(id: $id) {\n\t\tid\n\t\tcomponents {\n\t\t\tkind\n\t\t\tstate\n\t\t}\n\t}\n}\n","sha256:abd3ae6e1fb895e3c792f77c5ec324b372ffc85abb94f26772455a98f547ef0a":"mutation UpdateScmConnection ($id: ID!, $attributes: ScmConnectionAttributes!) {\n\tupdateScmConnection(id: $id, attributes: $attributes) {\n\t\t... ScmConnectionFragment\n\t}\n}\nfragment ScmConnectionFragment on ScmConnection {\n\tid\n\tname\n\tapiUrl\n\tbaseUrl\n\ttype\n\tusername\n\tinsertedAt\n\tupdatedAt\n}\n","sha256:acdaf678c528e8bf7724301610dd4dd6304314c59d436e8e5452073068a143fc":"mutation DeleteGlobalService ($id: ID!) {\n\tdeleteGlobalService(id: $id) {\n\t\t... GlobalServiceFragment\n\t}\n}\nfragment GlobalServiceFragment on GlobalService {\n\tid\n\tname\n\tdistro\n\tprovider {\n\t\tid\n\t}\n\tservice {\n\t\tid\n\t}\n\ttags {\n\t\t... ClusterTags\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:ad10097393ee33916a9be2804e6c786bb8f42679e64049dcf17eb8dd2cf79ef1":"query PagedClusterServiceIds ($after: String, $first: Int, $before: String, $last: Int) {\n\tpagedClusterServices(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\t... ServiceDeploymentIdEdgeFragment\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment ServiceDeploymentIdEdgeFragment on ServiceDeploymentEdge {\n\tnode {\n\t\t... ServiceDeploymentIdFragment\n\t}\n}\nfragment ServiceDeploymentIdFragment on ServiceDeployment {\n\tid\n}\n","sha256:af037c14ab732c3150f56513fcdbf6187c36457b52c13b05928e9dea542d3f97":"query GetProject ($id: ID, $name: String) {\n\tproject(id: $id, name: $name) {\n\t\t... ProjectFragment\n\t}\n}\nfragment ProjectFragment on Project {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\tdefault\n\tdescription\n\tdisableInsights\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:aff1e211314f3b4f2795d03b2a40b9302661e9b92c8cc49c6c46c2758274c875":"mutation UpdateWorkbench ($id: ID!, $attributes: WorkbenchAttributes!) {\n\tupdateWorkbench(id: $id, attributes: $attributes) {\n\t\t... WorkbenchFragment\n\t}\n}\nfragment WorkbenchFragment on Workbench {\n\tid\n\tname\n\tdescription\n\tsystemPrompt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tagentRuntime {\n\t\t... TinyAgentRuntimeFragment\n\t}\n\tconfiguration {\n\t\tcoding {\n\t\t\tmode\n\t\t\trepositories\n\t\t}\n\t\tinfrastructure {\n\t\t\tservices\n\t\t\tstacks\n\t\t\tkubernetes\n\t\t}\n\t\tobservability {\n\t\t\tlogs\n\t\t\tmetrics\n\t\t}\n\t}\n\tskills {\n\t\tref {\n\t\t\tref\n\t\t\tfolder\n\t\t\tfiles\n\t\t}\n\t\tfiles\n\t}\n\ttools {\n\t\t... WorkbenchToolFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment TinyAgentRuntimeFragment on AgentRuntime {\n\tid\n\tname\n\ttype\n\tcluster {\n\t\tid\n\t\tname\n\t\thandle\n\t}\n}\nfragment WorkbenchToolFragment on WorkbenchTool {\n\tid\n\tname\n\ttool\n\tcategories\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tmcpServer {\n\t\t... MCPServerFragment\n\t}\n\tcloudConnection {\n\t\t... CloudConnectionFragment\n\t}\n\tscmConnection {\n\t\tid\n\t\tname\n\t\ttype\n\t}\n\tconfiguration {\n\t\thttp {\n\t\t\turl\n\t\t\tmethod\n\t\t\tfunction\n\t\t\theaders {\n\t\t\t\tname\n\t\t\t\tvalue\n\t\t\t}\n\t\t\tbody\n\t\t\tinputSchema\n\t\t}\n\t\telastic {\n\t\t\tindex\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\topensearch {\n\t\t\thost\n\t\t\tindex\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t\tassumeRoleArn\n\t\t\tusePodIdentity\n\t\t}\n\t\tprometheus {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t\tawsSigv4\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t}\n\t\tloki {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tvictoriaLogs {\n\t\t\turl\n\t\t\tusername\n\t\t\taccountId\n\t\t\tprojectId\n\t\t}\n\t\tsplunk {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\ttempo {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tjaeger {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\tdatadog {\n\t\t\tsite\n\t\t}\n\t\tdynatrace {\n\t\t\turl\n\t\t}\n\t\tcloudwatch {\n\t\t\tregion\n\t\t\tlogGroupNames\n\t\t\troleArn\n\t\t\troleSessionName\n\t\t}\n\t\tazure {\n\t\t\tsubscriptionId\n\t\t\ttenantId\n\t\t\tclientId\n\t\t\tprometheusUrl\n\t\t}\n\t\tsentry {\n\t\t\turl\n\t\t}\n\t\tlinear {\n\t\t\turl\n\t\t}\n\t\tslack {\n\t\t\turl\n\t\t}\n\t\tpagerduty {\n\t\t\turl\n\t\t}\n\t\tteams {\n\t\t\tclientId\n\t\t\ttenantId\n\t\t}\n\t\tatlassian {\n\t\t\turl\n\t\t\temail\n\t\t}\n\t\texa {\n\t\t\turl\n\t\t}\n\t\tgithub {\n\t\t\turl\n\t\t\ttoolset\n\t\t\tappId\n\t\t\tinstallationId\n\t\t}\n\t\tgitlab {\n\t\t\turl\n\t\t}\n\t\tbitbucket {\n\t\t\turl\n\t\t}\n\t\tbitbucketDatacenter {\n\t\t\turl\n\t\t}\n\t\tazureDevops {\n\t\t\turl\n\t\t}\n\t\tlambda {\n\t\t\tlambdaArn\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tcloudRun {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tazureFunction {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tdocker {\n\t\t\turl\n\t\t\tprovider\n\t\t\tproxy {\n\t\t\t\turl\n\t\t\t\tnoproxy\n\t\t\t}\n\t\t}\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment MCPServerFragment on McpServer {\n\tid\n\tname\n\turl\n\tauthentication {\n\t\tplural\n\t\theaders {\n\t\t\tname\n\t\t\tvalue\n\t\t}\n\t}\n\tconfirm\n}\nfragment CloudConnectionFragment on CloudConnection {\n\tid\n\tname\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tprovider\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:b0c7d62eece94e065f18516cf7006281428f4ff44ecd903fb3fbcf334d99deac":"mutation CreateQueuedPrompt ($jobId: ID!, $attributes: QueuedPromptAttributes!) {\n\tcreateQueuedPrompt(jobId: $jobId, attributes: $attributes) {\n\t\t... QueuedPromptFragment\n\t}\n}\nfragment QueuedPromptFragment on QueuedPrompt {\n\tid\n\tprompt\n\tdequeableAt\n\tworkbenchJob {\n\t\tid\n\t}\n\tuser {\n\t\tid\n\t}\n}\n","sha256:b220576f4e2238111c178658b7e3e11c7a2fc482e1d1145c94aab213f2595242":"mutation DeleteGroupMember ($userId: ID!, $groupId: ID!) {\n\tdeleteGroupMember(userId: $userId, groupId: $groupId) {\n\t\t... GroupMemberFragment\n\t}\n}\nfragment GroupMemberFragment on GroupMember {\n\tid\n\tuser {\n\t\tid\n\t}\n\tgroup {\n\t\tid\n\t}\n}\n","sha256:b344029ffce5a39a293ead846a55b56059495641da56fe8b536d4e12f9b22b71":"query GetWorkbench ($id: ID, $name: String) {\n\tworkbench(id: $id, name: $name) {\n\t\t... WorkbenchFragment\n\t}\n}\nfragment WorkbenchFragment on Workbench {\n\tid\n\tname\n\tdescription\n\tsystemPrompt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tagentRuntime {\n\t\t... TinyAgentRuntimeFragment\n\t}\n\tconfiguration {\n\t\tcoding {\n\t\t\tmode\n\t\t\trepositories\n\t\t}\n\t\tinfrastructure {\n\t\t\tservices\n\t\t\tstacks\n\t\t\tkubernetes\n\t\t}\n\t\tobservability {\n\t\t\tlogs\n\t\t\tmetrics\n\t\t}\n\t}\n\tskills {\n\t\tref {\n\t\t\tref\n\t\t\tfolder\n\t\t\tfiles\n\t\t}\n\t\tfiles\n\t}\n\ttools {\n\t\t... WorkbenchToolFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment TinyAgentRuntimeFragment on AgentRuntime {\n\tid\n\tname\n\ttype\n\tcluster {\n\t\tid\n\t\tname\n\t\thandle\n\t}\n}\nfragment WorkbenchToolFragment on WorkbenchTool {\n\tid\n\tname\n\ttool\n\tcategories\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tmcpServer {\n\t\t... MCPServerFragment\n\t}\n\tcloudConnection {\n\t\t... CloudConnectionFragment\n\t}\n\tscmConnection {\n\t\tid\n\t\tname\n\t\ttype\n\t}\n\tconfiguration {\n\t\thttp {\n\t\t\turl\n\t\t\tmethod\n\t\t\tfunction\n\t\t\theaders {\n\t\t\t\tname\n\t\t\t\tvalue\n\t\t\t}\n\t\t\tbody\n\t\t\tinputSchema\n\t\t}\n\t\telastic {\n\t\t\tindex\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\topensearch {\n\t\t\thost\n\t\t\tindex\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t\tassumeRoleArn\n\t\t\tusePodIdentity\n\t\t}\n\t\tprometheus {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t\tawsSigv4\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t}\n\t\tloki {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tvictoriaLogs {\n\t\t\turl\n\t\t\tusername\n\t\t\taccountId\n\t\t\tprojectId\n\t\t}\n\t\tsplunk {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\ttempo {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tjaeger {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\tdatadog {\n\t\t\tsite\n\t\t}\n\t\tdynatrace {\n\t\t\turl\n\t\t}\n\t\tcloudwatch {\n\t\t\tregion\n\t\t\tlogGroupNames\n\t\t\troleArn\n\t\t\troleSessionName\n\t\t}\n\t\tazure {\n\t\t\tsubscriptionId\n\t\t\ttenantId\n\t\t\tclientId\n\t\t\tprometheusUrl\n\t\t}\n\t\tsentry {\n\t\t\turl\n\t\t}\n\t\tlinear {\n\t\t\turl\n\t\t}\n\t\tslack {\n\t\t\turl\n\t\t}\n\t\tpagerduty {\n\t\t\turl\n\t\t}\n\t\tteams {\n\t\t\tclientId\n\t\t\ttenantId\n\t\t}\n\t\tatlassian {\n\t\t\turl\n\t\t\temail\n\t\t}\n\t\texa {\n\t\t\turl\n\t\t}\n\t\tgithub {\n\t\t\turl\n\t\t\ttoolset\n\t\t\tappId\n\t\t\tinstallationId\n\t\t}\n\t\tgitlab {\n\t\t\turl\n\t\t}\n\t\tbitbucket {\n\t\t\turl\n\t\t}\n\t\tbitbucketDatacenter {\n\t\t\turl\n\t\t}\n\t\tazureDevops {\n\t\t\turl\n\t\t}\n\t\tlambda {\n\t\t\tlambdaArn\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tcloudRun {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tazureFunction {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tdocker {\n\t\t\turl\n\t\t\tprovider\n\t\t\tproxy {\n\t\t\t\turl\n\t\t\t\tnoproxy\n\t\t\t}\n\t\t}\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment MCPServerFragment on McpServer {\n\tid\n\tname\n\turl\n\tauthentication {\n\t\tplural\n\t\theaders {\n\t\t\tname\n\t\t\tvalue\n\t\t}\n\t}\n\tconfirm\n}\nfragment CloudConnectionFragment on CloudConnection {\n\tid\n\tname\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tprovider\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:b3c5a853563920b74b4e2d1687e851e198d53c61d2d42df5642261d732841cc6":"mutation DeletePolicy ($id: ID!) {\n\tdeletePolicy(id: $id) {\n\t\t... PolicyFragment\n\t}\n}\nfragment PolicyFragment on Policy {\n\tid\n\tname\n\ttype\n\tdescription\n\tpolicy\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:b48053dac3c5ecd9ab8e99a7f29f52b25c13f7f191203637fb43f1833a30d335":"query ListServiceDeploymentByHandle ($after: String, $before: String, $last: Int, $cluster: String) {\n\tserviceDeployments(after: $after, first: 100, before: $before, last: $last, cluster: $cluster) {\n\t\tedges {\n\t\t\t... ServiceDeploymentEdgeFragment\n\t\t}\n\t}\n}\nfragment ServiceDeploymentEdgeFragment on ServiceDeploymentEdge {\n\tnode {\n\t\t... ServiceDeploymentBaseFragment\n\t}\n}\nfragment ServiceDeploymentBaseFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\n","sha256:b5aade690f9187a9eb7b67156c989946e1f652356238ffb859cf67c002dd5b20":"query GetServiceDeploymentForAgent ($id: ID!) {\n\tserviceDeployment(id: $id) {\n\t\t... ServiceDeploymentForAgent\n\t}\n}\nfragment ServiceDeploymentForAgent on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\ttarball\n\tdeletedAt\n\tdryRun\n\ttemplated\n\tsha\n\tstatus\n\tcluster {\n\t\tid\n\t\tname\n\t\thandle\n\t\tself\n\t\tversion\n\t\tpingedAt\n\t\tmetadata\n\t\ttags {\n\t\t\t... ClusterTags\n\t\t}\n\t\tcurrentVersion\n\t\tkasUrl\n\t\tdistro\n\t}\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\thelm {\n\t\trelease\n\t\tvaluesFiles\n\t\tvalues\n\t\tignoreHooks\n\t\tignoreCrds\n\t\tluaScript\n\t\tluaFile\n\t\tluaFolder\n\t\tpythonScript\n\t\tpythonFile\n\t\tpythonFolder\n\t\tkustomizePostrender\n\t}\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tcontexts {\n\t\tname\n\t\tconfiguration\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tdeleteNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\trevision {\n\t\tid\n\t}\n\timports {\n\t\tid\n\t\tstack {\n\t\t\tid\n\t\t\tname\n\t\t}\n\t\toutputs {\n\t\t\tname\n\t\t\tvalue\n\t\t\tsecret\n\t\t}\n\t}\n\trenderers {\n\t\t... RendererFragment\n\t}\n\tdependencies {\n\t\t... ServiceDependencyFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment RendererFragment on Renderer {\n\tpath\n\ttype\n\thelm {\n\t\t... HelmMinimalFragment\n\t}\n}\nfragment HelmMinimalFragment on HelmMinimal {\n\tvalues\n\tvaluesFiles\n\trelease\n\tignoreHooks\n}\nfragment ServiceDependencyFragment on ServiceDependency {\n\tid\n\tname\n}\n","sha256:b6344198b643d2b030241e4ba06a7a808511584a5ddc52dabbbcc1b896c989ff":"mutation CloneServiceDeploymentWithHandle ($clusterId: ID!, $cluster: String!, $name: String!, $attributes: ServiceCloneAttributes!) {\n\tcloneService(clusterId: $clusterId, cluster: $cluster, name: $name, attributes: $attributes) {\n\t\t... ServiceDeploymentFragment\n\t}\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\n","sha256:b640b4ec159932cdb9519e0edba90585ba6552f8637f5a3136ecca8c7c4b33c5":"query ListClusters ($cursor: String, $before: String, $last: Int) {\n\tclusters(after: $cursor, first: 100, before: $before, last: $last) {\n\t\tedges {\n\t\t\t... ClusterEdgeFragment\n\t\t}\n\t}\n}\nfragment ClusterEdgeFragment on ClusterEdge {\n\tnode {\n\t\t... ClusterFragment\n\t}\n}\nfragment ClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tinsertedAt\n\tpingedAt\n\tprotect\n\tcurrentVersion\n\tkasUrl\n\tdeletedAt\n\tmetadata\n\tdistro\n\ttags {\n\t\t... ClusterTags\n\t}\n\tprovider {\n\t\t... ClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tstatus {\n\t\t... ClusterStatusFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\tdeletedAt\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tservice {\n\t\t... ServiceDeploymentFragment\n\t}\n\tcredentials {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment ClusterStatusFragment on ClusterStatus {\n\tconditions {\n\t\t... ClusterConditionFragment\n\t}\n}\nfragment ClusterConditionFragment on ClusterCondition {\n\tstatus\n\ttype\n\tmessage\n\treason\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:b6bb1e90c1b8586144c0060e4b38c1d76124d80c3d4ae2d7b1f6ada4251afedf":"mutation UpdateServiceDeployment ($id: ID!, $attributes: ServiceUpdateAttributes!) {\n\tupdateServiceDeployment(id: $id, attributes: $attributes) {\n\t\t... ServiceDeploymentExtended\n\t}\n}\nfragment ServiceDeploymentExtended on ServiceDeployment {\n\tcluster {\n\t\t... BaseClusterFragment\n\t}\n\terrors {\n\t\t... ErrorFragment\n\t}\n\trevision {\n\t\t... RevisionFragment\n\t}\n\tcontexts {\n\t\t... ServiceContextFragment\n\t}\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n\timports {\n\t\tstack {\n\t\t\t... InfrastructureStackTinyFragment\n\t\t}\n\t\toutputs {\n\t\t\t... StackOutputFragment\n\t\t}\n\t}\n}\nfragment BaseClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tdistro\n\tpingedAt\n\tcurrentVersion\n\tkasUrl\n\tmetadata\n\ttags {\n\t\t... ClusterTags\n\t}\n\tcredential {\n\t\t... ProviderCredentialFragment\n\t}\n\tprovider {\n\t\t... BaseClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment BaseClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment ErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\nfragment RevisionFragment on Revision {\n\tid\n\tsha\n\tgit {\n\t\tref\n\t\tfolder\n\t}\n}\nfragment ServiceContextFragment on ServiceContext {\n\tid\n\tname\n\tconfiguration\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment InfrastructureStackTinyFragment on InfrastructureStack {\n\tid\n\tname\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\n","sha256:b77c4291ae27a7349ae24c8c3963ce23ff5daed32c51eb1275dbccd1df6fcbe1":"query GetObservabilityProvider ($id: ID, $name: String) {\n\tobservabilityProvider(id: $id, name: $name) {\n\t\t... ObservabilityProviderFragment\n\t}\n}\nfragment ObservabilityProviderFragment on ObservabilityProvider {\n\tid\n\tname\n\ttype\n\tupdatedAt\n\tinsertedAt\n}\n","sha256:b80a7faf4eee40b6c3823963dcf3614aa12035c3da6b317cb8208ccc4f6ac8b7":"query GetPrAutomationByName ($name: String!) {\n\tprAutomation(name: $name) {\n\t\t... PrAutomationFragment\n\t}\n}\nfragment PrAutomationFragment on PrAutomation {\n\tid\n\tname\n\ttitle\n\taddon\n\tmessage\n\tidentifier\n\tinsertedAt\n\tupdatedAt\n}\n","sha256:b83ec626d13be86492db9fd86946d48b92e7e29239c0ff5600ac0e6006109e5c":"mutation CreateProviderCredential ($attributes: ProviderCredentialAttributes!, $name: String!) {\n\tcreateProviderCredential(attributes: $attributes, name: $name) {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\n","sha256:b87afc4a88b126bb018cbdee0a2d9f5c3552d1a2d9b032cdd1875023c2680da4":"mutation DeleteComplianceReportGenerator ($id: ID!) {\n\tdeleteComplianceReportGenerator(id: $id) {\n\t\t... ComplianceReportGeneratorFragment\n\t}\n}\nfragment ComplianceReportGeneratorFragment on ComplianceReportGenerator {\n\tid\n\tname\n\tformat\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:b88dad5dbf1911bf14fc349f8f14568b3cea7b12079ba4f50b80360a8a05d063":"mutation CreateGlobalServiceDeployment ($serviceId: ID!, $attributes: GlobalServiceAttributes!) {\n\tcreateGlobalService(serviceId: $serviceId, attributes: $attributes) {\n\t\t... GlobalServiceFragment\n\t}\n}\nfragment GlobalServiceFragment on GlobalService {\n\tid\n\tname\n\tdistro\n\tprovider {\n\t\tid\n\t}\n\tservice {\n\t\tid\n\t}\n\ttags {\n\t\t... ClusterTags\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:b92d34e46bb45d51af62431f19f46a643594ab8d2ace6ee0cdd7d2f9076c4116":"mutation UpsertPolicyConstraints ($constraints: [PolicyConstraintAttributes!]) {\n\tupsertPolicyConstraints(constraints: $constraints)\n}\n","sha256:b93ae4d17a11b60381e132d78df0ec8d9431bbf834517cc47ab74f83c7ef87aa":"mutation CreateServiceAccountToken ($id: ID!, $scopes: [ScopeAttributes], $expiry: String) {\n\tcreateServiceAccountToken(id: $id, scopes: $scopes, expiry: $expiry) {\n\t\t... AccessTokenFragment\n\t}\n}\nfragment AccessTokenFragment on AccessToken {\n\tid\n\ttoken\n}\n","sha256:b97ad5c22e824cb03ea1120d22df72eb1a45c6e18b82b399000786edf1fb6635":"mutation DeleteSentinel ($id: ID!) {\n\tdeleteSentinel(id: $id) {\n\t\tid\n\t}\n}\n","sha256:babd1fcf26e7e8d1243a3f92bb3135de93cd73b0bb5d4e28e40bd650bcbdfd1d":"query GetWorkbenchPrompt ($id: ID!) {\n\tworkbenchPrompt(id: $id) {\n\t\t... WorkbenchPromptFragment\n\t}\n}\nfragment WorkbenchPromptFragment on WorkbenchPrompt {\n\tid\n\ttitle\n\tcategory\n\tprompt\n}\n","sha256:bb41a2b83ff40ea0e043a1edace47470f4c97a1b20b95d0c8b862e85ce5ad54f":"query GetUser ($email: String!) {\n\tuser(email: $email) {\n\t\t... UserFragment\n\t}\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:bcaa00aae81a591bfbc55c97d7d7fab286def9d56608d84929c4e948dbea70da":"mutation CreateClusterRegistration ($attributes: ClusterRegistrationCreateAttributes!) {\n\tcreateClusterRegistration(attributes: $attributes) {\n\t\t... ClusterRegistrationFragment\n\t}\n}\nfragment ClusterRegistrationFragment on ClusterRegistration {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tmachineId\n\tname\n\thandle\n\tmetadata\n\ttags {\n\t\t... ClusterTags\n\t}\n\tcreator {\n\t\t... UserFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:be6f160416467f5e1c4f5f50a1549a66bbc8069b3b54836348e3be3507cdc897":"query GetPrGovernance ($id: ID, $name: String) {\n\tprGovernance(id: $id, name: $name) {\n\t\t... PrGovernanceFragment\n\t}\n}\nfragment PrGovernanceFragment on PrGovernance {\n\tid\n\tname\n}\n","sha256:becbe7cfde6f4a45472afa3838782c007a7ca917e38ba1c6e9994f66543401c1":"mutation UpdateStackRunStep ($id: ID!, $attributes: RunStepAttributes!) {\n\tupdateRunStep(id: $id, attributes: $attributes) {\n\t\t... RunStepFragment\n\t}\n}\nfragment RunStepFragment on RunStep {\n\tid\n\tstatus\n\tstage\n\tname\n\tcmd\n\targs\n\trequireApproval\n\tindex\n}\n","sha256:bef364b9855a0f6ff2adb5d11c887b240e54f9ccad79cf8cb5a687a5f01fe216":"query ListProjects ($after: String, $before: String, $first: Int, $last: Int, $q: String) {\n\tprojects(after: $after, before: $before, first: $first, last: $last, q: $q) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... ProjectFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment ProjectFragment on Project {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\tdefault\n\tdescription\n\tdisableInsights\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:bfaf5cbd07eaa142e0d849d06d5e5b453aa32d0c6eeace81fa1933d76650e234":"mutation CreateClusterRestore ($backupId: ID!) {\n\tcreateClusterRestore(backupId: $backupId) {\n\t\t... ClusterRestoreFragment\n\t}\n}\nfragment ClusterRestoreFragment on ClusterRestore {\n\tid\n\tstatus\n\tbackup {\n\t\t... ClusterBackupFragment\n\t}\n}\nfragment ClusterBackupFragment on ClusterBackup {\n\tid\n\tname\n\tcluster {\n\t\tid\n\t}\n\tgarbageCollected\n}\n","sha256:bfb0af0255fcb8a8df9b9a92adc450dc9d7b73aecfb9d984041d36741ab28357":"query GetPolicyTiny ($id: ID, $name: String) {\n\tpolicy(id: $id, name: $name) {\n\t\t... TinyPolicyFragment\n\t}\n}\nfragment TinyPolicyFragment on Policy {\n\tid\n\tname\n}\n","sha256:c064e0789ac325d358976a1f68ae61f2d0fd196ac6452d2a0d89e14dc0a8f106":"mutation updateServiceComponents ($id: ID!, $components: [ComponentAttributes], $revisionId: ID!, $sha: String, $errors: [ServiceErrorAttributes], $metadata: ServiceMetadataAttributes) {\n\tupdateServiceComponents(id: $id, components: $components, revisionId: $revisionId, sha: $sha, errors: $errors, metadata: $metadata) {\n\t\t... ServiceDeploymentFragment\n\t}\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\n","sha256:c09faa203ac4b24e71309d89522aeb52d09256d884896870c257c57940b352ae":"mutation CreateAccessToken {\n\tcreateAccessToken {\n\t\t... AccessTokenFragment\n\t}\n}\nfragment AccessTokenFragment on AccessToken {\n\tid\n\ttoken\n}\n","sha256:c0b9e33345dc718f8fb3c28711b5694a0b0e04be77e9faf13094cbecb500eeab":"mutation UpsertPreviewEnvironmentTemplate ($attributes: PreviewEnvironmentTemplateAttributes!) {\n\tupsertPreviewEnvironmentTemplate(attributes: $attributes) {\n\t\t... PreviewEnvironmentTemplateFragment\n\t}\n}\nfragment PreviewEnvironmentTemplateFragment on PreviewEnvironmentTemplate {\n\tid\n\tname\n\tcommentTemplate\n\tflow {\n\t\tid\n\t}\n\tconnection {\n\t\tid\n\t}\n\ttemplate {\n\t\tname\n\t}\n}\n","sha256:c115b884fcc5aa8a05486db11aec7c66d51336be00dbcb79b14276e983bcf4c4":"mutation UpsertCustomCompatibilityMatrix ($attributes: CustomCompatibilityMatrixAttributes!) {\n\tupsertCustomCompatibilityMatrix(attributes: $attributes) {\n\t\t... CustomCompatibilityMatrixFragment\n\t}\n}\nfragment CustomCompatibilityMatrixFragment on CustomCompatibilityMatrix {\n\tid\n\tname\n}\n","sha256:c1cd732253ebdf1c807451b3cf00bed2497fddd70b94dc26115e51be4f20de65":"mutation DeleteNamespace ($id: ID!) {\n\tdeleteManagedNamespace(id: $id) {\n\t\tid\n\t}\n}\n","sha256:c233e6f7b150960c88d30f2bbebdaa5cb184e1d973b4d57add138eae8b439a99":"query GetStackDefinition ($id: ID!) {\n\tstackDefinition(id: $id) {\n\t\t... StackDefinitionFragment\n\t}\n}\nfragment StackDefinitionFragment on StackDefinition {\n\tid\n\tname\n\tdescription\n\tinsertedAt\n\tupdatedAt\n\tconfiguration {\n\t\timage\n\t\ttag\n\t\tversion\n\t\thooks {\n\t\t\tcmd\n\t\t\targs\n\t\t\tafterStage\n\t\t}\n\t}\n\tsteps {\n\t\tcmd\n\t\targs\n\t\tstage\n\t\trequireApproval\n\t}\n\tdeleteSteps {\n\t\tcmd\n\t\targs\n\t\tstage\n\t\trequireApproval\n\t}\n}\n","sha256:c33f34d45c517bb9de74e17503e1955925c8ae908a2c6f3e1f8937cdc5494736":"mutation DeleteNotificationSink ($id: ID!) {\n\tdeleteNotificationSink(id: $id) {\n\t\t... NotificationSinkFragment\n\t}\n}\nfragment NotificationSinkFragment on NotificationSink {\n\tid\n\tname\n\ttype\n\tconfiguration {\n\t\t... SinkConfigurationFragment\n\t}\n\tnotificationBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment SinkConfigurationFragment on SinkConfiguration {\n\tid\n\tslack {\n\t\t... UrlSinkConfigurationFragment\n\t}\n\tteams {\n\t\t... UrlSinkConfigurationFragment\n\t}\n}\nfragment UrlSinkConfigurationFragment on UrlSinkConfiguration {\n\turl\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:c361daaf8af4e815cd5037cfca3508c99c82d5d13efeea7be74df0aa0a4a4086":"mutation DeleteScmWebhook ($id: ID!) {\n\tdeleteScmWebhook(id: $id) {\n\t\t... ScmWebhookFragment\n\t}\n}\nfragment ScmWebhookFragment on ScmWebhook {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\towner\n\ttype\n\turl\n}\n","sha256:c3e1711d5f843ae701bc44bd0ec9a83709e9b97495bd569a45482d64029eba0b":"mutation CreatePersona ($attributes: PersonaAttributes!) {\n\tcreatePersona(attributes: $attributes) {\n\t\t... PersonaFragment\n\t}\n}\nfragment PersonaFragment on Persona {\n\tid\n\tname\n\tdescription\n\tconfiguration {\n\t\t... PersonaConfigurationFragment\n\t}\n\tbindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PersonaConfigurationFragment on PersonaConfiguration {\n\tall\n\tdeployments {\n\t\taddOns\n\t\tclusters\n\t\tpipelines\n\t\tproviders\n\t\trepositories\n\t\tservices\n\t}\n\thome {\n\t\tmanager\n\t\tsecurity\n\t}\n\tflows {\n\t\tpermissions\n\t\tstartWorkbenchJob\n\t\tpipelines\n\t\tpreviews\n\t\tworkbenches\n\t}\n\tsidebar {\n\t\taudits\n\t\tflows\n\t\tkubernetes\n\t\tpullRequests\n\t\tsettings\n\t\tbackups\n\t\tstacks\n\t\tworkbenches\n\t\tcd\n\t\tai\n\t}\n\tsettings {\n\t\taccessTokens\n\t\tai\n\t\taudits\n\t\tchatbots\n\t\tcloudConnections\n\t\tglobal\n\t\tnotifications\n\t\tprojects\n\t\tuserManagement\n\t\twebhooks\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:c4d1d8e2c7cc145562d0347c03a7e8d55ffa769b5c86fc0bf62e5a437a5c7705":"query GetScmConnectionTiny ($id: ID, $name: String) {\n\tscmConnection(id: $id, name: $name) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:c59085c3cc9fc0cdf5fdab1ad6426d70cad3c18d61e8099408b0f729ff7896a0":"query GetGroup ($name: String!) {\n\tgroup(name: $name) {\n\t\t... GroupFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\n","sha256:c648bed210879433e880936999a0177cfed858de16ae630b4d28fdf328e5ba8c":"query ListClusterStackIds ($after: String, $first: Int, $before: String, $last: Int) {\n\tclusterStackRuns(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\t... StackRunIdEdgeFragment\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment StackRunIdEdgeFragment on StackRunEdge {\n\tnode {\n\t\t... StackRunIdFragment\n\t}\n}\nfragment StackRunIdFragment on StackRun {\n\tid\n}\n","sha256:c6e7aaf82961c3a494e7dad20a5034cb38d7b6c7f7d314ede07872165c9514c2":"mutation CreateServiceDeployment ($clusterId: ID!, $attributes: ServiceDeploymentAttributes!) {\n\tcreateServiceDeployment(clusterId: $clusterId, attributes: $attributes) {\n\t\t... ServiceDeploymentExtended\n\t}\n}\nfragment ServiceDeploymentExtended on ServiceDeployment {\n\tcluster {\n\t\t... BaseClusterFragment\n\t}\n\terrors {\n\t\t... ErrorFragment\n\t}\n\trevision {\n\t\t... RevisionFragment\n\t}\n\tcontexts {\n\t\t... ServiceContextFragment\n\t}\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n\timports {\n\t\tstack {\n\t\t\t... InfrastructureStackTinyFragment\n\t\t}\n\t\toutputs {\n\t\t\t... StackOutputFragment\n\t\t}\n\t}\n}\nfragment BaseClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tdistro\n\tpingedAt\n\tcurrentVersion\n\tkasUrl\n\tmetadata\n\ttags {\n\t\t... ClusterTags\n\t}\n\tcredential {\n\t\t... ProviderCredentialFragment\n\t}\n\tprovider {\n\t\t... BaseClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment BaseClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment ErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\nfragment RevisionFragment on Revision {\n\tid\n\tsha\n\tgit {\n\t\tref\n\t\tfolder\n\t}\n}\nfragment ServiceContextFragment on ServiceContext {\n\tid\n\tname\n\tconfiguration\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment InfrastructureStackTinyFragment on InfrastructureStack {\n\tid\n\tname\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\n","sha256:c8e0fc5503578fcfd182a285f270117143fea26d5788ae339ea658d7824ead7a":"query GetStackRunApprovedAt ($id: ID!) {\n\tstackRun(id: $id) {\n\t\tapprovedAt\n\t}\n}\n","sha256:c8e4277ef08029190490500c4713ee3efdb9cbd85fe2afa0ab64c9fde367c4c8":"mutation CreateWorkbenchWebhook ($workbenchId: ID!, $attributes: WorkbenchWebhookAttributes!) {\n\tcreateWorkbenchWebhook(workbenchId: $workbenchId, attributes: $attributes) {\n\t\t... WorkbenchWebhookFragment\n\t}\n}\nfragment WorkbenchWebhookFragment on WorkbenchWebhook {\n\tid\n\tname\n\tprompt\n\tpriority\n\tmatches {\n\t\tregex\n\t\tsubstring\n\t\tcaseInsensitive\n\t}\n\twebhook {\n\t\tid\n\t\tname\n\t}\n\tissueWebhook {\n\t\tid\n\t\tname\n\t}\n\tworkbench {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:c9d7d1433d0b7c8a13ee3f48b79dc7ca7d2fbe3fbc95a59605bc4bcb6105be48":"query GetPipelines ($after: String) {\n\tpipelines(first: 100, after: $after) {\n\t\tedges {\n\t\t\t... PipelineEdgeFragment\n\t\t}\n\t}\n}\nfragment PipelineEdgeFragment on PipelineEdge {\n\tnode {\n\t\t... PipelineFragment\n\t}\n}\nfragment PipelineFragment on Pipeline {\n\tid\n\tname\n\tstages {\n\t\t... PipelineStageFragment\n\t}\n\tedges {\n\t\t... PipelineStageEdgeFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment PipelineStageFragment on PipelineStage {\n\tid\n\tname\n\tservices {\n\t\tservice {\n\t\t\t... ServiceDeploymentBaseFragment\n\t\t}\n\t\tcriteria {\n\t\t\tsource {\n\t\t\t\t... ServiceDeploymentBaseFragment\n\t\t\t}\n\t\t\tsecrets\n\t\t}\n\t}\n}\nfragment ServiceDeploymentBaseFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment PipelineStageEdgeFragment on PipelineStageEdge {\n\tid\n\tfrom {\n\t\t... PipelineStageFragment\n\t}\n\tto {\n\t\t... PipelineStageFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:cb1a08aa627034f757f578e60b19cdf3d86cb6d07d0e092665994437fd3b0c8c":"query GetAgentRuntimeByName ($name: String!, $clusterId: ID!) {\n\tagentRuntime(name: $name, clusterId: $clusterId) {\n\t\t... AgentRuntimeFragment\n\t}\n}\nfragment AgentRuntimeFragment on AgentRuntime {\n\tid\n\tname\n\ttype\n\taiProxy\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tcreateBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:cb23898da395a1259a3eea1069486d08bdd398b8e19ab7767f479516394fb545":"mutation IngestClusterCost ($costs: CostIngestAttributes!) {\n\tingestClusterCost(costs: $costs)\n}\n","sha256:cbf979fbb7271eae49c77cfe27cf45f05476150dbf4d2de0e43a6baed1fbbf9f":"mutation CreateCustomStackRun ($attributes: CustomStackRunAttributes!) {\n\tcreateCustomStackRun(attributes: $attributes) {\n\t\t... CustomStackRunFragment\n\t}\n}\nfragment CustomStackRunFragment on CustomStackRun {\n\tid\n\tname\n\tstack {\n\t\tid\n\t}\n\tdocumentation\n\tcommands {\n\t\t... StackCommandFragment\n\t}\n\tconfiguration {\n\t\t... PrConfigurationFragment\n\t}\n}\nfragment StackCommandFragment on StackCommand {\n\tcmd\n\targs\n\tdir\n}\nfragment PrConfigurationFragment on PrConfiguration {\n\ttype\n\tname\n\tdefault\n\tdocumentation\n\tlongform\n\tplaceholder\n\toptional\n\tcondition {\n\t\t... PrConfigurationConditionFragment\n\t}\n}\nfragment PrConfigurationConditionFragment on PrConfigurationCondition {\n\toperation\n\tfield\n\tvalue\n}\n","sha256:cc23c54f364f7fc86b1677d8f80d5f90f66bb7dbb52aa56ac2ca9505602f7c63":"mutation ApproveStackRun ($id: ID!) {\n\tapproveStackRun(id: $id) {\n\t\t... StackRunIdFragment\n\t}\n}\nfragment StackRunIdFragment on StackRun {\n\tid\n}\n","sha256:cc4284d27cd80dffc23f9a8b628e071a091bf13b1e8a75c1a628b487c92ea8c8":"mutation DeleteGroup ($groupId: ID!) {\n\tdeleteGroup(groupId: $groupId) {\n\t\t... GroupFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\n","sha256:cc42a4ba14d88488b304966f6db6111e774264487956c89be92e2ce5a1f825d8":"query ListWorkbenchTools ($after: String, $first: Int, $before: String, $last: Int, $q: String) {\n\tworkbenchTools(after: $after, first: $first, before: $before, last: $last, q: $q) {\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... WorkbenchToolFragment\n\t\t\t}\n\t\t}\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t}\n}\nfragment WorkbenchToolFragment on WorkbenchTool {\n\tid\n\tname\n\ttool\n\tcategories\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tmcpServer {\n\t\t... MCPServerFragment\n\t}\n\tcloudConnection {\n\t\t... CloudConnectionFragment\n\t}\n\tscmConnection {\n\t\tid\n\t\tname\n\t\ttype\n\t}\n\tconfiguration {\n\t\thttp {\n\t\t\turl\n\t\t\tmethod\n\t\t\tfunction\n\t\t\theaders {\n\t\t\t\tname\n\t\t\t\tvalue\n\t\t\t}\n\t\t\tbody\n\t\t\tinputSchema\n\t\t}\n\t\telastic {\n\t\t\tindex\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\topensearch {\n\t\t\thost\n\t\t\tindex\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t\tassumeRoleArn\n\t\t\tusePodIdentity\n\t\t}\n\t\tprometheus {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t\tawsSigv4\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t}\n\t\tloki {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tvictoriaLogs {\n\t\t\turl\n\t\t\tusername\n\t\t\taccountId\n\t\t\tprojectId\n\t\t}\n\t\tsplunk {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\ttempo {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tjaeger {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\tdatadog {\n\t\t\tsite\n\t\t}\n\t\tdynatrace {\n\t\t\turl\n\t\t}\n\t\tcloudwatch {\n\t\t\tregion\n\t\t\tlogGroupNames\n\t\t\troleArn\n\t\t\troleSessionName\n\t\t}\n\t\tazure {\n\t\t\tsubscriptionId\n\t\t\ttenantId\n\t\t\tclientId\n\t\t\tprometheusUrl\n\t\t}\n\t\tsentry {\n\t\t\turl\n\t\t}\n\t\tlinear {\n\t\t\turl\n\t\t}\n\t\tslack {\n\t\t\turl\n\t\t}\n\t\tpagerduty {\n\t\t\turl\n\t\t}\n\t\tteams {\n\t\t\tclientId\n\t\t\ttenantId\n\t\t}\n\t\tatlassian {\n\t\t\turl\n\t\t\temail\n\t\t}\n\t\texa {\n\t\t\turl\n\t\t}\n\t\tgithub {\n\t\t\turl\n\t\t\ttoolset\n\t\t\tappId\n\t\t\tinstallationId\n\t\t}\n\t\tgitlab {\n\t\t\turl\n\t\t}\n\t\tbitbucket {\n\t\t\turl\n\t\t}\n\t\tbitbucketDatacenter {\n\t\t\turl\n\t\t}\n\t\tazureDevops {\n\t\t\turl\n\t\t}\n\t\tlambda {\n\t\t\tlambdaArn\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tcloudRun {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tazureFunction {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tdocker {\n\t\t\turl\n\t\t\tprovider\n\t\t\tproxy {\n\t\t\t\turl\n\t\t\t\tnoproxy\n\t\t\t}\n\t\t}\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment MCPServerFragment on McpServer {\n\tid\n\tname\n\turl\n\tauthentication {\n\t\tplural\n\t\theaders {\n\t\t\tname\n\t\t\tvalue\n\t\t}\n\t}\n\tconfirm\n}\nfragment CloudConnectionFragment on CloudConnection {\n\tid\n\tname\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tprovider\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\n","sha256:cd777b75a96e3400c0bdd6a75f4e63860fb1019c20082c6509d7a8a9179d2947":"query GetInfrastructureStackStatus ($id: ID, $name: String) {\n\tinfrastructureStack(id: $id, name: $name) {\n\t\t... InfrastructureStackStatusFragment\n\t}\n}\nfragment InfrastructureStackStatusFragment on InfrastructureStack {\n\tstatus\n}\n","sha256:cf8c42483cecc603b29f28f8c4f4f0fc9cba008aa0ae2228ba85683ddb71c31c":"query GetUserTiny ($email: String!) {\n\tuser(email: $email) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:d0243f65b29d1f4a3dc0fc341329bd64771a81b61027b49b5c657638fc12d993":"mutation DetachStack ($id: ID!) {\n\tdetachStack(id: $id) {\n\t\t... InfrastructureStackIdFragment\n\t}\n}\nfragment InfrastructureStackIdFragment on InfrastructureStack {\n\tid\n}\n","sha256:d0deff4a75c0315f913f84dcd0babf240d3dd12dc7b753f6796ac081b4b10b6c":"query ListAgentRunsMinimal ($after: String, $first: Int, $before: String, $last: Int) {\n\tagentRuns(after: $after, first: $first, before: $before, last: $last) {\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... AgentRunMinimalFragment\n\t\t\t}\n\t\t}\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t}\n}\nfragment AgentRunMinimalFragment on AgentRun {\n\tid\n\tprompt\n\trepository\n\tbranch\n\theadBranch\n\truntime {\n\t\ttype\n\t}\n\tpullRequests {\n\t\tid\n\t\tstatus\n\t\turl\n\t\ttitle\n\t\tref\n\t}\n\tupload {\n\t\tsession\n\t\tpatch\n\t\tscreenRecording\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\n","sha256:d17fdd1f3585dbb5fe41795aa0f06da222848b52ad30ef0827bc0eb968fc3c68":"mutation DeleteGlobalServiceDeployment ($id: ID!) {\n\tdeleteGlobalService(id: $id) {\n\t\t... GlobalServiceFragment\n\t}\n}\nfragment GlobalServiceFragment on GlobalService {\n\tid\n\tname\n\tdistro\n\tprovider {\n\t\tid\n\t}\n\tservice {\n\t\tid\n\t}\n\ttags {\n\t\t... ClusterTags\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:d1b43ea072acd70d56e7e3637eb05a13b854defd61c46d3f03cac4c831be0df4":"mutation UpsertPrGovernance ($attributes: PrGovernanceAttributes!) {\n\tupsertPrGovernance(attributes: $attributes) {\n\t\t... PrGovernanceFragment\n\t}\n}\nfragment PrGovernanceFragment on PrGovernance {\n\tid\n\tname\n}\n","sha256:d212c3e56c32e78aa75561817cfa4aa18d96b3f7ef6b60e363dfdd864b78bbc4":"mutation PingCluster ($attributes: ClusterPing!) {\n\tpingCluster(attributes: $attributes) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:d37c4e4d20689e9ff322abbb478c77fc9a8aec7b995b68617d3401d1f123b39b":"mutation CreateScmConnection ($attributes: ScmConnectionAttributes!) {\n\tcreateScmConnection(attributes: $attributes) {\n\t\t... ScmConnectionFragment\n\t}\n}\nfragment ScmConnectionFragment on ScmConnection {\n\tid\n\tname\n\tapiUrl\n\tbaseUrl\n\ttype\n\tusername\n\tinsertedAt\n\tupdatedAt\n}\n","sha256:d5f1c35ebe2aa909ebaf89248f6120c9fbe9b6b991bc615ae72c786bbc519892":"mutation DeleteWorkbench ($id: ID!) {\n\tdeleteWorkbench(id: $id) {\n\t\t... WorkbenchFragment\n\t}\n}\nfragment WorkbenchFragment on Workbench {\n\tid\n\tname\n\tdescription\n\tsystemPrompt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tagentRuntime {\n\t\t... TinyAgentRuntimeFragment\n\t}\n\tconfiguration {\n\t\tcoding {\n\t\t\tmode\n\t\t\trepositories\n\t\t}\n\t\tinfrastructure {\n\t\t\tservices\n\t\t\tstacks\n\t\t\tkubernetes\n\t\t}\n\t\tobservability {\n\t\t\tlogs\n\t\t\tmetrics\n\t\t}\n\t}\n\tskills {\n\t\tref {\n\t\t\tref\n\t\t\tfolder\n\t\t\tfiles\n\t\t}\n\t\tfiles\n\t}\n\ttools {\n\t\t... WorkbenchToolFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment TinyAgentRuntimeFragment on AgentRuntime {\n\tid\n\tname\n\ttype\n\tcluster {\n\t\tid\n\t\tname\n\t\thandle\n\t}\n}\nfragment WorkbenchToolFragment on WorkbenchTool {\n\tid\n\tname\n\ttool\n\tcategories\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tmcpServer {\n\t\t... MCPServerFragment\n\t}\n\tcloudConnection {\n\t\t... CloudConnectionFragment\n\t}\n\tscmConnection {\n\t\tid\n\t\tname\n\t\ttype\n\t}\n\tconfiguration {\n\t\thttp {\n\t\t\turl\n\t\t\tmethod\n\t\t\tfunction\n\t\t\theaders {\n\t\t\t\tname\n\t\t\t\tvalue\n\t\t\t}\n\t\t\tbody\n\t\t\tinputSchema\n\t\t}\n\t\telastic {\n\t\t\tindex\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\topensearch {\n\t\t\thost\n\t\t\tindex\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t\tassumeRoleArn\n\t\t\tusePodIdentity\n\t\t}\n\t\tprometheus {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t\tawsSigv4\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t}\n\t\tloki {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tvictoriaLogs {\n\t\t\turl\n\t\t\tusername\n\t\t\taccountId\n\t\t\tprojectId\n\t\t}\n\t\tsplunk {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\ttempo {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tjaeger {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\tdatadog {\n\t\t\tsite\n\t\t}\n\t\tdynatrace {\n\t\t\turl\n\t\t}\n\t\tcloudwatch {\n\t\t\tregion\n\t\t\tlogGroupNames\n\t\t\troleArn\n\t\t\troleSessionName\n\t\t}\n\t\tazure {\n\t\t\tsubscriptionId\n\t\t\ttenantId\n\t\t\tclientId\n\t\t\tprometheusUrl\n\t\t}\n\t\tsentry {\n\t\t\turl\n\t\t}\n\t\tlinear {\n\t\t\turl\n\t\t}\n\t\tslack {\n\t\t\turl\n\t\t}\n\t\tpagerduty {\n\t\t\turl\n\t\t}\n\t\tteams {\n\t\t\tclientId\n\t\t\ttenantId\n\t\t}\n\t\tatlassian {\n\t\t\turl\n\t\t\temail\n\t\t}\n\t\texa {\n\t\t\turl\n\t\t}\n\t\tgithub {\n\t\t\turl\n\t\t\ttoolset\n\t\t\tappId\n\t\t\tinstallationId\n\t\t}\n\t\tgitlab {\n\t\t\turl\n\t\t}\n\t\tbitbucket {\n\t\t\turl\n\t\t}\n\t\tbitbucketDatacenter {\n\t\t\turl\n\t\t}\n\t\tazureDevops {\n\t\t\turl\n\t\t}\n\t\tlambda {\n\t\t\tlambdaArn\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tcloudRun {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tazureFunction {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tdocker {\n\t\t\turl\n\t\t\tprovider\n\t\t\tproxy {\n\t\t\t\turl\n\t\t\t\tnoproxy\n\t\t\t}\n\t\t}\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment MCPServerFragment on McpServer {\n\tid\n\tname\n\turl\n\tauthentication {\n\t\tplural\n\t\theaders {\n\t\t\tname\n\t\t\tvalue\n\t\t}\n\t}\n\tconfirm\n}\nfragment CloudConnectionFragment on CloudConnection {\n\tid\n\tname\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tprovider\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:d666f635df84ed6a6c279cd0f46a5ede9d26b15ec7aac618a0d96fb731fb7dda":"query GetAccessToken ($id: ID!) {\n\taccessToken(id: $id) {\n\t\t... AccessTokenFragment\n\t}\n}\nfragment AccessTokenFragment on AccessToken {\n\tid\n\ttoken\n}\n","sha256:d7a398fe4bbf2a5f798ff3b3cc4b219587eeb27f422f3afb15c9621926dcb1e4":"mutation DeleteClusterProvider ($id: ID!) {\n\tdeleteClusterProvider(id: $id) {\n\t\t... ClusterProviderFragment\n\t}\n}\nfragment ClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\tdeletedAt\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tservice {\n\t\t... ServiceDeploymentFragment\n\t}\n\tcredentials {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\n","sha256:d7d71625718364b0b47e0f2fcacf1411f6ce8f1a5f8d5368133b7c28ee931c2d":"query GetClusterRegistration ($id: ID, $machineId: String) {\n\tclusterRegistration(id: $id, machineId: $machineId) {\n\t\t... ClusterRegistrationFragment\n\t}\n}\nfragment ClusterRegistrationFragment on ClusterRegistration {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tmachineId\n\tname\n\thandle\n\tmetadata\n\ttags {\n\t\t... ClusterTags\n\t}\n\tcreator {\n\t\t... UserFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:d9d6a609a379b3b6ba578167a4b9218c222ffede1152770c7df98cd5558bdb57":"mutation AgentPrReview ($runId: ID!, $attributes: AgentPrReviewAttributes!) {\n\tagentPrReview(runId: $runId, attributes: $attributes) {\n\t\t... PullRequestFragment\n\t}\n}\nfragment PullRequestFragment on PullRequest {\n\tid\n\tstatus\n\turl\n\ttitle\n\tcreator\n\tref\n}\n","sha256:da49a26dea358a0bd0fbe7d5293211ce6a6264208cd6a62c06f3fbbecda3d907":"query ListClusterStacks ($after: String, $first: Int, $before: String, $last: Int) {\n\tclusterStackRuns(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\t... StackRunEdgeFragment\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment StackRunEdgeFragment on StackRunEdge {\n\tnode {\n\t\t... StackRunFragment\n\t}\n}\nfragment StackRunFragment on StackRun {\n\tid\n\ttype\n\tstatus\n\tapproval\n\tapprovedAt\n\ttarball\n\tworkdir\n\tmanageState\n\tvariables\n\tdryRun\n\tstateUrls {\n\t\tterraform {\n\t\t\taddress\n\t\t\tlock\n\t\t\tunlock\n\t\t}\n\t}\n\tpluralCreds {\n\t\turl\n\t\ttoken\n\t}\n\tactor {\n\t\t... UserFragment\n\t}\n\tstack {\n\t\t... InfrastructureStackFragment\n\t}\n\tstate {\n\t\t... StackStateFragment\n\t}\n\tsteps {\n\t\t... RunStepFragment\n\t}\n\tfiles {\n\t\t... StackFileFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n\tenvironment {\n\t\t... StackEnvironmentFragment\n\t}\n\toutput {\n\t\t... StackOutputFragment\n\t}\n\terrors {\n\t\t... ServiceErrorFragment\n\t}\n\tviolations {\n\t\t... StackPolicyViolationFragment\n\t}\n\tpolicyEngine {\n\t\t... PolicyEngineFragment\n\t}\n\tapprover {\n\t\t... UserFragment\n\t}\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment InfrastructureStackFragment on InfrastructureStack {\n\tid\n\tname\n\ttype\n\tvariables\n\tapproval\n\tworkdir\n\tmanageState\n\tdeletedAt\n\tgit {\n\t\t... GitRefFragment\n\t}\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tfiles {\n\t\t... StackFileFragment\n\t}\n\tenvironment {\n\t\t... StackEnvironmentFragment\n\t}\n\toutput {\n\t\t... StackOutputFragment\n\t}\n\tstate {\n\t\t... StackStateFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tpolicyEngine {\n\t\t... PolicyEngineFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment StackConfigurationFragment on StackConfiguration {\n\timage\n\tversion\n\ttag\n\thooks {\n\t\t... StackHookFragment\n\t}\n\tterraform {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tterragrunt {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tpulumi {\n\t\tparallel\n\t\trefresh\n\t\tapproveEmpty\n\t\tstack\n\t\tbackendUrl\n\t}\n\tansible {\n\t\tinventory\n\t\tplaybook\n\t\tprivateKeyFile\n\t\tconfigFile\n\t}\n}\nfragment StackHookFragment on StackHook {\n\tcmd\n\targs\n\tafterStage\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment StackFileFragment on StackFile {\n\tpath\n\tcontent\n}\nfragment StackEnvironmentFragment on StackEnvironment {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackStateFragment on StackState {\n\tid\n\tplan\n\tplanJson\n\tstate {\n\t\t... StackStateResourceFragment\n\t}\n}\nfragment StackStateResourceFragment on StackStateResource {\n\tidentifier\n\tresource\n\tname\n\tconfiguration\n\tlinks\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment PolicyEngineFragment on PolicyEngine {\n\ttype\n\tmaxSeverity\n\tcustomPolicies\n}\nfragment RunStepFragment on RunStep {\n\tid\n\tstatus\n\tstage\n\tname\n\tcmd\n\targs\n\trequireApproval\n\tindex\n}\nfragment ServiceErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\nfragment StackPolicyViolationFragment on StackPolicyViolation {\n\tid\n\ttitle\n\tdescription\n\tpolicyId\n\tpolicyModule\n\tpolicyUrl\n\tseverity\n\tresolution\n\tcauses {\n\t\t... StackViolationCauseFragment\n\t}\n}\nfragment StackViolationCauseFragment on StackViolationCause {\n\tstart\n\tend\n\tresource\n\tfilename\n\tlines {\n\t\t... StackViolationCauseLineFragment\n\t}\n}\nfragment StackViolationCauseLineFragment on StackViolationCauseLine {\n\tfirst\n\tlast\n\tcontent\n\tline\n}\n","sha256:da61f9d23f2bb33137008e58f123fe876dd8b1313e9e4c9bcde20a36f0af2026":"mutation UpdateClusterRestore ($id: ID!, $attributes: RestoreAttributes!) {\n\tupdateClusterRestore(id: $id, attributes: $attributes) {\n\t\t... ClusterRestoreFragment\n\t}\n}\nfragment ClusterRestoreFragment on ClusterRestore {\n\tid\n\tstatus\n\tbackup {\n\t\t... ClusterBackupFragment\n\t}\n}\nfragment ClusterBackupFragment on ClusterBackup {\n\tid\n\tname\n\tcluster {\n\t\tid\n\t}\n\tgarbageCollected\n}\n","sha256:da7c309e7952dd39dd8aff2fb5caff9e91fd9b874fd67a885a8fa9919c56f922":"query GetFederatedCredential ($id: ID!) {\n\tfederatedCredential(id: $id) {\n\t\t... FederatedCredentialFragment\n\t}\n}\nfragment FederatedCredentialFragment on FederatedCredential {\n\tid\n\tclaimsLike\n\tissuer\n\tscopes\n\tinsertedAt\n\tupdatedAt\n\tuser {\n\t\tid\n\t\tname\n\t\temail\n\t}\n}\n","sha256:db848743beb32ccf52efc157a7df4acd0e6f68d1b66b1563f014a7aa5b503794":"mutation CreateWorkbenchTool ($attributes: WorkbenchToolAttributes!) {\n\tcreateWorkbenchTool(attributes: $attributes) {\n\t\t... WorkbenchToolFragment\n\t}\n}\nfragment WorkbenchToolFragment on WorkbenchTool {\n\tid\n\tname\n\ttool\n\tcategories\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tmcpServer {\n\t\t... MCPServerFragment\n\t}\n\tcloudConnection {\n\t\t... CloudConnectionFragment\n\t}\n\tscmConnection {\n\t\tid\n\t\tname\n\t\ttype\n\t}\n\tconfiguration {\n\t\thttp {\n\t\t\turl\n\t\t\tmethod\n\t\t\tfunction\n\t\t\theaders {\n\t\t\t\tname\n\t\t\t\tvalue\n\t\t\t}\n\t\t\tbody\n\t\t\tinputSchema\n\t\t}\n\t\telastic {\n\t\t\tindex\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\topensearch {\n\t\t\thost\n\t\t\tindex\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t\tassumeRoleArn\n\t\t\tusePodIdentity\n\t\t}\n\t\tprometheus {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t\tawsSigv4\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t}\n\t\tloki {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tvictoriaLogs {\n\t\t\turl\n\t\t\tusername\n\t\t\taccountId\n\t\t\tprojectId\n\t\t}\n\t\tsplunk {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\ttempo {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tjaeger {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\tdatadog {\n\t\t\tsite\n\t\t}\n\t\tdynatrace {\n\t\t\turl\n\t\t}\n\t\tcloudwatch {\n\t\t\tregion\n\t\t\tlogGroupNames\n\t\t\troleArn\n\t\t\troleSessionName\n\t\t}\n\t\tazure {\n\t\t\tsubscriptionId\n\t\t\ttenantId\n\t\t\tclientId\n\t\t\tprometheusUrl\n\t\t}\n\t\tsentry {\n\t\t\turl\n\t\t}\n\t\tlinear {\n\t\t\turl\n\t\t}\n\t\tslack {\n\t\t\turl\n\t\t}\n\t\tpagerduty {\n\t\t\turl\n\t\t}\n\t\tteams {\n\t\t\tclientId\n\t\t\ttenantId\n\t\t}\n\t\tatlassian {\n\t\t\turl\n\t\t\temail\n\t\t}\n\t\texa {\n\t\t\turl\n\t\t}\n\t\tgithub {\n\t\t\turl\n\t\t\ttoolset\n\t\t\tappId\n\t\t\tinstallationId\n\t\t}\n\t\tgitlab {\n\t\t\turl\n\t\t}\n\t\tbitbucket {\n\t\t\turl\n\t\t}\n\t\tbitbucketDatacenter {\n\t\t\turl\n\t\t}\n\t\tazureDevops {\n\t\t\turl\n\t\t}\n\t\tlambda {\n\t\t\tlambdaArn\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tcloudRun {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tazureFunction {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tdocker {\n\t\t\turl\n\t\t\tprovider\n\t\t\tproxy {\n\t\t\t\turl\n\t\t\t\tnoproxy\n\t\t\t}\n\t\t}\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment MCPServerFragment on McpServer {\n\tid\n\tname\n\turl\n\tauthentication {\n\t\tplural\n\t\theaders {\n\t\t\tname\n\t\t\tvalue\n\t\t}\n\t}\n\tconfirm\n}\nfragment CloudConnectionFragment on CloudConnection {\n\tid\n\tname\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tprovider\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:dd43f3ef75185258586ab4bb1b086ed6a2703f09a5e439ea3f4a7cda94429d74":"mutation UpdateCustomStackRun ($id: ID!, $attributes: CustomStackRunAttributes!) {\n\tupdateCustomStackRun(id: $id, attributes: $attributes) {\n\t\t... CustomStackRunFragment\n\t}\n}\nfragment CustomStackRunFragment on CustomStackRun {\n\tid\n\tname\n\tstack {\n\t\tid\n\t}\n\tdocumentation\n\tcommands {\n\t\t... StackCommandFragment\n\t}\n\tconfiguration {\n\t\t... PrConfigurationFragment\n\t}\n}\nfragment StackCommandFragment on StackCommand {\n\tcmd\n\targs\n\tdir\n}\nfragment PrConfigurationFragment on PrConfiguration {\n\ttype\n\tname\n\tdefault\n\tdocumentation\n\tlongform\n\tplaceholder\n\toptional\n\tcondition {\n\t\t... PrConfigurationConditionFragment\n\t}\n}\nfragment PrConfigurationConditionFragment on PrConfigurationCondition {\n\toperation\n\tfield\n\tvalue\n}\n","sha256:df1a376b62fbd1450e92d22cb75ad7ee44d7f03f99bfb7d5c0e9d899ed428b22":"mutation DeleteFlow ($id: ID!) {\n\tdeleteFlow(id: $id) {\n\t\tid\n\t}\n}\n","sha256:e00dac57c9bbde70847c095096e903c6b33b62d4e20bc848a5996649ed738826":"query GetServiceDeployment ($id: ID!) {\n\tserviceDeployment(id: $id) {\n\t\t... ServiceDeploymentExtended\n\t}\n}\nfragment ServiceDeploymentExtended on ServiceDeployment {\n\tcluster {\n\t\t... BaseClusterFragment\n\t}\n\terrors {\n\t\t... ErrorFragment\n\t}\n\trevision {\n\t\t... RevisionFragment\n\t}\n\tcontexts {\n\t\t... ServiceContextFragment\n\t}\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n\timports {\n\t\tstack {\n\t\t\t... InfrastructureStackTinyFragment\n\t\t}\n\t\toutputs {\n\t\t\t... StackOutputFragment\n\t\t}\n\t}\n}\nfragment BaseClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tdistro\n\tpingedAt\n\tcurrentVersion\n\tkasUrl\n\tmetadata\n\ttags {\n\t\t... ClusterTags\n\t}\n\tcredential {\n\t\t... ProviderCredentialFragment\n\t}\n\tprovider {\n\t\t... BaseClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment BaseClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment ErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\nfragment RevisionFragment on Revision {\n\tid\n\tsha\n\tgit {\n\t\tref\n\t\tfolder\n\t}\n}\nfragment ServiceContextFragment on ServiceContext {\n\tid\n\tname\n\tconfiguration\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment InfrastructureStackTinyFragment on InfrastructureStack {\n\tid\n\tname\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\n","sha256:e12171fbbb1ccefe73589f2b19ea00806a6d8a4ef0be04692110bfcd18587456":"mutation UpdateRbac ($rbac: RbacAttributes!, $serviceId: ID, $clusterId: ID, $providerId: ID) {\n\tupdateRbac(rbac: $rbac, serviceId: $serviceId, clusterId: $clusterId, providerId: $providerId)\n}\n","sha256:e2d945757a488df65767d201a8b1b87d4485fe2e48cf16478979b6f4c5cd9a20":"mutation AddServiceError ($id: ID!, $errors: [ServiceErrorAttributes]) {\n\tupdateServiceComponents(id: $id, errors: $errors) {\n\t\t... ServiceDeploymentFragment\n\t}\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\n","sha256:e44cf2898da342dcf07148d3868d094a0dd29e5579d25257d5be9c1f0f05489a":"query GetSentinelRunJob ($id: ID!) {\n\tsentinelRunJob(id: $id) {\n\t\t... SentinelRunJobFragment\n\t}\n}\nfragment SentinelRunJobFragment on SentinelRunJob {\n\tid\n\tcheck\n\tstatus\n\tformat\n\tusesGit\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\treference {\n\t\tname\n\t\tnamespace\n\t}\n\tsentinelRun {\n\t\t... SentinelRunFragment\n\t}\n\tcluster {\n\t\tid\n\t\tname\n\t\thandle\n\t\tdistro\n\t}\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment SentinelRunFragment on SentinelRun {\n\tid\n\tstatus\n\tsentinel {\n\t\tid\n\t}\n\tchecks {\n\t\t... SentinelCheckFragment\n\t}\n}\nfragment SentinelCheckFragment on SentinelCheck {\n\tid\n\tname\n\ttype\n\truleFile\n\tconfiguration {\n\t\t... SentinelCheckConfigurationFragment\n\t}\n}\nfragment SentinelCheckConfigurationFragment on SentinelCheckConfiguration {\n\tlog {\n\t\t... SentinelCheckLogConfigurationFragment\n\t}\n\tkubernetes {\n\t\t... SentinelCheckKubernetesConfigurationFragment\n\t}\n\tintegrationTest {\n\t\t... SentinelCheckIntegrationTestConfigurationFragment\n\t}\n}\nfragment SentinelCheckLogConfigurationFragment on SentinelCheckLogConfiguration {\n\tnamespaces\n\tquery\n\tclusterId\n\tfacets {\n\t\tkey\n\t\tvalue\n\t}\n\tduration\n}\nfragment SentinelCheckKubernetesConfigurationFragment on SentinelCheckKubernetesConfiguration {\n\tgroup\n\tversion\n\tkind\n\tname\n\tnamespace\n}\nfragment SentinelCheckIntegrationTestConfigurationFragment on SentinelCheckIntegrationTestConfiguration {\n\tdistro\n\ttags\n\trerunFailures\n\trerunFailuresCount\n\tpostrunScript\n\tgotestsum {\n\t\tp\n\t\tparallel\n\t}\n\tjob {\n\t\t... JobSpecFragment\n\t}\n\tcases {\n\t\t... TestCaseConfigurationFragment\n\t}\n\tdefault {\n\t\t... SentinelCheckIntegrationTestDefaultConfigurationFragment\n\t}\n}\nfragment TestCaseConfigurationFragment on SentinelCheckIntegrationTestCaseConfiguration {\n\tname\n\ttype\n\tcoredns {\n\t\tdialFqdns\n\t\tdelay\n\t\tretries\n\t}\n\tloadbalancer {\n\t\tannotations\n\t\tlabels\n\t\tnamePrefix\n\t\tnamespace\n\t\tdnsProbe {\n\t\t\tfqdn\n\t\t\tdelay\n\t\t\tretries\n\t\t}\n\t}\n\tpvc {\n\t\tnamePrefix\n\t\tstorageClass\n\t\tsize\n\t}\n\traw {\n\t\tyaml\n\t\texpectedResult\n\t}\n}\nfragment SentinelCheckIntegrationTestDefaultConfigurationFragment on SentinelCheckIntegrationTestDefaultConfiguration {\n\tignore\n\tnamespaceAnnotations\n\tnamespaceLabels\n\tregistry\n\tresourceAnnotations\n\tresourceLabels\n}\n","sha256:e59e52086eae818a70aac84cb1c4d4ac1e23135482a8444db2155af8bf60a789":"mutation UpdateServiceAccount ($id: ID!, $attributes: ServiceAccountAttributes!) {\n\tupdateServiceAccount(id: $id, attributes: $attributes) {\n\t\t... UserFragment\n\t}\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:e5c3c0029872eee1c6e1cdd984869fe9a4b27eca35ea11c05567ae7561df3519":"query ListComplianceReportGenerators ($after: String, $before: String, $first: Int, $last: Int) {\n\tcomplianceReportGenerators(after: $after, before: $before, first: $first, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... ComplianceReportGeneratorFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment ComplianceReportGeneratorFragment on ComplianceReportGenerator {\n\tid\n\tname\n\tformat\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:e5f970f2b0557a81ab6348adfc94a898956ea5f945ac0bd067ebc465a588a25e":"mutation UpdateSentinelRunJobStatus ($id: ID!, $attributes: SentinelRunJobUpdateAttributes) {\n\tupdateSentinelRunJob(id: $id, attributes: $attributes) {\n\t\t... SentinelRunJobFragment\n\t}\n}\nfragment SentinelRunJobFragment on SentinelRunJob {\n\tid\n\tcheck\n\tstatus\n\tformat\n\tusesGit\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\treference {\n\t\tname\n\t\tnamespace\n\t}\n\tsentinelRun {\n\t\t... SentinelRunFragment\n\t}\n\tcluster {\n\t\tid\n\t\tname\n\t\thandle\n\t\tdistro\n\t}\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment SentinelRunFragment on SentinelRun {\n\tid\n\tstatus\n\tsentinel {\n\t\tid\n\t}\n\tchecks {\n\t\t... SentinelCheckFragment\n\t}\n}\nfragment SentinelCheckFragment on SentinelCheck {\n\tid\n\tname\n\ttype\n\truleFile\n\tconfiguration {\n\t\t... SentinelCheckConfigurationFragment\n\t}\n}\nfragment SentinelCheckConfigurationFragment on SentinelCheckConfiguration {\n\tlog {\n\t\t... SentinelCheckLogConfigurationFragment\n\t}\n\tkubernetes {\n\t\t... SentinelCheckKubernetesConfigurationFragment\n\t}\n\tintegrationTest {\n\t\t... SentinelCheckIntegrationTestConfigurationFragment\n\t}\n}\nfragment SentinelCheckLogConfigurationFragment on SentinelCheckLogConfiguration {\n\tnamespaces\n\tquery\n\tclusterId\n\tfacets {\n\t\tkey\n\t\tvalue\n\t}\n\tduration\n}\nfragment SentinelCheckKubernetesConfigurationFragment on SentinelCheckKubernetesConfiguration {\n\tgroup\n\tversion\n\tkind\n\tname\n\tnamespace\n}\nfragment SentinelCheckIntegrationTestConfigurationFragment on SentinelCheckIntegrationTestConfiguration {\n\tdistro\n\ttags\n\trerunFailures\n\trerunFailuresCount\n\tpostrunScript\n\tgotestsum {\n\t\tp\n\t\tparallel\n\t}\n\tjob {\n\t\t... JobSpecFragment\n\t}\n\tcases {\n\t\t... TestCaseConfigurationFragment\n\t}\n\tdefault {\n\t\t... SentinelCheckIntegrationTestDefaultConfigurationFragment\n\t}\n}\nfragment TestCaseConfigurationFragment on SentinelCheckIntegrationTestCaseConfiguration {\n\tname\n\ttype\n\tcoredns {\n\t\tdialFqdns\n\t\tdelay\n\t\tretries\n\t}\n\tloadbalancer {\n\t\tannotations\n\t\tlabels\n\t\tnamePrefix\n\t\tnamespace\n\t\tdnsProbe {\n\t\t\tfqdn\n\t\t\tdelay\n\t\t\tretries\n\t\t}\n\t}\n\tpvc {\n\t\tnamePrefix\n\t\tstorageClass\n\t\tsize\n\t}\n\traw {\n\t\tyaml\n\t\texpectedResult\n\t}\n}\nfragment SentinelCheckIntegrationTestDefaultConfigurationFragment on SentinelCheckIntegrationTestDefaultConfiguration {\n\tignore\n\tnamespaceAnnotations\n\tnamespaceLabels\n\tregistry\n\tresourceAnnotations\n\tresourceLabels\n}\n","sha256:e64a2264b1a894d3db35c700efe1e5b72103efab97275077b7184600bb81b4ec":"query GetServiceDeploymentTiny ($id: ID!) {\n\tserviceDeployment(id: $id) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:e81829a6508fe6b8fb4e8d0e7b4180772c5ebff701a3011e1ce4a365cdcea6c5":"query GetSentinelRun ($id: ID!) {\n\tsentinelRun(id: $id) {\n\t\t... SentinelRunFragment\n\t}\n}\nfragment SentinelRunFragment on SentinelRun {\n\tid\n\tstatus\n\tsentinel {\n\t\tid\n\t}\n\tchecks {\n\t\t... SentinelCheckFragment\n\t}\n}\nfragment SentinelCheckFragment on SentinelCheck {\n\tid\n\tname\n\ttype\n\truleFile\n\tconfiguration {\n\t\t... SentinelCheckConfigurationFragment\n\t}\n}\nfragment SentinelCheckConfigurationFragment on SentinelCheckConfiguration {\n\tlog {\n\t\t... SentinelCheckLogConfigurationFragment\n\t}\n\tkubernetes {\n\t\t... SentinelCheckKubernetesConfigurationFragment\n\t}\n\tintegrationTest {\n\t\t... SentinelCheckIntegrationTestConfigurationFragment\n\t}\n}\nfragment SentinelCheckLogConfigurationFragment on SentinelCheckLogConfiguration {\n\tnamespaces\n\tquery\n\tclusterId\n\tfacets {\n\t\tkey\n\t\tvalue\n\t}\n\tduration\n}\nfragment SentinelCheckKubernetesConfigurationFragment on SentinelCheckKubernetesConfiguration {\n\tgroup\n\tversion\n\tkind\n\tname\n\tnamespace\n}\nfragment SentinelCheckIntegrationTestConfigurationFragment on SentinelCheckIntegrationTestConfiguration {\n\tdistro\n\ttags\n\trerunFailures\n\trerunFailuresCount\n\tpostrunScript\n\tgotestsum {\n\t\tp\n\t\tparallel\n\t}\n\tjob {\n\t\t... JobSpecFragment\n\t}\n\tcases {\n\t\t... TestCaseConfigurationFragment\n\t}\n\tdefault {\n\t\t... SentinelCheckIntegrationTestDefaultConfigurationFragment\n\t}\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment TestCaseConfigurationFragment on SentinelCheckIntegrationTestCaseConfiguration {\n\tname\n\ttype\n\tcoredns {\n\t\tdialFqdns\n\t\tdelay\n\t\tretries\n\t}\n\tloadbalancer {\n\t\tannotations\n\t\tlabels\n\t\tnamePrefix\n\t\tnamespace\n\t\tdnsProbe {\n\t\t\tfqdn\n\t\t\tdelay\n\t\t\tretries\n\t\t}\n\t}\n\tpvc {\n\t\tnamePrefix\n\t\tstorageClass\n\t\tsize\n\t}\n\traw {\n\t\tyaml\n\t\texpectedResult\n\t}\n}\nfragment SentinelCheckIntegrationTestDefaultConfigurationFragment on SentinelCheckIntegrationTestDefaultConfiguration {\n\tignore\n\tnamespaceAnnotations\n\tnamespaceLabels\n\tregistry\n\tresourceAnnotations\n\tresourceLabels\n}\n","sha256:e885bd9d9a88f0e525d69bee24aba63717c7969bcda29dcc1e0181db1d6553f7":"mutation UpdateGroup ($groupId: ID!, $attributtes: GroupAttributes!) {\n\tupdateGroup(groupId: $groupId, attributes: $attributtes) {\n\t\t... GroupFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\n","sha256:e8cabd7bee2b3ec8fb69f3c07726d145c7ba7d1342e884bb6674c48ee584d3f2":"query GetObserverTiny ($id: ID, $name: String) {\n\tobserver(id: $id, name: $name) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:e98aa15a1c0af4f3b5d1831279f62d9ef48c9a28217191e54b8e7545e322356a":"mutation UpsertAgentRuntime ($attributes: AgentRuntimeAttributes!) {\n\tupsertAgentRuntime(attributes: $attributes) {\n\t\t... AgentRuntimeFragment\n\t}\n}\nfragment AgentRuntimeFragment on AgentRuntime {\n\tid\n\tname\n\ttype\n\taiProxy\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tcreateBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:ea42f99ac6aa82489ff83d4b6a3569d01af1e44663670ce7983d6e0950e00445":"mutation CreateOIDCProvider ($type: OidcProviderType!, $attributes: OidcProviderAttributes!) {\n\tcreateOidcProvider(type: $type, attributes: $attributes) {\n\t\t... OIDCProviderFragment\n\t}\n}\nfragment OIDCProviderFragment on OidcProvider {\n\tid\n\tname\n\tdescription\n\tclientId\n\tclientSecret\n\tauthMethod\n\tredirectUris\n\tbindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:eb1e79ee0e1ae9924acfacadc2225debe000a1deaf29f4bd0b4fd32bdc06fc37":"mutation KickService ($id: ID!) {\n\tkickService(serviceId: $id) {\n\t\t... ServiceDeploymentExtended\n\t}\n}\nfragment ServiceDeploymentExtended on ServiceDeployment {\n\tcluster {\n\t\t... BaseClusterFragment\n\t}\n\terrors {\n\t\t... ErrorFragment\n\t}\n\trevision {\n\t\t... RevisionFragment\n\t}\n\tcontexts {\n\t\t... ServiceContextFragment\n\t}\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n\timports {\n\t\tstack {\n\t\t\t... InfrastructureStackTinyFragment\n\t\t}\n\t\toutputs {\n\t\t\t... StackOutputFragment\n\t\t}\n\t}\n}\nfragment BaseClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tdistro\n\tpingedAt\n\tcurrentVersion\n\tkasUrl\n\tmetadata\n\ttags {\n\t\t... ClusterTags\n\t}\n\tcredential {\n\t\t... ProviderCredentialFragment\n\t}\n\tprovider {\n\t\t... BaseClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment BaseClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment ErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\nfragment RevisionFragment on Revision {\n\tid\n\tsha\n\tgit {\n\t\tref\n\t\tfolder\n\t}\n}\nfragment ServiceContextFragment on ServiceContext {\n\tid\n\tname\n\tconfiguration\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment InfrastructureStackTinyFragment on InfrastructureStack {\n\tid\n\tname\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\n","sha256:eb48e1387916b107c9eb813c9b4c86628952b1cc47b2cc19138c55e28c0d27c2":"query GetInfrastructureStackId ($id: ID, $name: String) {\n\tinfrastructureStack(id: $id, name: $name) {\n\t\t... InfrastructureStackIdFragment\n\t}\n}\nfragment InfrastructureStackIdFragment on InfrastructureStack {\n\tid\n}\n","sha256:eb6667b96554ee27077292eed506b0777efacdffaee51babf8fdaa2fe20de1df":"query GetObservabilityProviderTiny ($id: ID, $name: String) {\n\tobservabilityProvider(id: $id, name: $name) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:ebb21cf148c1266159da87762af8b07b3d86e2bc357ed7e97e3836552ff47725":"query ListAgentRuntimes ($after: String, $first: Int, $before: String, $last: Int, $q: String, $type: AgentRuntimeType) {\n\tagentRuntimes(after: $after, first: $first, before: $before, last: $last, q: $q, type: $type) {\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... AgentRuntimeFragment\n\t\t\t}\n\t\t}\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t}\n}\nfragment AgentRuntimeFragment on AgentRuntime {\n\tid\n\tname\n\ttype\n\taiProxy\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tcreateBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\n","sha256:edf0898fb4698594637c396cb651e59637dde77354bfd5f6cbac6a174973ab3f":"mutation CreatePolicy ($attributes: PolicyAttributes!) {\n\tcreatePolicy(attributes: $attributes) {\n\t\t... PolicyFragment\n\t}\n}\nfragment PolicyFragment on Policy {\n\tid\n\tname\n\ttype\n\tdescription\n\tpolicy\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:ee2c452c191fc50ec78c441ccd4beaec32bb632b4a32df0b3bbdbf5a77ae2b26":"query GetCluster ($id: ID) {\n\tcluster(id: $id) {\n\t\t... ClusterFragment\n\t}\n}\nfragment ClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tinsertedAt\n\tpingedAt\n\tprotect\n\tcurrentVersion\n\tkasUrl\n\tdeletedAt\n\tmetadata\n\tdistro\n\ttags {\n\t\t... ClusterTags\n\t}\n\tprovider {\n\t\t... ClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tstatus {\n\t\t... ClusterStatusFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\tdeletedAt\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tservice {\n\t\t... ServiceDeploymentFragment\n\t}\n\tcredentials {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment ClusterStatusFragment on ClusterStatus {\n\tconditions {\n\t\t... ClusterConditionFragment\n\t}\n}\nfragment ClusterConditionFragment on ClusterCondition {\n\tstatus\n\ttype\n\tmessage\n\treason\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:f0180c3b7af6b2fd274ee2b25b45dc2f9577ea7cd180278c8873f71e30a8e57c":"query ListWorkbenches ($after: String, $first: Int, $before: String, $last: Int, $q: String) {\n\tworkbenches(after: $after, first: $first, before: $before, last: $last, q: $q) {\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... WorkbenchFragment\n\t\t\t}\n\t\t}\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t}\n}\nfragment WorkbenchFragment on Workbench {\n\tid\n\tname\n\tdescription\n\tsystemPrompt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tagentRuntime {\n\t\t... TinyAgentRuntimeFragment\n\t}\n\tconfiguration {\n\t\tcoding {\n\t\t\tmode\n\t\t\trepositories\n\t\t}\n\t\tinfrastructure {\n\t\t\tservices\n\t\t\tstacks\n\t\t\tkubernetes\n\t\t}\n\t\tobservability {\n\t\t\tlogs\n\t\t\tmetrics\n\t\t}\n\t}\n\tskills {\n\t\tref {\n\t\t\tref\n\t\t\tfolder\n\t\t\tfiles\n\t\t}\n\t\tfiles\n\t}\n\ttools {\n\t\t... WorkbenchToolFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment TinyAgentRuntimeFragment on AgentRuntime {\n\tid\n\tname\n\ttype\n\tcluster {\n\t\tid\n\t\tname\n\t\thandle\n\t}\n}\nfragment WorkbenchToolFragment on WorkbenchTool {\n\tid\n\tname\n\ttool\n\tcategories\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tmcpServer {\n\t\t... MCPServerFragment\n\t}\n\tcloudConnection {\n\t\t... CloudConnectionFragment\n\t}\n\tscmConnection {\n\t\tid\n\t\tname\n\t\ttype\n\t}\n\tconfiguration {\n\t\thttp {\n\t\t\turl\n\t\t\tmethod\n\t\t\tfunction\n\t\t\theaders {\n\t\t\t\tname\n\t\t\t\tvalue\n\t\t\t}\n\t\t\tbody\n\t\t\tinputSchema\n\t\t}\n\t\telastic {\n\t\t\tindex\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\topensearch {\n\t\t\thost\n\t\t\tindex\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t\tassumeRoleArn\n\t\t\tusePodIdentity\n\t\t}\n\t\tprometheus {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t\tawsSigv4\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t}\n\t\tloki {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tvictoriaLogs {\n\t\t\turl\n\t\t\tusername\n\t\t\taccountId\n\t\t\tprojectId\n\t\t}\n\t\tsplunk {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\ttempo {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tjaeger {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\tdatadog {\n\t\t\tsite\n\t\t}\n\t\tdynatrace {\n\t\t\turl\n\t\t}\n\t\tcloudwatch {\n\t\t\tregion\n\t\t\tlogGroupNames\n\t\t\troleArn\n\t\t\troleSessionName\n\t\t}\n\t\tazure {\n\t\t\tsubscriptionId\n\t\t\ttenantId\n\t\t\tclientId\n\t\t\tprometheusUrl\n\t\t}\n\t\tsentry {\n\t\t\turl\n\t\t}\n\t\tlinear {\n\t\t\turl\n\t\t}\n\t\tslack {\n\t\t\turl\n\t\t}\n\t\tpagerduty {\n\t\t\turl\n\t\t}\n\t\tteams {\n\t\t\tclientId\n\t\t\ttenantId\n\t\t}\n\t\tatlassian {\n\t\t\turl\n\t\t\temail\n\t\t}\n\t\texa {\n\t\t\turl\n\t\t}\n\t\tgithub {\n\t\t\turl\n\t\t\ttoolset\n\t\t\tappId\n\t\t\tinstallationId\n\t\t}\n\t\tgitlab {\n\t\t\turl\n\t\t}\n\t\tbitbucket {\n\t\t\turl\n\t\t}\n\t\tbitbucketDatacenter {\n\t\t\turl\n\t\t}\n\t\tazureDevops {\n\t\t\turl\n\t\t}\n\t\tlambda {\n\t\t\tlambdaArn\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tcloudRun {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tazureFunction {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tdocker {\n\t\t\turl\n\t\t\tprovider\n\t\t\tproxy {\n\t\t\t\turl\n\t\t\t\tnoproxy\n\t\t\t}\n\t\t}\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment MCPServerFragment on McpServer {\n\tid\n\tname\n\turl\n\tauthentication {\n\t\tplural\n\t\theaders {\n\t\t\tname\n\t\t\tvalue\n\t\t}\n\t}\n\tconfirm\n}\nfragment CloudConnectionFragment on CloudConnection {\n\tid\n\tname\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tprovider\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\n","sha256:f0877907330fe5fe1eb0c25fde95aa37e9cc7c9e0a1c18f5fd432ec35fbdaf0f":"mutation UpdateStack ($id: ID!, $attributes: StackAttributes!) {\n\tupdateStack(id: $id, attributes: $attributes) {\n\t\t... InfrastructureStackFragment\n\t}\n}\nfragment InfrastructureStackFragment on InfrastructureStack {\n\tid\n\tname\n\ttype\n\tvariables\n\tapproval\n\tworkdir\n\tmanageState\n\tdeletedAt\n\tgit {\n\t\t... GitRefFragment\n\t}\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tfiles {\n\t\t... StackFileFragment\n\t}\n\tenvironment {\n\t\t... StackEnvironmentFragment\n\t}\n\toutput {\n\t\t... StackOutputFragment\n\t}\n\tstate {\n\t\t... StackStateFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tpolicyEngine {\n\t\t... PolicyEngineFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment StackConfigurationFragment on StackConfiguration {\n\timage\n\tversion\n\ttag\n\thooks {\n\t\t... StackHookFragment\n\t}\n\tterraform {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tterragrunt {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tpulumi {\n\t\tparallel\n\t\trefresh\n\t\tapproveEmpty\n\t\tstack\n\t\tbackendUrl\n\t}\n\tansible {\n\t\tinventory\n\t\tplaybook\n\t\tprivateKeyFile\n\t\tconfigFile\n\t}\n}\nfragment StackHookFragment on StackHook {\n\tcmd\n\targs\n\tafterStage\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment StackFileFragment on StackFile {\n\tpath\n\tcontent\n}\nfragment StackEnvironmentFragment on StackEnvironment {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackStateFragment on StackState {\n\tid\n\tplan\n\tplanJson\n\tstate {\n\t\t... StackStateResourceFragment\n\t}\n}\nfragment StackStateResourceFragment on StackStateResource {\n\tidentifier\n\tresource\n\tname\n\tconfiguration\n\tlinks\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment PolicyEngineFragment on PolicyEngine {\n\ttype\n\tmaxSeverity\n\tcustomPolicies\n}\n","sha256:f0e05ce093b55732e58f7c3095178c28f5fe253dc86cb3fe35b8d9780e729d8a":"mutation DeleteProviderCredential ($id: ID!) {\n\tdeleteProviderCredential(id: $id) {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\n","sha256:f0f3bc7a7e51984167ff9097cb46eea2b6f8511fde8e987e799db5e919392da2":"mutation UpdatePolicy ($id: ID!, $attributes: PolicyAttributes!) {\n\tupdatePolicy(id: $id, attributes: $attributes) {\n\t\t... PolicyFragment\n\t}\n}\nfragment PolicyFragment on Policy {\n\tid\n\tname\n\ttype\n\tdescription\n\tpolicy\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:f2bb0c00963bc3dd9e407275110593d11307a2f5ad6b0874d0ec68e39f98aacc":"query GetFlow ($id: ID!) {\n\tflow(id: $id) {\n\t\t... FlowFragment\n\t}\n}\nfragment FlowFragment on Flow {\n\tid\n\tname\n\tdescription\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tproject {\n\t\t... ProjectFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment ProjectFragment on Project {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\tdefault\n\tdescription\n\tdisableInsights\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\n","sha256:f2e2e6aea69a2fe6413ac04731bf6bdf9b1b8fbfbc631f64081b97925cf0c4d5":"mutation CreatePrAutomation ($attributes: PrAutomationAttributes!) {\n\tcreatePrAutomation(attributes: $attributes) {\n\t\t... PrAutomationFragment\n\t}\n}\nfragment PrAutomationFragment on PrAutomation {\n\tid\n\tname\n\ttitle\n\taddon\n\tmessage\n\tidentifier\n\tinsertedAt\n\tupdatedAt\n}\n","sha256:f48fca8fbe86193ecceac779139b392ec35b9668b6391b87e9e485968adbe281":"mutation KickServiceByHandle ($cluster: String!, $name: String!) {\n\tkickService(cluster: $cluster, name: $name) {\n\t\t... ServiceDeploymentExtended\n\t}\n}\nfragment ServiceDeploymentExtended on ServiceDeployment {\n\tcluster {\n\t\t... BaseClusterFragment\n\t}\n\terrors {\n\t\t... ErrorFragment\n\t}\n\trevision {\n\t\t... RevisionFragment\n\t}\n\tcontexts {\n\t\t... ServiceContextFragment\n\t}\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n\timports {\n\t\tstack {\n\t\t\t... InfrastructureStackTinyFragment\n\t\t}\n\t\toutputs {\n\t\t\t... StackOutputFragment\n\t\t}\n\t}\n}\nfragment BaseClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tdistro\n\tpingedAt\n\tcurrentVersion\n\tkasUrl\n\tmetadata\n\ttags {\n\t\t... ClusterTags\n\t}\n\tcredential {\n\t\t... ProviderCredentialFragment\n\t}\n\tprovider {\n\t\t... BaseClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment BaseClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment ErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\nfragment RevisionFragment on Revision {\n\tid\n\tsha\n\tgit {\n\t\tref\n\t\tfolder\n\t}\n}\nfragment ServiceContextFragment on ServiceContext {\n\tid\n\tname\n\tconfiguration\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment InfrastructureStackTinyFragment on InfrastructureStack {\n\tid\n\tname\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\n","sha256:f4c23df10fd69bac428668e234d4671734030cdb043ab60cf1c2d1ae81755751":"mutation CloneServiceDeployment ($clusterId: ID!, $id: ID!, $attributes: ServiceCloneAttributes!) {\n\tcloneService(clusterId: $clusterId, serviceId: $id, attributes: $attributes) {\n\t\t... ServiceDeploymentFragment\n\t}\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\n","sha256:f4e1c56176b7a939e788ef5b53f4787503b89c032124e826851a5ff4aceb0f25":"query GetNotificationRouterByName ($name: String) {\n\tnotificationRouter(name: $name) {\n\t\t... NotificationRouterFragment\n\t}\n}\nfragment NotificationRouterFragment on NotificationRouter {\n\tid\n\tname\n\tsinks {\n\t\t... NotificationSinkFragment\n\t}\n\tevents\n}\nfragment NotificationSinkFragment on NotificationSink {\n\tid\n\tname\n\ttype\n\tconfiguration {\n\t\t... SinkConfigurationFragment\n\t}\n\tnotificationBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment SinkConfigurationFragment on SinkConfiguration {\n\tid\n\tslack {\n\t\t... UrlSinkConfigurationFragment\n\t}\n\tteams {\n\t\t... UrlSinkConfigurationFragment\n\t}\n}\nfragment UrlSinkConfigurationFragment on UrlSinkConfiguration {\n\turl\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:f6ed33ad9b1d5a5809a4e165bd5ef8f45b11473299e695b900de16f0e019638e":"mutation CreateBindingPolicy ($attributes: BindingPolicyAttributes!) {\n\tcreateBindingPolicy(attributes: $attributes) {\n\t\t... BindingPolicyFragment\n\t}\n}\nfragment BindingPolicyFragment on BindingPolicy {\n\tid\n\ttype\n\tinterval\n\tnextPollAt\n\tmatches {\n\t\tworkbench {\n\t\t\tregexes\n\t\t}\n\t}\n\tpolicy {\n\t\t... TinyPolicyFragment\n\t}\n\tbindPolicy {\n\t\t... TinyPolicyFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyPolicyFragment on Policy {\n\tid\n\tname\n}\n","sha256:f6f84fe259c76394005edc0fae05274cf74dbc7798901ae09e0ffcd10cc83f56":"mutation UpsertMCPServer ($attributes: McpServerAttributes!) {\n\tupsertMcpServer(attributes: $attributes) {\n\t\t... MCPServerFragment\n\t}\n}\nfragment MCPServerFragment on McpServer {\n\tid\n\tname\n\turl\n\tauthentication {\n\t\tplural\n\t\theaders {\n\t\t\tname\n\t\t\tvalue\n\t\t}\n\t}\n\tconfirm\n}\n","sha256:f8ad34afb74d7611413565ccb547ce422f230839b2e0ab0ca2a63d8da00a58d0":"query ListAgentRuns ($after: String, $first: Int, $before: String, $last: Int) {\n\tagentRuns(after: $after, first: $first, before: $before, last: $last) {\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... AgentRunFragment\n\t\t\t}\n\t\t}\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t}\n}\nfragment AgentRunFragment on AgentRun {\n\tid\n\tprompt\n\trepository\n\tbranch\n\theadBranch\n\tmode\n\treviewDepth\n\tlanguage\n\tlanguageVersion\n\ttodos {\n\t\t... AgentTodoFragment\n\t}\n\tprompts {\n\t\t... AgentPromptFragment\n\t}\n\tskills {\n\t\tname\n\t\tdescription\n\t\tcontents\n\t}\n\tstatus\n\tpodReference {\n\t\t... AgentPodReferenceFragment\n\t}\n\terror\n\tanalysis {\n\t\t... AgentAnalysisFragment\n\t}\n\tusage {\n\t\tinputTokens\n\t\toutputTokens\n\t\ttotalTokens\n\t\tcachedTokens\n\t\treasoningTokens\n\t\tinputCost\n\t\toutputCost\n\t\ttotalCost\n\t}\n\tscmCreds {\n\t\t... ScmCredentialFragment\n\t}\n\tpluralCreds {\n\t\t... PluralCredsFragment\n\t}\n\tworkbenchMcpUrl\n\truntime {\n\t\t... AgentRuntimeFragment\n\t}\n\tuser {\n\t\tid\n\t\tname\n\t\temail\n\t}\n\tflow {\n\t\tid\n\t\tname\n\t}\n\tpullRequests {\n\t\t... PullRequestFragment\n\t}\n\tupload {\n\t\t... AgentRunUploadFragment\n\t}\n\tbabysit\n\tbabysitInterval\n\tapproval\n\tapprovedAt\n\tfollowup\n\tfollowupPrUrl\n}\nfragment AgentTodoFragment on AgentTodo {\n\tdescription\n\tdone\n\ttitle\n}\nfragment AgentPromptFragment on AgentPrompt {\n\tid\n\tprompt\n\tseq\n}\nfragment AgentPodReferenceFragment on AgentPodReference {\n\tname\n\tnamespace\n}\nfragment AgentAnalysisFragment on AgentAnalysis {\n\tsummary\n\tanalysis\n\tbullets\n}\nfragment ScmCredentialFragment on ScmCreds {\n\ttoken\n\tusername\n\texaKey\n}\nfragment PluralCredsFragment on PluralCreds {\n\ttoken\n\turl\n}\nfragment AgentRuntimeFragment on AgentRuntime {\n\tid\n\tname\n\ttype\n\taiProxy\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tcreateBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment PullRequestFragment on PullRequest {\n\tid\n\tstatus\n\turl\n\ttitle\n\tcreator\n\tref\n}\nfragment AgentRunUploadFragment on AgentRunUpload {\n\tid\n\tsession\n\tscreenRecording\n\tpatch\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\n","sha256:fb582babd9105b9d3a968a697cd3c6879d73cc169cb3a0ea2ff6919653b93159":"query GetPersonaTiny ($id: ID!) {\n\tpersona(id: $id) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:fb5ea857664bc64ec6b9b3be0df5183537c6ada36d9076badf3035fac4821160":"mutation updateGate ($id: ID!, $attributes: GateUpdateAttributes!) {\n\tupdateGate(id: $id, attributes: $attributes) {\n\t\t... PipelineGateFragment\n\t}\n}\nfragment PipelineGateFragment on PipelineGate {\n\tid\n\tname\n\ttype\n\tstate\n\tupdatedAt\n\tspec {\n\t\t... GateSpecFragment\n\t}\n\tstatus {\n\t\t... GateStatusFragment\n\t}\n}\nfragment GateSpecFragment on GateSpec {\n\tjob {\n\t\t... JobSpecFragment\n\t}\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment GateStatusFragment on GateStatus {\n\tjobRef {\n\t\t... JobReferenceFragment\n\t}\n}\nfragment JobReferenceFragment on JobReference {\n\tname\n\tnamespace\n}\n","sha256:fbbe6bebeab1e039a67523921914f1c01201317c02cc98e06dec4433b164babe":"mutation UpsertFlow ($attributes: FlowAttributes!) {\n\tupsertFlow(attributes: $attributes) {\n\t\t... FlowFragment\n\t}\n}\nfragment FlowFragment on Flow {\n\tid\n\tname\n\tdescription\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tproject {\n\t\t... ProjectFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment ProjectFragment on Project {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\tdefault\n\tdescription\n\tdisableInsights\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\n","sha256:fd1e534eae2f32dcc454ce202bcdf126e56a5fd1783af6d72bac469daf44711a":"mutation UpsertObservabilityWebhook ($attributes: ObservabilityWebhookAttributes!) {\n\tupsertObservabilityWebhook(attributes: $attributes) {\n\t\t... ObservabilityWebhookFragment\n\t}\n}\nfragment ObservabilityWebhookFragment on ObservabilityWebhook {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\ttype\n\turl\n}\n","sha256:fd2719879c20e353e13ab4632ed7ef0463e32c44312ba4718fa3c3398f85757b":"mutation DeleteUpgradePlanCallout ($name: String!) {\n\tdeleteUpgradePlanCallout(name: $name) {\n\t\tid\n\t}\n}\n","sha256:fe29529018620357fb036988eaedf93dcc5f4c261a1790008fe871e730df22a7":"mutation CreateAgentMessageOutput ($attributes: AgentMessageOutputAttributes!) {\n\tagentMessageOutput(attributes: $attributes) {\n\t\tmessageId\n\t\tagentRunId\n\t\tstdout\n\t\tstderr\n\t}\n}\n","sha256:fe6d1ea15a4c48af7dd3d108284742c3e213ae0ca2d056b54e9f69e76d324ff0":"query GetPipeline ($id: ID!) {\n\tpipeline(id: $id) {\n\t\t... PipelineFragmentMinimal\n\t}\n}\nfragment PipelineFragmentMinimal on Pipeline {\n\tid\n\tname\n}\n","sha256:fe9a6d6142da6bdab74374a10496278f9c48e7c7d5be86f30230ab48f378cec0":"query GetClusterIdByHandle ($handle: String) {\n\tcluster(handle: $handle) {\n\t\t... {\n\t\t\tid\n\t\t}\n\t}\n}\n","sha256:feaaf702508e6b2448a4d426421ceaece0bdb6c525c329b24c8944dec9373dc3":"query PagedClusterServices ($after: String, $first: Int, $before: String, $last: Int) {\n\tpagedClusterServices(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\t... ServiceDeploymentEdgeFragment\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment ServiceDeploymentEdgeFragment on ServiceDeploymentEdge {\n\tnode {\n\t\t... ServiceDeploymentBaseFragment\n\t}\n}\nfragment ServiceDeploymentBaseFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\n"}} +{"operations":{"sha256:00103bd4468d331dceccf9f2cf1c3770fe14da6023e65301de2f423934a180df":"query GetNamespaceByName ($name: String!) {\n\tmanagedNamespace(name: $name) {\n\t\t... ManagedNamespaceFragment\n\t}\n}\nfragment ManagedNamespaceFragment on ManagedNamespace {\n\tid\n\tname\n\tdescription\n\tlabels\n\tannotations\n\tpullSecrets\n\tservice {\n\t\t... ServiceTemplateFragment\n\t}\n\ttarget {\n\t\t... ClusterTargetFragment\n\t}\n\tdeletedAt\n}\nfragment ServiceTemplateFragment on ServiceTemplate {\n\tname\n\tnamespace\n\ttemplated\n\trepositoryId\n\tcontexts\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tsyncConfig {\n\t\t... SyncConfigFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment SyncConfigFragment on SyncConfig {\n\tcreateNamespace\n\tnamespaceMetadata {\n\t\t... NamespaceMetadataFragment\n\t}\n}\nfragment NamespaceMetadataFragment on NamespaceMetadata {\n\tlabels\n\tannotations\n}\nfragment ClusterTargetFragment on ClusterTarget {\n\ttags\n\tdistro\n}\n","sha256:0079baec6ec668221625f6674e7a6d3e9732fb54295023d0694fb597a5655fed":"mutation CreateAgentRun ($runtimeId: ID!, $attributes: AgentRunAttributes!) {\n\tcreateAgentRun(runtimeId: $runtimeId, attributes: $attributes) {\n\t\t... AgentRunFragment\n\t}\n}\nfragment AgentRunFragment on AgentRun {\n\tid\n\tprompt\n\trepository\n\tbranch\n\theadBranch\n\tmode\n\treviewDepth\n\tlanguage\n\tlanguageVersion\n\ttodos {\n\t\t... AgentTodoFragment\n\t}\n\tprompts {\n\t\t... AgentPromptFragment\n\t}\n\tskills {\n\t\tname\n\t\tdescription\n\t\tcontents\n\t}\n\tstatus\n\tpodReference {\n\t\t... AgentPodReferenceFragment\n\t}\n\terror\n\tanalysis {\n\t\t... AgentAnalysisFragment\n\t}\n\tusage {\n\t\tinputTokens\n\t\toutputTokens\n\t\ttotalTokens\n\t\tcachedTokens\n\t\treasoningTokens\n\t\tinputCost\n\t\toutputCost\n\t\ttotalCost\n\t}\n\tscmCreds {\n\t\t... ScmCredentialFragment\n\t}\n\tpluralCreds {\n\t\t... PluralCredsFragment\n\t}\n\tworkbenchMcpUrl\n\truntime {\n\t\t... AgentRuntimeFragment\n\t}\n\tuser {\n\t\tid\n\t\tname\n\t\temail\n\t}\n\tflow {\n\t\tid\n\t\tname\n\t}\n\tpullRequests {\n\t\t... PullRequestFragment\n\t}\n\tupload {\n\t\t... AgentRunUploadFragment\n\t}\n\tbabysit\n\tbabysitInterval\n\tapproval\n\tapprovedAt\n\tfollowup\n\tfollowupPrUrl\n}\nfragment AgentTodoFragment on AgentTodo {\n\tdescription\n\tdone\n\ttitle\n}\nfragment AgentPromptFragment on AgentPrompt {\n\tid\n\tprompt\n\tseq\n}\nfragment AgentPodReferenceFragment on AgentPodReference {\n\tname\n\tnamespace\n}\nfragment AgentAnalysisFragment on AgentAnalysis {\n\tsummary\n\tanalysis\n\tbullets\n}\nfragment ScmCredentialFragment on ScmCreds {\n\ttoken\n\tusername\n\texaKey\n}\nfragment PluralCredsFragment on PluralCreds {\n\ttoken\n\turl\n}\nfragment AgentRuntimeFragment on AgentRuntime {\n\tid\n\tname\n\ttype\n\taiProxy\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tcreateBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment PullRequestFragment on PullRequest {\n\tid\n\tstatus\n\turl\n\ttitle\n\tcreator\n\tref\n}\nfragment AgentRunUploadFragment on AgentRunUpload {\n\tid\n\tsession\n\tscreenRecording\n\tpatch\n}\n","sha256:00cc798d4efba980df734ed908f4a6eff35ea9532ba5a24ce2e678c47b9e4edd":"mutation DeleteGitRepository ($id: ID!) {\n\tdeleteGitRepository(id: $id) {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\n","sha256:02711e8d33b56e8ab950ec3feaf8e17a23665d6c78ac21affb27f66a0c066834":"query GetServiceDeploymentTinyByHandle ($cluster: String!, $name: String!) {\n\tserviceDeployment(cluster: $cluster, name: $name) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:0495efe67b265523309e91230a439c44a3566aa4f54eae8038c54b08e197da4a":"mutation CreatePullRequest ($id: ID!, $identifier: String, $branch: String, $context: Json) {\n\tcreatePullRequest(id: $id, identifier: $identifier, branch: $branch, context: $context) {\n\t\t... PullRequestFragment\n\t}\n}\nfragment PullRequestFragment on PullRequest {\n\tid\n\tstatus\n\turl\n\ttitle\n\tcreator\n\tref\n}\n","sha256:04f446a7241e2a77f9c03860529c22f6097f0b065b8a91812af367db06c51783":"mutation DeletePipeline ($id: ID!) {\n\tdeletePipeline(id: $id) {\n\t\t... PipelineFragmentId\n\t}\n}\nfragment PipelineFragmentId on Pipeline {\n\tid\n}\n","sha256:05614f559b29689b95f90bfb84adf304e3898a429c26fc3b55dda779621f3d26":"mutation UpsertCatalog ($attributes: CatalogAttributes) {\n\tupsertCatalog(attributes: $attributes) {\n\t\t... CatalogFragment\n\t}\n}\nfragment CatalogFragment on Catalog {\n\tid\n\tname\n\tdescription\n\tcategory\n\tauthor\n\tproject {\n\t\t... ProjectFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment ProjectFragment on Project {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\tdefault\n\tdescription\n\tdisableInsights\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:071e713551ffc28f4196427c367142ecc5fa316d0b9fc17c0dfc682f6b1dca67":"query GetProjectTiny ($id: ID, $name: String) {\n\tproject(id: $id, name: $name) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:07fc34a5e5b6a6de044a6b35bf40e5218106f2849f0528e71f8f23287a498858":"mutation UpdateCloudConnection ($id: ID!, $attributes: CloudConnectionAttributes!) {\n\tupdateCloudConnection(id: $id, attributes: $attributes) {\n\t\t... CloudConnectionFragment\n\t}\n}\nfragment CloudConnectionFragment on CloudConnection {\n\tid\n\tname\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tprovider\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:08223278347596ef0a0f5ab698ed517803e9dcf41027abe6e1b00e1765a24534":"mutation UpdateAgentRunTodos ($id: ID!, $todos: [AgentTodoAttributes]) {\n\tupdateAgentRunTodos(id: $id, todos: $todos) {\n\t\t... AgentRunBaseFragment\n\t}\n}\nfragment AgentRunBaseFragment on AgentRun {\n\tid\n\tprompt\n\trepository\n\tmode\n\tlanguage\n\tlanguageVersion\n\ttodos {\n\t\t... AgentTodoFragment\n\t}\n}\nfragment AgentTodoFragment on AgentTodo {\n\tdescription\n\tdone\n\ttitle\n}\n","sha256:085357a60e4fc347e143328a81f9de10226eed039c1bf5c65180c4a22e0cabbf":"mutation CreateGlobalServiceDeploymentFromTemplate ($attributes: GlobalServiceAttributes!) {\n\tcreateGlobalService(attributes: $attributes) {\n\t\t... GlobalServiceFragment\n\t}\n}\nfragment GlobalServiceFragment on GlobalService {\n\tid\n\tname\n\tdistro\n\tprovider {\n\t\tid\n\t}\n\tservice {\n\t\tid\n\t}\n\ttags {\n\t\t... ClusterTags\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:08538e2a930e5635cdf567d936c4e328614f999e32a060237d625a4bf0a0d818":"query GetPreviewEnvironmentTemplate ($id: ID, $flowId: ID, $name: String) {\n\tpreviewEnvironmentTemplate(id: $id, flowId: $flowId, name: $name) {\n\t\t... PreviewEnvironmentTemplateFragment\n\t}\n}\nfragment PreviewEnvironmentTemplateFragment on PreviewEnvironmentTemplate {\n\tid\n\tname\n\tcommentTemplate\n\tflow {\n\t\tid\n\t}\n\tconnection {\n\t\tid\n\t}\n\ttemplate {\n\t\tname\n\t}\n}\n","sha256:0860bf6411f3d79915d4229c914b2f6f01f790c4f060cb845172f57cc919db2f":"mutation UpdateAgentRun ($id: ID!, $attributes: AgentRunStatusAttributes!) {\n\tupdateAgentRun(id: $id, attributes: $attributes) {\n\t\t... AgentRunFragment\n\t}\n}\nfragment AgentRunFragment on AgentRun {\n\tid\n\tprompt\n\trepository\n\tbranch\n\theadBranch\n\tmode\n\treviewDepth\n\tlanguage\n\tlanguageVersion\n\ttodos {\n\t\t... AgentTodoFragment\n\t}\n\tprompts {\n\t\t... AgentPromptFragment\n\t}\n\tskills {\n\t\tname\n\t\tdescription\n\t\tcontents\n\t}\n\tstatus\n\tpodReference {\n\t\t... AgentPodReferenceFragment\n\t}\n\terror\n\tanalysis {\n\t\t... AgentAnalysisFragment\n\t}\n\tusage {\n\t\tinputTokens\n\t\toutputTokens\n\t\ttotalTokens\n\t\tcachedTokens\n\t\treasoningTokens\n\t\tinputCost\n\t\toutputCost\n\t\ttotalCost\n\t}\n\tscmCreds {\n\t\t... ScmCredentialFragment\n\t}\n\tpluralCreds {\n\t\t... PluralCredsFragment\n\t}\n\tworkbenchMcpUrl\n\truntime {\n\t\t... AgentRuntimeFragment\n\t}\n\tuser {\n\t\tid\n\t\tname\n\t\temail\n\t}\n\tflow {\n\t\tid\n\t\tname\n\t}\n\tpullRequests {\n\t\t... PullRequestFragment\n\t}\n\tupload {\n\t\t... AgentRunUploadFragment\n\t}\n\tbabysit\n\tbabysitInterval\n\tapproval\n\tapprovedAt\n\tfollowup\n\tfollowupPrUrl\n}\nfragment AgentTodoFragment on AgentTodo {\n\tdescription\n\tdone\n\ttitle\n}\nfragment AgentPromptFragment on AgentPrompt {\n\tid\n\tprompt\n\tseq\n}\nfragment AgentPodReferenceFragment on AgentPodReference {\n\tname\n\tnamespace\n}\nfragment AgentAnalysisFragment on AgentAnalysis {\n\tsummary\n\tanalysis\n\tbullets\n}\nfragment ScmCredentialFragment on ScmCreds {\n\ttoken\n\tusername\n\texaKey\n}\nfragment PluralCredsFragment on PluralCreds {\n\ttoken\n\turl\n}\nfragment AgentRuntimeFragment on AgentRuntime {\n\tid\n\tname\n\ttype\n\taiProxy\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tcreateBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment PullRequestFragment on PullRequest {\n\tid\n\tstatus\n\turl\n\ttitle\n\tcreator\n\tref\n}\nfragment AgentRunUploadFragment on AgentRunUpload {\n\tid\n\tsession\n\tscreenRecording\n\tpatch\n}\n","sha256:087514315644018028c9097e305b44d39b6d2a04bbc27db80624db6f7cc0ca72":"query GetCloudConnection ($id: ID, $name: String) {\n\tcloudConnection(id: $id, name: $name) {\n\t\t... CloudConnectionFragment\n\t}\n}\nfragment CloudConnectionFragment on CloudConnection {\n\tid\n\tname\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tprovider\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:0a28bd1898f2387165f13394e8eef522528534c85f28548d81706a42b2711b11":"mutation CreateProject ($attributes: ProjectAttributes!) {\n\tcreateProject(attributes: $attributes) {\n\t\t... ProjectFragment\n\t}\n}\nfragment ProjectFragment on Project {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\tdefault\n\tdescription\n\tdisableInsights\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:0bc7753b4e8e392d65a52f75255bc48a95cdea84ee46118b08f141280cb5aa18":"query ListStackRuns ($id: ID!, $after: String, $before: String, $first: Int, $last: Int) {\n\tinfrastructureStack(id: $id) {\n\t\truns(after: $after, before: $before, first: $first, last: $last) {\n\t\t\tpageInfo {\n\t\t\t\t... PageInfoFragment\n\t\t\t}\n\t\t\tedges {\n\t\t\t\tnode {\n\t\t\t\t\t... StackRunFragment\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment StackRunFragment on StackRun {\n\tid\n\ttype\n\tstatus\n\tapproval\n\tapprovedAt\n\ttarball\n\tworkdir\n\tmanageState\n\tvariables\n\tdryRun\n\tstateUrls {\n\t\tterraform {\n\t\t\taddress\n\t\t\tlock\n\t\t\tunlock\n\t\t}\n\t}\n\tpluralCreds {\n\t\turl\n\t\ttoken\n\t}\n\tactor {\n\t\t... UserFragment\n\t}\n\tstack {\n\t\t... InfrastructureStackFragment\n\t}\n\tstate {\n\t\t... StackStateFragment\n\t}\n\tsteps {\n\t\t... RunStepFragment\n\t}\n\tfiles {\n\t\t... StackFileFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n\tenvironment {\n\t\t... StackEnvironmentFragment\n\t}\n\toutput {\n\t\t... StackOutputFragment\n\t}\n\terrors {\n\t\t... ServiceErrorFragment\n\t}\n\tviolations {\n\t\t... StackPolicyViolationFragment\n\t}\n\tpolicyEngine {\n\t\t... PolicyEngineFragment\n\t}\n\tapprover {\n\t\t... UserFragment\n\t}\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment InfrastructureStackFragment on InfrastructureStack {\n\tid\n\tname\n\ttype\n\tvariables\n\tapproval\n\tworkdir\n\tmanageState\n\tdeletedAt\n\tgit {\n\t\t... GitRefFragment\n\t}\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tfiles {\n\t\t... StackFileFragment\n\t}\n\tenvironment {\n\t\t... StackEnvironmentFragment\n\t}\n\toutput {\n\t\t... StackOutputFragment\n\t}\n\tstate {\n\t\t... StackStateFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tpolicyEngine {\n\t\t... PolicyEngineFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment StackConfigurationFragment on StackConfiguration {\n\timage\n\tversion\n\ttag\n\thooks {\n\t\t... StackHookFragment\n\t}\n\tterraform {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tterragrunt {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tpulumi {\n\t\tparallel\n\t\trefresh\n\t\tapproveEmpty\n\t\tstack\n\t\tbackendUrl\n\t}\n\tansible {\n\t\tinventory\n\t\tplaybook\n\t\tprivateKeyFile\n\t\tconfigFile\n\t}\n}\nfragment StackHookFragment on StackHook {\n\tcmd\n\targs\n\tafterStage\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment StackFileFragment on StackFile {\n\tpath\n\tcontent\n}\nfragment StackEnvironmentFragment on StackEnvironment {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackStateFragment on StackState {\n\tid\n\tplan\n\tplanJson\n\tstate {\n\t\t... StackStateResourceFragment\n\t}\n}\nfragment StackStateResourceFragment on StackStateResource {\n\tidentifier\n\tresource\n\tname\n\tconfiguration\n\tlinks\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment PolicyEngineFragment on PolicyEngine {\n\ttype\n\tmaxSeverity\n\tcustomPolicies\n}\nfragment RunStepFragment on RunStep {\n\tid\n\tstatus\n\tstage\n\tname\n\tcmd\n\targs\n\trequireApproval\n\tindex\n}\nfragment ServiceErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\nfragment StackPolicyViolationFragment on StackPolicyViolation {\n\tid\n\ttitle\n\tdescription\n\tpolicyId\n\tpolicyModule\n\tpolicyUrl\n\tseverity\n\tresolution\n\tcauses {\n\t\t... StackViolationCauseFragment\n\t}\n}\nfragment StackViolationCauseFragment on StackViolationCause {\n\tstart\n\tend\n\tresource\n\tfilename\n\tlines {\n\t\t... StackViolationCauseLineFragment\n\t}\n}\nfragment StackViolationCauseLineFragment on StackViolationCauseLine {\n\tfirst\n\tlast\n\tcontent\n\tline\n}\n","sha256:0c0af919e2a1ba02a7c44e25fe40583b263f45bc1a1639ae2d730c016a86fdbe":"query GetStackRun ($id: ID!) {\n\tstackRun(id: $id) {\n\t\t... StackRunFragment\n\t}\n}\nfragment StackRunFragment on StackRun {\n\tid\n\ttype\n\tstatus\n\tapproval\n\tapprovedAt\n\ttarball\n\tworkdir\n\tmanageState\n\tvariables\n\tdryRun\n\tstateUrls {\n\t\tterraform {\n\t\t\taddress\n\t\t\tlock\n\t\t\tunlock\n\t\t}\n\t}\n\tpluralCreds {\n\t\turl\n\t\ttoken\n\t}\n\tactor {\n\t\t... UserFragment\n\t}\n\tstack {\n\t\t... InfrastructureStackFragment\n\t}\n\tstate {\n\t\t... StackStateFragment\n\t}\n\tsteps {\n\t\t... RunStepFragment\n\t}\n\tfiles {\n\t\t... StackFileFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n\tenvironment {\n\t\t... StackEnvironmentFragment\n\t}\n\toutput {\n\t\t... StackOutputFragment\n\t}\n\terrors {\n\t\t... ServiceErrorFragment\n\t}\n\tviolations {\n\t\t... StackPolicyViolationFragment\n\t}\n\tpolicyEngine {\n\t\t... PolicyEngineFragment\n\t}\n\tapprover {\n\t\t... UserFragment\n\t}\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment InfrastructureStackFragment on InfrastructureStack {\n\tid\n\tname\n\ttype\n\tvariables\n\tapproval\n\tworkdir\n\tmanageState\n\tdeletedAt\n\tgit {\n\t\t... GitRefFragment\n\t}\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tfiles {\n\t\t... StackFileFragment\n\t}\n\tenvironment {\n\t\t... StackEnvironmentFragment\n\t}\n\toutput {\n\t\t... StackOutputFragment\n\t}\n\tstate {\n\t\t... StackStateFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tpolicyEngine {\n\t\t... PolicyEngineFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment StackConfigurationFragment on StackConfiguration {\n\timage\n\tversion\n\ttag\n\thooks {\n\t\t... StackHookFragment\n\t}\n\tterraform {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tterragrunt {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tpulumi {\n\t\tparallel\n\t\trefresh\n\t\tapproveEmpty\n\t\tstack\n\t\tbackendUrl\n\t}\n\tansible {\n\t\tinventory\n\t\tplaybook\n\t\tprivateKeyFile\n\t\tconfigFile\n\t}\n}\nfragment StackHookFragment on StackHook {\n\tcmd\n\targs\n\tafterStage\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment StackFileFragment on StackFile {\n\tpath\n\tcontent\n}\nfragment StackEnvironmentFragment on StackEnvironment {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackStateFragment on StackState {\n\tid\n\tplan\n\tplanJson\n\tstate {\n\t\t... StackStateResourceFragment\n\t}\n}\nfragment StackStateResourceFragment on StackStateResource {\n\tidentifier\n\tresource\n\tname\n\tconfiguration\n\tlinks\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment PolicyEngineFragment on PolicyEngine {\n\ttype\n\tmaxSeverity\n\tcustomPolicies\n}\nfragment RunStepFragment on RunStep {\n\tid\n\tstatus\n\tstage\n\tname\n\tcmd\n\targs\n\trequireApproval\n\tindex\n}\nfragment ServiceErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\nfragment StackPolicyViolationFragment on StackPolicyViolation {\n\tid\n\ttitle\n\tdescription\n\tpolicyId\n\tpolicyModule\n\tpolicyUrl\n\tseverity\n\tresolution\n\tcauses {\n\t\t... StackViolationCauseFragment\n\t}\n}\nfragment StackViolationCauseFragment on StackViolationCause {\n\tstart\n\tend\n\tresource\n\tfilename\n\tlines {\n\t\t... StackViolationCauseLineFragment\n\t}\n}\nfragment StackViolationCauseLineFragment on StackViolationCauseLine {\n\tfirst\n\tlast\n\tcontent\n\tline\n}\n","sha256:0c4c1df078093fe381c14fb9f8ab6e669fedf3a631a8508dbad33ac9cfba8d93":"mutation DeleteWorkbenchTool ($id: ID!) {\n\tdeleteWorkbenchTool(id: $id) {\n\t\t... WorkbenchToolFragment\n\t}\n}\nfragment WorkbenchToolFragment on WorkbenchTool {\n\tid\n\tname\n\ttool\n\tcategories\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tmcpServer {\n\t\t... MCPServerFragment\n\t}\n\tcloudConnection {\n\t\t... CloudConnectionFragment\n\t}\n\tscmConnection {\n\t\tid\n\t\tname\n\t\ttype\n\t}\n\tconfiguration {\n\t\thttp {\n\t\t\turl\n\t\t\tmethod\n\t\t\tfunction\n\t\t\theaders {\n\t\t\t\tname\n\t\t\t\tvalue\n\t\t\t}\n\t\t\tbody\n\t\t\tinputSchema\n\t\t}\n\t\telastic {\n\t\t\tindex\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\topensearch {\n\t\t\thost\n\t\t\tindex\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t\tassumeRoleArn\n\t\t\tusePodIdentity\n\t\t}\n\t\tprometheus {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t\tawsSigv4\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t}\n\t\tloki {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tvictoriaLogs {\n\t\t\turl\n\t\t\tusername\n\t\t\taccountId\n\t\t\tprojectId\n\t\t}\n\t\tsplunk {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\ttempo {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tjaeger {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\tdatadog {\n\t\t\tsite\n\t\t}\n\t\tdynatrace {\n\t\t\turl\n\t\t}\n\t\tcloudwatch {\n\t\t\tregion\n\t\t\tlogGroupNames\n\t\t\troleArn\n\t\t\troleSessionName\n\t\t}\n\t\tazure {\n\t\t\tsubscriptionId\n\t\t\ttenantId\n\t\t\tclientId\n\t\t\tprometheusUrl\n\t\t}\n\t\tsentry {\n\t\t\turl\n\t\t}\n\t\tlinear {\n\t\t\turl\n\t\t}\n\t\tslack {\n\t\t\turl\n\t\t}\n\t\tpagerduty {\n\t\t\turl\n\t\t}\n\t\tteams {\n\t\t\tclientId\n\t\t\ttenantId\n\t\t}\n\t\tatlassian {\n\t\t\turl\n\t\t\temail\n\t\t}\n\t\texa {\n\t\t\turl\n\t\t}\n\t\tgithub {\n\t\t\turl\n\t\t\ttoolset\n\t\t\tappId\n\t\t\tinstallationId\n\t\t}\n\t\tgitlab {\n\t\t\turl\n\t\t}\n\t\tbitbucket {\n\t\t\turl\n\t\t}\n\t\tbitbucketDatacenter {\n\t\t\turl\n\t\t}\n\t\tazureDevops {\n\t\t\turl\n\t\t}\n\t\tlambda {\n\t\t\tlambdaArn\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tcloudRun {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tazureFunction {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tdocker {\n\t\t\turl\n\t\t\tprovider\n\t\t\tproxy {\n\t\t\t\turl\n\t\t\t\tnoproxy\n\t\t\t}\n\t\t}\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment MCPServerFragment on McpServer {\n\tid\n\tname\n\turl\n\tauthentication {\n\t\tplural\n\t\theaders {\n\t\t\tname\n\t\t\tvalue\n\t\t}\n\t}\n\tconfirm\n}\nfragment CloudConnectionFragment on CloudConnection {\n\tid\n\tname\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tprovider\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:0d0a41b5dfa910c86743e2020189205095d82cfdaff768c950becb55d86e2b18":"query GetPrAutomationTiny ($id: ID, $name: String) {\n\tprAutomation(id: $id, name: $name) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:0e44517bb19e961ba5072de436b6c59ae5f5f26a0abe32ae3e8ddee5f69a6aa2":"query GetInfrastructureStack ($id: ID, $name: String) {\n\tinfrastructureStack(id: $id, name: $name) {\n\t\t... InfrastructureStackFragment\n\t}\n}\nfragment InfrastructureStackFragment on InfrastructureStack {\n\tid\n\tname\n\ttype\n\tvariables\n\tapproval\n\tworkdir\n\tmanageState\n\tdeletedAt\n\tgit {\n\t\t... GitRefFragment\n\t}\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tfiles {\n\t\t... StackFileFragment\n\t}\n\tenvironment {\n\t\t... StackEnvironmentFragment\n\t}\n\toutput {\n\t\t... StackOutputFragment\n\t}\n\tstate {\n\t\t... StackStateFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tpolicyEngine {\n\t\t... PolicyEngineFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment StackConfigurationFragment on StackConfiguration {\n\timage\n\tversion\n\ttag\n\thooks {\n\t\t... StackHookFragment\n\t}\n\tterraform {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tterragrunt {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tpulumi {\n\t\tparallel\n\t\trefresh\n\t\tapproveEmpty\n\t\tstack\n\t\tbackendUrl\n\t}\n\tansible {\n\t\tinventory\n\t\tplaybook\n\t\tprivateKeyFile\n\t\tconfigFile\n\t}\n}\nfragment StackHookFragment on StackHook {\n\tcmd\n\targs\n\tafterStage\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment StackFileFragment on StackFile {\n\tpath\n\tcontent\n}\nfragment StackEnvironmentFragment on StackEnvironment {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackStateFragment on StackState {\n\tid\n\tplan\n\tplanJson\n\tstate {\n\t\t... StackStateResourceFragment\n\t}\n}\nfragment StackStateResourceFragment on StackStateResource {\n\tidentifier\n\tresource\n\tname\n\tconfiguration\n\tlinks\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment PolicyEngineFragment on PolicyEngine {\n\ttype\n\tmaxSeverity\n\tcustomPolicies\n}\n","sha256:0f0760bb85acd02798886990edc78e9aac44db50fa883f250d5972519ffa9ce3":"query GetGitRepository ($id: ID, $url: String) {\n\tgitRepository(id: $id, url: $url) {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\n","sha256:0f2aa1a8d7ef81b1122c7d75ae4e54e7f47f04ec942981b778e1d6899309f374":"mutation DeleteCustomCompatibilityMatrix ($name: String!) {\n\tdeleteCustomCompatibilityMatrix(name: $name) {\n\t\tid\n\t}\n}\n","sha256:0fa340d64f20a24b0474d3d73ba219d190d314d53d35e1cd3cba85f0c08b3e9b":"query ListClusterNamespaces ($after: String, $first: Int, $before: String, $last: Int) {\n\tclusterManagedNamespaces(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\t... ManagedNamespaceEdgeFragment\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment ManagedNamespaceEdgeFragment on ManagedNamespaceEdge {\n\tcursor\n\tnode {\n\t\t... ManagedNamespaceMinimalFragment\n\t}\n}\nfragment ManagedNamespaceMinimalFragment on ManagedNamespace {\n\tid\n\tname\n\tdescription\n}\n","sha256:113ac0549d0fcfd701e5bd6f98913d91d1b5c93a64d33494d301d8a0512d0c3b":"mutation DeleteCluster ($id: ID!) {\n\tdeleteCluster(id: $id) {\n\t\tid\n\t}\n}\n","sha256:1241ee42efef6bee48784022906e25828de81d27b66b8b2661a6696b25bf8096":"query ListPolicyConstraints ($after: String, $first: Int, $before: String, $last: Int, $namespace: String, $kind: String, $q: String) {\n\tpolicyConstraints(after: $after, first: $first, before: $before, last: $last, namespace: $namespace, kind: $kind, q: $q) {\n\t\t... PolicyConstraintConnectionFragment\n\t}\n}\nfragment PolicyConstraintConnectionFragment on PolicyConstraintConnection {\n\tpageInfo {\n\t\t... PageInfoFragment\n\t}\n\tedges {\n\t\t... PolicyConstraintEdgeFragment\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment PolicyConstraintEdgeFragment on PolicyConstraintEdge {\n\tcursor\n\tnode {\n\t\t... PolicyConstraintFragment\n\t}\n}\nfragment PolicyConstraintFragment on PolicyConstraint {\n\tid\n\tname\n\tdescription\n\trecommendation\n\tviolationCount\n\tref {\n\t\t... ConstraintRefFragment\n\t}\n\tviolations {\n\t\t... ViolationFragment\n\t}\n}\nfragment ConstraintRefFragment on ConstraintRef {\n\tkind\n\tname\n}\nfragment ViolationFragment on Violation {\n\tid\n\tgroup\n\tversion\n\tkind\n\tnamespace\n\tname\n\tmessage\n}\n","sha256:12978d7990d091e6a41e14baa02a3eec74a42fa51d13c7123407753af75206d5":"mutation DeleteMCPServer ($id: ID!) {\n\tdeleteMcpServer(id: $id) {\n\t\tid\n\t}\n}\n","sha256:14dab7763ca34c91224365fb4ee687491114c4f8417edf9242c56b2471d8e8aa":"mutation UpsertObserver ($attributes: ObserverAttributes!) {\n\tupsertObserver(attributes: $attributes) {\n\t\t... ObserverFragment\n\t}\n}\nfragment ObserverFragment on Observer {\n\tid\n\tname\n\tstatus\n\tcrontab\n\ttarget {\n\t\t... ObserverTargetFragment\n\t}\n\tactions {\n\t\t... ObserverActionFragment\n\t}\n\tproject {\n\t\t... ProjectFragment\n\t}\n\terrors {\n\t\t... ErrorFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment ObserverTargetFragment on ObserverTarget {\n\thelm {\n\t\t... ObserverHelmRepoFragment\n\t}\n\toci {\n\t\t... ObserverOciRepoFragment\n\t}\n}\nfragment ObserverHelmRepoFragment on ObserverHelmRepo {\n\turl\n\tchart\n\tprovider\n}\nfragment ObserverOciRepoFragment on ObserverOciRepo {\n\turl\n\tprovider\n}\nfragment ObserverActionFragment on ObserverAction {\n\ttype\n\tconfiguration {\n\t\t... ObserverActionConfigurationFragment\n\t}\n}\nfragment ObserverActionConfigurationFragment on ObserverActionConfiguration {\n\tpr {\n\t\t... ObserverPrActionFragment\n\t}\n\tpipeline {\n\t\t... ObserverPipelineActionFragment\n\t}\n}\nfragment ObserverPrActionFragment on ObserverPrAction {\n\tautomationId\n\trepository\n\tbranchTemplate\n\tcontext\n}\nfragment ObserverPipelineActionFragment on ObserverPipelineAction {\n\tpipelineId\n\tcontext\n}\nfragment ProjectFragment on Project {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\tdefault\n\tdescription\n\tdisableInsights\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment ErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\n","sha256:156bc954626bd533fcb5d6b04f8818932bf0aac8fe3b75559b80c0fdba618249":"query GetServiceContext ($name: String!) {\n\tserviceContext(name: $name) {\n\t\t... ServiceContextFragment\n\t}\n}\nfragment ServiceContextFragment on ServiceContext {\n\tid\n\tname\n\tconfiguration\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:15709e3e6be95a817cd82440cad42dff3e321b122c6dd4a244b34c11c83e0d60":"mutation AddClusterAuditLog ($audit: ClusterAuditAttributes, $audits: [ClusterAuditAttributes!]) {\n\taddClusterAuditLog(audit: $audit, audits: $audits)\n}\n","sha256:167f4296a579145d132b20e16834fe927e5cbcf3207bc99ee1e4224cde76c0ca":"mutation TriggerRun ($id: ID!) {\n\ttriggerRun(id: $id) {\n\t\t... StackRunBaseFragment\n\t}\n}\nfragment StackRunBaseFragment on StackRun {\n\tid\n\ttype\n\tstatus\n\tapproval\n\tapprovedAt\n\ttarball\n\tworkdir\n\tmanageState\n\tvariables\n\tdryRun\n\tstateUrls {\n\t\tterraform {\n\t\t\taddress\n\t\t\tlock\n\t\t\tunlock\n\t\t}\n\t}\n\tpluralCreds {\n\t\turl\n\t\ttoken\n\t}\n\tactor {\n\t\t... UserFragment\n\t}\n\tstack {\n\t\t... InfrastructureStackFragment\n\t}\n\tstate {\n\t\t... StackStateFragment\n\t}\n\tsteps {\n\t\t... RunStepFragment\n\t}\n\tfiles {\n\t\t... StackFileFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n\tenvironment {\n\t\t... StackEnvironmentFragment\n\t}\n\toutput {\n\t\t... StackOutputFragment\n\t}\n\terrors {\n\t\t... ServiceErrorFragment\n\t}\n\tviolations {\n\t\t... StackPolicyViolationFragment\n\t}\n\tpolicyEngine {\n\t\t... PolicyEngineFragment\n\t}\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment InfrastructureStackFragment on InfrastructureStack {\n\tid\n\tname\n\ttype\n\tvariables\n\tapproval\n\tworkdir\n\tmanageState\n\tdeletedAt\n\tgit {\n\t\t... GitRefFragment\n\t}\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tfiles {\n\t\t... StackFileFragment\n\t}\n\tenvironment {\n\t\t... StackEnvironmentFragment\n\t}\n\toutput {\n\t\t... StackOutputFragment\n\t}\n\tstate {\n\t\t... StackStateFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tpolicyEngine {\n\t\t... PolicyEngineFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment StackConfigurationFragment on StackConfiguration {\n\timage\n\tversion\n\ttag\n\thooks {\n\t\t... StackHookFragment\n\t}\n\tterraform {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tterragrunt {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tpulumi {\n\t\tparallel\n\t\trefresh\n\t\tapproveEmpty\n\t\tstack\n\t\tbackendUrl\n\t}\n\tansible {\n\t\tinventory\n\t\tplaybook\n\t\tprivateKeyFile\n\t\tconfigFile\n\t}\n}\nfragment StackHookFragment on StackHook {\n\tcmd\n\targs\n\tafterStage\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment StackFileFragment on StackFile {\n\tpath\n\tcontent\n}\nfragment StackEnvironmentFragment on StackEnvironment {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackStateFragment on StackState {\n\tid\n\tplan\n\tplanJson\n\tstate {\n\t\t... StackStateResourceFragment\n\t}\n}\nfragment StackStateResourceFragment on StackStateResource {\n\tidentifier\n\tresource\n\tname\n\tconfiguration\n\tlinks\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment PolicyEngineFragment on PolicyEngine {\n\ttype\n\tmaxSeverity\n\tcustomPolicies\n}\nfragment RunStepFragment on RunStep {\n\tid\n\tstatus\n\tstage\n\tname\n\tcmd\n\targs\n\trequireApproval\n\tindex\n}\nfragment ServiceErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\nfragment StackPolicyViolationFragment on StackPolicyViolation {\n\tid\n\ttitle\n\tdescription\n\tpolicyId\n\tpolicyModule\n\tpolicyUrl\n\tseverity\n\tresolution\n\tcauses {\n\t\t... StackViolationCauseFragment\n\t}\n}\nfragment StackViolationCauseFragment on StackViolationCause {\n\tstart\n\tend\n\tresource\n\tfilename\n\tlines {\n\t\t... StackViolationCauseLineFragment\n\t}\n}\nfragment StackViolationCauseLineFragment on StackViolationCauseLine {\n\tfirst\n\tlast\n\tcontent\n\tline\n}\n","sha256:173a6ff059c298faca0983bed5cd23dd2618146a475ba1b318c6df57571088fe":"mutation DetachCluster ($id: ID!) {\n\tdetachCluster(id: $id) {\n\t\tid\n\t}\n}\n","sha256:18dd5f16f5b5edea59cefc781dd47a75481f7fbf8e82fe78bd0b282bdea8ecb1":"query GetServiceContextTiny ($name: String!) {\n\tserviceContext(name: $name) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:19d5a50725b33d0f729cfab39941f60c599fa65fd3b62bc8ccaf516d466d61bd":"mutation DeleteCloudConnection ($id: ID!) {\n\tdeleteCloudConnection(id: $id) {\n\t\t... CloudConnectionFragment\n\t}\n}\nfragment CloudConnectionFragment on CloudConnection {\n\tid\n\tname\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tprovider\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:1b46f5f5487d9da23d5fefe4e9c687345d8262c0c56cc51fba038dcb114804fb":"mutation UpdateClusterRegistration ($id: ID!, $attributes: ClusterRegistrationUpdateAttributes!) {\n\tupdateClusterRegistration(id: $id, attributes: $attributes) {\n\t\t... ClusterRegistrationFragment\n\t}\n}\nfragment ClusterRegistrationFragment on ClusterRegistration {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tmachineId\n\tname\n\thandle\n\tmetadata\n\ttags {\n\t\t... ClusterTags\n\t}\n\tcreator {\n\t\t... UserFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:1b8cbf2dcdf2de8865c73a61fa9d6c804e98ab333aa265a4662e88187f1102c8":"query GetServiceTarball ($id: ID!) {\n\tserviceTarball(id: $id) {\n\t\tpath\n\t\tcontent\n\t}\n}\n","sha256:1bda12b2e70df63429dc0f9828860174e95a031e50753a96c7df1d8fbbc31e5f":"mutation CompletesStackRun ($id: ID!, $attributes: StackRunAttributes!) {\n\tcompleteStackRun(id: $id, attributes: $attributes) {\n\t\t... StackRunIdFragment\n\t}\n}\nfragment StackRunIdFragment on StackRun {\n\tid\n}\n","sha256:1cefc75c539e6334a815541ea29d5b313d62320a0891add20d37aadcb87e2f86":"mutation UpdateGitRepository ($id: ID!, $attributes: GitAttributes!) {\n\tupdateGitRepository(id: $id, attributes: $attributes) {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\n","sha256:1d4359e183ae6b47f7415ab6785626c59d818e2b146ae91e3098c10ef74e4635":"mutation UpdateWorkbenchTool ($id: ID!, $attributes: WorkbenchToolAttributes!) {\n\tupdateWorkbenchTool(id: $id, attributes: $attributes) {\n\t\t... WorkbenchToolFragment\n\t}\n}\nfragment WorkbenchToolFragment on WorkbenchTool {\n\tid\n\tname\n\ttool\n\tcategories\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tmcpServer {\n\t\t... MCPServerFragment\n\t}\n\tcloudConnection {\n\t\t... CloudConnectionFragment\n\t}\n\tscmConnection {\n\t\tid\n\t\tname\n\t\ttype\n\t}\n\tconfiguration {\n\t\thttp {\n\t\t\turl\n\t\t\tmethod\n\t\t\tfunction\n\t\t\theaders {\n\t\t\t\tname\n\t\t\t\tvalue\n\t\t\t}\n\t\t\tbody\n\t\t\tinputSchema\n\t\t}\n\t\telastic {\n\t\t\tindex\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\topensearch {\n\t\t\thost\n\t\t\tindex\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t\tassumeRoleArn\n\t\t\tusePodIdentity\n\t\t}\n\t\tprometheus {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t\tawsSigv4\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t}\n\t\tloki {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tvictoriaLogs {\n\t\t\turl\n\t\t\tusername\n\t\t\taccountId\n\t\t\tprojectId\n\t\t}\n\t\tsplunk {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\ttempo {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tjaeger {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\tdatadog {\n\t\t\tsite\n\t\t}\n\t\tdynatrace {\n\t\t\turl\n\t\t}\n\t\tcloudwatch {\n\t\t\tregion\n\t\t\tlogGroupNames\n\t\t\troleArn\n\t\t\troleSessionName\n\t\t}\n\t\tazure {\n\t\t\tsubscriptionId\n\t\t\ttenantId\n\t\t\tclientId\n\t\t\tprometheusUrl\n\t\t}\n\t\tsentry {\n\t\t\turl\n\t\t}\n\t\tlinear {\n\t\t\turl\n\t\t}\n\t\tslack {\n\t\t\turl\n\t\t}\n\t\tpagerduty {\n\t\t\turl\n\t\t}\n\t\tteams {\n\t\t\tclientId\n\t\t\ttenantId\n\t\t}\n\t\tatlassian {\n\t\t\turl\n\t\t\temail\n\t\t}\n\t\texa {\n\t\t\turl\n\t\t}\n\t\tgithub {\n\t\t\turl\n\t\t\ttoolset\n\t\t\tappId\n\t\t\tinstallationId\n\t\t}\n\t\tgitlab {\n\t\t\turl\n\t\t}\n\t\tbitbucket {\n\t\t\turl\n\t\t}\n\t\tbitbucketDatacenter {\n\t\t\turl\n\t\t}\n\t\tazureDevops {\n\t\t\turl\n\t\t}\n\t\tlambda {\n\t\t\tlambdaArn\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tcloudRun {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tazureFunction {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tdocker {\n\t\t\turl\n\t\t\tprovider\n\t\t\tproxy {\n\t\t\t\turl\n\t\t\t\tnoproxy\n\t\t\t}\n\t\t}\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment MCPServerFragment on McpServer {\n\tid\n\tname\n\turl\n\tauthentication {\n\t\tplural\n\t\theaders {\n\t\t\tname\n\t\t\tvalue\n\t\t}\n\t}\n\tconfirm\n}\nfragment CloudConnectionFragment on CloudConnection {\n\tid\n\tname\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tprovider\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:1e351c0a49167a35fcecf3cd2357422f8d0d46d815b2cefbe94af6a2eea3e050":"mutation UpsertUser ($attributes: UserAttributes!) {\n\tupsertUser(attributes: $attributes) {\n\t\t... UserFragment\n\t}\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:1e3e1e2790a3766fa468050e82832991f68555001110778be9611b060369753e":"mutation CreatePipelineContext ($pipelineId: ID!, $attributes: PipelineContextAttributes!) {\n\tcreatePipelineContext(pipelineId: $pipelineId, attributes: $attributes) {\n\t\t... PipelineContextFragment\n\t}\n}\nfragment PipelineContextFragment on PipelineContext {\n\tid\n\tcontext\n}\n","sha256:1f6e3f1f3f3453e925cba533c56cd78e169a56f9276e8795f8aa63576dd56a24":"mutation UpsertUpgradePlanCallout ($attributes: UpgradePlanCalloutAttributes!) {\n\tupsertUpgradePlanCallout(attributes: $attributes) {\n\t\t... UpgradePlanCalloutFragment\n\t}\n}\nfragment UpgradePlanCalloutFragment on UpgradePlanCallout {\n\tid\n\tname\n}\n","sha256:1f6f1a1489995b77678694f2575e16e943eeee4736e05a91dec811f0f15983f3":"mutation CreateFederatedCredential ($attributes: FederatedCredentialAttributes!) {\n\tcreateFederatedCredential(attributes: $attributes) {\n\t\t... FederatedCredentialFragment\n\t}\n}\nfragment FederatedCredentialFragment on FederatedCredential {\n\tid\n\tclaimsLike\n\tissuer\n\tscopes\n\tinsertedAt\n\tupdatedAt\n\tuser {\n\t\tid\n\t\tname\n\t\temail\n\t}\n}\n","sha256:1ffea4d7cf10ecfd70c134cdf5bfb7dbeaf6434a6a643a55cff81fd9ebbcec0c":"mutation SaveUpgradeInsights ($insights: [UpgradeInsightAttributes], $addons: [CloudAddonAttributes]) {\n\tsaveUpgradeInsights(insights: $insights, addons: $addons) {\n\t\tid\n\t\tname\n\t\tversion\n\t}\n}\n","sha256:203d28df2014c4b7e9a0b2207cf6ccc8a5ef26fdf3e2601c5a3d62109c6837ea":"query ListStackDefinitions ($after: String, $first: Int, $before: String, $last: Int) {\n\tstackDefinitions(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... StackDefinitionFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment StackDefinitionFragment on StackDefinition {\n\tid\n\tname\n\tdescription\n\tinsertedAt\n\tupdatedAt\n\tconfiguration {\n\t\timage\n\t\ttag\n\t\tversion\n\t\thooks {\n\t\t\tcmd\n\t\t\targs\n\t\t\tafterStage\n\t\t}\n\t}\n\tsteps {\n\t\tcmd\n\t\targs\n\t\tstage\n\t\trequireApproval\n\t}\n\tdeleteSteps {\n\t\tcmd\n\t\targs\n\t\tstage\n\t\trequireApproval\n\t}\n}\n","sha256:221cb5170a90de1dc482ba3e31377437aa9b15a97c7b8ff3230177b70e08bfe4":"query GetHelmRepositoryTiny ($url: String!) {\n\thelmRepository(url: $url) {\n\t\tid\n\t}\n}\n","sha256:2345924629957866fb322bc4c388a43686af182cbbddf270b0f30f8a3b377dd0":"query GetGlobalServiceDeployment ($id: ID!) {\n\tglobalService(id: $id) {\n\t\t... GlobalServiceFragment\n\t}\n}\nfragment GlobalServiceFragment on GlobalService {\n\tid\n\tname\n\tdistro\n\tprovider {\n\t\tid\n\t}\n\tservice {\n\t\tid\n\t}\n\ttags {\n\t\t... ClusterTags\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:23583acdae3cdcc986ffa4a7e1a2b55d5e7a3bde0311c3ec5718bfbbea14f219":"query GetGlobalServiceDeploymentByName ($name: String!) {\n\tglobalService(name: $name) {\n\t\t... GlobalServiceFragment\n\t}\n}\nfragment GlobalServiceFragment on GlobalService {\n\tid\n\tname\n\tdistro\n\tprovider {\n\t\tid\n\t}\n\tservice {\n\t\tid\n\t}\n\ttags {\n\t\t... ClusterTags\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:23bb559098a8c85f67e0edcbff659daa6e752c76f0892c65d77432d568398bee":"query GetClusterRestore ($id: ID!) {\n\tclusterRestore(id: $id) {\n\t\t... ClusterRestoreFragment\n\t}\n}\nfragment ClusterRestoreFragment on ClusterRestore {\n\tid\n\tstatus\n\tbackup {\n\t\t... ClusterBackupFragment\n\t}\n}\nfragment ClusterBackupFragment on ClusterBackup {\n\tid\n\tname\n\tcluster {\n\t\tid\n\t}\n\tgarbageCollected\n}\n","sha256:24a3dde607ba5f19327deea354f30f58b8184bcc9d2bbc102fb49b51c5f422b5":"query GetNotificationRouter ($id: ID!) {\n\tnotificationRouter(id: $id) {\n\t\t... NotificationRouterFragment\n\t}\n}\nfragment NotificationRouterFragment on NotificationRouter {\n\tid\n\tname\n\tsinks {\n\t\t... NotificationSinkFragment\n\t}\n\tevents\n}\nfragment NotificationSinkFragment on NotificationSink {\n\tid\n\tname\n\ttype\n\tconfiguration {\n\t\t... SinkConfigurationFragment\n\t}\n\tnotificationBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment SinkConfigurationFragment on SinkConfiguration {\n\tid\n\tslack {\n\t\t... UrlSinkConfigurationFragment\n\t}\n\tteams {\n\t\t... UrlSinkConfigurationFragment\n\t}\n}\nfragment UrlSinkConfigurationFragment on UrlSinkConfiguration {\n\turl\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:25a4c7c811b4dd79d86e145181462499315c7b476c5caaaa60518db1f57f95d9":"mutation SavePipeline ($name: String!, $attributes: PipelineAttributes!) {\n\tsavePipeline(name: $name, attributes: $attributes) {\n\t\t... PipelineFragmentMinimal\n\t}\n}\nfragment PipelineFragmentMinimal on Pipeline {\n\tid\n\tname\n}\n","sha256:2623408de61d79178f6ee987a04e0df092546078b563e89b072b162af6f15ffe":"mutation GetWorkbenchWebhook ($id: ID!) {\n\tgetWorkbenchWebhook(id: $id) {\n\t\t... WorkbenchWebhookFragment\n\t}\n}\nfragment WorkbenchWebhookFragment on WorkbenchWebhook {\n\tid\n\tname\n\tprompt\n\tpriority\n\tmatches {\n\t\tregex\n\t\tsubstring\n\t\tcaseInsensitive\n\t}\n\twebhook {\n\t\tid\n\t\tname\n\t}\n\tissueWebhook {\n\t\tid\n\t\tname\n\t}\n\tworkbench {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:263be051e9e86e4a69b64064ebf9971db9f14ff4827e881b0a9ea988c3d0870e":"mutation DeleteObservabilityProvider ($id: ID!) {\n\tdeleteObservabilityProvider(id: $id) {\n\t\t... ObservabilityProviderFragment\n\t}\n}\nfragment ObservabilityProviderFragment on ObservabilityProvider {\n\tid\n\tname\n\ttype\n\tupdatedAt\n\tinsertedAt\n}\n","sha256:299b1ad1887219aef8605421301e00b36aabb4a1cbd34f3ba1f7c4717612eadf":"mutation DeletePrGovernance ($id: ID!) {\n\tdeletePrGovernance(id: $id) {\n\t\t... PrGovernanceFragment\n\t}\n}\nfragment PrGovernanceFragment on PrGovernance {\n\tid\n\tname\n}\n","sha256:29a58c567342ed6668f8af22b9ff8d5ed8c55c74151c93d87accd3827bc39faf":"mutation CreateBootstrapToken ($attributes: BootstrapTokenAttributes!) {\n\tcreateBootstrapToken(attributes: $attributes) {\n\t\t... BootstrapTokenBase\n\t}\n}\nfragment BootstrapTokenBase on BootstrapToken {\n\tid\n\ttoken\n}\n","sha256:2a1fd145f179ee0d1e6ce186d9d3633981ac99bf3752b07c815b1ce2f659c430":"mutation CreateClusterProvider ($attributes: ClusterProviderAttributes!) {\n\tcreateClusterProvider(attributes: $attributes) {\n\t\t... ClusterProviderFragment\n\t}\n}\nfragment ClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\tdeletedAt\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tservice {\n\t\t... ServiceDeploymentFragment\n\t}\n\tcredentials {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\n","sha256:2a9a8fbe23cdfbbf00c854bb4f8332064dff6c8a552ac756b506395bd25100c7":"mutation UpdateClusterProvider ($id: ID!, $attributes: ClusterProviderUpdateAttributes!) {\n\tupdateClusterProvider(id: $id, attributes: $attributes) {\n\t\t... ClusterProviderFragment\n\t}\n}\nfragment ClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\tdeletedAt\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tservice {\n\t\t... ServiceDeploymentFragment\n\t}\n\tcredentials {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\n","sha256:2cfa322ebeb5f421f7cd23fad60e385d43d70b18962d71d0fede0f594cc1b46d":"mutation UpdateSentinel ($id: ID!, $attributes: SentinelAttributes) {\n\tupdateSentinel(id: $id, attributes: $attributes) {\n\t\t... SentinelFragment\n\t}\n}\nfragment SentinelFragment on Sentinel {\n\tid\n\tname\n\tdescription\n\tgit {\n\t\t... GitRefFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tchecks {\n\t\t... SentinelCheckFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment SentinelCheckFragment on SentinelCheck {\n\tid\n\tname\n\ttype\n\truleFile\n\tconfiguration {\n\t\t... SentinelCheckConfigurationFragment\n\t}\n}\nfragment SentinelCheckConfigurationFragment on SentinelCheckConfiguration {\n\tlog {\n\t\t... SentinelCheckLogConfigurationFragment\n\t}\n\tkubernetes {\n\t\t... SentinelCheckKubernetesConfigurationFragment\n\t}\n\tintegrationTest {\n\t\t... SentinelCheckIntegrationTestConfigurationFragment\n\t}\n}\nfragment SentinelCheckLogConfigurationFragment on SentinelCheckLogConfiguration {\n\tnamespaces\n\tquery\n\tclusterId\n\tfacets {\n\t\tkey\n\t\tvalue\n\t}\n\tduration\n}\nfragment SentinelCheckKubernetesConfigurationFragment on SentinelCheckKubernetesConfiguration {\n\tgroup\n\tversion\n\tkind\n\tname\n\tnamespace\n}\nfragment SentinelCheckIntegrationTestConfigurationFragment on SentinelCheckIntegrationTestConfiguration {\n\tdistro\n\ttags\n\trerunFailures\n\trerunFailuresCount\n\tpostrunScript\n\tgotestsum {\n\t\tp\n\t\tparallel\n\t}\n\tjob {\n\t\t... JobSpecFragment\n\t}\n\tcases {\n\t\t... TestCaseConfigurationFragment\n\t}\n\tdefault {\n\t\t... SentinelCheckIntegrationTestDefaultConfigurationFragment\n\t}\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment TestCaseConfigurationFragment on SentinelCheckIntegrationTestCaseConfiguration {\n\tname\n\ttype\n\tcoredns {\n\t\tdialFqdns\n\t\tdelay\n\t\tretries\n\t}\n\tloadbalancer {\n\t\tannotations\n\t\tlabels\n\t\tnamePrefix\n\t\tnamespace\n\t\tdnsProbe {\n\t\t\tfqdn\n\t\t\tdelay\n\t\t\tretries\n\t\t}\n\t}\n\tpvc {\n\t\tnamePrefix\n\t\tstorageClass\n\t\tsize\n\t}\n\traw {\n\t\tyaml\n\t\texpectedResult\n\t}\n}\nfragment SentinelCheckIntegrationTestDefaultConfigurationFragment on SentinelCheckIntegrationTestDefaultConfiguration {\n\tignore\n\tnamespaceAnnotations\n\tnamespaceLabels\n\tregistry\n\tresourceAnnotations\n\tresourceLabels\n}\n","sha256:2d79ab2f196f1d63931d3806a4477b92870750014a086d6f2561e55cb6a67af3":"mutation CreateUser ($attributes: UserAttributes!) {\n\tcreateUser(attributes: $attributes) {\n\t\t... UserFragment\n\t}\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:2e5118d5c1872f1f474c40362070af9ad131edef31a6fcfa53ffc550957cb86d":"mutation CreateAgentPullRequest ($runId: ID!, $attributes: AgentPullRequestAttributes!) {\n\tagentPullRequest(runId: $runId, attributes: $attributes) {\n\t\t... PullRequestFragment\n\t}\n}\nfragment PullRequestFragment on PullRequest {\n\tid\n\tstatus\n\turl\n\ttitle\n\tcreator\n\tref\n}\n","sha256:2e5a060183ca0f115ca2fd5c98f051bd8f260fa00902992c20ad8fcf46523699":"query GetFederatedCredentialTiny ($id: ID!) {\n\tfederatedCredential(id: $id) {\n\t\tid\n\t}\n}\n","sha256:2ed4e4848a2483a8d60683df43dcf2668484b6af513db89072d7b9163cb91e40":"mutation UpdateNamespace ($id: ID!, $attributes: ManagedNamespaceAttributes!) {\n\tupdateManagedNamespace(id: $id, attributes: $attributes) {\n\t\t... ManagedNamespaceFragment\n\t}\n}\nfragment ManagedNamespaceFragment on ManagedNamespace {\n\tid\n\tname\n\tdescription\n\tlabels\n\tannotations\n\tpullSecrets\n\tservice {\n\t\t... ServiceTemplateFragment\n\t}\n\ttarget {\n\t\t... ClusterTargetFragment\n\t}\n\tdeletedAt\n}\nfragment ServiceTemplateFragment on ServiceTemplate {\n\tname\n\tnamespace\n\ttemplated\n\trepositoryId\n\tcontexts\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tsyncConfig {\n\t\t... SyncConfigFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment SyncConfigFragment on SyncConfig {\n\tcreateNamespace\n\tnamespaceMetadata {\n\t\t... NamespaceMetadataFragment\n\t}\n}\nfragment NamespaceMetadataFragment on NamespaceMetadata {\n\tlabels\n\tannotations\n}\nfragment ClusterTargetFragment on ClusterTarget {\n\ttags\n\tdistro\n}\n","sha256:2f962b9a1cf08b3ac5eb37f0935bf9fb9553825da92e773f0198f564812ddcca":"query GetClusterGate ($id: ID!) {\n\tclusterGate(id: $id) {\n\t\t... PipelineGateFragment\n\t}\n}\nfragment PipelineGateFragment on PipelineGate {\n\tid\n\tname\n\ttype\n\tstate\n\tupdatedAt\n\tspec {\n\t\t... GateSpecFragment\n\t}\n\tstatus {\n\t\t... GateStatusFragment\n\t}\n}\nfragment GateSpecFragment on GateSpec {\n\tjob {\n\t\t... JobSpecFragment\n\t}\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment GateStatusFragment on GateStatus {\n\tjobRef {\n\t\t... JobReferenceFragment\n\t}\n}\nfragment JobReferenceFragment on JobReference {\n\tname\n\tnamespace\n}\n","sha256:2fb0280705bd95774e0830e6b69482a17a4bdea51b60aae031c878e7622bfb31":"query ListAccessTokens ($cursor: String, $before: String, $last: Int) {\n\taccessTokens(after: $cursor, first: 100, before: $before, last: $last) {\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... AccessTokenFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment AccessTokenFragment on AccessToken {\n\tid\n\ttoken\n}\n","sha256:3153ef98895d30c2c6f51cf864b6461c951e4385c408e4736ab5c85909c55967":"query GetWorkbenchTool ($id: ID, $name: String) {\n\tworkbenchTool(id: $id, name: $name) {\n\t\t... WorkbenchToolFragment\n\t}\n}\nfragment WorkbenchToolFragment on WorkbenchTool {\n\tid\n\tname\n\ttool\n\tcategories\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tmcpServer {\n\t\t... MCPServerFragment\n\t}\n\tcloudConnection {\n\t\t... CloudConnectionFragment\n\t}\n\tscmConnection {\n\t\tid\n\t\tname\n\t\ttype\n\t}\n\tconfiguration {\n\t\thttp {\n\t\t\turl\n\t\t\tmethod\n\t\t\tfunction\n\t\t\theaders {\n\t\t\t\tname\n\t\t\t\tvalue\n\t\t\t}\n\t\t\tbody\n\t\t\tinputSchema\n\t\t}\n\t\telastic {\n\t\t\tindex\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\topensearch {\n\t\t\thost\n\t\t\tindex\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t\tassumeRoleArn\n\t\t\tusePodIdentity\n\t\t}\n\t\tprometheus {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t\tawsSigv4\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t}\n\t\tloki {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tvictoriaLogs {\n\t\t\turl\n\t\t\tusername\n\t\t\taccountId\n\t\t\tprojectId\n\t\t}\n\t\tsplunk {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\ttempo {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tjaeger {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\tdatadog {\n\t\t\tsite\n\t\t}\n\t\tdynatrace {\n\t\t\turl\n\t\t}\n\t\tcloudwatch {\n\t\t\tregion\n\t\t\tlogGroupNames\n\t\t\troleArn\n\t\t\troleSessionName\n\t\t}\n\t\tazure {\n\t\t\tsubscriptionId\n\t\t\ttenantId\n\t\t\tclientId\n\t\t\tprometheusUrl\n\t\t}\n\t\tsentry {\n\t\t\turl\n\t\t}\n\t\tlinear {\n\t\t\turl\n\t\t}\n\t\tslack {\n\t\t\turl\n\t\t}\n\t\tpagerduty {\n\t\t\turl\n\t\t}\n\t\tteams {\n\t\t\tclientId\n\t\t\ttenantId\n\t\t}\n\t\tatlassian {\n\t\t\turl\n\t\t\temail\n\t\t}\n\t\texa {\n\t\t\turl\n\t\t}\n\t\tgithub {\n\t\t\turl\n\t\t\ttoolset\n\t\t\tappId\n\t\t\tinstallationId\n\t\t}\n\t\tgitlab {\n\t\t\turl\n\t\t}\n\t\tbitbucket {\n\t\t\turl\n\t\t}\n\t\tbitbucketDatacenter {\n\t\t\turl\n\t\t}\n\t\tazureDevops {\n\t\t\turl\n\t\t}\n\t\tlambda {\n\t\t\tlambdaArn\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tcloudRun {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tazureFunction {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tdocker {\n\t\t\turl\n\t\t\tprovider\n\t\t\tproxy {\n\t\t\t\turl\n\t\t\t\tnoproxy\n\t\t\t}\n\t\t}\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment MCPServerFragment on McpServer {\n\tid\n\tname\n\turl\n\tauthentication {\n\t\tplural\n\t\theaders {\n\t\t\tname\n\t\t\tvalue\n\t\t}\n\t}\n\tconfirm\n}\nfragment CloudConnectionFragment on CloudConnection {\n\tid\n\tname\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tprovider\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:31c87507e58e544b9660476a49191db9bb682a97098db47b0a24f6ab6b7c7099":"mutation DeleteWorkbenchPrompt ($id: ID!) {\n\tdeleteWorkbenchPrompt(id: $id) {\n\t\tid\n\t}\n}\n","sha256:3328865733a3222c979c5635979280018cbe8a54f6eea8f28e32314b39c6a6a6":"mutation UpdateStackDefinition ($id: ID!, $attributes: StackDefinitionAttributes!) {\n\tupdateStackDefinition(id: $id, attributes: $attributes) {\n\t\t... StackDefinitionFragment\n\t}\n}\nfragment StackDefinitionFragment on StackDefinition {\n\tid\n\tname\n\tdescription\n\tinsertedAt\n\tupdatedAt\n\tconfiguration {\n\t\timage\n\t\ttag\n\t\tversion\n\t\thooks {\n\t\t\tcmd\n\t\t\targs\n\t\t\tafterStage\n\t\t}\n\t}\n\tsteps {\n\t\tcmd\n\t\targs\n\t\tstage\n\t\trequireApproval\n\t}\n\tdeleteSteps {\n\t\tcmd\n\t\targs\n\t\tstage\n\t\trequireApproval\n\t}\n}\n","sha256:344d00a3e2e6e10a36de6867db2b9deba25bdebc3547c897fe6f2548738724a7":"query GetStackDefinitionTiny ($id: ID!) {\n\tstackDefinition(id: $id) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:3557f778cd80f66482868b2bc6d0df507b4a2eb9cc6249877b001bdcc2c2c455":"mutation CreateSentinel ($attributes: SentinelAttributes) {\n\tcreateSentinel(attributes: $attributes) {\n\t\t... SentinelFragment\n\t}\n}\nfragment SentinelFragment on Sentinel {\n\tid\n\tname\n\tdescription\n\tgit {\n\t\t... GitRefFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tchecks {\n\t\t... SentinelCheckFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment SentinelCheckFragment on SentinelCheck {\n\tid\n\tname\n\ttype\n\truleFile\n\tconfiguration {\n\t\t... SentinelCheckConfigurationFragment\n\t}\n}\nfragment SentinelCheckConfigurationFragment on SentinelCheckConfiguration {\n\tlog {\n\t\t... SentinelCheckLogConfigurationFragment\n\t}\n\tkubernetes {\n\t\t... SentinelCheckKubernetesConfigurationFragment\n\t}\n\tintegrationTest {\n\t\t... SentinelCheckIntegrationTestConfigurationFragment\n\t}\n}\nfragment SentinelCheckLogConfigurationFragment on SentinelCheckLogConfiguration {\n\tnamespaces\n\tquery\n\tclusterId\n\tfacets {\n\t\tkey\n\t\tvalue\n\t}\n\tduration\n}\nfragment SentinelCheckKubernetesConfigurationFragment on SentinelCheckKubernetesConfiguration {\n\tgroup\n\tversion\n\tkind\n\tname\n\tnamespace\n}\nfragment SentinelCheckIntegrationTestConfigurationFragment on SentinelCheckIntegrationTestConfiguration {\n\tdistro\n\ttags\n\trerunFailures\n\trerunFailuresCount\n\tpostrunScript\n\tgotestsum {\n\t\tp\n\t\tparallel\n\t}\n\tjob {\n\t\t... JobSpecFragment\n\t}\n\tcases {\n\t\t... TestCaseConfigurationFragment\n\t}\n\tdefault {\n\t\t... SentinelCheckIntegrationTestDefaultConfigurationFragment\n\t}\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment TestCaseConfigurationFragment on SentinelCheckIntegrationTestCaseConfiguration {\n\tname\n\ttype\n\tcoredns {\n\t\tdialFqdns\n\t\tdelay\n\t\tretries\n\t}\n\tloadbalancer {\n\t\tannotations\n\t\tlabels\n\t\tnamePrefix\n\t\tnamespace\n\t\tdnsProbe {\n\t\t\tfqdn\n\t\t\tdelay\n\t\t\tretries\n\t\t}\n\t}\n\tpvc {\n\t\tnamePrefix\n\t\tstorageClass\n\t\tsize\n\t}\n\traw {\n\t\tyaml\n\t\texpectedResult\n\t}\n}\nfragment SentinelCheckIntegrationTestDefaultConfigurationFragment on SentinelCheckIntegrationTestDefaultConfiguration {\n\tignore\n\tnamespaceAnnotations\n\tnamespaceLabels\n\tregistry\n\tresourceAnnotations\n\tresourceLabels\n}\n","sha256:3617cd964a5282e8fbdbbb88a2dfddc82c9392725b259d6db7e10b87adb28e91":"mutation SaveServiceContext ($name: String!, $attributes: ServiceContextAttributes!) {\n\tsaveServiceContext(name: $name, attributes: $attributes) {\n\t\t... ServiceContextFragment\n\t}\n}\nfragment ServiceContextFragment on ServiceContext {\n\tid\n\tname\n\tconfiguration\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:3642d7afaa157713cb448c26f4f3362a53ba61ba9f368233782e709637054dbe":"mutation DeletePrAutomation ($id: ID!) {\n\tdeletePrAutomation(id: $id) {\n\t\t... PrAutomationFragment\n\t}\n}\nfragment PrAutomationFragment on PrAutomation {\n\tid\n\tname\n\ttitle\n\taddon\n\tmessage\n\tidentifier\n\tinsertedAt\n\tupdatedAt\n}\n","sha256:368c82946025827b9e5a282df168753546a94ae38c4eba8077c45f32ae92ab54":"mutation DeleteObserver ($id: ID!) {\n\tdeleteObserver(id: $id) {\n\t\t... ObserverFragment\n\t}\n}\nfragment ObserverFragment on Observer {\n\tid\n\tname\n\tstatus\n\tcrontab\n\ttarget {\n\t\t... ObserverTargetFragment\n\t}\n\tactions {\n\t\t... ObserverActionFragment\n\t}\n\tproject {\n\t\t... ProjectFragment\n\t}\n\terrors {\n\t\t... ErrorFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment ObserverTargetFragment on ObserverTarget {\n\thelm {\n\t\t... ObserverHelmRepoFragment\n\t}\n\toci {\n\t\t... ObserverOciRepoFragment\n\t}\n}\nfragment ObserverHelmRepoFragment on ObserverHelmRepo {\n\turl\n\tchart\n\tprovider\n}\nfragment ObserverOciRepoFragment on ObserverOciRepo {\n\turl\n\tprovider\n}\nfragment ObserverActionFragment on ObserverAction {\n\ttype\n\tconfiguration {\n\t\t... ObserverActionConfigurationFragment\n\t}\n}\nfragment ObserverActionConfigurationFragment on ObserverActionConfiguration {\n\tpr {\n\t\t... ObserverPrActionFragment\n\t}\n\tpipeline {\n\t\t... ObserverPipelineActionFragment\n\t}\n}\nfragment ObserverPrActionFragment on ObserverPrAction {\n\tautomationId\n\trepository\n\tbranchTemplate\n\tcontext\n}\nfragment ObserverPipelineActionFragment on ObserverPipelineAction {\n\tpipelineId\n\tcontext\n}\nfragment ProjectFragment on Project {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\tdefault\n\tdescription\n\tdisableInsights\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment ErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\n","sha256:36fea2d78373476143b536962a73f6b9eca5fdef00b5415ab69e1ab830908756":"mutation CreateStackDefinition ($attributes: StackDefinitionAttributes!) {\n\tcreateStackDefinition(attributes: $attributes) {\n\t\t... StackDefinitionFragment\n\t}\n}\nfragment StackDefinitionFragment on StackDefinition {\n\tid\n\tname\n\tdescription\n\tinsertedAt\n\tupdatedAt\n\tconfiguration {\n\t\timage\n\t\ttag\n\t\tversion\n\t\thooks {\n\t\t\tcmd\n\t\t\targs\n\t\t\tafterStage\n\t\t}\n\t}\n\tsteps {\n\t\tcmd\n\t\targs\n\t\tstage\n\t\trequireApproval\n\t}\n\tdeleteSteps {\n\t\tcmd\n\t\targs\n\t\tstage\n\t\trequireApproval\n\t}\n}\n","sha256:3715c332fc325a323b5c2baf5a93b97960d05d5a84c4480a8bec3ae6d2e2b3ba":"query GetBindingPolicyTiny ($id: ID!) {\n\tbindingPolicy(id: $id) {\n\t\tid\n\t}\n}\n","sha256:375a7c2c38b8646e8df33e517981225183365bcadcc689195c122f3d4ab5864c":"mutation UpdateGlobalServiceDeployment ($id: ID!, $attributes: GlobalServiceAttributes!) {\n\tupdateGlobalService(id: $id, attributes: $attributes) {\n\t\t... GlobalServiceFragment\n\t}\n}\nfragment GlobalServiceFragment on GlobalService {\n\tid\n\tname\n\tdistro\n\tprovider {\n\t\tid\n\t}\n\tservice {\n\t\tid\n\t}\n\ttags {\n\t\t... ClusterTags\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:376451d410f05aa32972a4ecfe1e4e9efab9bcd12428dfcee693eacfbe653ae9":"mutation CreateServiceDeploymentWithHandle ($cluster: String!, $attributes: ServiceDeploymentAttributes!) {\n\tcreateServiceDeployment(cluster: $cluster, attributes: $attributes) {\n\t\t... ServiceDeploymentExtended\n\t}\n}\nfragment ServiceDeploymentExtended on ServiceDeployment {\n\tcluster {\n\t\t... BaseClusterFragment\n\t}\n\terrors {\n\t\t... ErrorFragment\n\t}\n\trevision {\n\t\t... RevisionFragment\n\t}\n\tcontexts {\n\t\t... ServiceContextFragment\n\t}\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n\timports {\n\t\tstack {\n\t\t\t... InfrastructureStackTinyFragment\n\t\t}\n\t\toutputs {\n\t\t\t... StackOutputFragment\n\t\t}\n\t}\n}\nfragment BaseClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tdistro\n\tpingedAt\n\tcurrentVersion\n\tkasUrl\n\tmetadata\n\ttags {\n\t\t... ClusterTags\n\t}\n\tcredential {\n\t\t... ProviderCredentialFragment\n\t}\n\tprovider {\n\t\t... BaseClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment BaseClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment ErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\nfragment RevisionFragment on Revision {\n\tid\n\tsha\n\tgit {\n\t\tref\n\t\tfolder\n\t}\n}\nfragment ServiceContextFragment on ServiceContext {\n\tid\n\tname\n\tconfiguration\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment InfrastructureStackTinyFragment on InfrastructureStack {\n\tid\n\tname\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\n","sha256:37a8038a21b33330a0321ceaa792807a8a959323c31d52b87f71cd557f5e8529":"query MyCluster {\n\tmyCluster {\n\t\t... {\n\t\t\tid\n\t\t\tname\n\t\t\tdistro\n\t\t\tsupportedAddons\n\t\t\trestore {\n\t\t\t\t... ClusterRestoreFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment ClusterRestoreFragment on ClusterRestore {\n\tid\n\tstatus\n\tbackup {\n\t\t... ClusterBackupFragment\n\t}\n}\nfragment ClusterBackupFragment on ClusterBackup {\n\tid\n\tname\n\tcluster {\n\t\tid\n\t}\n\tgarbageCollected\n}\n","sha256:383f1a8e3b789b58df1c1b5e1de4ada6be3b0ef5e3cd24f6a79109ff2a6ef6ec":"mutation DeleteAccessToken ($token: String!) {\n\tdeleteAccessToken(token: $token) {\n\t\t... AccessTokenFragment\n\t}\n}\nfragment AccessTokenFragment on AccessToken {\n\tid\n\ttoken\n}\n","sha256:38cf2b80e79145a83cf653ef5dd530c09492427bbc5c2f2b2b00a99f63081a6d":"mutation DeleteServiceDeployment ($id: ID!) {\n\tdeleteServiceDeployment(id: $id) {\n\t\t... ServiceDeploymentFragment\n\t}\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\n","sha256:39189795df275ba5770b0f0fdc2167fef15a2ef105f13bb69b95d1e3d75ef749":"mutation UpsertVirtualCluster ($parentID: ID!, $attributes: ClusterAttributes!) {\n\tupsertVirtualCluster(parentId: $parentID, attributes: $attributes) {\n\t\tdeployToken\n\t\t... ClusterFragment\n\t}\n}\nfragment ClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tinsertedAt\n\tpingedAt\n\tprotect\n\tcurrentVersion\n\tkasUrl\n\tdeletedAt\n\tmetadata\n\tdistro\n\ttags {\n\t\t... ClusterTags\n\t}\n\tprovider {\n\t\t... ClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tstatus {\n\t\t... ClusterStatusFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\tdeletedAt\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tservice {\n\t\t... ServiceDeploymentFragment\n\t}\n\tcredentials {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment ClusterStatusFragment on ClusterStatus {\n\tconditions {\n\t\t... ClusterConditionFragment\n\t}\n}\nfragment ClusterConditionFragment on ClusterCondition {\n\tstatus\n\ttype\n\tmessage\n\treason\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:391a0d44f56daaa9236742e4c686aed180e197f9d2e8fe4fd007d58e3fb89d14":"query GetPersona ($id: ID!) {\n\tpersona(id: $id) {\n\t\t... PersonaFragment\n\t}\n}\nfragment PersonaFragment on Persona {\n\tid\n\tname\n\tdescription\n\tconfiguration {\n\t\t... PersonaConfigurationFragment\n\t}\n\tbindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PersonaConfigurationFragment on PersonaConfiguration {\n\tall\n\tdeployments {\n\t\taddOns\n\t\tclusters\n\t\tpipelines\n\t\tproviders\n\t\trepositories\n\t\tservices\n\t}\n\thome {\n\t\tmanager\n\t\tsecurity\n\t}\n\tflows {\n\t\tpermissions\n\t\tstartWorkbenchJob\n\t\tpipelines\n\t\tpreviews\n\t\tworkbenches\n\t}\n\tsidebar {\n\t\taudits\n\t\tflows\n\t\tkubernetes\n\t\tpullRequests\n\t\tsettings\n\t\tbackups\n\t\tstacks\n\t\tworkbenches\n\t\tcd\n\t\tai\n\t}\n\tsettings {\n\t\taccessTokens\n\t\tai\n\t\taudits\n\t\tchatbots\n\t\tcloudConnections\n\t\tglobal\n\t\tnotifications\n\t\tprojects\n\t\tuserManagement\n\t\twebhooks\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:395be562633ea07aa14a2848d97c2662d5a27f2bc3b0306ff8fb328b80c35562":"query ListObservabilityProviders ($after: String, $first: Int, $before: String, $last: Int) {\n\tobservabilityProviders(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... ObservabilityProviderFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment ObservabilityProviderFragment on ObservabilityProvider {\n\tid\n\tname\n\ttype\n\tupdatedAt\n\tinsertedAt\n}\n","sha256:3a5b26fabfbcb1813210e97107878f8cf880da4efec00b5d807733890b99c663":"mutation UpdateDeploymentSettings ($attributes: DeploymentSettingsAttributes!) {\n\tupdateDeploymentSettings(attributes: $attributes) {\n\t\t... DeploymentSettingsFragment\n\t}\n}\nfragment DeploymentSettingsFragment on DeploymentSettings {\n\tid\n\tname\n\tagentHelmValues\n\tagentHelmValuesTemplateable\n\tagentVsn\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tcreateBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tartifactRepository {\n\t\t... GitRepositoryFragment\n\t}\n\tdeployerRepository {\n\t\t... GitRepositoryFragment\n\t}\n\tai {\n\t\t... AISettingsFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment AISettingsFragment on AiSettings {\n\tenabled\n\tprovider\n\topenai {\n\t\tmodel\n\t}\n\tanthropic {\n\t\tmodel\n\t}\n}\n","sha256:3c3311c918109c032947b1352a1b4229f13ac85fc9e6ae86c4feda508041cde9":"mutation CreateAgentRunUpload ($runId: ID!, $session: Upload, $screenRecording: Upload, $patch: Upload) {\n\tcreateAgentRunUpload(runId: $runId, attributes: {session:$session,screenRecording:$screenRecording,patch:$patch}) {\n\t\t... AgentRunUploadFragment\n\t}\n}\nfragment AgentRunUploadFragment on AgentRunUpload {\n\tid\n\tsession\n\tscreenRecording\n\tpatch\n}\n","sha256:3c447e070c14ecaac431c794c559ba5fa606bc15df98c00bcc81e24809315a4f":"mutation DeleteCustomStackRun ($id: ID!) {\n\tdeleteCustomStackRun(id: $id) {\n\t\t... CustomStackRunFragment\n\t}\n}\nfragment CustomStackRunFragment on CustomStackRun {\n\tid\n\tname\n\tstack {\n\t\tid\n\t}\n\tdocumentation\n\tcommands {\n\t\t... StackCommandFragment\n\t}\n\tconfiguration {\n\t\t... PrConfigurationFragment\n\t}\n}\nfragment StackCommandFragment on StackCommand {\n\tcmd\n\targs\n\tdir\n}\nfragment PrConfigurationFragment on PrConfiguration {\n\ttype\n\tname\n\tdefault\n\tdocumentation\n\tlongform\n\tplaceholder\n\toptional\n\tcondition {\n\t\t... PrConfigurationConditionFragment\n\t}\n}\nfragment PrConfigurationConditionFragment on PrConfigurationCondition {\n\toperation\n\tfield\n\tvalue\n}\n","sha256:3cbfaefd04ec40ea1887c27ae44dbbfd5bb148938afe070745b9f35951a4b791":"mutation UpsertCloudConnection ($attributes: CloudConnectionAttributes!) {\n\tupsertCloudConnection(attributes: $attributes) {\n\t\t... CloudConnectionFragment\n\t}\n}\nfragment CloudConnectionFragment on CloudConnection {\n\tid\n\tname\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tprovider\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:3d79eb2a713ca289a10f7515c20da885c422f3c2220a76d6d505e681d8021237":"mutation CreateGitRepository ($attributes: GitAttributes!) {\n\tcreateGitRepository(attributes: $attributes) {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\n","sha256:3e27a6a17cfbb6f6db0ee7472736f01ea3fc36b07c7654011e2f40c4f5405e75":"query GetSentinelTiny ($id: ID!) {\n\tsentinel(id: $id) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:3f077b2e9c8019b17de56676404222eb2dceb3f3cb76f6f40bccf9086217553b":"query GetDeploymentSettings {\n\tdeploymentSettings {\n\t\t... DeploymentSettingsFragment\n\t}\n}\nfragment DeploymentSettingsFragment on DeploymentSettings {\n\tid\n\tname\n\tagentHelmValues\n\tagentHelmValuesTemplateable\n\tagentVsn\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tcreateBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tartifactRepository {\n\t\t... GitRepositoryFragment\n\t}\n\tdeployerRepository {\n\t\t... GitRepositoryFragment\n\t}\n\tai {\n\t\t... AISettingsFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment AISettingsFragment on AiSettings {\n\tenabled\n\tprovider\n\topenai {\n\t\tmodel\n\t}\n\tanthropic {\n\t\tmodel\n\t}\n}\n","sha256:4098e8f5d7c1242768a4330163d671ffefb47a68245a8035f1347543f7c4254d":"mutation UpdateBindingPolicy ($id: ID!, $attributes: BindingPolicyUpdateAttributes!) {\n\tupdateBindingPolicy(id: $id, attributes: $attributes) {\n\t\t... BindingPolicyFragment\n\t}\n}\nfragment BindingPolicyFragment on BindingPolicy {\n\tid\n\ttype\n\tinterval\n\tnextPollAt\n\tmatches {\n\t\tworkbench {\n\t\t\tregexes\n\t\t}\n\t}\n\tpolicy {\n\t\t... TinyPolicyFragment\n\t}\n\tbindPolicy {\n\t\t... TinyPolicyFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyPolicyFragment on Policy {\n\tid\n\tname\n}\n","sha256:413142a1e1214ce0d2a445a9d9912d4b098d01e69aa9d6a35c619c0d05a8a7ed":"mutation CreateWorkbench ($attributes: WorkbenchAttributes!) {\n\tcreateWorkbench(attributes: $attributes) {\n\t\t... WorkbenchFragment\n\t}\n}\nfragment WorkbenchFragment on Workbench {\n\tid\n\tname\n\tdescription\n\tsystemPrompt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tagentRuntime {\n\t\t... TinyAgentRuntimeFragment\n\t}\n\tconfiguration {\n\t\tcoding {\n\t\t\tmode\n\t\t\trepositories\n\t\t}\n\t\tinfrastructure {\n\t\t\tservices\n\t\t\tstacks\n\t\t\tkubernetes\n\t\t}\n\t\tobservability {\n\t\t\tlogs\n\t\t\tmetrics\n\t\t}\n\t}\n\tskills {\n\t\tref {\n\t\t\tref\n\t\t\tfolder\n\t\t\tfiles\n\t\t}\n\t\tfiles\n\t}\n\ttools {\n\t\t... WorkbenchToolFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment TinyAgentRuntimeFragment on AgentRuntime {\n\tid\n\tname\n\ttype\n\tcluster {\n\t\tid\n\t\tname\n\t\thandle\n\t}\n}\nfragment WorkbenchToolFragment on WorkbenchTool {\n\tid\n\tname\n\ttool\n\tcategories\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tmcpServer {\n\t\t... MCPServerFragment\n\t}\n\tcloudConnection {\n\t\t... CloudConnectionFragment\n\t}\n\tscmConnection {\n\t\tid\n\t\tname\n\t\ttype\n\t}\n\tconfiguration {\n\t\thttp {\n\t\t\turl\n\t\t\tmethod\n\t\t\tfunction\n\t\t\theaders {\n\t\t\t\tname\n\t\t\t\tvalue\n\t\t\t}\n\t\t\tbody\n\t\t\tinputSchema\n\t\t}\n\t\telastic {\n\t\t\tindex\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\topensearch {\n\t\t\thost\n\t\t\tindex\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t\tassumeRoleArn\n\t\t\tusePodIdentity\n\t\t}\n\t\tprometheus {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t\tawsSigv4\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t}\n\t\tloki {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tvictoriaLogs {\n\t\t\turl\n\t\t\tusername\n\t\t\taccountId\n\t\t\tprojectId\n\t\t}\n\t\tsplunk {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\ttempo {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tjaeger {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\tdatadog {\n\t\t\tsite\n\t\t}\n\t\tdynatrace {\n\t\t\turl\n\t\t}\n\t\tcloudwatch {\n\t\t\tregion\n\t\t\tlogGroupNames\n\t\t\troleArn\n\t\t\troleSessionName\n\t\t}\n\t\tazure {\n\t\t\tsubscriptionId\n\t\t\ttenantId\n\t\t\tclientId\n\t\t\tprometheusUrl\n\t\t}\n\t\tsentry {\n\t\t\turl\n\t\t}\n\t\tlinear {\n\t\t\turl\n\t\t}\n\t\tslack {\n\t\t\turl\n\t\t}\n\t\tpagerduty {\n\t\t\turl\n\t\t}\n\t\tteams {\n\t\t\tclientId\n\t\t\ttenantId\n\t\t}\n\t\tatlassian {\n\t\t\turl\n\t\t\temail\n\t\t}\n\t\texa {\n\t\t\turl\n\t\t}\n\t\tgithub {\n\t\t\turl\n\t\t\ttoolset\n\t\t\tappId\n\t\t\tinstallationId\n\t\t}\n\t\tgitlab {\n\t\t\turl\n\t\t}\n\t\tbitbucket {\n\t\t\turl\n\t\t}\n\t\tbitbucketDatacenter {\n\t\t\turl\n\t\t}\n\t\tazureDevops {\n\t\t\turl\n\t\t}\n\t\tlambda {\n\t\t\tlambdaArn\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tcloudRun {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tazureFunction {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tdocker {\n\t\t\turl\n\t\t\tprovider\n\t\t\tproxy {\n\t\t\t\turl\n\t\t\t\tnoproxy\n\t\t\t}\n\t\t}\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment MCPServerFragment on McpServer {\n\tid\n\tname\n\turl\n\tauthentication {\n\t\tplural\n\t\theaders {\n\t\t\tname\n\t\t\tvalue\n\t\t}\n\t}\n\tconfirm\n}\nfragment CloudConnectionFragment on CloudConnection {\n\tid\n\tname\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tprovider\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:41e4f03ed32b05e32866db167f922d8092eef5aad38075b2245827da5d9ad23c":"query GetCatalogTiny ($id: ID, $name: String) {\n\tcatalog(id: $id, name: $name) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:42bc0bd98144dabaac9fef4c5455c391a5deb4b9a594273884aa88c59778dd9e":"query GetComplianceReportGenerator ($id: ID, $name: String) {\n\tcomplianceReportGenerator(id: $id, name: $name) {\n\t\t... ComplianceReportGeneratorFragment\n\t}\n}\nfragment ComplianceReportGeneratorFragment on ComplianceReportGenerator {\n\tid\n\tname\n\tformat\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:4356bc0c1808c4f31a7a47247affbdc702e039c898d4fa26a650774b3c9f8338":"query GetAgentRunTodos ($id: ID!) {\n\tagentRun(id: $id) {\n\t\ttodos {\n\t\t\t... AgentTodoFragment\n\t\t}\n\t}\n}\nfragment AgentTodoFragment on AgentTodo {\n\tdescription\n\tdone\n\ttitle\n}\n","sha256:45177eb025b2c2716b361dcca23690272398564a94ba297e06014bcb247068eb":"query GetAgentRun ($id: ID!) {\n\tagentRun(id: $id) {\n\t\t... AgentRunFragment\n\t}\n}\nfragment AgentRunFragment on AgentRun {\n\tid\n\tprompt\n\trepository\n\tbranch\n\theadBranch\n\tmode\n\treviewDepth\n\tlanguage\n\tlanguageVersion\n\ttodos {\n\t\t... AgentTodoFragment\n\t}\n\tprompts {\n\t\t... AgentPromptFragment\n\t}\n\tskills {\n\t\tname\n\t\tdescription\n\t\tcontents\n\t}\n\tstatus\n\tpodReference {\n\t\t... AgentPodReferenceFragment\n\t}\n\terror\n\tanalysis {\n\t\t... AgentAnalysisFragment\n\t}\n\tusage {\n\t\tinputTokens\n\t\toutputTokens\n\t\ttotalTokens\n\t\tcachedTokens\n\t\treasoningTokens\n\t\tinputCost\n\t\toutputCost\n\t\ttotalCost\n\t}\n\tscmCreds {\n\t\t... ScmCredentialFragment\n\t}\n\tpluralCreds {\n\t\t... PluralCredsFragment\n\t}\n\tworkbenchMcpUrl\n\truntime {\n\t\t... AgentRuntimeFragment\n\t}\n\tuser {\n\t\tid\n\t\tname\n\t\temail\n\t}\n\tflow {\n\t\tid\n\t\tname\n\t}\n\tpullRequests {\n\t\t... PullRequestFragment\n\t}\n\tupload {\n\t\t... AgentRunUploadFragment\n\t}\n\tbabysit\n\tbabysitInterval\n\tapproval\n\tapprovedAt\n\tfollowup\n\tfollowupPrUrl\n}\nfragment AgentTodoFragment on AgentTodo {\n\tdescription\n\tdone\n\ttitle\n}\nfragment AgentPromptFragment on AgentPrompt {\n\tid\n\tprompt\n\tseq\n}\nfragment AgentPodReferenceFragment on AgentPodReference {\n\tname\n\tnamespace\n}\nfragment AgentAnalysisFragment on AgentAnalysis {\n\tsummary\n\tanalysis\n\tbullets\n}\nfragment ScmCredentialFragment on ScmCreds {\n\ttoken\n\tusername\n\texaKey\n}\nfragment PluralCredsFragment on PluralCreds {\n\ttoken\n\turl\n}\nfragment AgentRuntimeFragment on AgentRuntime {\n\tid\n\tname\n\ttype\n\taiProxy\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tcreateBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment PullRequestFragment on PullRequest {\n\tid\n\tstatus\n\turl\n\ttitle\n\tcreator\n\tref\n}\nfragment AgentRunUploadFragment on AgentRunUpload {\n\tid\n\tsession\n\tscreenRecording\n\tpatch\n}\n","sha256:45568860a37d05e3d18ecb976ee1f222aed9a5e7a9c0fa7150c1251c9ef61fae":"mutation UpdateGlobalService ($id: ID!, $attributes: GlobalServiceAttributes!) {\n\tupdateGlobalService(id: $id, attributes: $attributes) {\n\t\t... GlobalServiceFragment\n\t}\n}\nfragment GlobalServiceFragment on GlobalService {\n\tid\n\tname\n\tdistro\n\tprovider {\n\t\tid\n\t}\n\tservice {\n\t\tid\n\t}\n\ttags {\n\t\t... ClusterTags\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:45b1488b1732a010d79649d4a39feb42ce81a6842f62fa9f9c801df10136e3f8":"mutation UpsertObservabilityProvider ($attributes: ObservabilityProviderAttributes!) {\n\tupsertObservabilityProvider(attributes: $attributes) {\n\t\t... ObservabilityProviderFragment\n\t}\n}\nfragment ObservabilityProviderFragment on ObservabilityProvider {\n\tid\n\tname\n\ttype\n\tupdatedAt\n\tinsertedAt\n}\n","sha256:45c1ed4b2d99d030559403440ac39f886badb154fcfd4f10e301ea0a056ab824":"query GetPipelineContext ($id: ID!) {\n\tpipelineContext(id: $id) {\n\t\t... PipelineContextFragment\n\t}\n}\nfragment PipelineContextFragment on PipelineContext {\n\tid\n\tcontext\n}\n","sha256:46566d1616e7e91db2d6216bad8fe25d3985df875d9c85d06ecc1d6a9ff761d4":"mutation UpsertNotificationRouter ($attributes: NotificationRouterAttributes!) {\n\tupsertNotificationRouter(attributes: $attributes) {\n\t\t... NotificationRouterFragment\n\t}\n}\nfragment NotificationRouterFragment on NotificationRouter {\n\tid\n\tname\n\tsinks {\n\t\t... NotificationSinkFragment\n\t}\n\tevents\n}\nfragment NotificationSinkFragment on NotificationSink {\n\tid\n\tname\n\ttype\n\tconfiguration {\n\t\t... SinkConfigurationFragment\n\t}\n\tnotificationBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment SinkConfigurationFragment on SinkConfiguration {\n\tid\n\tslack {\n\t\t... UrlSinkConfigurationFragment\n\t}\n\tteams {\n\t\t... UrlSinkConfigurationFragment\n\t}\n}\nfragment UrlSinkConfigurationFragment on UrlSinkConfiguration {\n\turl\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:4664a72f360d14d57f6c374965d8d12a4795cbca5c8af739d02349214a90e3c5":"query GetScmWebhook ($id: ID, $externalId: String) {\n\tscmWebhook(id: $id, externalId: $externalId) {\n\t\t... ScmWebhookFragment\n\t}\n}\nfragment ScmWebhookFragment on ScmWebhook {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\towner\n\ttype\n\turl\n}\n","sha256:4694b939a2c331cca99be014be0d45dd8756b9cfc8a2f7fed2fb0b2ae2b2b176":"query Me {\n\tme {\n\t\tid\n\t\temail\n\t\tname\n\t}\n}\n","sha256:46c0244b8b182a0be59a3619a9147a3686d4894a5403b47f4758ec7456437bbd":"query GetClusterIsoImage ($id: ID, $image: String) {\n\tclusterIsoImage(id: $id, image: $image) {\n\t\t... ClusterIsoImageFragment\n\t}\n}\nfragment ClusterIsoImageFragment on ClusterIsoImage {\n\tid\n\timage\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tregistry\n\tuser\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:4700694be9716b23c92b557c584739bdc4f7a86d0106842f5ade8d21da402adb":"mutation EnqueueWorkbenchPrFollowup ($url: String!, $attributes: QueuedPromptAttributes!) {\n\tenqueueWorkbenchPrFollowup(url: $url, attributes: $attributes) {\n\t\t... QueuedPromptFragment\n\t\tworkbenchJob {\n\t\t\tid\n\t\t\turl\n\t\t}\n\t}\n}\nfragment QueuedPromptFragment on QueuedPrompt {\n\tid\n\tprompt\n\tdequeableAt\n\tworkbenchJob {\n\t\tid\n\t}\n\tuser {\n\t\tid\n\t}\n}\n","sha256:47dc4b6bd1139a41dc445fb76faeb339207d650f0b1b9b6991e56dbc37777de6":"query GetClusterByHandle ($handle: String) {\n\tcluster(handle: $handle) {\n\t\t... ClusterFragment\n\t}\n}\nfragment ClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tinsertedAt\n\tpingedAt\n\tprotect\n\tcurrentVersion\n\tkasUrl\n\tdeletedAt\n\tmetadata\n\tdistro\n\ttags {\n\t\t... ClusterTags\n\t}\n\tprovider {\n\t\t... ClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tstatus {\n\t\t... ClusterStatusFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\tdeletedAt\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tservice {\n\t\t... ServiceDeploymentFragment\n\t}\n\tcredentials {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment ClusterStatusFragment on ClusterStatus {\n\tconditions {\n\t\t... ClusterConditionFragment\n\t}\n}\nfragment ClusterConditionFragment on ClusterCondition {\n\tstatus\n\ttype\n\tmessage\n\treason\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:4889a49b7bc53288977c1d827c7e540ef407641fd1b37faf467ad3aa1fae20eb":"query ListInfrastructureStacks ($after: String, $first: Int, $before: String, $last: Int) {\n\tinfrastructureStacks(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\t... InfrastructureStackEdgeFragment\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment InfrastructureStackEdgeFragment on InfrastructureStackEdge {\n\tnode {\n\t\t... InfrastructureStackFragment\n\t}\n}\nfragment InfrastructureStackFragment on InfrastructureStack {\n\tid\n\tname\n\ttype\n\tvariables\n\tapproval\n\tworkdir\n\tmanageState\n\tdeletedAt\n\tgit {\n\t\t... GitRefFragment\n\t}\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tfiles {\n\t\t... StackFileFragment\n\t}\n\tenvironment {\n\t\t... StackEnvironmentFragment\n\t}\n\toutput {\n\t\t... StackOutputFragment\n\t}\n\tstate {\n\t\t... StackStateFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tpolicyEngine {\n\t\t... PolicyEngineFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment StackConfigurationFragment on StackConfiguration {\n\timage\n\tversion\n\ttag\n\thooks {\n\t\t... StackHookFragment\n\t}\n\tterraform {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tterragrunt {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tpulumi {\n\t\tparallel\n\t\trefresh\n\t\tapproveEmpty\n\t\tstack\n\t\tbackendUrl\n\t}\n\tansible {\n\t\tinventory\n\t\tplaybook\n\t\tprivateKeyFile\n\t\tconfigFile\n\t}\n}\nfragment StackHookFragment on StackHook {\n\tcmd\n\targs\n\tafterStage\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment StackFileFragment on StackFile {\n\tpath\n\tcontent\n}\nfragment StackEnvironmentFragment on StackEnvironment {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackStateFragment on StackState {\n\tid\n\tplan\n\tplanJson\n\tstate {\n\t\t... StackStateResourceFragment\n\t}\n}\nfragment StackStateResourceFragment on StackStateResource {\n\tidentifier\n\tresource\n\tname\n\tconfiguration\n\tlinks\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment PolicyEngineFragment on PolicyEngine {\n\ttype\n\tmaxSeverity\n\tcustomPolicies\n}\n","sha256:4a0f99c5c1ed02f2c004bf4676a192e75731634bfe4e37218dd6a34a1c95b326":"query ServiceAccounts ($after: String, $first: Int, $before: String, $last: Int, $q: String) {\n\tserviceAccounts(after: $after, first: $first, before: $before, last: $last, q: $q) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... UserFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:4bb4613ac3d087f679e786b1d6a491b02d4333ca215fbdfc7233b43ab02d9f66":"query GetStackRunMinimal ($id: ID!) {\n\tstackRun(id: $id) {\n\t\t... StackRunMinimalFragment\n\t}\n}\nfragment StackRunMinimalFragment on StackRun {\n\tid\n\ttype\n\tstatus\n\tapproval\n\tapprovedAt\n\ttarball\n\tworkdir\n\tmanageState\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment StackConfigurationFragment on StackConfiguration {\n\timage\n\tversion\n\ttag\n\thooks {\n\t\t... StackHookFragment\n\t}\n\tterraform {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tterragrunt {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tpulumi {\n\t\tparallel\n\t\trefresh\n\t\tapproveEmpty\n\t\tstack\n\t\tbackendUrl\n\t}\n\tansible {\n\t\tinventory\n\t\tplaybook\n\t\tprivateKeyFile\n\t\tconfigFile\n\t}\n}\nfragment StackHookFragment on StackHook {\n\tcmd\n\targs\n\tafterStage\n}\n","sha256:4bc390a223f5151c820474b4ec055094ecbbc7fb3894f9f48baa6b612ce62161":"query GetAgentRuntime ($id: ID!) {\n\tagentRuntime(id: $id) {\n\t\t... AgentRuntimeFragment\n\t}\n}\nfragment AgentRuntimeFragment on AgentRuntime {\n\tid\n\tname\n\ttype\n\taiProxy\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tcreateBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:4beb4e8b7b5844428fa204b98d19c00119ab761ba14a33d1e40e1cdebdc2365a":"mutation UpdateStackRun ($id: ID!, $attributes: StackRunAttributes!) {\n\tupdateStackRun(id: $id, attributes: $attributes) {\n\t\t... StackRunIdFragment\n\t}\n}\nfragment StackRunIdFragment on StackRun {\n\tid\n}\n","sha256:4cb5452060ebdbaa1e8effa76d240b91af5cfe5e2fcc8780fa6607c298fa725d":"mutation WorkbenchPrFollowup ($url: String!, $attributes: WorkbenchMessageAttributes!) {\n\tworkbenchPrFollowup(url: $url, attributes: $attributes) {\n\t\tid\n\t\tprompt\n\t\ttype\n\t\tstatus\n\t}\n}\n","sha256:4ccc84b66170761dbc355854fbe36f2ad7914720d9026128e860a2ca679caa4b":"mutation AddStackRunLogs ($id: ID!, $attributes: RunLogAttributes!) {\n\taddRunLogs(stepId: $id, attributes: $attributes) {\n\t\tupdatedAt\n\t}\n}\n","sha256:4d391c1b966bca6a1f7392320cb12a42bb9d76c0ea06b9aee89eba25db04b08b":"mutation CreateScmWebhook ($connectionId: ID!, $owner: String!) {\n\tcreateScmWebhook(connectionId: $connectionId, owner: $owner) {\n\t\t... ScmWebhookFragment\n\t}\n}\nfragment ScmWebhookFragment on ScmWebhook {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\towner\n\ttype\n\turl\n}\n","sha256:4e817a16d60e0674f5530ba1e1249840f369e23853ca214d13863f299b8f7d0e":"query GetNotificationSink ($id: ID!) {\n\tnotificationSink(id: $id) {\n\t\t... NotificationSinkFragment\n\t}\n}\nfragment NotificationSinkFragment on NotificationSink {\n\tid\n\tname\n\ttype\n\tconfiguration {\n\t\t... SinkConfigurationFragment\n\t}\n\tnotificationBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment SinkConfigurationFragment on SinkConfiguration {\n\tid\n\tslack {\n\t\t... UrlSinkConfigurationFragment\n\t}\n\tteams {\n\t\t... UrlSinkConfigurationFragment\n\t}\n}\nfragment UrlSinkConfigurationFragment on UrlSinkConfiguration {\n\turl\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:4e9ae0595f3f41aeefd121080484f583351451a9ed9c4a2ac21d24b375d5ae8e":"mutation UpsertComplianceReportGenerator ($attributes: ComplianceReportGeneratorAttributes!) {\n\tupsertComplianceReportGenerator(attributes: $attributes) {\n\t\t... ComplianceReportGeneratorFragment\n\t}\n}\nfragment ComplianceReportGeneratorFragment on ComplianceReportGenerator {\n\tid\n\tname\n\tformat\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:50da97f82323246c4aec944e818a055833aabfcf3e4be9d67e061fe7776ae0df":"mutation UpdateServiceDeploymentWithHandle ($cluster: String!, $name: String!, $attributes: ServiceUpdateAttributes!) {\n\tupdateServiceDeployment(cluster: $cluster, name: $name, attributes: $attributes) {\n\t\t... ServiceDeploymentExtended\n\t}\n}\nfragment ServiceDeploymentExtended on ServiceDeployment {\n\tcluster {\n\t\t... BaseClusterFragment\n\t}\n\terrors {\n\t\t... ErrorFragment\n\t}\n\trevision {\n\t\t... RevisionFragment\n\t}\n\tcontexts {\n\t\t... ServiceContextFragment\n\t}\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n\timports {\n\t\tstack {\n\t\t\t... InfrastructureStackTinyFragment\n\t\t}\n\t\toutputs {\n\t\t\t... StackOutputFragment\n\t\t}\n\t}\n}\nfragment BaseClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tdistro\n\tpingedAt\n\tcurrentVersion\n\tkasUrl\n\tmetadata\n\ttags {\n\t\t... ClusterTags\n\t}\n\tcredential {\n\t\t... ProviderCredentialFragment\n\t}\n\tprovider {\n\t\t... BaseClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment BaseClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment ErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\nfragment RevisionFragment on Revision {\n\tid\n\tsha\n\tgit {\n\t\tref\n\t\tfolder\n\t}\n}\nfragment ServiceContextFragment on ServiceContext {\n\tid\n\tname\n\tconfiguration\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment InfrastructureStackTinyFragment on InfrastructureStack {\n\tid\n\tname\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\n","sha256:51ef8948450e9b14889936618653d431bd618dcbf0f0883aae0c4fb6d537be4a":"mutation UpdatePersona ($id: ID!, $attributes: PersonaAttributes!) {\n\tupdatePersona(id: $id, attributes: $attributes) {\n\t\t... PersonaFragment\n\t}\n}\nfragment PersonaFragment on Persona {\n\tid\n\tname\n\tdescription\n\tconfiguration {\n\t\t... PersonaConfigurationFragment\n\t}\n\tbindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PersonaConfigurationFragment on PersonaConfiguration {\n\tall\n\tdeployments {\n\t\taddOns\n\t\tclusters\n\t\tpipelines\n\t\tproviders\n\t\trepositories\n\t\tservices\n\t}\n\thome {\n\t\tmanager\n\t\tsecurity\n\t}\n\tflows {\n\t\tpermissions\n\t\tstartWorkbenchJob\n\t\tpipelines\n\t\tpreviews\n\t\tworkbenches\n\t}\n\tsidebar {\n\t\taudits\n\t\tflows\n\t\tkubernetes\n\t\tpullRequests\n\t\tsettings\n\t\tbackups\n\t\tstacks\n\t\tworkbenches\n\t\tcd\n\t\tai\n\t}\n\tsettings {\n\t\taccessTokens\n\t\tai\n\t\taudits\n\t\tchatbots\n\t\tcloudConnections\n\t\tglobal\n\t\tnotifications\n\t\tprojects\n\t\tuserManagement\n\t\twebhooks\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:527aebd2d9c8f2c1e9f845c3ab24baf3fdd536ce86a0206e14ec3b05132b3913":"mutation CreateAgentMessage ($runId: ID!, $attributes: AgentMessageAttributes!) {\n\tcreateAgentMessage(runId: $runId, attributes: $attributes) {\n\t\tid\n\t\tmessage\n\t}\n}\n","sha256:54910ed76d4c42ee7339454901466a271af34936ab345c88fb03ee4bdb763a3a":"query ListClustersWithParameters ($after: String, $first: Int, $before: String, $last: Int, $projectId: ID, $tagQuery: TagQuery) {\n\tclusters(after: $after, first: $first, before: $before, last: $last, projectId: $projectId, tagQuery: $tagQuery) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\t... ClusterEdgeFragment\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment ClusterEdgeFragment on ClusterEdge {\n\tnode {\n\t\t... ClusterFragment\n\t}\n}\nfragment ClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tinsertedAt\n\tpingedAt\n\tprotect\n\tcurrentVersion\n\tkasUrl\n\tdeletedAt\n\tmetadata\n\tdistro\n\ttags {\n\t\t... ClusterTags\n\t}\n\tprovider {\n\t\t... ClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tstatus {\n\t\t... ClusterStatusFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\tdeletedAt\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tservice {\n\t\t... ServiceDeploymentFragment\n\t}\n\tcredentials {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment ClusterStatusFragment on ClusterStatus {\n\tconditions {\n\t\t... ClusterConditionFragment\n\t}\n}\nfragment ClusterConditionFragment on ClusterCondition {\n\tstatus\n\ttype\n\tmessage\n\treason\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:54f9977d5571d11d430f63e03d6208e3a305b0e2bc32a06a1ebbebf6b4522fa3":"mutation DeletePreviewEnvironmentTemplate ($id: ID!) {\n\tdeletePreviewEnvironmentTemplate(id: $id) {\n\t\tid\n\t}\n}\n","sha256:5525b1c9bf332e1fc609b70c671ecb9ba088933b87b249f40fa1827d7db494f9":"mutation CreateClusterIsoImage ($attributes: ClusterIsoImageAttributes!) {\n\tcreateClusterIsoImage(attributes: $attributes) {\n\t\t... ClusterIsoImageFragment\n\t}\n}\nfragment ClusterIsoImageFragment on ClusterIsoImage {\n\tid\n\timage\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tregistry\n\tuser\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:556a981320a385d7d9776830051cbf6d2127e4e538b57d3d28d1473aad5dfd33":"mutation DeleteOIDCProvider ($id: ID!, $type: OidcProviderType!) {\n\tdeleteOidcProvider(id: $id, type: $type) {\n\t\t... OIDCProviderFragment\n\t}\n}\nfragment OIDCProviderFragment on OidcProvider {\n\tid\n\tname\n\tdescription\n\tclientId\n\tclientSecret\n\tauthMethod\n\tredirectUris\n\tbindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:56607343e0225629d380152b80a6aeaa8d46a2a306400b6c3f4e396595d33c33":"mutation CreateNamespace ($attributes: ManagedNamespaceAttributes!) {\n\tcreateManagedNamespace(attributes: $attributes) {\n\t\t... ManagedNamespaceFragment\n\t}\n}\nfragment ManagedNamespaceFragment on ManagedNamespace {\n\tid\n\tname\n\tdescription\n\tlabels\n\tannotations\n\tpullSecrets\n\tservice {\n\t\t... ServiceTemplateFragment\n\t}\n\ttarget {\n\t\t... ClusterTargetFragment\n\t}\n\tdeletedAt\n}\nfragment ServiceTemplateFragment on ServiceTemplate {\n\tname\n\tnamespace\n\ttemplated\n\trepositoryId\n\tcontexts\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tsyncConfig {\n\t\t... SyncConfigFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment SyncConfigFragment on SyncConfig {\n\tcreateNamespace\n\tnamespaceMetadata {\n\t\t... NamespaceMetadataFragment\n\t}\n}\nfragment NamespaceMetadataFragment on NamespaceMetadata {\n\tlabels\n\tannotations\n}\nfragment ClusterTargetFragment on ClusterTarget {\n\ttags\n\tdistro\n}\n","sha256:566845778e4c6ce4551811f830d2e681b2d68caa72bd99709a0c790877d6eaee":"mutation UpdateDashboard ($id: ID!, $attributes: DashboardAttributes!) {\n\tupdateDashboard(id: $id, attributes: $attributes) {\n\t\t... WorkbenchDashboardFragment\n\t}\n}\nfragment WorkbenchDashboardFragment on WorkbenchDashboard {\n\tid\n\tname\n\tworkbench {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:573648a4bd455ab3047a5627bd4188286785ec9d36d9a4a69d525c9999a7ead4":"mutation DeleteFederatedCredential ($id: ID!) {\n\tdeleteFederatedCredential(id: $id) {\n\t\tid\n\t}\n}\n","sha256:57790a6caa298edfdbc1f311bcb963189e1b8a519753c8029225bbc6a9d497ef":"query GetPolicy ($id: ID, $name: String) {\n\tpolicy(id: $id, name: $name) {\n\t\t... PolicyFragment\n\t}\n}\nfragment PolicyFragment on Policy {\n\tid\n\tname\n\ttype\n\tdescription\n\tpolicy\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:580fca816c2a2b2d59eb97ad4f2569218ef0685d0e724a2e0e5de4230db5aa93":"query ListGitRepositories ($cursor: String, $before: String, $last: Int) {\n\tgitRepositories(after: $cursor, first: 100, before: $before, last: $last) {\n\t\tedges {\n\t\t\t... GitRepositoryEdgeFragment\n\t\t}\n\t}\n}\nfragment GitRepositoryEdgeFragment on GitRepositoryEdge {\n\tnode {\n\t\t... GitRepositoryFragment\n\t}\n\tcursor\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\n","sha256:5893cd09a5fbd29b0b6ce255f5e5d50e08ff164d1da91525a124b44619b58d59":"mutation CreateWorkbenchPrompt ($workbenchId: ID!, $attributes: WorkbenchPromptAttributes!) {\n\tcreateWorkbenchPrompt(workbenchId: $workbenchId, attributes: $attributes) {\n\t\tid\n\t}\n}\n","sha256:58ea9b0116be68d9f4da2ac8110d93fde21e86df23bb1ef89b982e5a16aa11ed":"mutation UpdateClusterIsoImage ($id: ID!, $attributes: ClusterIsoImageAttributes!) {\n\tupdateClusterIsoImage(id: $id, attributes: $attributes) {\n\t\t... ClusterIsoImageFragment\n\t}\n}\nfragment ClusterIsoImageFragment on ClusterIsoImage {\n\tid\n\timage\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tregistry\n\tuser\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:594c9c271560981bef35235a0b0e29463631416f6dbf2aab24d2efb5f5395ba7":"query GetBindingPolicy ($id: ID!) {\n\tbindingPolicy(id: $id) {\n\t\t... BindingPolicyFragment\n\t}\n}\nfragment BindingPolicyFragment on BindingPolicy {\n\tid\n\ttype\n\tinterval\n\tnextPollAt\n\tmatches {\n\t\tworkbench {\n\t\t\tregexes\n\t\t}\n\t}\n\tpolicy {\n\t\t... TinyPolicyFragment\n\t}\n\tbindPolicy {\n\t\t... TinyPolicyFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyPolicyFragment on Policy {\n\tid\n\tname\n}\n","sha256:594cb032bccdf14d2cae9ade9f52b20d4b56e9ab6630e299927ee9d2c9801fa5":"mutation CreateWorkbenchCron ($workbenchId: ID!, $attributes: WorkbenchCronAttributes!) {\n\tcreateWorkbenchCron(workbenchId: $workbenchId, attributes: $attributes) {\n\t\t... WorkbenchCronFragment\n\t}\n}\nfragment WorkbenchCronFragment on WorkbenchCron {\n\tid\n\tcrontab\n\tprompt\n\tworkbench {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:5abc2071d4557f9edd21dfc6472a9473d4b1b267eb0c3e3b8437ee1eca0e91cb":"mutation ShareSecret ($attributes: SharedSecretAttributes!) {\n\tshareSecret(attributes: $attributes) {\n\t\tname\n\t\thandle\n\t\tsecret\n\t\tinsertedAt\n\t\tupdatedAt\n\t}\n}\n","sha256:5b27782cd5302beb56aec90bd5e986f67aea75a37582b480e0860ac9242293a0":"query GetIssueWebhook ($id: ID, $name: String) {\n\tissueWebhook(id: $id, name: $name) {\n\t\t... IssueWebhookFragment\n\t}\n}\nfragment IssueWebhookFragment on IssueWebhook {\n\tid\n\tname\n\tprovider\n}\n","sha256:5baa034c528aa2f193811366642087e0b6c75c88fe1a8c5c22bc06ee75d02427":"mutation DeleteServiceContext ($id: ID!) {\n\tdeleteServiceContext(id: $id) {\n\t\t... ServiceContextFragment\n\t}\n}\nfragment ServiceContextFragment on ServiceContext {\n\tid\n\tname\n\tconfiguration\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:5e4949060ce8bce3c89357a76aa82dcd88350b1965a30113a6eeeda2c424aa8d":"query ListNotificationSinks ($after: String, $first: Int, $before: String, $last: Int) {\n\tnotificationSinks(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\t... NotificationSinkEdgeFragment\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment NotificationSinkEdgeFragment on NotificationSinkEdge {\n\tcursor\n\tnode {\n\t\t... NotificationSinkFragment\n\t}\n}\nfragment NotificationSinkFragment on NotificationSink {\n\tid\n\tname\n\ttype\n\tconfiguration {\n\t\t... SinkConfigurationFragment\n\t}\n\tnotificationBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment SinkConfigurationFragment on SinkConfiguration {\n\tid\n\tslack {\n\t\t... UrlSinkConfigurationFragment\n\t}\n\tteams {\n\t\t... UrlSinkConfigurationFragment\n\t}\n}\nfragment UrlSinkConfigurationFragment on UrlSinkConfiguration {\n\turl\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:5e544cd179164a2409b455e448b0eed324f40742a26522fb344a1e997d2a3c80":"mutation DeleteObservabilityWebhook ($id: ID!) {\n\tdeleteObservabilityWebhook(id: $id) {\n\t\t... ObservabilityWebhookFragment\n\t}\n}\nfragment ObservabilityWebhookFragment on ObservabilityWebhook {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\ttype\n\turl\n}\n","sha256:5e94440e7b15f517f56955063550fd90e284a59c002e9121b8df3a45660c99fc":"query GetHelmRepository ($url: String!) {\n\thelmRepository(url: $url) {\n\t\t... HelmRepositoryFragment\n\t}\n}\nfragment HelmRepositoryFragment on HelmRepository {\n\tid\n\tinsertedAt\n\tupdatedAt\n\turl\n\tprovider\n\thealth\n}\n","sha256:60bb829fc0d5411b67d8e260b204b0c3118d75c022ffd368f18f7f9edc85bc5f":"query GetClusterProvider ($id: ID!) {\n\tclusterProvider(id: $id) {\n\t\t... ClusterProviderFragment\n\t}\n}\nfragment ClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\tdeletedAt\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tservice {\n\t\t... ServiceDeploymentFragment\n\t}\n\tcredentials {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\n","sha256:60de6586577e9cb81f7c41bcf3482947a47f5da53ca1e658ea5a5764d6343aac":"mutation CreateScmWebhookPointer ($attributes: ScmWebhookAttributes!) {\n\tcreateScmWebhookPointer(attributes: $attributes) {\n\t\t... ScmWebhookFragment\n\t}\n}\nfragment ScmWebhookFragment on ScmWebhook {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\towner\n\ttype\n\turl\n}\n","sha256:61ccd6c95eca788ecfe7ffe54fdf2bdb203432adc5790785ef82deadce19f219":"mutation DeletePersona ($id: ID!) {\n\tdeletePersona(id: $id) {\n\t\t... PersonaFragment\n\t}\n}\nfragment PersonaFragment on Persona {\n\tid\n\tname\n\tdescription\n\tconfiguration {\n\t\t... PersonaConfigurationFragment\n\t}\n\tbindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PersonaConfigurationFragment on PersonaConfiguration {\n\tall\n\tdeployments {\n\t\taddOns\n\t\tclusters\n\t\tpipelines\n\t\tproviders\n\t\trepositories\n\t\tservices\n\t}\n\thome {\n\t\tmanager\n\t\tsecurity\n\t}\n\tflows {\n\t\tpermissions\n\t\tstartWorkbenchJob\n\t\tpipelines\n\t\tpreviews\n\t\tworkbenches\n\t}\n\tsidebar {\n\t\taudits\n\t\tflows\n\t\tkubernetes\n\t\tpullRequests\n\t\tsettings\n\t\tbackups\n\t\tstacks\n\t\tworkbenches\n\t\tcd\n\t\tai\n\t}\n\tsettings {\n\t\taccessTokens\n\t\tai\n\t\taudits\n\t\tchatbots\n\t\tcloudConnections\n\t\tglobal\n\t\tnotifications\n\t\tprojects\n\t\tuserManagement\n\t\twebhooks\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:633dba4e06a7c190478b1c6d65302b9715ecbe84bc5f5bf1534286fc064c39fe":"query GetStackRunBase ($id: ID!) {\n\tstackRun(id: $id) {\n\t\t... StackRunBaseFragment\n\t}\n}\nfragment StackRunBaseFragment on StackRun {\n\tid\n\ttype\n\tstatus\n\tapproval\n\tapprovedAt\n\ttarball\n\tworkdir\n\tmanageState\n\tvariables\n\tdryRun\n\tstateUrls {\n\t\tterraform {\n\t\t\taddress\n\t\t\tlock\n\t\t\tunlock\n\t\t}\n\t}\n\tpluralCreds {\n\t\turl\n\t\ttoken\n\t}\n\tactor {\n\t\t... UserFragment\n\t}\n\tstack {\n\t\t... InfrastructureStackFragment\n\t}\n\tstate {\n\t\t... StackStateFragment\n\t}\n\tsteps {\n\t\t... RunStepFragment\n\t}\n\tfiles {\n\t\t... StackFileFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n\tenvironment {\n\t\t... StackEnvironmentFragment\n\t}\n\toutput {\n\t\t... StackOutputFragment\n\t}\n\terrors {\n\t\t... ServiceErrorFragment\n\t}\n\tviolations {\n\t\t... StackPolicyViolationFragment\n\t}\n\tpolicyEngine {\n\t\t... PolicyEngineFragment\n\t}\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment InfrastructureStackFragment on InfrastructureStack {\n\tid\n\tname\n\ttype\n\tvariables\n\tapproval\n\tworkdir\n\tmanageState\n\tdeletedAt\n\tgit {\n\t\t... GitRefFragment\n\t}\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tfiles {\n\t\t... StackFileFragment\n\t}\n\tenvironment {\n\t\t... StackEnvironmentFragment\n\t}\n\toutput {\n\t\t... StackOutputFragment\n\t}\n\tstate {\n\t\t... StackStateFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tpolicyEngine {\n\t\t... PolicyEngineFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment StackConfigurationFragment on StackConfiguration {\n\timage\n\tversion\n\ttag\n\thooks {\n\t\t... StackHookFragment\n\t}\n\tterraform {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tterragrunt {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tpulumi {\n\t\tparallel\n\t\trefresh\n\t\tapproveEmpty\n\t\tstack\n\t\tbackendUrl\n\t}\n\tansible {\n\t\tinventory\n\t\tplaybook\n\t\tprivateKeyFile\n\t\tconfigFile\n\t}\n}\nfragment StackHookFragment on StackHook {\n\tcmd\n\targs\n\tafterStage\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment StackFileFragment on StackFile {\n\tpath\n\tcontent\n}\nfragment StackEnvironmentFragment on StackEnvironment {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackStateFragment on StackState {\n\tid\n\tplan\n\tplanJson\n\tstate {\n\t\t... StackStateResourceFragment\n\t}\n}\nfragment StackStateResourceFragment on StackStateResource {\n\tidentifier\n\tresource\n\tname\n\tconfiguration\n\tlinks\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment PolicyEngineFragment on PolicyEngine {\n\ttype\n\tmaxSeverity\n\tcustomPolicies\n}\nfragment RunStepFragment on RunStep {\n\tid\n\tstatus\n\tstage\n\tname\n\tcmd\n\targs\n\trequireApproval\n\tindex\n}\nfragment ServiceErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\nfragment StackPolicyViolationFragment on StackPolicyViolation {\n\tid\n\ttitle\n\tdescription\n\tpolicyId\n\tpolicyModule\n\tpolicyUrl\n\tseverity\n\tresolution\n\tcauses {\n\t\t... StackViolationCauseFragment\n\t}\n}\nfragment StackViolationCauseFragment on StackViolationCause {\n\tstart\n\tend\n\tresource\n\tfilename\n\tlines {\n\t\t... StackViolationCauseLineFragment\n\t}\n}\nfragment StackViolationCauseLineFragment on StackViolationCauseLine {\n\tfirst\n\tlast\n\tcontent\n\tline\n}\n","sha256:6374f2075fc651ba96385d190f73e93a949d38a302c3a520b9aa7b48e14986d2":"mutation DeleteClusterRegistration ($id: ID!) {\n\tdeleteClusterRegistration(id: $id) {\n\t\t... ClusterRegistrationFragment\n\t}\n}\nfragment ClusterRegistrationFragment on ClusterRegistration {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tmachineId\n\tname\n\thandle\n\tmetadata\n\ttags {\n\t\t... ClusterTags\n\t}\n\tcreator {\n\t\t... UserFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:653bd2dca1e546786b5564738f50ef09c21243d55f0a8ff6af6613af43a6839d":"query ListClusterSentinelRunJobs ($after: String, $first: Int, $before: String, $last: Int) {\n\tclusterSentinelRunJobs(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... SentinelRunJobFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment SentinelRunJobFragment on SentinelRunJob {\n\tid\n\tcheck\n\tstatus\n\tformat\n\tusesGit\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\treference {\n\t\tname\n\t\tnamespace\n\t}\n\tsentinelRun {\n\t\t... SentinelRunFragment\n\t}\n\tcluster {\n\t\tid\n\t\tname\n\t\thandle\n\t\tdistro\n\t}\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment SentinelRunFragment on SentinelRun {\n\tid\n\tstatus\n\tsentinel {\n\t\tid\n\t}\n\tchecks {\n\t\t... SentinelCheckFragment\n\t}\n}\nfragment SentinelCheckFragment on SentinelCheck {\n\tid\n\tname\n\ttype\n\truleFile\n\tconfiguration {\n\t\t... SentinelCheckConfigurationFragment\n\t}\n}\nfragment SentinelCheckConfigurationFragment on SentinelCheckConfiguration {\n\tlog {\n\t\t... SentinelCheckLogConfigurationFragment\n\t}\n\tkubernetes {\n\t\t... SentinelCheckKubernetesConfigurationFragment\n\t}\n\tintegrationTest {\n\t\t... SentinelCheckIntegrationTestConfigurationFragment\n\t}\n}\nfragment SentinelCheckLogConfigurationFragment on SentinelCheckLogConfiguration {\n\tnamespaces\n\tquery\n\tclusterId\n\tfacets {\n\t\tkey\n\t\tvalue\n\t}\n\tduration\n}\nfragment SentinelCheckKubernetesConfigurationFragment on SentinelCheckKubernetesConfiguration {\n\tgroup\n\tversion\n\tkind\n\tname\n\tnamespace\n}\nfragment SentinelCheckIntegrationTestConfigurationFragment on SentinelCheckIntegrationTestConfiguration {\n\tdistro\n\ttags\n\trerunFailures\n\trerunFailuresCount\n\tpostrunScript\n\tgotestsum {\n\t\tp\n\t\tparallel\n\t}\n\tjob {\n\t\t... JobSpecFragment\n\t}\n\tcases {\n\t\t... TestCaseConfigurationFragment\n\t}\n\tdefault {\n\t\t... SentinelCheckIntegrationTestDefaultConfigurationFragment\n\t}\n}\nfragment TestCaseConfigurationFragment on SentinelCheckIntegrationTestCaseConfiguration {\n\tname\n\ttype\n\tcoredns {\n\t\tdialFqdns\n\t\tdelay\n\t\tretries\n\t}\n\tloadbalancer {\n\t\tannotations\n\t\tlabels\n\t\tnamePrefix\n\t\tnamespace\n\t\tdnsProbe {\n\t\t\tfqdn\n\t\t\tdelay\n\t\t\tretries\n\t\t}\n\t}\n\tpvc {\n\t\tnamePrefix\n\t\tstorageClass\n\t\tsize\n\t}\n\traw {\n\t\tyaml\n\t\texpectedResult\n\t}\n}\nfragment SentinelCheckIntegrationTestDefaultConfigurationFragment on SentinelCheckIntegrationTestDefaultConfiguration {\n\tignore\n\tnamespaceAnnotations\n\tnamespaceLabels\n\tregistry\n\tresourceAnnotations\n\tresourceLabels\n}\n","sha256:663074674ca5e1837c9a836c9ca87d011e3b82c7aee97c307816f923807f1403":"mutation CancelAgentRun ($id: ID!) {\n\tcancelAgentRun(id: $id) {\n\t\tid\n\t}\n}\n","sha256:672a471c01d8cea255bc474ee2c2b4b0bf19071e5c4cac93dd3d60de6af33c3a":"query ListBindingPolicies ($after: String, $first: Int, $before: String, $last: Int) {\n\tbindingPolicies(after: $after, first: $first, before: $before, last: $last) {\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... BindingPolicyFragment\n\t\t\t}\n\t\t}\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t}\n}\nfragment BindingPolicyFragment on BindingPolicy {\n\tid\n\ttype\n\tinterval\n\tnextPollAt\n\tmatches {\n\t\tworkbench {\n\t\t\tregexes\n\t\t}\n\t}\n\tpolicy {\n\t\t... TinyPolicyFragment\n\t}\n\tbindPolicy {\n\t\t... TinyPolicyFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyPolicyFragment on Policy {\n\tid\n\tname\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\n","sha256:676c685a9306b2973a2921f6f0158ec0e4785aced9987122ea6ef490c93ecfb4":"mutation UpdateWorkbenchCron ($id: ID!, $attributes: WorkbenchCronAttributes!) {\n\tupdateWorkbenchCron(id: $id, attributes: $attributes) {\n\t\t... WorkbenchCronFragment\n\t}\n}\nfragment WorkbenchCronFragment on WorkbenchCron {\n\tid\n\tcrontab\n\tprompt\n\tworkbench {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:68d98b7ac666f84eeb85897ef3519a78ecf00304af9b78e9ae3b4c25532a4982":"mutation DeleteStackDefinition ($id: ID!) {\n\tdeleteStackDefinition(id: $id) {\n\t\t... StackDefinitionFragment\n\t}\n}\nfragment StackDefinitionFragment on StackDefinition {\n\tid\n\tname\n\tdescription\n\tinsertedAt\n\tupdatedAt\n\tconfiguration {\n\t\timage\n\t\ttag\n\t\tversion\n\t\thooks {\n\t\t\tcmd\n\t\t\targs\n\t\t\tafterStage\n\t\t}\n\t}\n\tsteps {\n\t\tcmd\n\t\targs\n\t\tstage\n\t\trequireApproval\n\t}\n\tdeleteSteps {\n\t\tcmd\n\t\targs\n\t\tstage\n\t\trequireApproval\n\t}\n}\n","sha256:68fac5688e28798e6adbf158c70679ee2e327893121a12db46a02362ac47b68c":"mutation UpdateUser ($id: ID, $attributes: UserAttributes!) {\n\tupdateUser(id: $id, attributes: $attributes) {\n\t\t... UserFragment\n\t}\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:6c6860b13a9d0aaacfd7eb47b2c1a993768f0389f5fbe197efa64971d2e232df":"query ListHelmRepositories ($after: String, $first: Int, $before: String, $last: Int) {\n\thelmRepositories(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... HelmRepositoryFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment HelmRepositoryFragment on HelmRepository {\n\tid\n\tinsertedAt\n\tupdatedAt\n\turl\n\tprovider\n\thealth\n}\n","sha256:6cfac09e011997d8e43d520ffb21c7f2742981c3a59ba78e9274cfc750f3a991":"query ListScmWebhooks ($after: String, $before: String, $first: Int, $last: Int) {\n\tscmWebhooks(after: $after, before: $before, first: $first, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... ScmWebhookFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment ScmWebhookFragment on ScmWebhook {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\towner\n\ttype\n\turl\n}\n","sha256:6fb3a6d7b695c4168b976dedfcf9a53c6ab7783770a26d4f25fa705153dae6f0":"mutation RegisterRuntimeServices ($services: [RuntimeServiceAttributes], $layout: OperationalLayoutAttributes, $deprecated: [DeprecatedCustomResourceAttributes], $serviceId: ID) {\n\tregisterRuntimeServices(services: $services, layout: $layout, deprecated: $deprecated, serviceId: $serviceId)\n}\n","sha256:6fcb5448dc8bc96c565dab0bf002bb9bcb82ad8785717de59ad14a80e4d4e178":"query GetScmConnectionByName ($name: String!) {\n\tscmConnection(name: $name) {\n\t\t... ScmConnectionFragment\n\t}\n}\nfragment ScmConnectionFragment on ScmConnection {\n\tid\n\tname\n\tapiUrl\n\tbaseUrl\n\ttype\n\tusername\n\tinsertedAt\n\tupdatedAt\n}\n","sha256:6fe58e154caaddb59485ac72d26e0ffee5fb864c6e1a45b31b90082830872995":"mutation DetachServiceDeployment ($id: ID!) {\n\tdetachServiceDeployment(id: $id) {\n\t\t... ServiceDeploymentFragment\n\t}\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\n","sha256:6fec0d284e2f2884e65a4de72ee9ed2673b92adfc0b19e73d970364aa3410d79":"mutation CreateCluster ($attributes: ClusterAttributes!) {\n\tcreateCluster(attributes: $attributes) {\n\t\tdeployToken\n\t\t... ClusterFragment\n\t}\n}\nfragment ClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tinsertedAt\n\tpingedAt\n\tprotect\n\tcurrentVersion\n\tkasUrl\n\tdeletedAt\n\tmetadata\n\tdistro\n\ttags {\n\t\t... ClusterTags\n\t}\n\tprovider {\n\t\t... ClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tstatus {\n\t\t... ClusterStatusFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\tdeletedAt\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tservice {\n\t\t... ServiceDeploymentFragment\n\t}\n\tcredentials {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment ClusterStatusFragment on ClusterStatus {\n\tconditions {\n\t\t... ClusterConditionFragment\n\t}\n}\nfragment ClusterConditionFragment on ClusterCondition {\n\tstatus\n\ttype\n\tmessage\n\treason\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:7022709816c360b28f659e86985f545a415f48e96b2f30ef866ea3ae97f39fa9":"query GetClusterBackup ($id: ID, $clusterId: ID, $namespace: String, $name: String) {\n\tclusterBackup(id: $id, clusterId: $clusterId, namespace: $namespace, name: $name) {\n\t\t... ClusterBackupFragment\n\t}\n}\nfragment ClusterBackupFragment on ClusterBackup {\n\tid\n\tname\n\tcluster {\n\t\tid\n\t}\n\tgarbageCollected\n}\n","sha256:705e50fb64758842c60cce987d7ab0eb08cf21df44eaf506ee141324260481bb":"query GetAgentRunMinimal ($id: ID!) {\n\tagentRun(id: $id) {\n\t\t... AgentRunMinimalFragment\n\t}\n}\nfragment AgentRunMinimalFragment on AgentRun {\n\tid\n\tprompt\n\trepository\n\tbranch\n\theadBranch\n\truntime {\n\t\ttype\n\t}\n\tpullRequests {\n\t\tid\n\t\tstatus\n\t\turl\n\t\ttitle\n\t\tref\n\t}\n\tupload {\n\t\tsession\n\t\tpatch\n\t\tscreenRecording\n\t}\n}\n","sha256:70dd24813b99b33f0bd76a916a653bd40aefb7b4d1f950c1c6cfb349f5e064c7":"mutation DeleteCatalog ($id: ID!) {\n\tdeleteCatalog(id: $id) {\n\t\t... CatalogFragment\n\t}\n}\nfragment CatalogFragment on Catalog {\n\tid\n\tname\n\tdescription\n\tcategory\n\tauthor\n\tproject {\n\t\t... ProjectFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment ProjectFragment on Project {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\tdefault\n\tdescription\n\tdisableInsights\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:71211688078517de55856c131211f78a9b5f707fc2c3857726fd59a81123b2b9":"query GetWorkbenchToolTiny ($id: ID, $name: String) {\n\tworkbenchTool(id: $id, name: $name) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:75340df6d83e5cb03878a6914da84328432f6879320e6083d0cf6fd1ba1e0a35":"mutation RollbackService ($id: ID!, $revisionId: ID!) {\n\trollbackService(id: $id, revisionId: $revisionId) {\n\t\t... ServiceDeploymentFragment\n\t}\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\n","sha256:782b1bd26714e00f7908991d5ed8af1beee25bbdb038e0885378d17a277b1929":"query GetClusterProviderByCloud ($cloud: String!) {\n\tclusterProvider(cloud: $cloud) {\n\t\t... ClusterProviderFragment\n\t}\n}\nfragment ClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\tdeletedAt\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tservice {\n\t\t... ServiceDeploymentFragment\n\t}\n\tcredentials {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\n","sha256:78dbebdbef637a8412788971739ba9931f0eae3ae63eb7b0d0d75902620521fc":"query GetCustomStackRun ($id: ID!) {\n\tcustomStackRun(id: $id) {\n\t\t... CustomStackRunFragment\n\t}\n}\nfragment CustomStackRunFragment on CustomStackRun {\n\tid\n\tname\n\tstack {\n\t\tid\n\t}\n\tdocumentation\n\tcommands {\n\t\t... StackCommandFragment\n\t}\n\tconfiguration {\n\t\t... PrConfigurationFragment\n\t}\n}\nfragment StackCommandFragment on StackCommand {\n\tcmd\n\targs\n\tdir\n}\nfragment PrConfigurationFragment on PrConfiguration {\n\ttype\n\tname\n\tdefault\n\tdocumentation\n\tlongform\n\tplaceholder\n\toptional\n\tcondition {\n\t\t... PrConfigurationConditionFragment\n\t}\n}\nfragment PrConfigurationConditionFragment on PrConfigurationCondition {\n\toperation\n\tfield\n\tvalue\n}\n","sha256:7a35b4446780f4560edd416760772e7f4d9bd8193e64e39d945a0ca57e6d5799":"mutation UpdateAgentMessage ($id: ID!, $attributes: AgentMessageAttributes!) {\n\tupdateAgentMessage(id: $id, attributes: $attributes) {\n\t\tid\n\t\tmessage\n\t}\n}\n","sha256:7a526118f0ec20a508e94f419446156ab87b99bd9ff5700c13cf8612f6e8be8d":"query GetObserver ($id: ID, $name: String) {\n\tobserver(id: $id, name: $name) {\n\t\t... ObserverFragment\n\t}\n}\nfragment ObserverFragment on Observer {\n\tid\n\tname\n\tstatus\n\tcrontab\n\ttarget {\n\t\t... ObserverTargetFragment\n\t}\n\tactions {\n\t\t... ObserverActionFragment\n\t}\n\tproject {\n\t\t... ProjectFragment\n\t}\n\terrors {\n\t\t... ErrorFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment ObserverTargetFragment on ObserverTarget {\n\thelm {\n\t\t... ObserverHelmRepoFragment\n\t}\n\toci {\n\t\t... ObserverOciRepoFragment\n\t}\n}\nfragment ObserverHelmRepoFragment on ObserverHelmRepo {\n\turl\n\tchart\n\tprovider\n}\nfragment ObserverOciRepoFragment on ObserverOciRepo {\n\turl\n\tprovider\n}\nfragment ObserverActionFragment on ObserverAction {\n\ttype\n\tconfiguration {\n\t\t... ObserverActionConfigurationFragment\n\t}\n}\nfragment ObserverActionConfigurationFragment on ObserverActionConfiguration {\n\tpr {\n\t\t... ObserverPrActionFragment\n\t}\n\tpipeline {\n\t\t... ObserverPipelineActionFragment\n\t}\n}\nfragment ObserverPrActionFragment on ObserverPrAction {\n\tautomationId\n\trepository\n\tbranchTemplate\n\tcontext\n}\nfragment ObserverPipelineActionFragment on ObserverPipelineAction {\n\tpipelineId\n\tcontext\n}\nfragment ProjectFragment on Project {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\tdefault\n\tdescription\n\tdisableInsights\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment ErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\n","sha256:7bb99a71a060105e0369bd65dfbef40cfaefd3bf24f3a20be6bba8ebe0f5d151":"query ListPolicies ($after: String, $first: Int, $before: String, $last: Int, $projectId: ID, $q: String) {\n\tpolicies(after: $after, first: $first, before: $before, last: $last, projectId: $projectId, q: $q) {\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... PolicyFragment\n\t\t\t}\n\t\t}\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t}\n}\nfragment PolicyFragment on Policy {\n\tid\n\tname\n\ttype\n\tdescription\n\tpolicy\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\n","sha256:7bf259965e095c6f562ceabf64b53c96f2af8c279f8f585ae46150d432e15177":"mutation DeleteAgentRuntime ($id: ID!) {\n\tdeleteAgentRuntime(id: $id) {\n\t\tid\n\t}\n}\n","sha256:7c28e35a508edb6910ec148143db545bf6ceae2d3f89d99dd12108d55cbace2e":"query ListProviders {\n\tclusterProviders(first: 100) {\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... ClusterProviderFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment ClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\tdeletedAt\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tservice {\n\t\t... ServiceDeploymentFragment\n\t}\n\tcredentials {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\n","sha256:7d305588dda783d061b91186810d26c83dc96ce88ca6eadd3dc0aeb8e5c2b1e9":"query GetObservabilityWebhook ($id: ID, $name: String) {\n\tobservabilityWebhook(id: $id, name: $name) {\n\t\t... ObservabilityWebhookFragment\n\t}\n}\nfragment ObservabilityWebhookFragment on ObservabilityWebhook {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\ttype\n\turl\n}\n","sha256:7e2b1754c1a0096773632c812c86d3e0e73c8bd0ff4e4de4e783b3afc545c212":"query GetTinyCluster ($id: ID) {\n\tcluster(id: $id) {\n\t\t... TinyClusterFragment\n\t}\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:7fc3c4c26cd7f027d90210964398854eebe7e5ce7bb518f4c8839505a4b4fcb3":"mutation AddGroupMember ($groupId: ID!, $userId: ID!) {\n\tcreateGroupMember(groupId: $groupId, userId: $userId) {\n\t\t... GroupMemberFragment\n\t}\n}\nfragment GroupMemberFragment on GroupMember {\n\tid\n\tuser {\n\t\tid\n\t}\n\tgroup {\n\t\tid\n\t}\n}\n","sha256:806453fdd48b0a0eae70fc366b758b34c1fb7290ff39b393794e5181fe7664ae":"query GetGitRepositoryID ($url: String) {\n\tgitRepository(url: $url) {\n\t\t... {\n\t\t\tid\n\t\t}\n\t}\n}\n","sha256:808ebe4bf5034aa84eae9f40e3b4046bd9d0961b9c6c15acc96c29a5c2ba961b":"mutation CreateGlobalService ($attributes: GlobalServiceAttributes!) {\n\tcreateGlobalService(attributes: $attributes) {\n\t\t... GlobalServiceFragment\n\t}\n}\nfragment GlobalServiceFragment on GlobalService {\n\tid\n\tname\n\tdistro\n\tprovider {\n\t\tid\n\t}\n\tservice {\n\t\tid\n\t}\n\ttags {\n\t\t... ClusterTags\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:812b636e5bfc0c485832996d9aed1a5826dc9a1d48e1b65ff68774f2c97e89c9":"query ListClusterServices {\n\tclusterServices {\n\t\t... ServiceDeploymentBaseFragment\n\t}\n}\nfragment ServiceDeploymentBaseFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\n","sha256:825ebd6ac166846c04631143991b97b8170a7a9d266ebb1c9331a9976a20d30f":"query GetClusterGates {\n\tclusterGates {\n\t\t... PipelineGateFragment\n\t}\n}\nfragment PipelineGateFragment on PipelineGate {\n\tid\n\tname\n\ttype\n\tstate\n\tupdatedAt\n\tspec {\n\t\t... GateSpecFragment\n\t}\n\tstatus {\n\t\t... GateStatusFragment\n\t}\n}\nfragment GateSpecFragment on GateSpec {\n\tjob {\n\t\t... JobSpecFragment\n\t}\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment GateStatusFragment on GateStatus {\n\tjobRef {\n\t\t... JobReferenceFragment\n\t}\n}\nfragment JobReferenceFragment on JobReference {\n\tname\n\tnamespace\n}\n","sha256:82a9426820e1787f567e38edbce7759b05900a1ec3721d17f883dd62ebc6642c":"query GetPrAutomation ($id: ID!) {\n\tprAutomation(id: $id) {\n\t\t... PrAutomationFragment\n\t}\n}\nfragment PrAutomationFragment on PrAutomation {\n\tid\n\tname\n\ttitle\n\taddon\n\tmessage\n\tidentifier\n\tinsertedAt\n\tupdatedAt\n}\n","sha256:836475a72bf4f3ebb0e1fcd945018865862b53cb7616f62ba213c2fd5fe69d05":"query ListViolationStatistics ($field: ConstraintViolationField!) {\n\tviolationStatistics(field: $field) {\n\t\t... ViolationStatisticFragment\n\t}\n}\nfragment ViolationStatisticFragment on ViolationStatistic {\n\tvalue\n\tviolations\n\tcount\n}\n","sha256:83b4333debfd340763ef190910485c333c6dd49d47110057df60be57da770157":"mutation DeleteNotificationRouter ($id: ID!) {\n\tdeleteNotificationRouter(id: $id) {\n\t\t... NotificationRouterFragment\n\t}\n}\nfragment NotificationRouterFragment on NotificationRouter {\n\tid\n\tname\n\tsinks {\n\t\t... NotificationSinkFragment\n\t}\n\tevents\n}\nfragment NotificationSinkFragment on NotificationSink {\n\tid\n\tname\n\ttype\n\tconfiguration {\n\t\t... SinkConfigurationFragment\n\t}\n\tnotificationBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment SinkConfigurationFragment on SinkConfiguration {\n\tid\n\tslack {\n\t\t... UrlSinkConfigurationFragment\n\t}\n\tteams {\n\t\t... UrlSinkConfigurationFragment\n\t}\n}\nfragment UrlSinkConfigurationFragment on UrlSinkConfiguration {\n\turl\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:843362e6b99d63d6a55e850db9f69b9b09f86278c3eb97dca4f720100546283d":"query GetMCPServer ($id: ID!) {\n\tmcpServer(id: $id) {\n\t\t... MCPServerFragment\n\t}\n}\nfragment MCPServerFragment on McpServer {\n\tid\n\tname\n\turl\n\tauthentication {\n\t\tplural\n\t\theaders {\n\t\t\tname\n\t\t\tvalue\n\t\t}\n\t}\n\tconfirm\n}\n","sha256:851d296b63f9c0c937e82a454781e76d918b708a27c3e264069902f71eff5d6d":"mutation CreateStack ($attributes: StackAttributes!) {\n\tcreateStack(attributes: $attributes) {\n\t\t... InfrastructureStackFragment\n\t}\n}\nfragment InfrastructureStackFragment on InfrastructureStack {\n\tid\n\tname\n\ttype\n\tvariables\n\tapproval\n\tworkdir\n\tmanageState\n\tdeletedAt\n\tgit {\n\t\t... GitRefFragment\n\t}\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tfiles {\n\t\t... StackFileFragment\n\t}\n\tenvironment {\n\t\t... StackEnvironmentFragment\n\t}\n\toutput {\n\t\t... StackOutputFragment\n\t}\n\tstate {\n\t\t... StackStateFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tpolicyEngine {\n\t\t... PolicyEngineFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment StackConfigurationFragment on StackConfiguration {\n\timage\n\tversion\n\ttag\n\thooks {\n\t\t... StackHookFragment\n\t}\n\tterraform {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tterragrunt {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tpulumi {\n\t\tparallel\n\t\trefresh\n\t\tapproveEmpty\n\t\tstack\n\t\tbackendUrl\n\t}\n\tansible {\n\t\tinventory\n\t\tplaybook\n\t\tprivateKeyFile\n\t\tconfigFile\n\t}\n}\nfragment StackHookFragment on StackHook {\n\tcmd\n\targs\n\tafterStage\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment StackFileFragment on StackFile {\n\tpath\n\tcontent\n}\nfragment StackEnvironmentFragment on StackEnvironment {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackStateFragment on StackState {\n\tid\n\tplan\n\tplanJson\n\tstate {\n\t\t... StackStateResourceFragment\n\t}\n}\nfragment StackStateResourceFragment on StackStateResource {\n\tidentifier\n\tresource\n\tname\n\tconfiguration\n\tlinks\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment PolicyEngineFragment on PolicyEngine {\n\ttype\n\tmaxSeverity\n\tcustomPolicies\n}\n","sha256:857bac887a978a2ac4f093331e7384dfb57425924b0a1bd5a09ffa9e04844819":"mutation UpdateOIDCProvider ($id: ID!, $type: OidcProviderType!, $attributes: OidcProviderAttributes!) {\n\tupdateOidcProvider(id: $id, type: $type, attributes: $attributes) {\n\t\t... OIDCProviderFragment\n\t}\n}\nfragment OIDCProviderFragment on OidcProvider {\n\tid\n\tname\n\tdescription\n\tclientId\n\tclientSecret\n\tauthMethod\n\tredirectUris\n\tbindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:85d46af869af92f6920bab0d8bcbdd30790f74de6439c25c997147d8775d9585":"mutation DeleteDashboard ($id: ID!) {\n\tdeleteDashboard(id: $id) {\n\t\tid\n\t}\n}\n","sha256:85df9e68d83e11a9f9321348538306287166a75d4ab75ab2b48855e80d8b39d2":"mutation DeleteBootstrapToken ($id: ID!) {\n\tdeleteBootstrapToken(id: $id) {\n\t\tid\n\t}\n}\n","sha256:8670eabfee3682802dbfd5c68f5e72b37119ec31e909f425655206ed9d5a18ec":"mutation UpdateFederatedCredential ($id: ID!, $attributes: FederatedCredentialAttributes!) {\n\tupdateFederatedCredential(id: $id, attributes: $attributes) {\n\t\t... FederatedCredentialFragment\n\t}\n}\nfragment FederatedCredentialFragment on FederatedCredential {\n\tid\n\tclaimsLike\n\tissuer\n\tscopes\n\tinsertedAt\n\tupdatedAt\n\tuser {\n\t\tid\n\t\tname\n\t\temail\n\t}\n}\n","sha256:86eb778bec88542b242c634b49a9073f61d1a6ea3c569519f7ac3281203bdf6f":"mutation DeleteBindingPolicy ($id: ID!) {\n\tdeleteBindingPolicy(id: $id) {\n\t\t... BindingPolicyFragment\n\t}\n}\nfragment BindingPolicyFragment on BindingPolicy {\n\tid\n\ttype\n\tinterval\n\tnextPollAt\n\tmatches {\n\t\tworkbench {\n\t\t\tregexes\n\t\t}\n\t}\n\tpolicy {\n\t\t... TinyPolicyFragment\n\t}\n\tbindPolicy {\n\t\t... TinyPolicyFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyPolicyFragment on Policy {\n\tid\n\tname\n}\n","sha256:8718a626952dfa0b721c1d528be55eeb633756e86f0222abdabe9c78351e62be":"mutation DeleteMonitor ($id: ID!) {\n\tdeleteMonitor(id: $id) {\n\t\tid\n\t}\n}\n","sha256:891cd1d4fbd8a953702cf2564d83f04e8bc76746d689988b9200ec64b2553336":"mutation RunSentinel ($id: ID!, $overrides: SentinelRunOverrides) {\n\trunSentinel(id: $id, overrides: $overrides) {\n\t\t... SentinelRunFragment\n\t}\n}\nfragment SentinelRunFragment on SentinelRun {\n\tid\n\tstatus\n\tsentinel {\n\t\tid\n\t}\n\tchecks {\n\t\t... SentinelCheckFragment\n\t}\n}\nfragment SentinelCheckFragment on SentinelCheck {\n\tid\n\tname\n\ttype\n\truleFile\n\tconfiguration {\n\t\t... SentinelCheckConfigurationFragment\n\t}\n}\nfragment SentinelCheckConfigurationFragment on SentinelCheckConfiguration {\n\tlog {\n\t\t... SentinelCheckLogConfigurationFragment\n\t}\n\tkubernetes {\n\t\t... SentinelCheckKubernetesConfigurationFragment\n\t}\n\tintegrationTest {\n\t\t... SentinelCheckIntegrationTestConfigurationFragment\n\t}\n}\nfragment SentinelCheckLogConfigurationFragment on SentinelCheckLogConfiguration {\n\tnamespaces\n\tquery\n\tclusterId\n\tfacets {\n\t\tkey\n\t\tvalue\n\t}\n\tduration\n}\nfragment SentinelCheckKubernetesConfigurationFragment on SentinelCheckKubernetesConfiguration {\n\tgroup\n\tversion\n\tkind\n\tname\n\tnamespace\n}\nfragment SentinelCheckIntegrationTestConfigurationFragment on SentinelCheckIntegrationTestConfiguration {\n\tdistro\n\ttags\n\trerunFailures\n\trerunFailuresCount\n\tpostrunScript\n\tgotestsum {\n\t\tp\n\t\tparallel\n\t}\n\tjob {\n\t\t... JobSpecFragment\n\t}\n\tcases {\n\t\t... TestCaseConfigurationFragment\n\t}\n\tdefault {\n\t\t... SentinelCheckIntegrationTestDefaultConfigurationFragment\n\t}\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment TestCaseConfigurationFragment on SentinelCheckIntegrationTestCaseConfiguration {\n\tname\n\ttype\n\tcoredns {\n\t\tdialFqdns\n\t\tdelay\n\t\tretries\n\t}\n\tloadbalancer {\n\t\tannotations\n\t\tlabels\n\t\tnamePrefix\n\t\tnamespace\n\t\tdnsProbe {\n\t\t\tfqdn\n\t\t\tdelay\n\t\t\tretries\n\t\t}\n\t}\n\tpvc {\n\t\tnamePrefix\n\t\tstorageClass\n\t\tsize\n\t}\n\traw {\n\t\tyaml\n\t\texpectedResult\n\t}\n}\nfragment SentinelCheckIntegrationTestDefaultConfigurationFragment on SentinelCheckIntegrationTestDefaultConfiguration {\n\tignore\n\tnamespaceAnnotations\n\tnamespaceLabels\n\tregistry\n\tresourceAnnotations\n\tresourceLabels\n}\n","sha256:897d62511eba988b849bd933c4ecb4586c6cf041aa66da4bc33967b3304da588":"mutation DeleteProject ($id: ID!) {\n\tdeleteProject(id: $id) {\n\t\t... ProjectFragment\n\t}\n}\nfragment ProjectFragment on Project {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\tdefault\n\tdescription\n\tdisableInsights\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:8b7e5e13fb971cec713be888b2da40e3dde99b17e1c06fd6ce1b13cfb315d5c7":"mutation CreateDashboard ($attributes: DashboardAttributes!) {\n\tcreateDashboard(attributes: $attributes) {\n\t\t... WorkbenchDashboardFragment\n\t}\n}\nfragment WorkbenchDashboardFragment on WorkbenchDashboard {\n\tid\n\tname\n\tworkbench {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:8c0caea577e1915120cdd7b5231a7f1a58eb0c339d1aaf024f8aa120902a7442":"mutation CreateClusterBackup ($attributes: BackupAttributes!) {\n\tcreateClusterBackup(attributes: $attributes) {\n\t\t... ClusterBackupFragment\n\t}\n}\nfragment ClusterBackupFragment on ClusterBackup {\n\tid\n\tname\n\tcluster {\n\t\tid\n\t}\n\tgarbageCollected\n}\n","sha256:8c44743ad7a874271ddb162b00027395262b0ac38d0322a4f09afe48f5c442e2":"mutation UpdateAgentRunAnalysis ($id: ID!, $attributes: AgentAnalysisAttributes!) {\n\tupdateAgentRunAnalysis(id: $id, attributes: $attributes) {\n\t\t... AgentRunBaseFragment\n\t}\n}\nfragment AgentRunBaseFragment on AgentRun {\n\tid\n\tprompt\n\trepository\n\tmode\n\tlanguage\n\tlanguageVersion\n\ttodos {\n\t\t... AgentTodoFragment\n\t}\n}\nfragment AgentTodoFragment on AgentTodo {\n\tdescription\n\tdone\n\ttitle\n}\n","sha256:8ca4f731dfc18a56ba661dcbba9c673f55aee501b263dbf655e67788eefec1eb":"query ListClusterMinimalStacks ($after: String, $first: Int, $before: String, $last: Int) {\n\tclusterStackRuns(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\t... MinimalStackRunEdgeFragment\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment MinimalStackRunEdgeFragment on StackRunEdge {\n\tnode {\n\t\t... StackRunMinimalFragment\n\t}\n}\nfragment StackRunMinimalFragment on StackRun {\n\tid\n\ttype\n\tstatus\n\tapproval\n\tapprovedAt\n\ttarball\n\tworkdir\n\tmanageState\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment StackConfigurationFragment on StackConfiguration {\n\timage\n\tversion\n\ttag\n\thooks {\n\t\t... StackHookFragment\n\t}\n\tterraform {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tterragrunt {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tpulumi {\n\t\tparallel\n\t\trefresh\n\t\tapproveEmpty\n\t\tstack\n\t\tbackendUrl\n\t}\n\tansible {\n\t\tinventory\n\t\tplaybook\n\t\tprivateKeyFile\n\t\tconfigFile\n\t}\n}\nfragment StackHookFragment on StackHook {\n\tcmd\n\targs\n\tafterStage\n}\n","sha256:8cf619217195e5c26fdb7262eb2dff9fbddaf4d5fdcaa2a46141f8bcd4b60e24":"query GetWorkbenchDashboard ($id: ID!) {\n\tworkbenchDashboard(id: $id) {\n\t\t... WorkbenchDashboardFragment\n\t}\n}\nfragment WorkbenchDashboardFragment on WorkbenchDashboard {\n\tid\n\tname\n\tworkbench {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:8d30669f0383e625d9b639af9cf66ccdb9458850496a8cbf656780348b7c7766":"mutation UpdateWorkbenchWebhook ($id: ID!, $attributes: WorkbenchWebhookAttributes!) {\n\tupdateWorkbenchWebhook(id: $id, attributes: $attributes) {\n\t\t... WorkbenchWebhookFragment\n\t}\n}\nfragment WorkbenchWebhookFragment on WorkbenchWebhook {\n\tid\n\tname\n\tprompt\n\tpriority\n\tmatches {\n\t\tregex\n\t\tsubstring\n\t\tcaseInsensitive\n\t}\n\twebhook {\n\t\tid\n\t\tname\n\t}\n\tissueWebhook {\n\t\tid\n\t\tname\n\t}\n\tworkbench {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:8d31d95b1fa3ae035864ae7aab5e31a31347f5c3a9654ea25237813800fb2c6c":"query GetSentinel ($id: ID!) {\n\tsentinel(id: $id) {\n\t\t... SentinelFragment\n\t}\n}\nfragment SentinelFragment on Sentinel {\n\tid\n\tname\n\tdescription\n\tgit {\n\t\t... GitRefFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tchecks {\n\t\t... SentinelCheckFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment SentinelCheckFragment on SentinelCheck {\n\tid\n\tname\n\ttype\n\truleFile\n\tconfiguration {\n\t\t... SentinelCheckConfigurationFragment\n\t}\n}\nfragment SentinelCheckConfigurationFragment on SentinelCheckConfiguration {\n\tlog {\n\t\t... SentinelCheckLogConfigurationFragment\n\t}\n\tkubernetes {\n\t\t... SentinelCheckKubernetesConfigurationFragment\n\t}\n\tintegrationTest {\n\t\t... SentinelCheckIntegrationTestConfigurationFragment\n\t}\n}\nfragment SentinelCheckLogConfigurationFragment on SentinelCheckLogConfiguration {\n\tnamespaces\n\tquery\n\tclusterId\n\tfacets {\n\t\tkey\n\t\tvalue\n\t}\n\tduration\n}\nfragment SentinelCheckKubernetesConfigurationFragment on SentinelCheckKubernetesConfiguration {\n\tgroup\n\tversion\n\tkind\n\tname\n\tnamespace\n}\nfragment SentinelCheckIntegrationTestConfigurationFragment on SentinelCheckIntegrationTestConfiguration {\n\tdistro\n\ttags\n\trerunFailures\n\trerunFailuresCount\n\tpostrunScript\n\tgotestsum {\n\t\tp\n\t\tparallel\n\t}\n\tjob {\n\t\t... JobSpecFragment\n\t}\n\tcases {\n\t\t... TestCaseConfigurationFragment\n\t}\n\tdefault {\n\t\t... SentinelCheckIntegrationTestDefaultConfigurationFragment\n\t}\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment TestCaseConfigurationFragment on SentinelCheckIntegrationTestCaseConfiguration {\n\tname\n\ttype\n\tcoredns {\n\t\tdialFqdns\n\t\tdelay\n\t\tretries\n\t}\n\tloadbalancer {\n\t\tannotations\n\t\tlabels\n\t\tnamePrefix\n\t\tnamespace\n\t\tdnsProbe {\n\t\t\tfqdn\n\t\t\tdelay\n\t\t\tretries\n\t\t}\n\t}\n\tpvc {\n\t\tnamePrefix\n\t\tstorageClass\n\t\tsize\n\t}\n\traw {\n\t\tyaml\n\t\texpectedResult\n\t}\n}\nfragment SentinelCheckIntegrationTestDefaultConfigurationFragment on SentinelCheckIntegrationTestDefaultConfiguration {\n\tignore\n\tnamespaceAnnotations\n\tnamespaceLabels\n\tregistry\n\tresourceAnnotations\n\tresourceLabels\n}\n","sha256:8e8fd8e272f046273e47c808d99bd0dd91b158e3c23175488c07482dc99b3a2b":"mutation UpsertNotificationSink ($attributes: NotificationSinkAttributes!) {\n\tupsertNotificationSink(attributes: $attributes) {\n\t\t... NotificationSinkFragment\n\t}\n}\nfragment NotificationSinkFragment on NotificationSink {\n\tid\n\tname\n\ttype\n\tconfiguration {\n\t\t... SinkConfigurationFragment\n\t}\n\tnotificationBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment SinkConfigurationFragment on SinkConfiguration {\n\tid\n\tslack {\n\t\t... UrlSinkConfigurationFragment\n\t}\n\tteams {\n\t\t... UrlSinkConfigurationFragment\n\t}\n}\nfragment UrlSinkConfigurationFragment on UrlSinkConfiguration {\n\turl\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:8f12d8cad53529ad1067b2ad72f6dc4ca662168c0268c3bbc027db8f662ef925":"query GetAgentUrl ($id: ID!) {\n\tcluster(id: $id) {\n\t\tagentUrl\n\t}\n}\n","sha256:8fa6f7a3f1ca23ce9e7d886bb84c023f4be92f923d057ce7bd97e95a41e541a0":"query GetDeploymentSettingsMinimal {\n\tdeploymentSettings {\n\t\t... DeploymentSettingsMinimalFragment\n\t}\n}\nfragment DeploymentSettingsMinimalFragment on DeploymentSettings {\n\tagentHelmValues\n\tagentVsn\n}\n","sha256:901e2e68afb969b6cc521cb1f1f3e0d134e6f0f11b9f24dcb288b95cc2a6e39e":"mutation CreateServiceAccount ($attributes: ServiceAccountAttributes!) {\n\tcreateServiceAccount(attributes: $attributes) {\n\t\t... UserFragment\n\t}\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:90314a4b07d2a45508cf458997cf53a19dd5eb958764462f71e43f062128f3db":"query GetMCPServers ($q: String, $first: Int, $after: String, $before: String, $last: Int) {\n\tmcpServers(q: $q, first: $first, after: $after, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... MCPServerFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment MCPServerFragment on McpServer {\n\tid\n\tname\n\turl\n\tauthentication {\n\t\tplural\n\t\theaders {\n\t\t\tname\n\t\t\tvalue\n\t\t}\n\t}\n\tconfirm\n}\n","sha256:910b361b6f8a5a95c6ddfd9d86bbeba38445e6242537e44f8a71f1294a098d31":"mutation UpsertVulnerabilities ($vulnerabilities: [VulnerabilityReportAttributes]) {\n\tupsertVulnerabilities(vulnerabilities: $vulnerabilities)\n}\n","sha256:91104bc566948580b79bda2fc4bf5cac926cf9bf185468a2e32653a9aaef8292":"mutation UpdateCluster ($id: ID!, $attributes: ClusterUpdateAttributes!) {\n\tupdateCluster(id: $id, attributes: $attributes) {\n\t\t... ClusterFragment\n\t}\n}\nfragment ClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tinsertedAt\n\tpingedAt\n\tprotect\n\tcurrentVersion\n\tkasUrl\n\tdeletedAt\n\tmetadata\n\tdistro\n\ttags {\n\t\t... ClusterTags\n\t}\n\tprovider {\n\t\t... ClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tstatus {\n\t\t... ClusterStatusFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\tdeletedAt\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tservice {\n\t\t... ServiceDeploymentFragment\n\t}\n\tcredentials {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment ClusterStatusFragment on ClusterStatus {\n\tconditions {\n\t\t... ClusterConditionFragment\n\t}\n}\nfragment ClusterConditionFragment on ClusterCondition {\n\tstatus\n\ttype\n\tmessage\n\treason\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:9189c9e78cd7eb57a9e67c9b09905683e01f2864e5e49516cac6beeaae44ce28":"query ListObservabilityWebhooks ($after: String, $before: String, $first: Int, $last: Int) {\n\tobservabilityWebhooks(after: $after, before: $before, first: $first, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... ObservabilityWebhookFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment ObservabilityWebhookFragment on ObservabilityWebhook {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\ttype\n\turl\n}\n","sha256:921369b1661c3b6001335e7a580e5d3b9e04a2792231cde13dc7b98159790d97":"mutation UpdatePrAutomation ($id: ID!, $attributes: PrAutomationAttributes!) {\n\tupdatePrAutomation(id: $id, attributes: $attributes) {\n\t\t... PrAutomationFragment\n\t}\n}\nfragment PrAutomationFragment on PrAutomation {\n\tid\n\tname\n\ttitle\n\taddon\n\tmessage\n\tidentifier\n\tinsertedAt\n\tupdatedAt\n}\n","sha256:929cc36181b7f6e09352f8e2776a66a3876c5fdd3ce60ab2637ac4dad4340cc0":"query PagedClusterServicesForAgent ($after: String, $first: Int, $before: String, $last: Int) {\n\tpagedClusterServices(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\t... ServiceDeploymentEdgeFragmentForAgent\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment ServiceDeploymentEdgeFragmentForAgent on ServiceDeploymentEdge {\n\tnode {\n\t\t... ServiceDeploymentForAgent\n\t}\n}\nfragment ServiceDeploymentForAgent on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\ttarball\n\tdeletedAt\n\tdryRun\n\ttemplated\n\tsha\n\tstatus\n\tcluster {\n\t\tid\n\t\tname\n\t\thandle\n\t\tself\n\t\tversion\n\t\tpingedAt\n\t\tmetadata\n\t\ttags {\n\t\t\t... ClusterTags\n\t\t}\n\t\tcurrentVersion\n\t\tkasUrl\n\t\tdistro\n\t}\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\thelm {\n\t\trelease\n\t\tvaluesFiles\n\t\tvalues\n\t\tignoreHooks\n\t\tignoreCrds\n\t\tluaScript\n\t\tluaFile\n\t\tluaFolder\n\t\tpythonScript\n\t\tpythonFile\n\t\tpythonFolder\n\t\tkustomizePostrender\n\t}\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tcontexts {\n\t\tname\n\t\tconfiguration\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tdeleteNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\trevision {\n\t\tid\n\t}\n\timports {\n\t\tid\n\t\tstack {\n\t\t\tid\n\t\t\tname\n\t\t}\n\t\toutputs {\n\t\t\tname\n\t\t\tvalue\n\t\t\tsecret\n\t\t}\n\t}\n\trenderers {\n\t\t... RendererFragment\n\t}\n\tdependencies {\n\t\t... ServiceDependencyFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment RendererFragment on Renderer {\n\tpath\n\ttype\n\thelm {\n\t\t... HelmMinimalFragment\n\t}\n}\nfragment HelmMinimalFragment on HelmMinimal {\n\tvalues\n\tvaluesFiles\n\trelease\n\tignoreHooks\n}\nfragment ServiceDependencyFragment on ServiceDependency {\n\tid\n\tname\n}\n","sha256:930b441c217f098b4a06fe5ee2b3413b71ddfeb7a14fd5a3f34e9eb094cf38c7":"query GetNotificationSinkByName ($name: String) {\n\tnotificationSink(name: $name) {\n\t\t... NotificationSinkFragment\n\t}\n}\nfragment NotificationSinkFragment on NotificationSink {\n\tid\n\tname\n\ttype\n\tconfiguration {\n\t\t... SinkConfigurationFragment\n\t}\n\tnotificationBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment SinkConfigurationFragment on SinkConfiguration {\n\tid\n\tslack {\n\t\t... UrlSinkConfigurationFragment\n\t}\n\tteams {\n\t\t... UrlSinkConfigurationFragment\n\t}\n}\nfragment UrlSinkConfigurationFragment on UrlSinkConfiguration {\n\turl\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:9408ad873dfdbd82d7e41d8dbff8b46185dea3a6f1fa49dec03cd60ebbc1e830":"query GetGroupTiny ($name: String!) {\n\tgroup(name: $name) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:945929e80092a3ddfffa063c66ef0f3daaf82409c169e3e7127fafed50a14ab2":"query ListNamespaces ($after: String, $first: Int, $before: String, $last: Int) {\n\tmanagedNamespaces(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\t... ManagedNamespaceEdgeFragment\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment ManagedNamespaceEdgeFragment on ManagedNamespaceEdge {\n\tcursor\n\tnode {\n\t\t... ManagedNamespaceMinimalFragment\n\t}\n}\nfragment ManagedNamespaceMinimalFragment on ManagedNamespace {\n\tid\n\tname\n\tdescription\n}\n","sha256:953c6871b8ad6a66454c4be5f93053bbfb913d5da336e4a83e9ba1f702561273":"mutation DeleteUser ($id: ID!) {\n\tdeleteUser(id: $id) {\n\t\t... UserFragment\n\t}\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:95f63c044687b9aeb755352caddb8fae1cff74a694a8d44c20c2669e786b4f82":"query ListServiceDeployment ($after: String, $before: String, $last: Int, $clusterId: ID) {\n\tserviceDeployments(after: $after, first: 100, before: $before, last: $last, clusterId: $clusterId) {\n\t\tedges {\n\t\t\t... ServiceDeploymentEdgeFragment\n\t\t}\n\t}\n}\nfragment ServiceDeploymentEdgeFragment on ServiceDeploymentEdge {\n\tnode {\n\t\t... ServiceDeploymentBaseFragment\n\t}\n}\nfragment ServiceDeploymentBaseFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\n","sha256:960457be7108f80ff02c924d123a5a85a8ea8df66a779785b18eb8376f72f525":"mutation DeleteClusterIsoImage ($id: ID!) {\n\tdeleteClusterIsoImage(id: $id) {\n\t\t... ClusterIsoImageFragment\n\t}\n}\nfragment ClusterIsoImageFragment on ClusterIsoImage {\n\tid\n\timage\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tregistry\n\tuser\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:96e9ad521bf896ffa2f2b2b584ef7d8216073289a30bdfe8de3ca0e6241057f1":"mutation UpdateWorkbenchPrompt ($id: ID!, $attributes: WorkbenchPromptAttributes!) {\n\tupdateWorkbenchPrompt(id: $id, attributes: $attributes) {\n\t\tid\n\t}\n}\n","sha256:97134516f2bf93fd448744222727bc2d4b9c4778c529fecc1d68766696fc4ad5":"query GetScmConnection ($id: ID!) {\n\tscmConnection(id: $id) {\n\t\t... ScmConnectionFragment\n\t}\n}\nfragment ScmConnectionFragment on ScmConnection {\n\tid\n\tname\n\tapiUrl\n\tbaseUrl\n\ttype\n\tusername\n\tinsertedAt\n\tupdatedAt\n}\n","sha256:980afba6c180a980bcf9a8639972cfe0612f6251116bf78b86442ade3cda51c3":"query GetWorkbenchTiny ($id: ID, $name: String) {\n\tworkbench(id: $id, name: $name) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:9827fcdc2ff6a39a12b07c9f580189df66b547435d5077b4348d57534c3981f5":"query TokenExchange ($token: String!) {\n\ttokenExchange(token: $token) {\n\t\t... UserFragment\n\t\tgroups {\n\t\t\tid\n\t\t\tname\n\t\t}\n\t\tboundRoles {\n\t\t\tid\n\t\t\tname\n\t\t}\n\t}\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:98630448e8dfa27ddc91790290e32ffc4f4ebee749bd1a8f890940c6f637bcb8":"query PagedClusterGateIDs ($after: String, $first: Int, $before: String, $last: Int) {\n\tpagedClusterGates(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\t... PipelineGateIDsEdgeFragment\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment PipelineGateIDsEdgeFragment on PipelineGateEdge {\n\tnode {\n\t\t... {\n\t\t\tid\n\t\t}\n\t}\n}\n","sha256:99c515b3c841d29dd7c06d7a15866725fe3522f0a8d7e6c749ead1e4148bbb58":"query ListAgentRuntimePendingRuns ($id: ID!, $after: String, $first: Int, $before: String, $last: Int) {\n\tagentRuntime(id: $id) {\n\t\tpendingRuns(after: $after, first: $first, before: $before, last: $last) {\n\t\t\tedges {\n\t\t\t\tnode {\n\t\t\t\t\t... AgentRunFragment\n\t\t\t\t}\n\t\t\t}\n\t\t\tpageInfo {\n\t\t\t\t... PageInfoFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment AgentRunFragment on AgentRun {\n\tid\n\tprompt\n\trepository\n\tbranch\n\theadBranch\n\tmode\n\treviewDepth\n\tlanguage\n\tlanguageVersion\n\ttodos {\n\t\t... AgentTodoFragment\n\t}\n\tprompts {\n\t\t... AgentPromptFragment\n\t}\n\tskills {\n\t\tname\n\t\tdescription\n\t\tcontents\n\t}\n\tstatus\n\tpodReference {\n\t\t... AgentPodReferenceFragment\n\t}\n\terror\n\tanalysis {\n\t\t... AgentAnalysisFragment\n\t}\n\tusage {\n\t\tinputTokens\n\t\toutputTokens\n\t\ttotalTokens\n\t\tcachedTokens\n\t\treasoningTokens\n\t\tinputCost\n\t\toutputCost\n\t\ttotalCost\n\t}\n\tscmCreds {\n\t\t... ScmCredentialFragment\n\t}\n\tpluralCreds {\n\t\t... PluralCredsFragment\n\t}\n\tworkbenchMcpUrl\n\truntime {\n\t\t... AgentRuntimeFragment\n\t}\n\tuser {\n\t\tid\n\t\tname\n\t\temail\n\t}\n\tflow {\n\t\tid\n\t\tname\n\t}\n\tpullRequests {\n\t\t... PullRequestFragment\n\t}\n\tupload {\n\t\t... AgentRunUploadFragment\n\t}\n\tbabysit\n\tbabysitInterval\n\tapproval\n\tapprovedAt\n\tfollowup\n\tfollowupPrUrl\n}\nfragment AgentTodoFragment on AgentTodo {\n\tdescription\n\tdone\n\ttitle\n}\nfragment AgentPromptFragment on AgentPrompt {\n\tid\n\tprompt\n\tseq\n}\nfragment AgentPodReferenceFragment on AgentPodReference {\n\tname\n\tnamespace\n}\nfragment AgentAnalysisFragment on AgentAnalysis {\n\tsummary\n\tanalysis\n\tbullets\n}\nfragment ScmCredentialFragment on ScmCreds {\n\ttoken\n\tusername\n\texaKey\n}\nfragment PluralCredsFragment on PluralCreds {\n\ttoken\n\turl\n}\nfragment AgentRuntimeFragment on AgentRuntime {\n\tid\n\tname\n\ttype\n\taiProxy\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tcreateBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment PullRequestFragment on PullRequest {\n\tid\n\tstatus\n\turl\n\ttitle\n\tcreator\n\tref\n}\nfragment AgentRunUploadFragment on AgentRunUpload {\n\tid\n\tsession\n\tscreenRecording\n\tpatch\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\n","sha256:99cf665c8973fc5fbe75bbb8053212dd63bbd38fae367116c111ae69665385fb":"query ListScmConnections ($cursor: String, $before: String, $last: Int) {\n\tscmConnections(after: $cursor, first: 100, before: $before, last: $last) {\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... ScmConnectionFragment\n\t\t\t}\n\t\t\tcursor\n\t\t}\n\t}\n}\nfragment ScmConnectionFragment on ScmConnection {\n\tid\n\tname\n\tapiUrl\n\tbaseUrl\n\ttype\n\tusername\n\tinsertedAt\n\tupdatedAt\n}\n","sha256:9a1a0ff9faec767fdd76670f61d6f07e3bfb6f87e38e9f7258337ec4d55ef49c":"query GetServiceDeploymentByHandle ($cluster: String!, $name: String!) {\n\tserviceDeployment(cluster: $cluster, name: $name) {\n\t\t... ServiceDeploymentExtended\n\t}\n}\nfragment ServiceDeploymentExtended on ServiceDeployment {\n\tcluster {\n\t\t... BaseClusterFragment\n\t}\n\terrors {\n\t\t... ErrorFragment\n\t}\n\trevision {\n\t\t... RevisionFragment\n\t}\n\tcontexts {\n\t\t... ServiceContextFragment\n\t}\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n\timports {\n\t\tstack {\n\t\t\t... InfrastructureStackTinyFragment\n\t\t}\n\t\toutputs {\n\t\t\t... StackOutputFragment\n\t\t}\n\t}\n}\nfragment BaseClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tdistro\n\tpingedAt\n\tcurrentVersion\n\tkasUrl\n\tmetadata\n\ttags {\n\t\t... ClusterTags\n\t}\n\tcredential {\n\t\t... ProviderCredentialFragment\n\t}\n\tprovider {\n\t\t... BaseClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment BaseClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment ErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\nfragment RevisionFragment on Revision {\n\tid\n\tsha\n\tgit {\n\t\tref\n\t\tfolder\n\t}\n}\nfragment ServiceContextFragment on ServiceContext {\n\tid\n\tname\n\tconfiguration\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment InfrastructureStackTinyFragment on InfrastructureStack {\n\tid\n\tname\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\n","sha256:9c6c086b73a8e8893f47aebd4f4b3fa31e6a323f54e4f49bad3390f41ff55e77":"mutation UpdateProject ($id: ID!, $attributes: ProjectAttributes!) {\n\tupdateProject(id: $id, attributes: $attributes) {\n\t\t... ProjectFragment\n\t}\n}\nfragment ProjectFragment on Project {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\tdefault\n\tdescription\n\tdisableInsights\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:9fb8d63cdb26f2f0c24141600a2e63734c288a3721a76322410265f4f2979d35":"query GetClusterRegistrations ($after: String, $first: Int, $before: String, $last: Int) {\n\tclusterRegistrations(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... ClusterRegistrationFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment ClusterRegistrationFragment on ClusterRegistration {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tmachineId\n\tname\n\thandle\n\tmetadata\n\ttags {\n\t\t... ClusterTags\n\t}\n\tcreator {\n\t\t... UserFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:a09067ffa71e8f8b2a7a319ff96f0a79b1e54733cc99029952e2744ebcb93e8d":"mutation CreateGroup ($attributtes: GroupAttributes!) {\n\tcreateGroup(attributes: $attributtes) {\n\t\t... GroupFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\n","sha256:a16b1da2c5e2560270870aa279c534d36db2d0dc8abfb0c21578fc61fc7a6b00":"query ListPrAutomations ($cursor: String, $before: String, $last: Int) {\n\tprAutomations(after: $cursor, first: 100, before: $before, last: $last) {\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... PrAutomationFragment\n\t\t\t}\n\t\t\tcursor\n\t\t}\n\t}\n}\nfragment PrAutomationFragment on PrAutomation {\n\tid\n\tname\n\ttitle\n\taddon\n\tmessage\n\tidentifier\n\tinsertedAt\n\tupdatedAt\n}\n","sha256:a21b5e44c5251b2393d36641f8e80e67318a9fe5cbd5a5a5010c21ee2deeb985":"mutation DeleteWorkbenchCron ($id: ID!) {\n\tdeleteWorkbenchCron(id: $id) {\n\t\t... WorkbenchCronFragment\n\t}\n}\nfragment WorkbenchCronFragment on WorkbenchCron {\n\tid\n\tcrontab\n\tprompt\n\tworkbench {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:a334251e65b8ab49ef2c93cf1b71d07822fb6b8f9201095cd5490fd1deab6e8e":"query ListServiceDeployments ($cursor: String, $before: String, $last: Int) {\n\tserviceDeployments(after: $cursor, first: 100, before: $before, last: $last) {\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... ServiceDeploymentFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\n","sha256:a44c40a19e2a6fdec2c6ebc9a7d8d85f004466fc628e568ef27a4973c6e4ae38":"mutation GetWorkbenchCron ($id: ID!) {\n\tworkbenchCron(id: $id) {\n\t\t... WorkbenchCronFragment\n\t}\n}\nfragment WorkbenchCronFragment on WorkbenchCron {\n\tid\n\tcrontab\n\tprompt\n\tworkbench {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:a6982b6bb2f74922ef5d6e2368ac42f8a499ad17f16f819a0f64e89b0c20abe0":"mutation DeleteWorkbenchWebhook ($id: ID!) {\n\tdeleteWorkbenchWebhook(id: $id) {\n\t\t... WorkbenchWebhookFragment\n\t}\n}\nfragment WorkbenchWebhookFragment on WorkbenchWebhook {\n\tid\n\tname\n\tprompt\n\tpriority\n\tmatches {\n\t\tregex\n\t\tsubstring\n\t\tcaseInsensitive\n\t}\n\twebhook {\n\t\tid\n\t\tname\n\t}\n\tissueWebhook {\n\t\tid\n\t\tname\n\t}\n\tworkbench {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:a7c3ab7455fa73c5f0171b092aafbfee2c47186ef1e6053d5ba99e5b264b4b16":"query GetCatalog ($id: ID, $name: String) {\n\tcatalog(id: $id, name: $name) {\n\t\t... CatalogFragment\n\t}\n}\nfragment CatalogFragment on Catalog {\n\tid\n\tname\n\tdescription\n\tcategory\n\tauthor\n\tproject {\n\t\t... ProjectFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment ProjectFragment on Project {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\tdefault\n\tdescription\n\tdisableInsights\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:a84f8942424abe644392066d12e351e0835027df1720d80bfa24f202b38a9dfd":"query GetNamespace ($id: ID!) {\n\tmanagedNamespace(id: $id) {\n\t\t... ManagedNamespaceFragment\n\t}\n}\nfragment ManagedNamespaceFragment on ManagedNamespace {\n\tid\n\tname\n\tdescription\n\tlabels\n\tannotations\n\tpullSecrets\n\tservice {\n\t\t... ServiceTemplateFragment\n\t}\n\ttarget {\n\t\t... ClusterTargetFragment\n\t}\n\tdeletedAt\n}\nfragment ServiceTemplateFragment on ServiceTemplate {\n\tname\n\tnamespace\n\ttemplated\n\trepositoryId\n\tcontexts\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tsyncConfig {\n\t\t... SyncConfigFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment SyncConfigFragment on SyncConfig {\n\tcreateNamespace\n\tnamespaceMetadata {\n\t\t... NamespaceMetadataFragment\n\t}\n}\nfragment NamespaceMetadataFragment on NamespaceMetadata {\n\tlabels\n\tannotations\n}\nfragment ClusterTargetFragment on ClusterTarget {\n\ttags\n\tdistro\n}\n","sha256:a8ce65444a9c0e953ccc22260b021bf84771782d619f4d9f940867bdaf01d9df":"mutation DeleteStack ($id: ID!) {\n\tdeleteStack(id: $id) {\n\t\t... InfrastructureStackIdFragment\n\t}\n}\nfragment InfrastructureStackIdFragment on InfrastructureStack {\n\tid\n}\n","sha256:a91f084bbbd85931d0e231c6caf2d1280b97dd1f9c7a1fb574192f3710106563":"mutation UpsertHelmRepository ($url: String!, $attributes: HelmRepositoryAttributes) {\n\tupsertHelmRepository(url: $url, attributes: $attributes) {\n\t\t... HelmRepositoryFragment\n\t}\n}\nfragment HelmRepositoryFragment on HelmRepository {\n\tid\n\tinsertedAt\n\tupdatedAt\n\turl\n\tprovider\n\thealth\n}\n","sha256:a929072c59cbb7e762fec990adb41cf6cf80c06d00bbd0caa372f6bd4661b053":"query GetClusterWithToken ($id: ID, $handle: String) {\n\tcluster(id: $id, handle: $handle) {\n\t\t... ClusterFragment\n\t\tdeployToken\n\t}\n}\nfragment ClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tinsertedAt\n\tpingedAt\n\tprotect\n\tcurrentVersion\n\tkasUrl\n\tdeletedAt\n\tmetadata\n\tdistro\n\ttags {\n\t\t... ClusterTags\n\t}\n\tprovider {\n\t\t... ClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tstatus {\n\t\t... ClusterStatusFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\tdeletedAt\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tservice {\n\t\t... ServiceDeploymentFragment\n\t}\n\tcredentials {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment ClusterStatusFragment on ClusterStatus {\n\tconditions {\n\t\t... ClusterConditionFragment\n\t}\n}\nfragment ClusterConditionFragment on ClusterCondition {\n\tstatus\n\ttype\n\tmessage\n\treason\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:a9481fbef0ee5faac5f98ff86f1fcc351aef26a41e52daf22428135a715824b1":"query PagedClusterGates ($after: String, $first: Int, $before: String, $last: Int) {\n\tpagedClusterGates(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\t... PipelineGateEdgeFragment\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment PipelineGateEdgeFragment on PipelineGateEdge {\n\tnode {\n\t\t... PipelineGateFragment\n\t}\n}\nfragment PipelineGateFragment on PipelineGate {\n\tid\n\tname\n\ttype\n\tstate\n\tupdatedAt\n\tspec {\n\t\t... GateSpecFragment\n\t}\n\tstatus {\n\t\t... GateStatusFragment\n\t}\n}\nfragment GateSpecFragment on GateSpec {\n\tjob {\n\t\t... JobSpecFragment\n\t}\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment GateStatusFragment on GateStatus {\n\tjobRef {\n\t\t... JobReferenceFragment\n\t}\n}\nfragment JobReferenceFragment on JobReference {\n\tname\n\tnamespace\n}\n","sha256:aa077f5ef1fd98bb3909a063b4f4f6d722ee4355e2006aa48a80a5a3f34a988d":"mutation DeleteScmConnection ($id: ID!) {\n\tdeleteScmConnection(id: $id) {\n\t\t... ScmConnectionFragment\n\t}\n}\nfragment ScmConnectionFragment on ScmConnection {\n\tid\n\tname\n\tapiUrl\n\tbaseUrl\n\ttype\n\tusername\n\tinsertedAt\n\tupdatedAt\n}\n","sha256:aa987069b6edaf93d75eb44ab52356a7374b4ea4669b503729dc5209e4ba85e2":"query GetServiceDeploymentComponents ($id: ID!) {\n\tserviceDeployment(id: $id) {\n\t\tid\n\t\tcomponents {\n\t\t\tkind\n\t\t\tstate\n\t\t}\n\t}\n}\n","sha256:abd3ae6e1fb895e3c792f77c5ec324b372ffc85abb94f26772455a98f547ef0a":"mutation UpdateScmConnection ($id: ID!, $attributes: ScmConnectionAttributes!) {\n\tupdateScmConnection(id: $id, attributes: $attributes) {\n\t\t... ScmConnectionFragment\n\t}\n}\nfragment ScmConnectionFragment on ScmConnection {\n\tid\n\tname\n\tapiUrl\n\tbaseUrl\n\ttype\n\tusername\n\tinsertedAt\n\tupdatedAt\n}\n","sha256:acdaf678c528e8bf7724301610dd4dd6304314c59d436e8e5452073068a143fc":"mutation DeleteGlobalService ($id: ID!) {\n\tdeleteGlobalService(id: $id) {\n\t\t... GlobalServiceFragment\n\t}\n}\nfragment GlobalServiceFragment on GlobalService {\n\tid\n\tname\n\tdistro\n\tprovider {\n\t\tid\n\t}\n\tservice {\n\t\tid\n\t}\n\ttags {\n\t\t... ClusterTags\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:ad10097393ee33916a9be2804e6c786bb8f42679e64049dcf17eb8dd2cf79ef1":"query PagedClusterServiceIds ($after: String, $first: Int, $before: String, $last: Int) {\n\tpagedClusterServices(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\t... ServiceDeploymentIdEdgeFragment\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment ServiceDeploymentIdEdgeFragment on ServiceDeploymentEdge {\n\tnode {\n\t\t... ServiceDeploymentIdFragment\n\t}\n}\nfragment ServiceDeploymentIdFragment on ServiceDeployment {\n\tid\n}\n","sha256:af037c14ab732c3150f56513fcdbf6187c36457b52c13b05928e9dea542d3f97":"query GetProject ($id: ID, $name: String) {\n\tproject(id: $id, name: $name) {\n\t\t... ProjectFragment\n\t}\n}\nfragment ProjectFragment on Project {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\tdefault\n\tdescription\n\tdisableInsights\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:aff1e211314f3b4f2795d03b2a40b9302661e9b92c8cc49c6c46c2758274c875":"mutation UpdateWorkbench ($id: ID!, $attributes: WorkbenchAttributes!) {\n\tupdateWorkbench(id: $id, attributes: $attributes) {\n\t\t... WorkbenchFragment\n\t}\n}\nfragment WorkbenchFragment on Workbench {\n\tid\n\tname\n\tdescription\n\tsystemPrompt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tagentRuntime {\n\t\t... TinyAgentRuntimeFragment\n\t}\n\tconfiguration {\n\t\tcoding {\n\t\t\tmode\n\t\t\trepositories\n\t\t}\n\t\tinfrastructure {\n\t\t\tservices\n\t\t\tstacks\n\t\t\tkubernetes\n\t\t}\n\t\tobservability {\n\t\t\tlogs\n\t\t\tmetrics\n\t\t}\n\t}\n\tskills {\n\t\tref {\n\t\t\tref\n\t\t\tfolder\n\t\t\tfiles\n\t\t}\n\t\tfiles\n\t}\n\ttools {\n\t\t... WorkbenchToolFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment TinyAgentRuntimeFragment on AgentRuntime {\n\tid\n\tname\n\ttype\n\tcluster {\n\t\tid\n\t\tname\n\t\thandle\n\t}\n}\nfragment WorkbenchToolFragment on WorkbenchTool {\n\tid\n\tname\n\ttool\n\tcategories\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tmcpServer {\n\t\t... MCPServerFragment\n\t}\n\tcloudConnection {\n\t\t... CloudConnectionFragment\n\t}\n\tscmConnection {\n\t\tid\n\t\tname\n\t\ttype\n\t}\n\tconfiguration {\n\t\thttp {\n\t\t\turl\n\t\t\tmethod\n\t\t\tfunction\n\t\t\theaders {\n\t\t\t\tname\n\t\t\t\tvalue\n\t\t\t}\n\t\t\tbody\n\t\t\tinputSchema\n\t\t}\n\t\telastic {\n\t\t\tindex\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\topensearch {\n\t\t\thost\n\t\t\tindex\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t\tassumeRoleArn\n\t\t\tusePodIdentity\n\t\t}\n\t\tprometheus {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t\tawsSigv4\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t}\n\t\tloki {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tvictoriaLogs {\n\t\t\turl\n\t\t\tusername\n\t\t\taccountId\n\t\t\tprojectId\n\t\t}\n\t\tsplunk {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\ttempo {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tjaeger {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\tdatadog {\n\t\t\tsite\n\t\t}\n\t\tdynatrace {\n\t\t\turl\n\t\t}\n\t\tcloudwatch {\n\t\t\tregion\n\t\t\tlogGroupNames\n\t\t\troleArn\n\t\t\troleSessionName\n\t\t}\n\t\tazure {\n\t\t\tsubscriptionId\n\t\t\ttenantId\n\t\t\tclientId\n\t\t\tprometheusUrl\n\t\t}\n\t\tsentry {\n\t\t\turl\n\t\t}\n\t\tlinear {\n\t\t\turl\n\t\t}\n\t\tslack {\n\t\t\turl\n\t\t}\n\t\tpagerduty {\n\t\t\turl\n\t\t}\n\t\tteams {\n\t\t\tclientId\n\t\t\ttenantId\n\t\t}\n\t\tatlassian {\n\t\t\turl\n\t\t\temail\n\t\t}\n\t\texa {\n\t\t\turl\n\t\t}\n\t\tgithub {\n\t\t\turl\n\t\t\ttoolset\n\t\t\tappId\n\t\t\tinstallationId\n\t\t}\n\t\tgitlab {\n\t\t\turl\n\t\t}\n\t\tbitbucket {\n\t\t\turl\n\t\t}\n\t\tbitbucketDatacenter {\n\t\t\turl\n\t\t}\n\t\tazureDevops {\n\t\t\turl\n\t\t}\n\t\tlambda {\n\t\t\tlambdaArn\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tcloudRun {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tazureFunction {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tdocker {\n\t\t\turl\n\t\t\tprovider\n\t\t\tproxy {\n\t\t\t\turl\n\t\t\t\tnoproxy\n\t\t\t}\n\t\t}\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment MCPServerFragment on McpServer {\n\tid\n\tname\n\turl\n\tauthentication {\n\t\tplural\n\t\theaders {\n\t\t\tname\n\t\t\tvalue\n\t\t}\n\t}\n\tconfirm\n}\nfragment CloudConnectionFragment on CloudConnection {\n\tid\n\tname\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tprovider\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:b0c7d62eece94e065f18516cf7006281428f4ff44ecd903fb3fbcf334d99deac":"mutation CreateQueuedPrompt ($jobId: ID!, $attributes: QueuedPromptAttributes!) {\n\tcreateQueuedPrompt(jobId: $jobId, attributes: $attributes) {\n\t\t... QueuedPromptFragment\n\t}\n}\nfragment QueuedPromptFragment on QueuedPrompt {\n\tid\n\tprompt\n\tdequeableAt\n\tworkbenchJob {\n\t\tid\n\t}\n\tuser {\n\t\tid\n\t}\n}\n","sha256:b220576f4e2238111c178658b7e3e11c7a2fc482e1d1145c94aab213f2595242":"mutation DeleteGroupMember ($userId: ID!, $groupId: ID!) {\n\tdeleteGroupMember(userId: $userId, groupId: $groupId) {\n\t\t... GroupMemberFragment\n\t}\n}\nfragment GroupMemberFragment on GroupMember {\n\tid\n\tuser {\n\t\tid\n\t}\n\tgroup {\n\t\tid\n\t}\n}\n","sha256:b344029ffce5a39a293ead846a55b56059495641da56fe8b536d4e12f9b22b71":"query GetWorkbench ($id: ID, $name: String) {\n\tworkbench(id: $id, name: $name) {\n\t\t... WorkbenchFragment\n\t}\n}\nfragment WorkbenchFragment on Workbench {\n\tid\n\tname\n\tdescription\n\tsystemPrompt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tagentRuntime {\n\t\t... TinyAgentRuntimeFragment\n\t}\n\tconfiguration {\n\t\tcoding {\n\t\t\tmode\n\t\t\trepositories\n\t\t}\n\t\tinfrastructure {\n\t\t\tservices\n\t\t\tstacks\n\t\t\tkubernetes\n\t\t}\n\t\tobservability {\n\t\t\tlogs\n\t\t\tmetrics\n\t\t}\n\t}\n\tskills {\n\t\tref {\n\t\t\tref\n\t\t\tfolder\n\t\t\tfiles\n\t\t}\n\t\tfiles\n\t}\n\ttools {\n\t\t... WorkbenchToolFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment TinyAgentRuntimeFragment on AgentRuntime {\n\tid\n\tname\n\ttype\n\tcluster {\n\t\tid\n\t\tname\n\t\thandle\n\t}\n}\nfragment WorkbenchToolFragment on WorkbenchTool {\n\tid\n\tname\n\ttool\n\tcategories\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tmcpServer {\n\t\t... MCPServerFragment\n\t}\n\tcloudConnection {\n\t\t... CloudConnectionFragment\n\t}\n\tscmConnection {\n\t\tid\n\t\tname\n\t\ttype\n\t}\n\tconfiguration {\n\t\thttp {\n\t\t\turl\n\t\t\tmethod\n\t\t\tfunction\n\t\t\theaders {\n\t\t\t\tname\n\t\t\t\tvalue\n\t\t\t}\n\t\t\tbody\n\t\t\tinputSchema\n\t\t}\n\t\telastic {\n\t\t\tindex\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\topensearch {\n\t\t\thost\n\t\t\tindex\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t\tassumeRoleArn\n\t\t\tusePodIdentity\n\t\t}\n\t\tprometheus {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t\tawsSigv4\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t}\n\t\tloki {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tvictoriaLogs {\n\t\t\turl\n\t\t\tusername\n\t\t\taccountId\n\t\t\tprojectId\n\t\t}\n\t\tsplunk {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\ttempo {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tjaeger {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\tdatadog {\n\t\t\tsite\n\t\t}\n\t\tdynatrace {\n\t\t\turl\n\t\t}\n\t\tcloudwatch {\n\t\t\tregion\n\t\t\tlogGroupNames\n\t\t\troleArn\n\t\t\troleSessionName\n\t\t}\n\t\tazure {\n\t\t\tsubscriptionId\n\t\t\ttenantId\n\t\t\tclientId\n\t\t\tprometheusUrl\n\t\t}\n\t\tsentry {\n\t\t\turl\n\t\t}\n\t\tlinear {\n\t\t\turl\n\t\t}\n\t\tslack {\n\t\t\turl\n\t\t}\n\t\tpagerduty {\n\t\t\turl\n\t\t}\n\t\tteams {\n\t\t\tclientId\n\t\t\ttenantId\n\t\t}\n\t\tatlassian {\n\t\t\turl\n\t\t\temail\n\t\t}\n\t\texa {\n\t\t\turl\n\t\t}\n\t\tgithub {\n\t\t\turl\n\t\t\ttoolset\n\t\t\tappId\n\t\t\tinstallationId\n\t\t}\n\t\tgitlab {\n\t\t\turl\n\t\t}\n\t\tbitbucket {\n\t\t\turl\n\t\t}\n\t\tbitbucketDatacenter {\n\t\t\turl\n\t\t}\n\t\tazureDevops {\n\t\t\turl\n\t\t}\n\t\tlambda {\n\t\t\tlambdaArn\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tcloudRun {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tazureFunction {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tdocker {\n\t\t\turl\n\t\t\tprovider\n\t\t\tproxy {\n\t\t\t\turl\n\t\t\t\tnoproxy\n\t\t\t}\n\t\t}\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment MCPServerFragment on McpServer {\n\tid\n\tname\n\turl\n\tauthentication {\n\t\tplural\n\t\theaders {\n\t\t\tname\n\t\t\tvalue\n\t\t}\n\t}\n\tconfirm\n}\nfragment CloudConnectionFragment on CloudConnection {\n\tid\n\tname\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tprovider\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:b3c5a853563920b74b4e2d1687e851e198d53c61d2d42df5642261d732841cc6":"mutation DeletePolicy ($id: ID!) {\n\tdeletePolicy(id: $id) {\n\t\t... PolicyFragment\n\t}\n}\nfragment PolicyFragment on Policy {\n\tid\n\tname\n\ttype\n\tdescription\n\tpolicy\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:b48053dac3c5ecd9ab8e99a7f29f52b25c13f7f191203637fb43f1833a30d335":"query ListServiceDeploymentByHandle ($after: String, $before: String, $last: Int, $cluster: String) {\n\tserviceDeployments(after: $after, first: 100, before: $before, last: $last, cluster: $cluster) {\n\t\tedges {\n\t\t\t... ServiceDeploymentEdgeFragment\n\t\t}\n\t}\n}\nfragment ServiceDeploymentEdgeFragment on ServiceDeploymentEdge {\n\tnode {\n\t\t... ServiceDeploymentBaseFragment\n\t}\n}\nfragment ServiceDeploymentBaseFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\n","sha256:b5aade690f9187a9eb7b67156c989946e1f652356238ffb859cf67c002dd5b20":"query GetServiceDeploymentForAgent ($id: ID!) {\n\tserviceDeployment(id: $id) {\n\t\t... ServiceDeploymentForAgent\n\t}\n}\nfragment ServiceDeploymentForAgent on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\ttarball\n\tdeletedAt\n\tdryRun\n\ttemplated\n\tsha\n\tstatus\n\tcluster {\n\t\tid\n\t\tname\n\t\thandle\n\t\tself\n\t\tversion\n\t\tpingedAt\n\t\tmetadata\n\t\ttags {\n\t\t\t... ClusterTags\n\t\t}\n\t\tcurrentVersion\n\t\tkasUrl\n\t\tdistro\n\t}\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\thelm {\n\t\trelease\n\t\tvaluesFiles\n\t\tvalues\n\t\tignoreHooks\n\t\tignoreCrds\n\t\tluaScript\n\t\tluaFile\n\t\tluaFolder\n\t\tpythonScript\n\t\tpythonFile\n\t\tpythonFolder\n\t\tkustomizePostrender\n\t}\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tcontexts {\n\t\tname\n\t\tconfiguration\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tdeleteNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\trevision {\n\t\tid\n\t}\n\timports {\n\t\tid\n\t\tstack {\n\t\t\tid\n\t\t\tname\n\t\t}\n\t\toutputs {\n\t\t\tname\n\t\t\tvalue\n\t\t\tsecret\n\t\t}\n\t}\n\trenderers {\n\t\t... RendererFragment\n\t}\n\tdependencies {\n\t\t... ServiceDependencyFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment RendererFragment on Renderer {\n\tpath\n\ttype\n\thelm {\n\t\t... HelmMinimalFragment\n\t}\n}\nfragment HelmMinimalFragment on HelmMinimal {\n\tvalues\n\tvaluesFiles\n\trelease\n\tignoreHooks\n}\nfragment ServiceDependencyFragment on ServiceDependency {\n\tid\n\tname\n}\n","sha256:b6344198b643d2b030241e4ba06a7a808511584a5ddc52dabbbcc1b896c989ff":"mutation CloneServiceDeploymentWithHandle ($clusterId: ID!, $cluster: String!, $name: String!, $attributes: ServiceCloneAttributes!) {\n\tcloneService(clusterId: $clusterId, cluster: $cluster, name: $name, attributes: $attributes) {\n\t\t... ServiceDeploymentFragment\n\t}\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\n","sha256:b640b4ec159932cdb9519e0edba90585ba6552f8637f5a3136ecca8c7c4b33c5":"query ListClusters ($cursor: String, $before: String, $last: Int) {\n\tclusters(after: $cursor, first: 100, before: $before, last: $last) {\n\t\tedges {\n\t\t\t... ClusterEdgeFragment\n\t\t}\n\t}\n}\nfragment ClusterEdgeFragment on ClusterEdge {\n\tnode {\n\t\t... ClusterFragment\n\t}\n}\nfragment ClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tinsertedAt\n\tpingedAt\n\tprotect\n\tcurrentVersion\n\tkasUrl\n\tdeletedAt\n\tmetadata\n\tdistro\n\ttags {\n\t\t... ClusterTags\n\t}\n\tprovider {\n\t\t... ClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tstatus {\n\t\t... ClusterStatusFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\tdeletedAt\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tservice {\n\t\t... ServiceDeploymentFragment\n\t}\n\tcredentials {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment ClusterStatusFragment on ClusterStatus {\n\tconditions {\n\t\t... ClusterConditionFragment\n\t}\n}\nfragment ClusterConditionFragment on ClusterCondition {\n\tstatus\n\ttype\n\tmessage\n\treason\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:b6bb1e90c1b8586144c0060e4b38c1d76124d80c3d4ae2d7b1f6ada4251afedf":"mutation UpdateServiceDeployment ($id: ID!, $attributes: ServiceUpdateAttributes!) {\n\tupdateServiceDeployment(id: $id, attributes: $attributes) {\n\t\t... ServiceDeploymentExtended\n\t}\n}\nfragment ServiceDeploymentExtended on ServiceDeployment {\n\tcluster {\n\t\t... BaseClusterFragment\n\t}\n\terrors {\n\t\t... ErrorFragment\n\t}\n\trevision {\n\t\t... RevisionFragment\n\t}\n\tcontexts {\n\t\t... ServiceContextFragment\n\t}\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n\timports {\n\t\tstack {\n\t\t\t... InfrastructureStackTinyFragment\n\t\t}\n\t\toutputs {\n\t\t\t... StackOutputFragment\n\t\t}\n\t}\n}\nfragment BaseClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tdistro\n\tpingedAt\n\tcurrentVersion\n\tkasUrl\n\tmetadata\n\ttags {\n\t\t... ClusterTags\n\t}\n\tcredential {\n\t\t... ProviderCredentialFragment\n\t}\n\tprovider {\n\t\t... BaseClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment BaseClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment ErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\nfragment RevisionFragment on Revision {\n\tid\n\tsha\n\tgit {\n\t\tref\n\t\tfolder\n\t}\n}\nfragment ServiceContextFragment on ServiceContext {\n\tid\n\tname\n\tconfiguration\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment InfrastructureStackTinyFragment on InfrastructureStack {\n\tid\n\tname\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\n","sha256:b77c4291ae27a7349ae24c8c3963ce23ff5daed32c51eb1275dbccd1df6fcbe1":"query GetObservabilityProvider ($id: ID, $name: String) {\n\tobservabilityProvider(id: $id, name: $name) {\n\t\t... ObservabilityProviderFragment\n\t}\n}\nfragment ObservabilityProviderFragment on ObservabilityProvider {\n\tid\n\tname\n\ttype\n\tupdatedAt\n\tinsertedAt\n}\n","sha256:b80a7faf4eee40b6c3823963dcf3614aa12035c3da6b317cb8208ccc4f6ac8b7":"query GetPrAutomationByName ($name: String!) {\n\tprAutomation(name: $name) {\n\t\t... PrAutomationFragment\n\t}\n}\nfragment PrAutomationFragment on PrAutomation {\n\tid\n\tname\n\ttitle\n\taddon\n\tmessage\n\tidentifier\n\tinsertedAt\n\tupdatedAt\n}\n","sha256:b83ec626d13be86492db9fd86946d48b92e7e29239c0ff5600ac0e6006109e5c":"mutation CreateProviderCredential ($attributes: ProviderCredentialAttributes!, $name: String!) {\n\tcreateProviderCredential(attributes: $attributes, name: $name) {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\n","sha256:b87afc4a88b126bb018cbdee0a2d9f5c3552d1a2d9b032cdd1875023c2680da4":"mutation DeleteComplianceReportGenerator ($id: ID!) {\n\tdeleteComplianceReportGenerator(id: $id) {\n\t\t... ComplianceReportGeneratorFragment\n\t}\n}\nfragment ComplianceReportGeneratorFragment on ComplianceReportGenerator {\n\tid\n\tname\n\tformat\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:b88dad5dbf1911bf14fc349f8f14568b3cea7b12079ba4f50b80360a8a05d063":"mutation CreateGlobalServiceDeployment ($serviceId: ID!, $attributes: GlobalServiceAttributes!) {\n\tcreateGlobalService(serviceId: $serviceId, attributes: $attributes) {\n\t\t... GlobalServiceFragment\n\t}\n}\nfragment GlobalServiceFragment on GlobalService {\n\tid\n\tname\n\tdistro\n\tprovider {\n\t\tid\n\t}\n\tservice {\n\t\tid\n\t}\n\ttags {\n\t\t... ClusterTags\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:b92d34e46bb45d51af62431f19f46a643594ab8d2ace6ee0cdd7d2f9076c4116":"mutation UpsertPolicyConstraints ($constraints: [PolicyConstraintAttributes!]) {\n\tupsertPolicyConstraints(constraints: $constraints)\n}\n","sha256:b93ae4d17a11b60381e132d78df0ec8d9431bbf834517cc47ab74f83c7ef87aa":"mutation CreateServiceAccountToken ($id: ID!, $scopes: [ScopeAttributes], $expiry: String) {\n\tcreateServiceAccountToken(id: $id, scopes: $scopes, expiry: $expiry) {\n\t\t... AccessTokenFragment\n\t}\n}\nfragment AccessTokenFragment on AccessToken {\n\tid\n\ttoken\n}\n","sha256:b97ad5c22e824cb03ea1120d22df72eb1a45c6e18b82b399000786edf1fb6635":"mutation DeleteSentinel ($id: ID!) {\n\tdeleteSentinel(id: $id) {\n\t\tid\n\t}\n}\n","sha256:babd1fcf26e7e8d1243a3f92bb3135de93cd73b0bb5d4e28e40bd650bcbdfd1d":"query GetWorkbenchPrompt ($id: ID!) {\n\tworkbenchPrompt(id: $id) {\n\t\t... WorkbenchPromptFragment\n\t}\n}\nfragment WorkbenchPromptFragment on WorkbenchPrompt {\n\tid\n\ttitle\n\tcategory\n\tprompt\n}\n","sha256:bb41a2b83ff40ea0e043a1edace47470f4c97a1b20b95d0c8b862e85ce5ad54f":"query GetUser ($email: String!) {\n\tuser(email: $email) {\n\t\t... UserFragment\n\t}\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:bcaa00aae81a591bfbc55c97d7d7fab286def9d56608d84929c4e948dbea70da":"mutation CreateClusterRegistration ($attributes: ClusterRegistrationCreateAttributes!) {\n\tcreateClusterRegistration(attributes: $attributes) {\n\t\t... ClusterRegistrationFragment\n\t}\n}\nfragment ClusterRegistrationFragment on ClusterRegistration {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tmachineId\n\tname\n\thandle\n\tmetadata\n\ttags {\n\t\t... ClusterTags\n\t}\n\tcreator {\n\t\t... UserFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:be6f160416467f5e1c4f5f50a1549a66bbc8069b3b54836348e3be3507cdc897":"query GetPrGovernance ($id: ID, $name: String) {\n\tprGovernance(id: $id, name: $name) {\n\t\t... PrGovernanceFragment\n\t}\n}\nfragment PrGovernanceFragment on PrGovernance {\n\tid\n\tname\n}\n","sha256:becbe7cfde6f4a45472afa3838782c007a7ca917e38ba1c6e9994f66543401c1":"mutation UpdateStackRunStep ($id: ID!, $attributes: RunStepAttributes!) {\n\tupdateRunStep(id: $id, attributes: $attributes) {\n\t\t... RunStepFragment\n\t}\n}\nfragment RunStepFragment on RunStep {\n\tid\n\tstatus\n\tstage\n\tname\n\tcmd\n\targs\n\trequireApproval\n\tindex\n}\n","sha256:bef364b9855a0f6ff2adb5d11c887b240e54f9ccad79cf8cb5a687a5f01fe216":"query ListProjects ($after: String, $before: String, $first: Int, $last: Int, $q: String) {\n\tprojects(after: $after, before: $before, first: $first, last: $last, q: $q) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... ProjectFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment ProjectFragment on Project {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\tdefault\n\tdescription\n\tdisableInsights\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:bfaf5cbd07eaa142e0d849d06d5e5b453aa32d0c6eeace81fa1933d76650e234":"mutation CreateClusterRestore ($backupId: ID!) {\n\tcreateClusterRestore(backupId: $backupId) {\n\t\t... ClusterRestoreFragment\n\t}\n}\nfragment ClusterRestoreFragment on ClusterRestore {\n\tid\n\tstatus\n\tbackup {\n\t\t... ClusterBackupFragment\n\t}\n}\nfragment ClusterBackupFragment on ClusterBackup {\n\tid\n\tname\n\tcluster {\n\t\tid\n\t}\n\tgarbageCollected\n}\n","sha256:bfb0af0255fcb8a8df9b9a92adc450dc9d7b73aecfb9d984041d36741ab28357":"query GetPolicyTiny ($id: ID, $name: String) {\n\tpolicy(id: $id, name: $name) {\n\t\t... TinyPolicyFragment\n\t}\n}\nfragment TinyPolicyFragment on Policy {\n\tid\n\tname\n}\n","sha256:c064e0789ac325d358976a1f68ae61f2d0fd196ac6452d2a0d89e14dc0a8f106":"mutation updateServiceComponents ($id: ID!, $components: [ComponentAttributes], $revisionId: ID!, $sha: String, $errors: [ServiceErrorAttributes], $metadata: ServiceMetadataAttributes) {\n\tupdateServiceComponents(id: $id, components: $components, revisionId: $revisionId, sha: $sha, errors: $errors, metadata: $metadata) {\n\t\t... ServiceDeploymentFragment\n\t}\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\n","sha256:c09faa203ac4b24e71309d89522aeb52d09256d884896870c257c57940b352ae":"mutation CreateAccessToken {\n\tcreateAccessToken {\n\t\t... AccessTokenFragment\n\t}\n}\nfragment AccessTokenFragment on AccessToken {\n\tid\n\ttoken\n}\n","sha256:c0b9e33345dc718f8fb3c28711b5694a0b0e04be77e9faf13094cbecb500eeab":"mutation UpsertPreviewEnvironmentTemplate ($attributes: PreviewEnvironmentTemplateAttributes!) {\n\tupsertPreviewEnvironmentTemplate(attributes: $attributes) {\n\t\t... PreviewEnvironmentTemplateFragment\n\t}\n}\nfragment PreviewEnvironmentTemplateFragment on PreviewEnvironmentTemplate {\n\tid\n\tname\n\tcommentTemplate\n\tflow {\n\t\tid\n\t}\n\tconnection {\n\t\tid\n\t}\n\ttemplate {\n\t\tname\n\t}\n}\n","sha256:c115b884fcc5aa8a05486db11aec7c66d51336be00dbcb79b14276e983bcf4c4":"mutation UpsertCustomCompatibilityMatrix ($attributes: CustomCompatibilityMatrixAttributes!) {\n\tupsertCustomCompatibilityMatrix(attributes: $attributes) {\n\t\t... CustomCompatibilityMatrixFragment\n\t}\n}\nfragment CustomCompatibilityMatrixFragment on CustomCompatibilityMatrix {\n\tid\n\tname\n}\n","sha256:c1cd732253ebdf1c807451b3cf00bed2497fddd70b94dc26115e51be4f20de65":"mutation DeleteNamespace ($id: ID!) {\n\tdeleteManagedNamespace(id: $id) {\n\t\tid\n\t}\n}\n","sha256:c233e6f7b150960c88d30f2bbebdaa5cb184e1d973b4d57add138eae8b439a99":"query GetStackDefinition ($id: ID!) {\n\tstackDefinition(id: $id) {\n\t\t... StackDefinitionFragment\n\t}\n}\nfragment StackDefinitionFragment on StackDefinition {\n\tid\n\tname\n\tdescription\n\tinsertedAt\n\tupdatedAt\n\tconfiguration {\n\t\timage\n\t\ttag\n\t\tversion\n\t\thooks {\n\t\t\tcmd\n\t\t\targs\n\t\t\tafterStage\n\t\t}\n\t}\n\tsteps {\n\t\tcmd\n\t\targs\n\t\tstage\n\t\trequireApproval\n\t}\n\tdeleteSteps {\n\t\tcmd\n\t\targs\n\t\tstage\n\t\trequireApproval\n\t}\n}\n","sha256:c33f34d45c517bb9de74e17503e1955925c8ae908a2c6f3e1f8937cdc5494736":"mutation DeleteNotificationSink ($id: ID!) {\n\tdeleteNotificationSink(id: $id) {\n\t\t... NotificationSinkFragment\n\t}\n}\nfragment NotificationSinkFragment on NotificationSink {\n\tid\n\tname\n\ttype\n\tconfiguration {\n\t\t... SinkConfigurationFragment\n\t}\n\tnotificationBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment SinkConfigurationFragment on SinkConfiguration {\n\tid\n\tslack {\n\t\t... UrlSinkConfigurationFragment\n\t}\n\tteams {\n\t\t... UrlSinkConfigurationFragment\n\t}\n}\nfragment UrlSinkConfigurationFragment on UrlSinkConfiguration {\n\turl\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:c361daaf8af4e815cd5037cfca3508c99c82d5d13efeea7be74df0aa0a4a4086":"mutation DeleteScmWebhook ($id: ID!) {\n\tdeleteScmWebhook(id: $id) {\n\t\t... ScmWebhookFragment\n\t}\n}\nfragment ScmWebhookFragment on ScmWebhook {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\towner\n\ttype\n\turl\n}\n","sha256:c3e1711d5f843ae701bc44bd0ec9a83709e9b97495bd569a45482d64029eba0b":"mutation CreatePersona ($attributes: PersonaAttributes!) {\n\tcreatePersona(attributes: $attributes) {\n\t\t... PersonaFragment\n\t}\n}\nfragment PersonaFragment on Persona {\n\tid\n\tname\n\tdescription\n\tconfiguration {\n\t\t... PersonaConfigurationFragment\n\t}\n\tbindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PersonaConfigurationFragment on PersonaConfiguration {\n\tall\n\tdeployments {\n\t\taddOns\n\t\tclusters\n\t\tpipelines\n\t\tproviders\n\t\trepositories\n\t\tservices\n\t}\n\thome {\n\t\tmanager\n\t\tsecurity\n\t}\n\tflows {\n\t\tpermissions\n\t\tstartWorkbenchJob\n\t\tpipelines\n\t\tpreviews\n\t\tworkbenches\n\t}\n\tsidebar {\n\t\taudits\n\t\tflows\n\t\tkubernetes\n\t\tpullRequests\n\t\tsettings\n\t\tbackups\n\t\tstacks\n\t\tworkbenches\n\t\tcd\n\t\tai\n\t}\n\tsettings {\n\t\taccessTokens\n\t\tai\n\t\taudits\n\t\tchatbots\n\t\tcloudConnections\n\t\tglobal\n\t\tnotifications\n\t\tprojects\n\t\tuserManagement\n\t\twebhooks\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:c4d1d8e2c7cc145562d0347c03a7e8d55ffa769b5c86fc0bf62e5a437a5c7705":"query GetScmConnectionTiny ($id: ID, $name: String) {\n\tscmConnection(id: $id, name: $name) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:c59085c3cc9fc0cdf5fdab1ad6426d70cad3c18d61e8099408b0f729ff7896a0":"query GetGroup ($name: String!) {\n\tgroup(name: $name) {\n\t\t... GroupFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\n","sha256:c648bed210879433e880936999a0177cfed858de16ae630b4d28fdf328e5ba8c":"query ListClusterStackIds ($after: String, $first: Int, $before: String, $last: Int) {\n\tclusterStackRuns(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\t... StackRunIdEdgeFragment\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment StackRunIdEdgeFragment on StackRunEdge {\n\tnode {\n\t\t... StackRunIdFragment\n\t}\n}\nfragment StackRunIdFragment on StackRun {\n\tid\n}\n","sha256:c6e7aaf82961c3a494e7dad20a5034cb38d7b6c7f7d314ede07872165c9514c2":"mutation CreateServiceDeployment ($clusterId: ID!, $attributes: ServiceDeploymentAttributes!) {\n\tcreateServiceDeployment(clusterId: $clusterId, attributes: $attributes) {\n\t\t... ServiceDeploymentExtended\n\t}\n}\nfragment ServiceDeploymentExtended on ServiceDeployment {\n\tcluster {\n\t\t... BaseClusterFragment\n\t}\n\terrors {\n\t\t... ErrorFragment\n\t}\n\trevision {\n\t\t... RevisionFragment\n\t}\n\tcontexts {\n\t\t... ServiceContextFragment\n\t}\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n\timports {\n\t\tstack {\n\t\t\t... InfrastructureStackTinyFragment\n\t\t}\n\t\toutputs {\n\t\t\t... StackOutputFragment\n\t\t}\n\t}\n}\nfragment BaseClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tdistro\n\tpingedAt\n\tcurrentVersion\n\tkasUrl\n\tmetadata\n\ttags {\n\t\t... ClusterTags\n\t}\n\tcredential {\n\t\t... ProviderCredentialFragment\n\t}\n\tprovider {\n\t\t... BaseClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment BaseClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment ErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\nfragment RevisionFragment on Revision {\n\tid\n\tsha\n\tgit {\n\t\tref\n\t\tfolder\n\t}\n}\nfragment ServiceContextFragment on ServiceContext {\n\tid\n\tname\n\tconfiguration\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment InfrastructureStackTinyFragment on InfrastructureStack {\n\tid\n\tname\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\n","sha256:c8e0fc5503578fcfd182a285f270117143fea26d5788ae339ea658d7824ead7a":"query GetStackRunApprovedAt ($id: ID!) {\n\tstackRun(id: $id) {\n\t\tapprovedAt\n\t}\n}\n","sha256:c8e4277ef08029190490500c4713ee3efdb9cbd85fe2afa0ab64c9fde367c4c8":"mutation CreateWorkbenchWebhook ($workbenchId: ID!, $attributes: WorkbenchWebhookAttributes!) {\n\tcreateWorkbenchWebhook(workbenchId: $workbenchId, attributes: $attributes) {\n\t\t... WorkbenchWebhookFragment\n\t}\n}\nfragment WorkbenchWebhookFragment on WorkbenchWebhook {\n\tid\n\tname\n\tprompt\n\tpriority\n\tmatches {\n\t\tregex\n\t\tsubstring\n\t\tcaseInsensitive\n\t}\n\twebhook {\n\t\tid\n\t\tname\n\t}\n\tissueWebhook {\n\t\tid\n\t\tname\n\t}\n\tworkbench {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:c9d7d1433d0b7c8a13ee3f48b79dc7ca7d2fbe3fbc95a59605bc4bcb6105be48":"query GetPipelines ($after: String) {\n\tpipelines(first: 100, after: $after) {\n\t\tedges {\n\t\t\t... PipelineEdgeFragment\n\t\t}\n\t}\n}\nfragment PipelineEdgeFragment on PipelineEdge {\n\tnode {\n\t\t... PipelineFragment\n\t}\n}\nfragment PipelineFragment on Pipeline {\n\tid\n\tname\n\tstages {\n\t\t... PipelineStageFragment\n\t}\n\tedges {\n\t\t... PipelineStageEdgeFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment PipelineStageFragment on PipelineStage {\n\tid\n\tname\n\tservices {\n\t\tservice {\n\t\t\t... ServiceDeploymentBaseFragment\n\t\t}\n\t\tcriteria {\n\t\t\tsource {\n\t\t\t\t... ServiceDeploymentBaseFragment\n\t\t\t}\n\t\t\tsecrets\n\t\t}\n\t}\n}\nfragment ServiceDeploymentBaseFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment PipelineStageEdgeFragment on PipelineStageEdge {\n\tid\n\tfrom {\n\t\t... PipelineStageFragment\n\t}\n\tto {\n\t\t... PipelineStageFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:cb1a08aa627034f757f578e60b19cdf3d86cb6d07d0e092665994437fd3b0c8c":"query GetAgentRuntimeByName ($name: String!, $clusterId: ID!) {\n\tagentRuntime(name: $name, clusterId: $clusterId) {\n\t\t... AgentRuntimeFragment\n\t}\n}\nfragment AgentRuntimeFragment on AgentRuntime {\n\tid\n\tname\n\ttype\n\taiProxy\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tcreateBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:cb23898da395a1259a3eea1069486d08bdd398b8e19ab7767f479516394fb545":"mutation IngestClusterCost ($costs: CostIngestAttributes!) {\n\tingestClusterCost(costs: $costs)\n}\n","sha256:cbf979fbb7271eae49c77cfe27cf45f05476150dbf4d2de0e43a6baed1fbbf9f":"mutation CreateCustomStackRun ($attributes: CustomStackRunAttributes!) {\n\tcreateCustomStackRun(attributes: $attributes) {\n\t\t... CustomStackRunFragment\n\t}\n}\nfragment CustomStackRunFragment on CustomStackRun {\n\tid\n\tname\n\tstack {\n\t\tid\n\t}\n\tdocumentation\n\tcommands {\n\t\t... StackCommandFragment\n\t}\n\tconfiguration {\n\t\t... PrConfigurationFragment\n\t}\n}\nfragment StackCommandFragment on StackCommand {\n\tcmd\n\targs\n\tdir\n}\nfragment PrConfigurationFragment on PrConfiguration {\n\ttype\n\tname\n\tdefault\n\tdocumentation\n\tlongform\n\tplaceholder\n\toptional\n\tcondition {\n\t\t... PrConfigurationConditionFragment\n\t}\n}\nfragment PrConfigurationConditionFragment on PrConfigurationCondition {\n\toperation\n\tfield\n\tvalue\n}\n","sha256:cc08cadc82120a6a12d6a9e28a2007ace57f62e3465b57fea3d35762c18dee95":"mutation CreateMonitor ($attributes: MonitorAttributes!) {\n\tcreateMonitor(attributes: $attributes) {\n\t\t... MonitorFragment\n\t}\n}\nfragment MonitorFragment on Monitor {\n\tid\n\tname\n\tservice {\n\t\tid\n\t\tname\n\t}\n\tworkbench {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:cc23c54f364f7fc86b1677d8f80d5f90f66bb7dbb52aa56ac2ca9505602f7c63":"mutation ApproveStackRun ($id: ID!) {\n\tapproveStackRun(id: $id) {\n\t\t... StackRunIdFragment\n\t}\n}\nfragment StackRunIdFragment on StackRun {\n\tid\n}\n","sha256:cc4284d27cd80dffc23f9a8b628e071a091bf13b1e8a75c1a628b487c92ea8c8":"mutation DeleteGroup ($groupId: ID!) {\n\tdeleteGroup(groupId: $groupId) {\n\t\t... GroupFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\n","sha256:cc42a4ba14d88488b304966f6db6111e774264487956c89be92e2ce5a1f825d8":"query ListWorkbenchTools ($after: String, $first: Int, $before: String, $last: Int, $q: String) {\n\tworkbenchTools(after: $after, first: $first, before: $before, last: $last, q: $q) {\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... WorkbenchToolFragment\n\t\t\t}\n\t\t}\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t}\n}\nfragment WorkbenchToolFragment on WorkbenchTool {\n\tid\n\tname\n\ttool\n\tcategories\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tmcpServer {\n\t\t... MCPServerFragment\n\t}\n\tcloudConnection {\n\t\t... CloudConnectionFragment\n\t}\n\tscmConnection {\n\t\tid\n\t\tname\n\t\ttype\n\t}\n\tconfiguration {\n\t\thttp {\n\t\t\turl\n\t\t\tmethod\n\t\t\tfunction\n\t\t\theaders {\n\t\t\t\tname\n\t\t\t\tvalue\n\t\t\t}\n\t\t\tbody\n\t\t\tinputSchema\n\t\t}\n\t\telastic {\n\t\t\tindex\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\topensearch {\n\t\t\thost\n\t\t\tindex\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t\tassumeRoleArn\n\t\t\tusePodIdentity\n\t\t}\n\t\tprometheus {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t\tawsSigv4\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t}\n\t\tloki {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tvictoriaLogs {\n\t\t\turl\n\t\t\tusername\n\t\t\taccountId\n\t\t\tprojectId\n\t\t}\n\t\tsplunk {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\ttempo {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tjaeger {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\tdatadog {\n\t\t\tsite\n\t\t}\n\t\tdynatrace {\n\t\t\turl\n\t\t}\n\t\tcloudwatch {\n\t\t\tregion\n\t\t\tlogGroupNames\n\t\t\troleArn\n\t\t\troleSessionName\n\t\t}\n\t\tazure {\n\t\t\tsubscriptionId\n\t\t\ttenantId\n\t\t\tclientId\n\t\t\tprometheusUrl\n\t\t}\n\t\tsentry {\n\t\t\turl\n\t\t}\n\t\tlinear {\n\t\t\turl\n\t\t}\n\t\tslack {\n\t\t\turl\n\t\t}\n\t\tpagerduty {\n\t\t\turl\n\t\t}\n\t\tteams {\n\t\t\tclientId\n\t\t\ttenantId\n\t\t}\n\t\tatlassian {\n\t\t\turl\n\t\t\temail\n\t\t}\n\t\texa {\n\t\t\turl\n\t\t}\n\t\tgithub {\n\t\t\turl\n\t\t\ttoolset\n\t\t\tappId\n\t\t\tinstallationId\n\t\t}\n\t\tgitlab {\n\t\t\turl\n\t\t}\n\t\tbitbucket {\n\t\t\turl\n\t\t}\n\t\tbitbucketDatacenter {\n\t\t\turl\n\t\t}\n\t\tazureDevops {\n\t\t\turl\n\t\t}\n\t\tlambda {\n\t\t\tlambdaArn\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tcloudRun {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tazureFunction {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tdocker {\n\t\t\turl\n\t\t\tprovider\n\t\t\tproxy {\n\t\t\t\turl\n\t\t\t\tnoproxy\n\t\t\t}\n\t\t}\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment MCPServerFragment on McpServer {\n\tid\n\tname\n\turl\n\tauthentication {\n\t\tplural\n\t\theaders {\n\t\t\tname\n\t\t\tvalue\n\t\t}\n\t}\n\tconfirm\n}\nfragment CloudConnectionFragment on CloudConnection {\n\tid\n\tname\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tprovider\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\n","sha256:cd777b75a96e3400c0bdd6a75f4e63860fb1019c20082c6509d7a8a9179d2947":"query GetInfrastructureStackStatus ($id: ID, $name: String) {\n\tinfrastructureStack(id: $id, name: $name) {\n\t\t... InfrastructureStackStatusFragment\n\t}\n}\nfragment InfrastructureStackStatusFragment on InfrastructureStack {\n\tstatus\n}\n","sha256:cf8c42483cecc603b29f28f8c4f4f0fc9cba008aa0ae2228ba85683ddb71c31c":"query GetUserTiny ($email: String!) {\n\tuser(email: $email) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:d01f1dfce890bf9e3a0d22035b5922171221489529107499141f91ab91b429ae":"query GetMonitor ($id: ID!) {\n\tmonitor(id: $id) {\n\t\t... MonitorFragment\n\t}\n}\nfragment MonitorFragment on Monitor {\n\tid\n\tname\n\tservice {\n\t\tid\n\t\tname\n\t}\n\tworkbench {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:d0243f65b29d1f4a3dc0fc341329bd64771a81b61027b49b5c657638fc12d993":"mutation DetachStack ($id: ID!) {\n\tdetachStack(id: $id) {\n\t\t... InfrastructureStackIdFragment\n\t}\n}\nfragment InfrastructureStackIdFragment on InfrastructureStack {\n\tid\n}\n","sha256:d0deff4a75c0315f913f84dcd0babf240d3dd12dc7b753f6796ac081b4b10b6c":"query ListAgentRunsMinimal ($after: String, $first: Int, $before: String, $last: Int) {\n\tagentRuns(after: $after, first: $first, before: $before, last: $last) {\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... AgentRunMinimalFragment\n\t\t\t}\n\t\t}\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t}\n}\nfragment AgentRunMinimalFragment on AgentRun {\n\tid\n\tprompt\n\trepository\n\tbranch\n\theadBranch\n\truntime {\n\t\ttype\n\t}\n\tpullRequests {\n\t\tid\n\t\tstatus\n\t\turl\n\t\ttitle\n\t\tref\n\t}\n\tupload {\n\t\tsession\n\t\tpatch\n\t\tscreenRecording\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\n","sha256:d17fdd1f3585dbb5fe41795aa0f06da222848b52ad30ef0827bc0eb968fc3c68":"mutation DeleteGlobalServiceDeployment ($id: ID!) {\n\tdeleteGlobalService(id: $id) {\n\t\t... GlobalServiceFragment\n\t}\n}\nfragment GlobalServiceFragment on GlobalService {\n\tid\n\tname\n\tdistro\n\tprovider {\n\t\tid\n\t}\n\tservice {\n\t\tid\n\t}\n\ttags {\n\t\t... ClusterTags\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:d1b43ea072acd70d56e7e3637eb05a13b854defd61c46d3f03cac4c831be0df4":"mutation UpsertPrGovernance ($attributes: PrGovernanceAttributes!) {\n\tupsertPrGovernance(attributes: $attributes) {\n\t\t... PrGovernanceFragment\n\t}\n}\nfragment PrGovernanceFragment on PrGovernance {\n\tid\n\tname\n}\n","sha256:d212c3e56c32e78aa75561817cfa4aa18d96b3f7ef6b60e363dfdd864b78bbc4":"mutation PingCluster ($attributes: ClusterPing!) {\n\tpingCluster(attributes: $attributes) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:d37c4e4d20689e9ff322abbb478c77fc9a8aec7b995b68617d3401d1f123b39b":"mutation CreateScmConnection ($attributes: ScmConnectionAttributes!) {\n\tcreateScmConnection(attributes: $attributes) {\n\t\t... ScmConnectionFragment\n\t}\n}\nfragment ScmConnectionFragment on ScmConnection {\n\tid\n\tname\n\tapiUrl\n\tbaseUrl\n\ttype\n\tusername\n\tinsertedAt\n\tupdatedAt\n}\n","sha256:d5f1c35ebe2aa909ebaf89248f6120c9fbe9b6b991bc615ae72c786bbc519892":"mutation DeleteWorkbench ($id: ID!) {\n\tdeleteWorkbench(id: $id) {\n\t\t... WorkbenchFragment\n\t}\n}\nfragment WorkbenchFragment on Workbench {\n\tid\n\tname\n\tdescription\n\tsystemPrompt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tagentRuntime {\n\t\t... TinyAgentRuntimeFragment\n\t}\n\tconfiguration {\n\t\tcoding {\n\t\t\tmode\n\t\t\trepositories\n\t\t}\n\t\tinfrastructure {\n\t\t\tservices\n\t\t\tstacks\n\t\t\tkubernetes\n\t\t}\n\t\tobservability {\n\t\t\tlogs\n\t\t\tmetrics\n\t\t}\n\t}\n\tskills {\n\t\tref {\n\t\t\tref\n\t\t\tfolder\n\t\t\tfiles\n\t\t}\n\t\tfiles\n\t}\n\ttools {\n\t\t... WorkbenchToolFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment TinyAgentRuntimeFragment on AgentRuntime {\n\tid\n\tname\n\ttype\n\tcluster {\n\t\tid\n\t\tname\n\t\thandle\n\t}\n}\nfragment WorkbenchToolFragment on WorkbenchTool {\n\tid\n\tname\n\ttool\n\tcategories\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tmcpServer {\n\t\t... MCPServerFragment\n\t}\n\tcloudConnection {\n\t\t... CloudConnectionFragment\n\t}\n\tscmConnection {\n\t\tid\n\t\tname\n\t\ttype\n\t}\n\tconfiguration {\n\t\thttp {\n\t\t\turl\n\t\t\tmethod\n\t\t\tfunction\n\t\t\theaders {\n\t\t\t\tname\n\t\t\t\tvalue\n\t\t\t}\n\t\t\tbody\n\t\t\tinputSchema\n\t\t}\n\t\telastic {\n\t\t\tindex\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\topensearch {\n\t\t\thost\n\t\t\tindex\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t\tassumeRoleArn\n\t\t\tusePodIdentity\n\t\t}\n\t\tprometheus {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t\tawsSigv4\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t}\n\t\tloki {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tvictoriaLogs {\n\t\t\turl\n\t\t\tusername\n\t\t\taccountId\n\t\t\tprojectId\n\t\t}\n\t\tsplunk {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\ttempo {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tjaeger {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\tdatadog {\n\t\t\tsite\n\t\t}\n\t\tdynatrace {\n\t\t\turl\n\t\t}\n\t\tcloudwatch {\n\t\t\tregion\n\t\t\tlogGroupNames\n\t\t\troleArn\n\t\t\troleSessionName\n\t\t}\n\t\tazure {\n\t\t\tsubscriptionId\n\t\t\ttenantId\n\t\t\tclientId\n\t\t\tprometheusUrl\n\t\t}\n\t\tsentry {\n\t\t\turl\n\t\t}\n\t\tlinear {\n\t\t\turl\n\t\t}\n\t\tslack {\n\t\t\turl\n\t\t}\n\t\tpagerduty {\n\t\t\turl\n\t\t}\n\t\tteams {\n\t\t\tclientId\n\t\t\ttenantId\n\t\t}\n\t\tatlassian {\n\t\t\turl\n\t\t\temail\n\t\t}\n\t\texa {\n\t\t\turl\n\t\t}\n\t\tgithub {\n\t\t\turl\n\t\t\ttoolset\n\t\t\tappId\n\t\t\tinstallationId\n\t\t}\n\t\tgitlab {\n\t\t\turl\n\t\t}\n\t\tbitbucket {\n\t\t\turl\n\t\t}\n\t\tbitbucketDatacenter {\n\t\t\turl\n\t\t}\n\t\tazureDevops {\n\t\t\turl\n\t\t}\n\t\tlambda {\n\t\t\tlambdaArn\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tcloudRun {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tazureFunction {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tdocker {\n\t\t\turl\n\t\t\tprovider\n\t\t\tproxy {\n\t\t\t\turl\n\t\t\t\tnoproxy\n\t\t\t}\n\t\t}\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment MCPServerFragment on McpServer {\n\tid\n\tname\n\turl\n\tauthentication {\n\t\tplural\n\t\theaders {\n\t\t\tname\n\t\t\tvalue\n\t\t}\n\t}\n\tconfirm\n}\nfragment CloudConnectionFragment on CloudConnection {\n\tid\n\tname\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tprovider\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:d666f635df84ed6a6c279cd0f46a5ede9d26b15ec7aac618a0d96fb731fb7dda":"query GetAccessToken ($id: ID!) {\n\taccessToken(id: $id) {\n\t\t... AccessTokenFragment\n\t}\n}\nfragment AccessTokenFragment on AccessToken {\n\tid\n\ttoken\n}\n","sha256:d7a398fe4bbf2a5f798ff3b3cc4b219587eeb27f422f3afb15c9621926dcb1e4":"mutation DeleteClusterProvider ($id: ID!) {\n\tdeleteClusterProvider(id: $id) {\n\t\t... ClusterProviderFragment\n\t}\n}\nfragment ClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\tdeletedAt\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tservice {\n\t\t... ServiceDeploymentFragment\n\t}\n\tcredentials {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\n","sha256:d7d71625718364b0b47e0f2fcacf1411f6ce8f1a5f8d5368133b7c28ee931c2d":"query GetClusterRegistration ($id: ID, $machineId: String) {\n\tclusterRegistration(id: $id, machineId: $machineId) {\n\t\t... ClusterRegistrationFragment\n\t}\n}\nfragment ClusterRegistrationFragment on ClusterRegistration {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tmachineId\n\tname\n\thandle\n\tmetadata\n\ttags {\n\t\t... ClusterTags\n\t}\n\tcreator {\n\t\t... UserFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:d9d6a609a379b3b6ba578167a4b9218c222ffede1152770c7df98cd5558bdb57":"mutation AgentPrReview ($runId: ID!, $attributes: AgentPrReviewAttributes!) {\n\tagentPrReview(runId: $runId, attributes: $attributes) {\n\t\t... PullRequestFragment\n\t}\n}\nfragment PullRequestFragment on PullRequest {\n\tid\n\tstatus\n\turl\n\ttitle\n\tcreator\n\tref\n}\n","sha256:da49a26dea358a0bd0fbe7d5293211ce6a6264208cd6a62c06f3fbbecda3d907":"query ListClusterStacks ($after: String, $first: Int, $before: String, $last: Int) {\n\tclusterStackRuns(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\t... StackRunEdgeFragment\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment StackRunEdgeFragment on StackRunEdge {\n\tnode {\n\t\t... StackRunFragment\n\t}\n}\nfragment StackRunFragment on StackRun {\n\tid\n\ttype\n\tstatus\n\tapproval\n\tapprovedAt\n\ttarball\n\tworkdir\n\tmanageState\n\tvariables\n\tdryRun\n\tstateUrls {\n\t\tterraform {\n\t\t\taddress\n\t\t\tlock\n\t\t\tunlock\n\t\t}\n\t}\n\tpluralCreds {\n\t\turl\n\t\ttoken\n\t}\n\tactor {\n\t\t... UserFragment\n\t}\n\tstack {\n\t\t... InfrastructureStackFragment\n\t}\n\tstate {\n\t\t... StackStateFragment\n\t}\n\tsteps {\n\t\t... RunStepFragment\n\t}\n\tfiles {\n\t\t... StackFileFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n\tenvironment {\n\t\t... StackEnvironmentFragment\n\t}\n\toutput {\n\t\t... StackOutputFragment\n\t}\n\terrors {\n\t\t... ServiceErrorFragment\n\t}\n\tviolations {\n\t\t... StackPolicyViolationFragment\n\t}\n\tpolicyEngine {\n\t\t... PolicyEngineFragment\n\t}\n\tapprover {\n\t\t... UserFragment\n\t}\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment InfrastructureStackFragment on InfrastructureStack {\n\tid\n\tname\n\ttype\n\tvariables\n\tapproval\n\tworkdir\n\tmanageState\n\tdeletedAt\n\tgit {\n\t\t... GitRefFragment\n\t}\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tfiles {\n\t\t... StackFileFragment\n\t}\n\tenvironment {\n\t\t... StackEnvironmentFragment\n\t}\n\toutput {\n\t\t... StackOutputFragment\n\t}\n\tstate {\n\t\t... StackStateFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tpolicyEngine {\n\t\t... PolicyEngineFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment StackConfigurationFragment on StackConfiguration {\n\timage\n\tversion\n\ttag\n\thooks {\n\t\t... StackHookFragment\n\t}\n\tterraform {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tterragrunt {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tpulumi {\n\t\tparallel\n\t\trefresh\n\t\tapproveEmpty\n\t\tstack\n\t\tbackendUrl\n\t}\n\tansible {\n\t\tinventory\n\t\tplaybook\n\t\tprivateKeyFile\n\t\tconfigFile\n\t}\n}\nfragment StackHookFragment on StackHook {\n\tcmd\n\targs\n\tafterStage\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment StackFileFragment on StackFile {\n\tpath\n\tcontent\n}\nfragment StackEnvironmentFragment on StackEnvironment {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackStateFragment on StackState {\n\tid\n\tplan\n\tplanJson\n\tstate {\n\t\t... StackStateResourceFragment\n\t}\n}\nfragment StackStateResourceFragment on StackStateResource {\n\tidentifier\n\tresource\n\tname\n\tconfiguration\n\tlinks\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment PolicyEngineFragment on PolicyEngine {\n\ttype\n\tmaxSeverity\n\tcustomPolicies\n}\nfragment RunStepFragment on RunStep {\n\tid\n\tstatus\n\tstage\n\tname\n\tcmd\n\targs\n\trequireApproval\n\tindex\n}\nfragment ServiceErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\nfragment StackPolicyViolationFragment on StackPolicyViolation {\n\tid\n\ttitle\n\tdescription\n\tpolicyId\n\tpolicyModule\n\tpolicyUrl\n\tseverity\n\tresolution\n\tcauses {\n\t\t... StackViolationCauseFragment\n\t}\n}\nfragment StackViolationCauseFragment on StackViolationCause {\n\tstart\n\tend\n\tresource\n\tfilename\n\tlines {\n\t\t... StackViolationCauseLineFragment\n\t}\n}\nfragment StackViolationCauseLineFragment on StackViolationCauseLine {\n\tfirst\n\tlast\n\tcontent\n\tline\n}\n","sha256:da61f9d23f2bb33137008e58f123fe876dd8b1313e9e4c9bcde20a36f0af2026":"mutation UpdateClusterRestore ($id: ID!, $attributes: RestoreAttributes!) {\n\tupdateClusterRestore(id: $id, attributes: $attributes) {\n\t\t... ClusterRestoreFragment\n\t}\n}\nfragment ClusterRestoreFragment on ClusterRestore {\n\tid\n\tstatus\n\tbackup {\n\t\t... ClusterBackupFragment\n\t}\n}\nfragment ClusterBackupFragment on ClusterBackup {\n\tid\n\tname\n\tcluster {\n\t\tid\n\t}\n\tgarbageCollected\n}\n","sha256:da7c309e7952dd39dd8aff2fb5caff9e91fd9b874fd67a885a8fa9919c56f922":"query GetFederatedCredential ($id: ID!) {\n\tfederatedCredential(id: $id) {\n\t\t... FederatedCredentialFragment\n\t}\n}\nfragment FederatedCredentialFragment on FederatedCredential {\n\tid\n\tclaimsLike\n\tissuer\n\tscopes\n\tinsertedAt\n\tupdatedAt\n\tuser {\n\t\tid\n\t\tname\n\t\temail\n\t}\n}\n","sha256:db848743beb32ccf52efc157a7df4acd0e6f68d1b66b1563f014a7aa5b503794":"mutation CreateWorkbenchTool ($attributes: WorkbenchToolAttributes!) {\n\tcreateWorkbenchTool(attributes: $attributes) {\n\t\t... WorkbenchToolFragment\n\t}\n}\nfragment WorkbenchToolFragment on WorkbenchTool {\n\tid\n\tname\n\ttool\n\tcategories\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tmcpServer {\n\t\t... MCPServerFragment\n\t}\n\tcloudConnection {\n\t\t... CloudConnectionFragment\n\t}\n\tscmConnection {\n\t\tid\n\t\tname\n\t\ttype\n\t}\n\tconfiguration {\n\t\thttp {\n\t\t\turl\n\t\t\tmethod\n\t\t\tfunction\n\t\t\theaders {\n\t\t\t\tname\n\t\t\t\tvalue\n\t\t\t}\n\t\t\tbody\n\t\t\tinputSchema\n\t\t}\n\t\telastic {\n\t\t\tindex\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\topensearch {\n\t\t\thost\n\t\t\tindex\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t\tassumeRoleArn\n\t\t\tusePodIdentity\n\t\t}\n\t\tprometheus {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t\tawsSigv4\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t}\n\t\tloki {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tvictoriaLogs {\n\t\t\turl\n\t\t\tusername\n\t\t\taccountId\n\t\t\tprojectId\n\t\t}\n\t\tsplunk {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\ttempo {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tjaeger {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\tdatadog {\n\t\t\tsite\n\t\t}\n\t\tdynatrace {\n\t\t\turl\n\t\t}\n\t\tcloudwatch {\n\t\t\tregion\n\t\t\tlogGroupNames\n\t\t\troleArn\n\t\t\troleSessionName\n\t\t}\n\t\tazure {\n\t\t\tsubscriptionId\n\t\t\ttenantId\n\t\t\tclientId\n\t\t\tprometheusUrl\n\t\t}\n\t\tsentry {\n\t\t\turl\n\t\t}\n\t\tlinear {\n\t\t\turl\n\t\t}\n\t\tslack {\n\t\t\turl\n\t\t}\n\t\tpagerduty {\n\t\t\turl\n\t\t}\n\t\tteams {\n\t\t\tclientId\n\t\t\ttenantId\n\t\t}\n\t\tatlassian {\n\t\t\turl\n\t\t\temail\n\t\t}\n\t\texa {\n\t\t\turl\n\t\t}\n\t\tgithub {\n\t\t\turl\n\t\t\ttoolset\n\t\t\tappId\n\t\t\tinstallationId\n\t\t}\n\t\tgitlab {\n\t\t\turl\n\t\t}\n\t\tbitbucket {\n\t\t\turl\n\t\t}\n\t\tbitbucketDatacenter {\n\t\t\turl\n\t\t}\n\t\tazureDevops {\n\t\t\turl\n\t\t}\n\t\tlambda {\n\t\t\tlambdaArn\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tcloudRun {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tazureFunction {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tdocker {\n\t\t\turl\n\t\t\tprovider\n\t\t\tproxy {\n\t\t\t\turl\n\t\t\t\tnoproxy\n\t\t\t}\n\t\t}\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment MCPServerFragment on McpServer {\n\tid\n\tname\n\turl\n\tauthentication {\n\t\tplural\n\t\theaders {\n\t\t\tname\n\t\t\tvalue\n\t\t}\n\t}\n\tconfirm\n}\nfragment CloudConnectionFragment on CloudConnection {\n\tid\n\tname\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tprovider\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:dd43f3ef75185258586ab4bb1b086ed6a2703f09a5e439ea3f4a7cda94429d74":"mutation UpdateCustomStackRun ($id: ID!, $attributes: CustomStackRunAttributes!) {\n\tupdateCustomStackRun(id: $id, attributes: $attributes) {\n\t\t... CustomStackRunFragment\n\t}\n}\nfragment CustomStackRunFragment on CustomStackRun {\n\tid\n\tname\n\tstack {\n\t\tid\n\t}\n\tdocumentation\n\tcommands {\n\t\t... StackCommandFragment\n\t}\n\tconfiguration {\n\t\t... PrConfigurationFragment\n\t}\n}\nfragment StackCommandFragment on StackCommand {\n\tcmd\n\targs\n\tdir\n}\nfragment PrConfigurationFragment on PrConfiguration {\n\ttype\n\tname\n\tdefault\n\tdocumentation\n\tlongform\n\tplaceholder\n\toptional\n\tcondition {\n\t\t... PrConfigurationConditionFragment\n\t}\n}\nfragment PrConfigurationConditionFragment on PrConfigurationCondition {\n\toperation\n\tfield\n\tvalue\n}\n","sha256:df1a376b62fbd1450e92d22cb75ad7ee44d7f03f99bfb7d5c0e9d899ed428b22":"mutation DeleteFlow ($id: ID!) {\n\tdeleteFlow(id: $id) {\n\t\tid\n\t}\n}\n","sha256:e00dac57c9bbde70847c095096e903c6b33b62d4e20bc848a5996649ed738826":"query GetServiceDeployment ($id: ID!) {\n\tserviceDeployment(id: $id) {\n\t\t... ServiceDeploymentExtended\n\t}\n}\nfragment ServiceDeploymentExtended on ServiceDeployment {\n\tcluster {\n\t\t... BaseClusterFragment\n\t}\n\terrors {\n\t\t... ErrorFragment\n\t}\n\trevision {\n\t\t... RevisionFragment\n\t}\n\tcontexts {\n\t\t... ServiceContextFragment\n\t}\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n\timports {\n\t\tstack {\n\t\t\t... InfrastructureStackTinyFragment\n\t\t}\n\t\toutputs {\n\t\t\t... StackOutputFragment\n\t\t}\n\t}\n}\nfragment BaseClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tdistro\n\tpingedAt\n\tcurrentVersion\n\tkasUrl\n\tmetadata\n\ttags {\n\t\t... ClusterTags\n\t}\n\tcredential {\n\t\t... ProviderCredentialFragment\n\t}\n\tprovider {\n\t\t... BaseClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment BaseClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment ErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\nfragment RevisionFragment on Revision {\n\tid\n\tsha\n\tgit {\n\t\tref\n\t\tfolder\n\t}\n}\nfragment ServiceContextFragment on ServiceContext {\n\tid\n\tname\n\tconfiguration\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment InfrastructureStackTinyFragment on InfrastructureStack {\n\tid\n\tname\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\n","sha256:e12171fbbb1ccefe73589f2b19ea00806a6d8a4ef0be04692110bfcd18587456":"mutation UpdateRbac ($rbac: RbacAttributes!, $serviceId: ID, $clusterId: ID, $providerId: ID) {\n\tupdateRbac(rbac: $rbac, serviceId: $serviceId, clusterId: $clusterId, providerId: $providerId)\n}\n","sha256:e27ca39ee8eb28a862e929edec0abee9fe56d69adebdbe7d59fed7e2f4c106f9":"mutation UpdateMonitor ($id: ID!, $attributes: MonitorAttributes!) {\n\tupdateMonitor(id: $id, attributes: $attributes) {\n\t\t... MonitorFragment\n\t}\n}\nfragment MonitorFragment on Monitor {\n\tid\n\tname\n\tservice {\n\t\tid\n\t\tname\n\t}\n\tworkbench {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:e2d945757a488df65767d201a8b1b87d4485fe2e48cf16478979b6f4c5cd9a20":"mutation AddServiceError ($id: ID!, $errors: [ServiceErrorAttributes]) {\n\tupdateServiceComponents(id: $id, errors: $errors) {\n\t\t... ServiceDeploymentFragment\n\t}\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\n","sha256:e44cf2898da342dcf07148d3868d094a0dd29e5579d25257d5be9c1f0f05489a":"query GetSentinelRunJob ($id: ID!) {\n\tsentinelRunJob(id: $id) {\n\t\t... SentinelRunJobFragment\n\t}\n}\nfragment SentinelRunJobFragment on SentinelRunJob {\n\tid\n\tcheck\n\tstatus\n\tformat\n\tusesGit\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\treference {\n\t\tname\n\t\tnamespace\n\t}\n\tsentinelRun {\n\t\t... SentinelRunFragment\n\t}\n\tcluster {\n\t\tid\n\t\tname\n\t\thandle\n\t\tdistro\n\t}\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment SentinelRunFragment on SentinelRun {\n\tid\n\tstatus\n\tsentinel {\n\t\tid\n\t}\n\tchecks {\n\t\t... SentinelCheckFragment\n\t}\n}\nfragment SentinelCheckFragment on SentinelCheck {\n\tid\n\tname\n\ttype\n\truleFile\n\tconfiguration {\n\t\t... SentinelCheckConfigurationFragment\n\t}\n}\nfragment SentinelCheckConfigurationFragment on SentinelCheckConfiguration {\n\tlog {\n\t\t... SentinelCheckLogConfigurationFragment\n\t}\n\tkubernetes {\n\t\t... SentinelCheckKubernetesConfigurationFragment\n\t}\n\tintegrationTest {\n\t\t... SentinelCheckIntegrationTestConfigurationFragment\n\t}\n}\nfragment SentinelCheckLogConfigurationFragment on SentinelCheckLogConfiguration {\n\tnamespaces\n\tquery\n\tclusterId\n\tfacets {\n\t\tkey\n\t\tvalue\n\t}\n\tduration\n}\nfragment SentinelCheckKubernetesConfigurationFragment on SentinelCheckKubernetesConfiguration {\n\tgroup\n\tversion\n\tkind\n\tname\n\tnamespace\n}\nfragment SentinelCheckIntegrationTestConfigurationFragment on SentinelCheckIntegrationTestConfiguration {\n\tdistro\n\ttags\n\trerunFailures\n\trerunFailuresCount\n\tpostrunScript\n\tgotestsum {\n\t\tp\n\t\tparallel\n\t}\n\tjob {\n\t\t... JobSpecFragment\n\t}\n\tcases {\n\t\t... TestCaseConfigurationFragment\n\t}\n\tdefault {\n\t\t... SentinelCheckIntegrationTestDefaultConfigurationFragment\n\t}\n}\nfragment TestCaseConfigurationFragment on SentinelCheckIntegrationTestCaseConfiguration {\n\tname\n\ttype\n\tcoredns {\n\t\tdialFqdns\n\t\tdelay\n\t\tretries\n\t}\n\tloadbalancer {\n\t\tannotations\n\t\tlabels\n\t\tnamePrefix\n\t\tnamespace\n\t\tdnsProbe {\n\t\t\tfqdn\n\t\t\tdelay\n\t\t\tretries\n\t\t}\n\t}\n\tpvc {\n\t\tnamePrefix\n\t\tstorageClass\n\t\tsize\n\t}\n\traw {\n\t\tyaml\n\t\texpectedResult\n\t}\n}\nfragment SentinelCheckIntegrationTestDefaultConfigurationFragment on SentinelCheckIntegrationTestDefaultConfiguration {\n\tignore\n\tnamespaceAnnotations\n\tnamespaceLabels\n\tregistry\n\tresourceAnnotations\n\tresourceLabels\n}\n","sha256:e59e52086eae818a70aac84cb1c4d4ac1e23135482a8444db2155af8bf60a789":"mutation UpdateServiceAccount ($id: ID!, $attributes: ServiceAccountAttributes!) {\n\tupdateServiceAccount(id: $id, attributes: $attributes) {\n\t\t... UserFragment\n\t}\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:e5c3c0029872eee1c6e1cdd984869fe9a4b27eca35ea11c05567ae7561df3519":"query ListComplianceReportGenerators ($after: String, $before: String, $first: Int, $last: Int) {\n\tcomplianceReportGenerators(after: $after, before: $before, first: $first, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... ComplianceReportGeneratorFragment\n\t\t\t}\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment ComplianceReportGeneratorFragment on ComplianceReportGenerator {\n\tid\n\tname\n\tformat\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:e5f970f2b0557a81ab6348adfc94a898956ea5f945ac0bd067ebc465a588a25e":"mutation UpdateSentinelRunJobStatus ($id: ID!, $attributes: SentinelRunJobUpdateAttributes) {\n\tupdateSentinelRunJob(id: $id, attributes: $attributes) {\n\t\t... SentinelRunJobFragment\n\t}\n}\nfragment SentinelRunJobFragment on SentinelRunJob {\n\tid\n\tcheck\n\tstatus\n\tformat\n\tusesGit\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\treference {\n\t\tname\n\t\tnamespace\n\t}\n\tsentinelRun {\n\t\t... SentinelRunFragment\n\t}\n\tcluster {\n\t\tid\n\t\tname\n\t\thandle\n\t\tdistro\n\t}\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment SentinelRunFragment on SentinelRun {\n\tid\n\tstatus\n\tsentinel {\n\t\tid\n\t}\n\tchecks {\n\t\t... SentinelCheckFragment\n\t}\n}\nfragment SentinelCheckFragment on SentinelCheck {\n\tid\n\tname\n\ttype\n\truleFile\n\tconfiguration {\n\t\t... SentinelCheckConfigurationFragment\n\t}\n}\nfragment SentinelCheckConfigurationFragment on SentinelCheckConfiguration {\n\tlog {\n\t\t... SentinelCheckLogConfigurationFragment\n\t}\n\tkubernetes {\n\t\t... SentinelCheckKubernetesConfigurationFragment\n\t}\n\tintegrationTest {\n\t\t... SentinelCheckIntegrationTestConfigurationFragment\n\t}\n}\nfragment SentinelCheckLogConfigurationFragment on SentinelCheckLogConfiguration {\n\tnamespaces\n\tquery\n\tclusterId\n\tfacets {\n\t\tkey\n\t\tvalue\n\t}\n\tduration\n}\nfragment SentinelCheckKubernetesConfigurationFragment on SentinelCheckKubernetesConfiguration {\n\tgroup\n\tversion\n\tkind\n\tname\n\tnamespace\n}\nfragment SentinelCheckIntegrationTestConfigurationFragment on SentinelCheckIntegrationTestConfiguration {\n\tdistro\n\ttags\n\trerunFailures\n\trerunFailuresCount\n\tpostrunScript\n\tgotestsum {\n\t\tp\n\t\tparallel\n\t}\n\tjob {\n\t\t... JobSpecFragment\n\t}\n\tcases {\n\t\t... TestCaseConfigurationFragment\n\t}\n\tdefault {\n\t\t... SentinelCheckIntegrationTestDefaultConfigurationFragment\n\t}\n}\nfragment TestCaseConfigurationFragment on SentinelCheckIntegrationTestCaseConfiguration {\n\tname\n\ttype\n\tcoredns {\n\t\tdialFqdns\n\t\tdelay\n\t\tretries\n\t}\n\tloadbalancer {\n\t\tannotations\n\t\tlabels\n\t\tnamePrefix\n\t\tnamespace\n\t\tdnsProbe {\n\t\t\tfqdn\n\t\t\tdelay\n\t\t\tretries\n\t\t}\n\t}\n\tpvc {\n\t\tnamePrefix\n\t\tstorageClass\n\t\tsize\n\t}\n\traw {\n\t\tyaml\n\t\texpectedResult\n\t}\n}\nfragment SentinelCheckIntegrationTestDefaultConfigurationFragment on SentinelCheckIntegrationTestDefaultConfiguration {\n\tignore\n\tnamespaceAnnotations\n\tnamespaceLabels\n\tregistry\n\tresourceAnnotations\n\tresourceLabels\n}\n","sha256:e64a2264b1a894d3db35c700efe1e5b72103efab97275077b7184600bb81b4ec":"query GetServiceDeploymentTiny ($id: ID!) {\n\tserviceDeployment(id: $id) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:e81829a6508fe6b8fb4e8d0e7b4180772c5ebff701a3011e1ce4a365cdcea6c5":"query GetSentinelRun ($id: ID!) {\n\tsentinelRun(id: $id) {\n\t\t... SentinelRunFragment\n\t}\n}\nfragment SentinelRunFragment on SentinelRun {\n\tid\n\tstatus\n\tsentinel {\n\t\tid\n\t}\n\tchecks {\n\t\t... SentinelCheckFragment\n\t}\n}\nfragment SentinelCheckFragment on SentinelCheck {\n\tid\n\tname\n\ttype\n\truleFile\n\tconfiguration {\n\t\t... SentinelCheckConfigurationFragment\n\t}\n}\nfragment SentinelCheckConfigurationFragment on SentinelCheckConfiguration {\n\tlog {\n\t\t... SentinelCheckLogConfigurationFragment\n\t}\n\tkubernetes {\n\t\t... SentinelCheckKubernetesConfigurationFragment\n\t}\n\tintegrationTest {\n\t\t... SentinelCheckIntegrationTestConfigurationFragment\n\t}\n}\nfragment SentinelCheckLogConfigurationFragment on SentinelCheckLogConfiguration {\n\tnamespaces\n\tquery\n\tclusterId\n\tfacets {\n\t\tkey\n\t\tvalue\n\t}\n\tduration\n}\nfragment SentinelCheckKubernetesConfigurationFragment on SentinelCheckKubernetesConfiguration {\n\tgroup\n\tversion\n\tkind\n\tname\n\tnamespace\n}\nfragment SentinelCheckIntegrationTestConfigurationFragment on SentinelCheckIntegrationTestConfiguration {\n\tdistro\n\ttags\n\trerunFailures\n\trerunFailuresCount\n\tpostrunScript\n\tgotestsum {\n\t\tp\n\t\tparallel\n\t}\n\tjob {\n\t\t... JobSpecFragment\n\t}\n\tcases {\n\t\t... TestCaseConfigurationFragment\n\t}\n\tdefault {\n\t\t... SentinelCheckIntegrationTestDefaultConfigurationFragment\n\t}\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment TestCaseConfigurationFragment on SentinelCheckIntegrationTestCaseConfiguration {\n\tname\n\ttype\n\tcoredns {\n\t\tdialFqdns\n\t\tdelay\n\t\tretries\n\t}\n\tloadbalancer {\n\t\tannotations\n\t\tlabels\n\t\tnamePrefix\n\t\tnamespace\n\t\tdnsProbe {\n\t\t\tfqdn\n\t\t\tdelay\n\t\t\tretries\n\t\t}\n\t}\n\tpvc {\n\t\tnamePrefix\n\t\tstorageClass\n\t\tsize\n\t}\n\traw {\n\t\tyaml\n\t\texpectedResult\n\t}\n}\nfragment SentinelCheckIntegrationTestDefaultConfigurationFragment on SentinelCheckIntegrationTestDefaultConfiguration {\n\tignore\n\tnamespaceAnnotations\n\tnamespaceLabels\n\tregistry\n\tresourceAnnotations\n\tresourceLabels\n}\n","sha256:e885bd9d9a88f0e525d69bee24aba63717c7969bcda29dcc1e0181db1d6553f7":"mutation UpdateGroup ($groupId: ID!, $attributtes: GroupAttributes!) {\n\tupdateGroup(groupId: $groupId, attributes: $attributtes) {\n\t\t... GroupFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\n","sha256:e8cabd7bee2b3ec8fb69f3c07726d145c7ba7d1342e884bb6674c48ee584d3f2":"query GetObserverTiny ($id: ID, $name: String) {\n\tobserver(id: $id, name: $name) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:e98aa15a1c0af4f3b5d1831279f62d9ef48c9a28217191e54b8e7545e322356a":"mutation UpsertAgentRuntime ($attributes: AgentRuntimeAttributes!) {\n\tupsertAgentRuntime(attributes: $attributes) {\n\t\t... AgentRuntimeFragment\n\t}\n}\nfragment AgentRuntimeFragment on AgentRuntime {\n\tid\n\tname\n\ttype\n\taiProxy\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tcreateBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:ea42f99ac6aa82489ff83d4b6a3569d01af1e44663670ce7983d6e0950e00445":"mutation CreateOIDCProvider ($type: OidcProviderType!, $attributes: OidcProviderAttributes!) {\n\tcreateOidcProvider(type: $type, attributes: $attributes) {\n\t\t... OIDCProviderFragment\n\t}\n}\nfragment OIDCProviderFragment on OidcProvider {\n\tid\n\tname\n\tdescription\n\tclientId\n\tclientSecret\n\tauthMethod\n\tredirectUris\n\tbindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:eb1e79ee0e1ae9924acfacadc2225debe000a1deaf29f4bd0b4fd32bdc06fc37":"mutation KickService ($id: ID!) {\n\tkickService(serviceId: $id) {\n\t\t... ServiceDeploymentExtended\n\t}\n}\nfragment ServiceDeploymentExtended on ServiceDeployment {\n\tcluster {\n\t\t... BaseClusterFragment\n\t}\n\terrors {\n\t\t... ErrorFragment\n\t}\n\trevision {\n\t\t... RevisionFragment\n\t}\n\tcontexts {\n\t\t... ServiceContextFragment\n\t}\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n\timports {\n\t\tstack {\n\t\t\t... InfrastructureStackTinyFragment\n\t\t}\n\t\toutputs {\n\t\t\t... StackOutputFragment\n\t\t}\n\t}\n}\nfragment BaseClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tdistro\n\tpingedAt\n\tcurrentVersion\n\tkasUrl\n\tmetadata\n\ttags {\n\t\t... ClusterTags\n\t}\n\tcredential {\n\t\t... ProviderCredentialFragment\n\t}\n\tprovider {\n\t\t... BaseClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment BaseClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment ErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\nfragment RevisionFragment on Revision {\n\tid\n\tsha\n\tgit {\n\t\tref\n\t\tfolder\n\t}\n}\nfragment ServiceContextFragment on ServiceContext {\n\tid\n\tname\n\tconfiguration\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment InfrastructureStackTinyFragment on InfrastructureStack {\n\tid\n\tname\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\n","sha256:eb48e1387916b107c9eb813c9b4c86628952b1cc47b2cc19138c55e28c0d27c2":"query GetInfrastructureStackId ($id: ID, $name: String) {\n\tinfrastructureStack(id: $id, name: $name) {\n\t\t... InfrastructureStackIdFragment\n\t}\n}\nfragment InfrastructureStackIdFragment on InfrastructureStack {\n\tid\n}\n","sha256:eb6667b96554ee27077292eed506b0777efacdffaee51babf8fdaa2fe20de1df":"query GetObservabilityProviderTiny ($id: ID, $name: String) {\n\tobservabilityProvider(id: $id, name: $name) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:ebb21cf148c1266159da87762af8b07b3d86e2bc357ed7e97e3836552ff47725":"query ListAgentRuntimes ($after: String, $first: Int, $before: String, $last: Int, $q: String, $type: AgentRuntimeType) {\n\tagentRuntimes(after: $after, first: $first, before: $before, last: $last, q: $q, type: $type) {\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... AgentRuntimeFragment\n\t\t\t}\n\t\t}\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t}\n}\nfragment AgentRuntimeFragment on AgentRuntime {\n\tid\n\tname\n\ttype\n\taiProxy\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tcreateBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\n","sha256:edf0898fb4698594637c396cb651e59637dde77354bfd5f6cbac6a174973ab3f":"mutation CreatePolicy ($attributes: PolicyAttributes!) {\n\tcreatePolicy(attributes: $attributes) {\n\t\t... PolicyFragment\n\t}\n}\nfragment PolicyFragment on Policy {\n\tid\n\tname\n\ttype\n\tdescription\n\tpolicy\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:ee2c452c191fc50ec78c441ccd4beaec32bb632b4a32df0b3bbdbf5a77ae2b26":"query GetCluster ($id: ID) {\n\tcluster(id: $id) {\n\t\t... ClusterFragment\n\t}\n}\nfragment ClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tinsertedAt\n\tpingedAt\n\tprotect\n\tcurrentVersion\n\tkasUrl\n\tdeletedAt\n\tmetadata\n\tdistro\n\ttags {\n\t\t... ClusterTags\n\t}\n\tprovider {\n\t\t... ClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tstatus {\n\t\t... ClusterStatusFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\tdeletedAt\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tservice {\n\t\t... ServiceDeploymentFragment\n\t}\n\tcredentials {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment ClusterStatusFragment on ClusterStatus {\n\tconditions {\n\t\t... ClusterConditionFragment\n\t}\n}\nfragment ClusterConditionFragment on ClusterCondition {\n\tstatus\n\ttype\n\tmessage\n\treason\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:f0180c3b7af6b2fd274ee2b25b45dc2f9577ea7cd180278c8873f71e30a8e57c":"query ListWorkbenches ($after: String, $first: Int, $before: String, $last: Int, $q: String) {\n\tworkbenches(after: $after, first: $first, before: $before, last: $last, q: $q) {\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... WorkbenchFragment\n\t\t\t}\n\t\t}\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t}\n}\nfragment WorkbenchFragment on Workbench {\n\tid\n\tname\n\tdescription\n\tsystemPrompt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tagentRuntime {\n\t\t... TinyAgentRuntimeFragment\n\t}\n\tconfiguration {\n\t\tcoding {\n\t\t\tmode\n\t\t\trepositories\n\t\t}\n\t\tinfrastructure {\n\t\t\tservices\n\t\t\tstacks\n\t\t\tkubernetes\n\t\t}\n\t\tobservability {\n\t\t\tlogs\n\t\t\tmetrics\n\t\t}\n\t}\n\tskills {\n\t\tref {\n\t\t\tref\n\t\t\tfolder\n\t\t\tfiles\n\t\t}\n\t\tfiles\n\t}\n\ttools {\n\t\t... WorkbenchToolFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment TinyAgentRuntimeFragment on AgentRuntime {\n\tid\n\tname\n\ttype\n\tcluster {\n\t\tid\n\t\tname\n\t\thandle\n\t}\n}\nfragment WorkbenchToolFragment on WorkbenchTool {\n\tid\n\tname\n\ttool\n\tcategories\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tmcpServer {\n\t\t... MCPServerFragment\n\t}\n\tcloudConnection {\n\t\t... CloudConnectionFragment\n\t}\n\tscmConnection {\n\t\tid\n\t\tname\n\t\ttype\n\t}\n\tconfiguration {\n\t\thttp {\n\t\t\turl\n\t\t\tmethod\n\t\t\tfunction\n\t\t\theaders {\n\t\t\t\tname\n\t\t\t\tvalue\n\t\t\t}\n\t\t\tbody\n\t\t\tinputSchema\n\t\t}\n\t\telastic {\n\t\t\tindex\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\topensearch {\n\t\t\thost\n\t\t\tindex\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t\tassumeRoleArn\n\t\t\tusePodIdentity\n\t\t}\n\t\tprometheus {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t\tawsSigv4\n\t\t\tawsAccessKeyId\n\t\t\tawsRegion\n\t\t}\n\t\tloki {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tvictoriaLogs {\n\t\t\turl\n\t\t\tusername\n\t\t\taccountId\n\t\t\tprojectId\n\t\t}\n\t\tsplunk {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\ttempo {\n\t\t\turl\n\t\t\tusername\n\t\t\ttenantId\n\t\t}\n\t\tjaeger {\n\t\t\turl\n\t\t\tusername\n\t\t}\n\t\tdatadog {\n\t\t\tsite\n\t\t}\n\t\tdynatrace {\n\t\t\turl\n\t\t}\n\t\tcloudwatch {\n\t\t\tregion\n\t\t\tlogGroupNames\n\t\t\troleArn\n\t\t\troleSessionName\n\t\t}\n\t\tazure {\n\t\t\tsubscriptionId\n\t\t\ttenantId\n\t\t\tclientId\n\t\t\tprometheusUrl\n\t\t}\n\t\tsentry {\n\t\t\turl\n\t\t}\n\t\tlinear {\n\t\t\turl\n\t\t}\n\t\tslack {\n\t\t\turl\n\t\t}\n\t\tpagerduty {\n\t\t\turl\n\t\t}\n\t\tteams {\n\t\t\tclientId\n\t\t\ttenantId\n\t\t}\n\t\tatlassian {\n\t\t\turl\n\t\t\temail\n\t\t}\n\t\texa {\n\t\t\turl\n\t\t}\n\t\tgithub {\n\t\t\turl\n\t\t\ttoolset\n\t\t\tappId\n\t\t\tinstallationId\n\t\t}\n\t\tgitlab {\n\t\t\turl\n\t\t}\n\t\tbitbucket {\n\t\t\turl\n\t\t}\n\t\tbitbucketDatacenter {\n\t\t\turl\n\t\t}\n\t\tazureDevops {\n\t\t\turl\n\t\t}\n\t\tlambda {\n\t\t\tlambdaArn\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tcloudRun {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tazureFunction {\n\t\t\tidentifier\n\t\t\tdescription\n\t\t\tinputSchema\n\t\t}\n\t\tdocker {\n\t\t\turl\n\t\t\tprovider\n\t\t\tproxy {\n\t\t\t\turl\n\t\t\t\tnoproxy\n\t\t\t}\n\t\t}\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment MCPServerFragment on McpServer {\n\tid\n\tname\n\turl\n\tauthentication {\n\t\tplural\n\t\theaders {\n\t\t\tname\n\t\t\tvalue\n\t\t}\n\t}\n\tconfirm\n}\nfragment CloudConnectionFragment on CloudConnection {\n\tid\n\tname\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tprovider\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\n","sha256:f0877907330fe5fe1eb0c25fde95aa37e9cc7c9e0a1c18f5fd432ec35fbdaf0f":"mutation UpdateStack ($id: ID!, $attributes: StackAttributes!) {\n\tupdateStack(id: $id, attributes: $attributes) {\n\t\t... InfrastructureStackFragment\n\t}\n}\nfragment InfrastructureStackFragment on InfrastructureStack {\n\tid\n\tname\n\ttype\n\tvariables\n\tapproval\n\tworkdir\n\tmanageState\n\tdeletedAt\n\tgit {\n\t\t... GitRefFragment\n\t}\n\tjobSpec {\n\t\t... JobSpecFragment\n\t}\n\tconfiguration {\n\t\t... StackConfigurationFragment\n\t}\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tfiles {\n\t\t... StackFileFragment\n\t}\n\tenvironment {\n\t\t... StackEnvironmentFragment\n\t}\n\toutput {\n\t\t... StackOutputFragment\n\t}\n\tstate {\n\t\t... StackStateFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tpolicyEngine {\n\t\t... PolicyEngineFragment\n\t}\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment StackConfigurationFragment on StackConfiguration {\n\timage\n\tversion\n\ttag\n\thooks {\n\t\t... StackHookFragment\n\t}\n\tterraform {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tterragrunt {\n\t\tparallelism\n\t\trefresh\n\t\tapproveEmpty\n\t}\n\tpulumi {\n\t\tparallel\n\t\trefresh\n\t\tapproveEmpty\n\t\tstack\n\t\tbackendUrl\n\t}\n\tansible {\n\t\tinventory\n\t\tplaybook\n\t\tprivateKeyFile\n\t\tconfigFile\n\t}\n}\nfragment StackHookFragment on StackHook {\n\tcmd\n\targs\n\tafterStage\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment StackFileFragment on StackFile {\n\tpath\n\tcontent\n}\nfragment StackEnvironmentFragment on StackEnvironment {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\nfragment StackStateFragment on StackState {\n\tid\n\tplan\n\tplanJson\n\tstate {\n\t\t... StackStateResourceFragment\n\t}\n}\nfragment StackStateResourceFragment on StackStateResource {\n\tidentifier\n\tresource\n\tname\n\tconfiguration\n\tlinks\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment PolicyEngineFragment on PolicyEngine {\n\ttype\n\tmaxSeverity\n\tcustomPolicies\n}\n","sha256:f0e05ce093b55732e58f7c3095178c28f5fe253dc86cb3fe35b8d9780e729d8a":"mutation DeleteProviderCredential ($id: ID!) {\n\tdeleteProviderCredential(id: $id) {\n\t\t... ProviderCredentialFragment\n\t}\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\n","sha256:f0f3bc7a7e51984167ff9097cb46eea2b6f8511fde8e987e799db5e919392da2":"mutation UpdatePolicy ($id: ID!, $attributes: PolicyAttributes!) {\n\tupdatePolicy(id: $id, attributes: $attributes) {\n\t\t... PolicyFragment\n\t}\n}\nfragment PolicyFragment on Policy {\n\tid\n\tname\n\ttype\n\tdescription\n\tpolicy\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\n","sha256:f2bb0c00963bc3dd9e407275110593d11307a2f5ad6b0874d0ec68e39f98aacc":"query GetFlow ($id: ID!) {\n\tflow(id: $id) {\n\t\t... FlowFragment\n\t}\n}\nfragment FlowFragment on Flow {\n\tid\n\tname\n\tdescription\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tproject {\n\t\t... ProjectFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment ProjectFragment on Project {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\tdefault\n\tdescription\n\tdisableInsights\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\n","sha256:f2e2e6aea69a2fe6413ac04731bf6bdf9b1b8fbfbc631f64081b97925cf0c4d5":"mutation CreatePrAutomation ($attributes: PrAutomationAttributes!) {\n\tcreatePrAutomation(attributes: $attributes) {\n\t\t... PrAutomationFragment\n\t}\n}\nfragment PrAutomationFragment on PrAutomation {\n\tid\n\tname\n\ttitle\n\taddon\n\tmessage\n\tidentifier\n\tinsertedAt\n\tupdatedAt\n}\n","sha256:f48fca8fbe86193ecceac779139b392ec35b9668b6391b87e9e485968adbe281":"mutation KickServiceByHandle ($cluster: String!, $name: String!) {\n\tkickService(cluster: $cluster, name: $name) {\n\t\t... ServiceDeploymentExtended\n\t}\n}\nfragment ServiceDeploymentExtended on ServiceDeployment {\n\tcluster {\n\t\t... BaseClusterFragment\n\t}\n\terrors {\n\t\t... ErrorFragment\n\t}\n\trevision {\n\t\t... RevisionFragment\n\t}\n\tcontexts {\n\t\t... ServiceContextFragment\n\t}\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n\timports {\n\t\tstack {\n\t\t\t... InfrastructureStackTinyFragment\n\t\t}\n\t\toutputs {\n\t\t\t... StackOutputFragment\n\t\t}\n\t}\n}\nfragment BaseClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tversion\n\tdistro\n\tpingedAt\n\tcurrentVersion\n\tkasUrl\n\tmetadata\n\ttags {\n\t\t... ClusterTags\n\t}\n\tcredential {\n\t\t... ProviderCredentialFragment\n\t}\n\tprovider {\n\t\t... BaseClusterProviderFragment\n\t}\n\tnodePools {\n\t\t... NodePoolFragment\n\t}\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment ClusterTags on Tag {\n\tname\n\tvalue\n}\nfragment ProviderCredentialFragment on ProviderCredential {\n\tid\n\tname\n\tnamespace\n\tkind\n}\nfragment BaseClusterProviderFragment on ClusterProvider {\n\tid\n\tname\n\tnamespace\n\tcloud\n\teditable\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment NodePoolFragment on NodePool {\n\tid\n\tname\n\tminSize\n\tmaxSize\n\tinstanceType\n\tlabels\n\ttaints {\n\t\t... NodePoolTaintFragment\n\t}\n}\nfragment NodePoolTaintFragment on Taint {\n\tkey\n\tvalue\n\teffect\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment ErrorFragment on ServiceError {\n\tsource\n\tmessage\n}\nfragment RevisionFragment on Revision {\n\tid\n\tsha\n\tgit {\n\t\tref\n\t\tfolder\n\t}\n}\nfragment ServiceContextFragment on ServiceContext {\n\tid\n\tname\n\tconfiguration\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\nfragment InfrastructureStackTinyFragment on InfrastructureStack {\n\tid\n\tname\n}\nfragment StackOutputFragment on StackOutput {\n\tname\n\tvalue\n\tsecret\n}\n","sha256:f4c23df10fd69bac428668e234d4671734030cdb043ab60cf1c2d1ae81755751":"mutation CloneServiceDeployment ($clusterId: ID!, $id: ID!, $attributes: ServiceCloneAttributes!) {\n\tcloneService(clusterId: $clusterId, serviceId: $id, attributes: $attributes) {\n\t\t... ServiceDeploymentFragment\n\t}\n}\nfragment ServiceDeploymentFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n\tcomponents {\n\t\tid\n\t\tuid\n\t\tname\n\t\tgroup\n\t\tkind\n\t\tnamespace\n\t\tstate\n\t\tsynced\n\t\tversion\n\t\tcontent {\n\t\t\t... ComponentContentFragment\n\t\t}\n\t}\n\tprotect\n\tdeletedAt\n\tsha\n\ttarball\n\tdryRun\n\ttemplated\n\tconfiguration {\n\t\tname\n\t\tvalue\n\t}\n\tflow {\n\t\tid\n\t}\n\tsyncConfig {\n\t\tcreateNamespace\n\t\tenforceNamespace\n\t\tnamespaceMetadata {\n\t\t\tlabels\n\t\t\tannotations\n\t\t}\n\t\tdiffNormalizers {\n\t\t\t... DiffNormalizerFragment\n\t\t}\n\t}\n\tmetadata {\n\t\timages\n\t\tfqdns\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\nfragment ComponentContentFragment on ComponentContent {\n\tid\n\tlive\n\tdesired\n}\nfragment DiffNormalizerFragment on DiffNormalizer {\n\tnamespace\n\tname\n\tkind\n\tbackfill\n\tjsonPointers\n}\n","sha256:f4e1c56176b7a939e788ef5b53f4787503b89c032124e826851a5ff4aceb0f25":"query GetNotificationRouterByName ($name: String) {\n\tnotificationRouter(name: $name) {\n\t\t... NotificationRouterFragment\n\t}\n}\nfragment NotificationRouterFragment on NotificationRouter {\n\tid\n\tname\n\tsinks {\n\t\t... NotificationSinkFragment\n\t}\n\tevents\n}\nfragment NotificationSinkFragment on NotificationSink {\n\tid\n\tname\n\ttype\n\tconfiguration {\n\t\t... SinkConfigurationFragment\n\t}\n\tnotificationBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment SinkConfigurationFragment on SinkConfiguration {\n\tid\n\tslack {\n\t\t... UrlSinkConfigurationFragment\n\t}\n\tteams {\n\t\t... UrlSinkConfigurationFragment\n\t}\n}\nfragment UrlSinkConfigurationFragment on UrlSinkConfiguration {\n\turl\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\n","sha256:f6ed33ad9b1d5a5809a4e165bd5ef8f45b11473299e695b900de16f0e019638e":"mutation CreateBindingPolicy ($attributes: BindingPolicyAttributes!) {\n\tcreateBindingPolicy(attributes: $attributes) {\n\t\t... BindingPolicyFragment\n\t}\n}\nfragment BindingPolicyFragment on BindingPolicy {\n\tid\n\ttype\n\tinterval\n\tnextPollAt\n\tmatches {\n\t\tworkbench {\n\t\t\tregexes\n\t\t}\n\t}\n\tpolicy {\n\t\t... TinyPolicyFragment\n\t}\n\tbindPolicy {\n\t\t... TinyPolicyFragment\n\t}\n\tinsertedAt\n\tupdatedAt\n}\nfragment TinyPolicyFragment on Policy {\n\tid\n\tname\n}\n","sha256:f6f84fe259c76394005edc0fae05274cf74dbc7798901ae09e0ffcd10cc83f56":"mutation UpsertMCPServer ($attributes: McpServerAttributes!) {\n\tupsertMcpServer(attributes: $attributes) {\n\t\t... MCPServerFragment\n\t}\n}\nfragment MCPServerFragment on McpServer {\n\tid\n\tname\n\turl\n\tauthentication {\n\t\tplural\n\t\theaders {\n\t\t\tname\n\t\t\tvalue\n\t\t}\n\t}\n\tconfirm\n}\n","sha256:f8ad34afb74d7611413565ccb547ce422f230839b2e0ab0ca2a63d8da00a58d0":"query ListAgentRuns ($after: String, $first: Int, $before: String, $last: Int) {\n\tagentRuns(after: $after, first: $first, before: $before, last: $last) {\n\t\tedges {\n\t\t\tnode {\n\t\t\t\t... AgentRunFragment\n\t\t\t}\n\t\t}\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t}\n}\nfragment AgentRunFragment on AgentRun {\n\tid\n\tprompt\n\trepository\n\tbranch\n\theadBranch\n\tmode\n\treviewDepth\n\tlanguage\n\tlanguageVersion\n\ttodos {\n\t\t... AgentTodoFragment\n\t}\n\tprompts {\n\t\t... AgentPromptFragment\n\t}\n\tskills {\n\t\tname\n\t\tdescription\n\t\tcontents\n\t}\n\tstatus\n\tpodReference {\n\t\t... AgentPodReferenceFragment\n\t}\n\terror\n\tanalysis {\n\t\t... AgentAnalysisFragment\n\t}\n\tusage {\n\t\tinputTokens\n\t\toutputTokens\n\t\ttotalTokens\n\t\tcachedTokens\n\t\treasoningTokens\n\t\tinputCost\n\t\toutputCost\n\t\ttotalCost\n\t}\n\tscmCreds {\n\t\t... ScmCredentialFragment\n\t}\n\tpluralCreds {\n\t\t... PluralCredsFragment\n\t}\n\tworkbenchMcpUrl\n\truntime {\n\t\t... AgentRuntimeFragment\n\t}\n\tuser {\n\t\tid\n\t\tname\n\t\temail\n\t}\n\tflow {\n\t\tid\n\t\tname\n\t}\n\tpullRequests {\n\t\t... PullRequestFragment\n\t}\n\tupload {\n\t\t... AgentRunUploadFragment\n\t}\n\tbabysit\n\tbabysitInterval\n\tapproval\n\tapprovedAt\n\tfollowup\n\tfollowupPrUrl\n}\nfragment AgentTodoFragment on AgentTodo {\n\tdescription\n\tdone\n\ttitle\n}\nfragment AgentPromptFragment on AgentPrompt {\n\tid\n\tprompt\n\tseq\n}\nfragment AgentPodReferenceFragment on AgentPodReference {\n\tname\n\tnamespace\n}\nfragment AgentAnalysisFragment on AgentAnalysis {\n\tsummary\n\tanalysis\n\tbullets\n}\nfragment ScmCredentialFragment on ScmCreds {\n\ttoken\n\tusername\n\texaKey\n}\nfragment PluralCredsFragment on PluralCreds {\n\ttoken\n\turl\n}\nfragment AgentRuntimeFragment on AgentRuntime {\n\tid\n\tname\n\ttype\n\taiProxy\n\tcluster {\n\t\t... TinyClusterFragment\n\t}\n\tcreateBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\nfragment TinyClusterFragment on Cluster {\n\tid\n\tname\n\thandle\n\tself\n\tdeletedAt\n\tproject {\n\t\t... TinyProjectFragment\n\t}\n}\nfragment TinyProjectFragment on Project {\n\tid\n\tname\n\tdefault\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment PullRequestFragment on PullRequest {\n\tid\n\tstatus\n\turl\n\ttitle\n\tcreator\n\tref\n}\nfragment AgentRunUploadFragment on AgentRunUpload {\n\tid\n\tsession\n\tscreenRecording\n\tpatch\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\n","sha256:fb582babd9105b9d3a968a697cd3c6879d73cc169cb3a0ea2ff6919653b93159":"query GetPersonaTiny ($id: ID!) {\n\tpersona(id: $id) {\n\t\tid\n\t\tname\n\t}\n}\n","sha256:fb5ea857664bc64ec6b9b3be0df5183537c6ada36d9076badf3035fac4821160":"mutation updateGate ($id: ID!, $attributes: GateUpdateAttributes!) {\n\tupdateGate(id: $id, attributes: $attributes) {\n\t\t... PipelineGateFragment\n\t}\n}\nfragment PipelineGateFragment on PipelineGate {\n\tid\n\tname\n\ttype\n\tstate\n\tupdatedAt\n\tspec {\n\t\t... GateSpecFragment\n\t}\n\tstatus {\n\t\t... GateStatusFragment\n\t}\n}\nfragment GateSpecFragment on GateSpec {\n\tjob {\n\t\t... JobSpecFragment\n\t}\n}\nfragment JobSpecFragment on JobGateSpec {\n\tnamespace\n\traw\n\tcontainers {\n\t\t... ContainerSpecFragment\n\t}\n\tlabels\n\tannotations\n\tserviceAccount\n\trequests {\n\t\t... ContainerResourcesFragment\n\t}\n\tnodeSelector\n\ttolerations {\n\t\tkey\n\t\toperator\n\t\tvalue\n\t\teffect\n\t}\n}\nfragment ContainerSpecFragment on ContainerSpec {\n\tname\n\timage\n\targs\n\tenv {\n\t\tname\n\t\tvalue\n\t}\n\tenvFrom {\n\t\tconfigMap\n\t\tsecret\n\t}\n}\nfragment ContainerResourcesFragment on ContainerResources {\n\trequests {\n\t\t... ResourceRequestFragment\n\t}\n\tlimits {\n\t\t... ResourceRequestFragment\n\t}\n}\nfragment ResourceRequestFragment on ResourceRequest {\n\tcpu\n\tmemory\n}\nfragment GateStatusFragment on GateStatus {\n\tjobRef {\n\t\t... JobReferenceFragment\n\t}\n}\nfragment JobReferenceFragment on JobReference {\n\tname\n\tnamespace\n}\n","sha256:fbbe6bebeab1e039a67523921914f1c01201317c02cc98e06dec4433b164babe":"mutation UpsertFlow ($attributes: FlowAttributes!) {\n\tupsertFlow(attributes: $attributes) {\n\t\t... FlowFragment\n\t}\n}\nfragment FlowFragment on Flow {\n\tid\n\tname\n\tdescription\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n\tproject {\n\t\t... ProjectFragment\n\t}\n}\nfragment PolicyBindingFragment on PolicyBinding {\n\tid\n\tgroup {\n\t\t... GroupFragment\n\t}\n\tuser {\n\t\t... UserFragment\n\t}\n}\nfragment GroupFragment on Group {\n\tid\n\tname\n\tdescription\n\tglobal\n}\nfragment UserFragment on User {\n\tname\n\tid\n\temail\n}\nfragment ProjectFragment on Project {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\tdefault\n\tdescription\n\tdisableInsights\n\treadBindings {\n\t\t... PolicyBindingFragment\n\t}\n\twriteBindings {\n\t\t... PolicyBindingFragment\n\t}\n}\n","sha256:fd1e534eae2f32dcc454ce202bcdf126e56a5fd1783af6d72bac469daf44711a":"mutation UpsertObservabilityWebhook ($attributes: ObservabilityWebhookAttributes!) {\n\tupsertObservabilityWebhook(attributes: $attributes) {\n\t\t... ObservabilityWebhookFragment\n\t}\n}\nfragment ObservabilityWebhookFragment on ObservabilityWebhook {\n\tid\n\tinsertedAt\n\tupdatedAt\n\tname\n\ttype\n\turl\n}\n","sha256:fd2719879c20e353e13ab4632ed7ef0463e32c44312ba4718fa3c3398f85757b":"mutation DeleteUpgradePlanCallout ($name: String!) {\n\tdeleteUpgradePlanCallout(name: $name) {\n\t\tid\n\t}\n}\n","sha256:fe29529018620357fb036988eaedf93dcc5f4c261a1790008fe871e730df22a7":"mutation CreateAgentMessageOutput ($attributes: AgentMessageOutputAttributes!) {\n\tagentMessageOutput(attributes: $attributes) {\n\t\tmessageId\n\t\tagentRunId\n\t\tstdout\n\t\tstderr\n\t}\n}\n","sha256:fe6d1ea15a4c48af7dd3d108284742c3e213ae0ca2d056b54e9f69e76d324ff0":"query GetPipeline ($id: ID!) {\n\tpipeline(id: $id) {\n\t\t... PipelineFragmentMinimal\n\t}\n}\nfragment PipelineFragmentMinimal on Pipeline {\n\tid\n\tname\n}\n","sha256:fe9a6d6142da6bdab74374a10496278f9c48e7c7d5be86f30230ab48f378cec0":"query GetClusterIdByHandle ($handle: String) {\n\tcluster(handle: $handle) {\n\t\t... {\n\t\t\tid\n\t\t}\n\t}\n}\n","sha256:feaaf702508e6b2448a4d426421ceaece0bdb6c525c329b24c8944dec9373dc3":"query PagedClusterServices ($after: String, $first: Int, $before: String, $last: Int) {\n\tpagedClusterServices(after: $after, first: $first, before: $before, last: $last) {\n\t\tpageInfo {\n\t\t\t... PageInfoFragment\n\t\t}\n\t\tedges {\n\t\t\t... ServiceDeploymentEdgeFragment\n\t\t}\n\t}\n}\nfragment PageInfoFragment on PageInfo {\n\thasNextPage\n\tendCursor\n}\nfragment ServiceDeploymentEdgeFragment on ServiceDeploymentEdge {\n\tnode {\n\t\t... ServiceDeploymentBaseFragment\n\t}\n}\nfragment ServiceDeploymentBaseFragment on ServiceDeployment {\n\tid\n\tname\n\tnamespace\n\tversion\n\tstatus\n\tkustomize {\n\t\t... KustomizeFragment\n\t}\n\tgit {\n\t\t... GitRefFragment\n\t}\n\thelm {\n\t\t... HelmSpecFragment\n\t}\n\trepository {\n\t\t... GitRepositoryFragment\n\t}\n}\nfragment KustomizeFragment on Kustomize {\n\tpath\n\tenableHelm\n}\nfragment GitRefFragment on GitRef {\n\tfolder\n\tref\n}\nfragment HelmSpecFragment on HelmSpec {\n\tvaluesFiles\n}\nfragment GitRepositoryFragment on GitRepository {\n\tid\n\terror\n\thealth\n\tauthMethod\n\turl\n\tdecrypt\n\trecurseSubmodules\n}\n"}} diff --git a/go/client/graph/deployment.graphql b/go/client/graph/deployment.graphql index 4018ad95fd..0f2a0499d6 100644 --- a/go/client/graph/deployment.graphql +++ b/go/client/graph/deployment.graphql @@ -248,6 +248,13 @@ query GetServiceDeploymentByHandle($cluster: String!, $name: String!) { } } +query GetServiceDeploymentTinyByHandle($cluster: String!, $name: String!) { + serviceDeployment(cluster: $cluster, name: $name) { + id + name + } +} + query GetServiceTarball($id: ID!) { serviceTarball(id: $id) { path diff --git a/go/client/graph/monitoring.graphql b/go/client/graph/monitoring.graphql new file mode 100644 index 0000000000..6d0857f2ae --- /dev/null +++ b/go/client/graph/monitoring.graphql @@ -0,0 +1,69 @@ +fragment MonitorFragment on Monitor { + id + name + service { + id + name + } + workbench { + id + name + } +} + +fragment WorkbenchDashboardFragment on WorkbenchDashboard { + id + name + workbench { + id + name + } +} + +query GetMonitor($id: ID!) { + monitor(id: $id) { + ...MonitorFragment + } +} + +mutation CreateMonitor($attributes: MonitorAttributes!) { + createMonitor(attributes: $attributes) { + ...MonitorFragment + } +} + +mutation UpdateMonitor($id: ID!, $attributes: MonitorAttributes!) { + updateMonitor(id: $id, attributes: $attributes) { + ...MonitorFragment + } +} + +mutation DeleteMonitor($id: ID!) { + deleteMonitor(id: $id) { + id + } +} + +query GetWorkbenchDashboard($id: ID!) { + workbenchDashboard(id: $id) { + ...WorkbenchDashboardFragment + } +} + +mutation CreateDashboard($attributes: DashboardAttributes!) { + createDashboard(attributes: $attributes) { + ...WorkbenchDashboardFragment + } +} + +mutation UpdateDashboard($id: ID!, $attributes: DashboardAttributes!) { + updateDashboard(id: $id, attributes: $attributes) { + ...WorkbenchDashboardFragment + } +} + +mutation DeleteDashboard($id: ID!) { + deleteDashboard(id: $id) { + id + } +} diff --git a/go/controller/api/v1alpha1/dashboard_types.go b/go/controller/api/v1alpha1/dashboard_types.go new file mode 100644 index 0000000000..16734339fe --- /dev/null +++ b/go/controller/api/v1alpha1/dashboard_types.go @@ -0,0 +1,340 @@ +/* +Copyright 2023. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + "github.com/samber/lo" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/meta" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + + console "github.com/pluralsh/console/go/client" +) + +func init() { + SchemeBuilder.Register(&Dashboard{}, &DashboardList{}) +} + +// +kubebuilder:object:root=true + +// DashboardList contains a list of Dashboard resources. +type DashboardList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []Dashboard `json:"items"` +} + +// +kubebuilder:object:root=true +// +kubebuilder:resource:scope=Namespaced +// +kubebuilder:subresource:status +// +kubebuilder:printcolumn:name="ID",type="string",JSONPath=".status.id",description="ID of the Dashboard in the Console API." +// +kubebuilder:printcolumn:name="READY",type="string",JSONPath=".status.conditions[?(@.type==\"Ready\")].status",description="Whether the Dashboard is ready." + +// Dashboard represents an observability dashboard owned by a Workbench. It consists of graphs +// arranged on a grid, each backed by an observability tool datasource, and optional user-configurable inputs. +type Dashboard struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + // Spec defines the desired state of the Dashboard. + // +kubebuilder:validation:Required + Spec DashboardSpec `json:"spec"` + + // Status represents the current state of this resource. + // +kubebuilder:validation:Optional + Status Status `json:"status,omitempty"` +} + +// SetReadOnlyStatus sets the read-only status of the dashboard. +func (in *Dashboard) SetReadOnlyStatus(readOnly bool) { + in.Status.ReadOnly = readOnly +} + +// ConsoleID implements [PluralResource] interface. +func (in *Dashboard) ConsoleID() *string { + return in.Status.ID +} + +// ConsoleName implements [PluralResource] interface. +func (in *Dashboard) ConsoleName() string { + if in.Spec.Name != nil && len(*in.Spec.Name) > 0 { + return *in.Spec.Name + } + return in.Name +} + +// Diff compares the current Dashboard spec with its last known state. +func (in *Dashboard) Diff(hasher Hasher) (changed bool, sha string, err error) { + currentSha, err := hasher(in.Spec) + if err != nil { + return false, "", err + } + return !in.Status.IsSHAEqual(currentSha), currentSha, nil +} + +// SetCondition sets a condition on the Dashboard status. +func (in *Dashboard) SetCondition(condition metav1.Condition) { + meta.SetStatusCondition(&in.Status.Conditions, condition) +} + +// Attributes converts the Dashboard spec into Console API attributes. +// The workbenchID has to be resolved from the spec reference by the caller. +func (in *Dashboard) Attributes(workbenchID string) console.DashboardAttributes { + return console.DashboardAttributes{ + WorkbenchID: &workbenchID, + Name: lo.ToPtr(in.ConsoleName()), + Description: in.Spec.Description, + Graphs: lo.Map(in.Spec.Graphs, func(g DashboardGraph, _ int) *console.DashboardGraphAttributes { + return g.Attributes() + }), + Inputs: lo.Map(in.Spec.Inputs, func(i DashboardInput, _ int) *console.DashboardInputAttributes { + return i.Attributes() + }), + } +} + +// DashboardSpec defines the desired state of a Dashboard. +// +kubebuilder:validation:XValidation:rule="!has(self.graphs) || self.graphs.all(g, !has(g.sectionId) || size(g.sectionId) == 0 || self.graphs.exists(s, s.type == 'SECTION' && s.identifier == g.sectionId))",message="sectionId must reference an existing SECTION graph" +type DashboardSpec struct { + + // WorkbenchRef references the Workbench that owns this dashboard. + // The Workbench must be in the same namespace as the dashboard. + // It is immutable, a dashboard cannot be moved to a different workbench. + // +kubebuilder:validation:Required + // +kubebuilder:validation:XValidation:rule="has(self.name) && size(self.name) > 0",message="name is required" + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="workbenchRef is immutable" + WorkbenchRef corev1.LocalObjectReference `json:"workbenchRef"` + + // Name is the dashboard name, unique within its workbench. + // If not set, metadata.name is used. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type:=string + Name *string `json:"name,omitempty"` + + // Description is an optional dashboard description. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type:=string + Description *string `json:"description,omitempty"` + + // Graphs arranged on the dashboard grid. Graph identifiers must be unique within the dashboard. + // Graphs can be grouped by setting sectionId to the identifier of a SECTION graph. + // Note that overlapping graph layouts are only validated by the Console API. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:MaxItems=200 + // +listType=map + // +listMapKey=identifier + Graphs []DashboardGraph `json:"graphs,omitempty"` + + // Inputs are user-configurable dashboard variables. + // +kubebuilder:validation:Optional + // +listType=map + // +listMapKey=name + Inputs []DashboardInput `json:"inputs,omitempty"` + + // Reconciliation settings for this resource. + // +kubebuilder:validation:Optional + Reconciliation *Reconciliation `json:"reconciliation,omitempty"` +} + +// DashboardGraph is a single graph placed on the dashboard grid. +// +kubebuilder:validation:XValidation:rule="self.type != 'MARKDOWN' || has(self.markdown)",message="markdown must be set for MARKDOWN graphs" +// +kubebuilder:validation:XValidation:rule="self.type != 'SECTION' || !has(self.sectionId) || size(self.sectionId) == 0",message="sections cannot be nested, SECTION graphs cannot set sectionId" +type DashboardGraph struct { + // Identifier is a stable identifier unique within the dashboard. + // +kubebuilder:validation:Required + // +kubebuilder:validation:Type:=string + // +kubebuilder:validation:MinLength=1 + // +kubebuilder:validation:MaxLength=128 + Identifier string `json:"identifier"` + + // Title is the graph title. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type:=string + Title *string `json:"title,omitempty"` + + // Description is an optional graph description. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type:=string + Description *string `json:"description,omitempty"` + + // Type is the graph visualization type. + // +kubebuilder:validation:Required + // +kubebuilder:validation:Enum=TIMESERIES;GAUGE;LOGS;MARKDOWN;TABLE;STAT;BAR;PIE;HEATMAP;TRACES;SECTION + // +kubebuilder:validation:Type:=string + // +kubebuilder:validation:MaxLength=16 + Type console.DashboardGraphType `json:"type"` + + // SectionID is the identifier of the SECTION graph containing this graph. Sections cannot be nested. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type:=string + // +kubebuilder:validation:MaxLength=128 + SectionID *string `json:"sectionId,omitempty"` + + // Markdown is the content for MARKDOWN graphs. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type:=string + Markdown *string `json:"markdown,omitempty"` + + // Options are visualization-specific display options. Sections may set collapsed. + // +kubebuilder:validation:Optional + Options *runtime.RawExtension `json:"options,omitempty"` + + // Layout is the grid position and size of the graph. + // +kubebuilder:validation:Required + Layout DashboardGraphLayout `json:"layout"` + + // Datasource is the tool call used to fetch external data. + // +kubebuilder:validation:Optional + Datasource *DashboardDatasource `json:"datasource,omitempty"` +} + +func (in *DashboardGraph) Attributes() *console.DashboardGraphAttributes { + var options *string + if in.Options != nil && len(in.Options.Raw) > 0 { + options = lo.ToPtr(string(in.Options.Raw)) + } + + return &console.DashboardGraphAttributes{ + Identifier: in.Identifier, + Title: in.Title, + Description: in.Description, + Type: in.Type, + SectionID: in.SectionID, + Markdown: in.Markdown, + Options: options, + Layout: console.DashboardGraphLayoutAttributes{ + X: in.Layout.X, + Y: in.Layout.Y, + W: in.Layout.W, + H: in.Layout.H, + }, + Datasource: in.Datasource.Attributes(), + } +} + +// DashboardGraphLayout defines the grid position and size of a graph. +type DashboardGraphLayout struct { + // X is the zero-based horizontal grid coordinate. + // +kubebuilder:validation:Required + // +kubebuilder:validation:Minimum=0 + X int64 `json:"x"` + + // Y is the zero-based vertical grid coordinate. + // +kubebuilder:validation:Required + // +kubebuilder:validation:Minimum=0 + Y int64 `json:"y"` + + // W is the width in grid columns. + // +kubebuilder:validation:Required + // +kubebuilder:validation:Minimum=1 + W int64 `json:"w"` + + // H is the height in grid rows. + // +kubebuilder:validation:Required + // +kubebuilder:validation:Minimum=1 + H int64 `json:"h"` +} + +// DashboardDatasource defines an observability tool call used to fetch dashboard data. +type DashboardDatasource struct { + // Type is the kind of data returned by the datasource. + // +kubebuilder:validation:Required + // +kubebuilder:validation:Enum=LOGS;METRICS;TRACES;LABELS + Type console.DashboardDatasourceType `json:"type"` + + // Tool is the name of the observability tool used to fetch the data. + // +kubebuilder:validation:Required + // +kubebuilder:validation:Type:=string + // +kubebuilder:validation:MinLength=1 + Tool string `json:"tool"` + + // Input is passed to the observability tool. + // +kubebuilder:validation:Required + Input runtime.RawExtension `json:"input"` +} + +func (in *DashboardDatasource) Attributes() *console.DashboardDatasourceAttributes { + if in == nil { + return nil + } + + input := "{}" + if len(in.Input.Raw) > 0 { + input = string(in.Input.Raw) + } + + return &console.DashboardDatasourceAttributes{ + Type: in.Type, + Tool: in.Tool, + Input: input, + } +} + +// DashboardInput is a user-configurable dashboard variable. +type DashboardInput struct { + // Name is the variable name referenced by graph datasource inputs. + // +kubebuilder:validation:Required + // +kubebuilder:validation:Type:=string + // +kubebuilder:validation:MinLength=1 + Name string `json:"name"` + + // Label is a human-readable input label. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type:=string + Label *string `json:"label,omitempty"` + + // Description is an optional input description. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type:=string + Description *string `json:"description,omitempty"` + + // Type is the input control type. + // +kubebuilder:validation:Required + // +kubebuilder:validation:Enum=TEXT;NUMBER;BOOLEAN;SELECT;MULTI_SELECT;TIME_RANGE + Type console.DashboardInputType `json:"type"` + + // Default is the default input value. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type:=string + Default *string `json:"default,omitempty"` + + // Options are the allowed values for select inputs. + // +kubebuilder:validation:Optional + Options []string `json:"options,omitempty"` + + // Required defines whether a value is required when rendering. + // +kubebuilder:validation:Optional + Required *bool `json:"required,omitempty"` + + // Datasource is the tool query used to populate input options, such as metric label search. + // +kubebuilder:validation:Optional + Datasource *DashboardDatasource `json:"datasource,omitempty"` +} + +func (in *DashboardInput) Attributes() *console.DashboardInputAttributes { + return &console.DashboardInputAttributes{ + Name: in.Name, + Label: in.Label, + Description: in.Description, + Type: in.Type, + Default: in.Default, + Options: lo.ToSlicePtr(in.Options), + Required: in.Required, + Datasource: in.Datasource.Attributes(), + } +} diff --git a/go/controller/api/v1alpha1/monitor_types.go b/go/controller/api/v1alpha1/monitor_types.go new file mode 100644 index 0000000000..e4c41e00d1 --- /dev/null +++ b/go/controller/api/v1alpha1/monitor_types.go @@ -0,0 +1,474 @@ +/* +Copyright 2023. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + "fmt" + "strconv" + + "github.com/samber/lo" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/meta" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + console "github.com/pluralsh/console/go/client" +) + +func init() { + SchemeBuilder.Register(&Monitor{}, &MonitorList{}) +} + +// +kubebuilder:object:root=true + +// MonitorList contains a list of Monitor resources. +type MonitorList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []Monitor `json:"items"` +} + +// +kubebuilder:object:root=true +// +kubebuilder:resource:scope=Namespaced +// +kubebuilder:subresource:status +// +kubebuilder:printcolumn:name="ID",type="string",JSONPath=".status.id",description="ID of the Monitor in the Console API." +// +kubebuilder:printcolumn:name="TYPE",type="string",JSONPath=".spec.type",description="Monitor data type." +// +kubebuilder:printcolumn:name="SEVERITY",type="string",JSONPath=".spec.severity",description="Severity of alerts generated by this Monitor." +// +kubebuilder:printcolumn:name="READY",type="string",JSONPath=".status.conditions[?(@.type==\"Ready\")].status",description="Whether the Monitor is ready." + +// Monitor represents an observability monitor attached to a service deployment. It periodically +// evaluates a log or metrics query against a threshold and fires alerts when it is crossed. +// Optionally, it can be attached to a workbench to start an investigation when it fires. +type Monitor struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + // Spec defines the desired state of the Monitor. + // +kubebuilder:validation:Required + Spec MonitorSpec `json:"spec"` + + // Status represents the current state of this resource. + // +kubebuilder:validation:Optional + Status Status `json:"status,omitempty"` +} + +// SetReadOnlyStatus sets the read-only status of the monitor. +func (in *Monitor) SetReadOnlyStatus(readOnly bool) { + in.Status.ReadOnly = readOnly +} + +// ConsoleID implements [PluralResource] interface. +func (in *Monitor) ConsoleID() *string { + return in.Status.ID +} + +// ConsoleName implements [PluralResource] interface. +func (in *Monitor) ConsoleName() string { + if in.Spec.Name != nil && len(*in.Spec.Name) > 0 { + return *in.Spec.Name + } + return in.Name +} + +// Diff compares the current Monitor spec with its last known state. +func (in *Monitor) Diff(hasher Hasher) (changed bool, sha string, err error) { + currentSha, err := hasher(in.Spec) + if err != nil { + return false, "", err + } + return !in.Status.IsSHAEqual(currentSha), currentSha, nil +} + +// SetCondition sets a condition on the Monitor status. +func (in *Monitor) SetCondition(condition metav1.Condition) { + meta.SetStatusCondition(&in.Status.Conditions, condition) +} + +// Attributes converts the Monitor spec into Console API attributes. +// The serviceID (from ServiceRef or Service) and workbenchID have to be resolved from the spec by the caller. +func (in *Monitor) Attributes(serviceID string, workbenchID *string) (*console.MonitorAttributes, error) { + threshold, err := in.Spec.Threshold.Attributes() + if err != nil { + return nil, err + } + + modes, err := in.Spec.Modes.Attributes() + if err != nil { + return nil, err + } + + return &console.MonitorAttributes{ + ServiceID: serviceID, + WorkbenchID: workbenchID, + Prompt: in.Spec.Prompt, + Modes: modes, + Name: in.ConsoleName(), + Description: in.Spec.Description, + AlertTemplate: in.Spec.AlertTemplate, + Severity: in.Spec.Severity, + Type: in.Spec.Type, + EvaluationCron: in.Spec.EvaluationCron, + Query: in.Spec.Query.Attributes(), + Threshold: *threshold, + }, nil +} + +// MonitorSpec defines the desired state of a Monitor. +// +kubebuilder:validation:XValidation:rule="has(self.serviceRef) != has(self.service)",message="exactly one of serviceRef or service must be set" +// +kubebuilder:validation:XValidation:rule="self.type != 'LOG' || has(self.query.log)",message="query.log must be set when type is LOG" +// +kubebuilder:validation:XValidation:rule="self.type != 'METRICS' || has(self.query.metrics)",message="query.metrics must be set when type is METRICS" +// +kubebuilder:validation:XValidation:rule="has(self.workbenchRef) || !((has(self.query.log) && has(self.query.log.tool)) || (has(self.query.metrics) && has(self.query.metrics.tool)))",message="workbenchRef is required for tool-backed monitor queries" +type MonitorSpec struct { + // Name is the short name used to identify this monitor in the Console API. + // If not set, metadata.name is used. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type:=string + Name *string `json:"name,omitempty"` + + // ServiceRef references the ServiceDeployment resource this monitor is attached to. + // The ServiceDeployment must be in the same namespace as the monitor. + // Either ServiceRef or Service must be set. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:XValidation:rule="has(self.name) && size(self.name) > 0",message="name is required" + ServiceRef *corev1.LocalObjectReference `json:"serviceRef,omitempty"` + + // Service references an existing service in the Console API this monitor is attached to, + // in the format "cluster-handle/service-name" (e.g. mgmt/console). Use it to attach + // a monitor to a service that is not managed by a ServiceDeployment resource. + // Either ServiceRef or Service must be set. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type:=string + // +kubebuilder:validation:Pattern=`^[^/]+/[^/]+$` + // +kubebuilder:example:=mgmt/console + Service *string `json:"service,omitempty"` + + // WorkbenchRef references the Workbench this monitor is attached to. + // When set, the monitor can start a workbench investigation when it fires. + // It is required if the query uses a named workbench tool. + // The Workbench must be in the same namespace as the monitor. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:XValidation:rule="has(self.name) && size(self.name) > 0",message="name is required" + WorkbenchRef *corev1.LocalObjectReference `json:"workbenchRef,omitempty"` + + // Prompt is used when the monitor starts a workbench investigation. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type:=string + // +kubebuilder:validation:MaxLength=2048 + Prompt *string `json:"prompt,omitempty"` + + // Modes defines mode-specific options for monitor-triggered workbench jobs. + // +kubebuilder:validation:Optional + Modes *WorkbenchJobModes `json:"modes,omitempty"` + + // Description is an optional free-form description of what this monitor is checking. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type:=string + Description *string `json:"description,omitempty"` + + // AlertTemplate is an optional template used when rendering alert messages for this monitor. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type:=string + AlertTemplate *string `json:"alertTemplate,omitempty"` + + // Severity is the severity level applied to alerts generated by this monitor. + // +kubebuilder:validation:Required + // +kubebuilder:validation:Enum=LOW;MEDIUM;HIGH;CRITICAL;UNDEFINED + Severity console.AlertSeverity `json:"severity"` + + // Type is the monitor data type. + // +kubebuilder:validation:Required + // +kubebuilder:validation:Enum=LOG;METRICS + Type console.MonitorType `json:"type"` + + // EvaluationCron is the cron schedule defining when the monitor is evaluated (e.g. */5 * * * *). + // It must be a cron expression with 5 fields (or 6 with an optional year), separated by single spaces, + // or one of the @yearly, @annually, @monthly, @weekly, @daily, @midnight, @hourly, @minutely, + // @secondly or @reboot shortcuts. Field values are validated by the Console API. + // +kubebuilder:validation:Required + // +kubebuilder:validation:Type:=string + // +kubebuilder:validation:MinLength=1 + // +kubebuilder:validation:Pattern=`^(@(?i:yearly|annually|monthly|weekly|daily|midnight|hourly|minutely|secondly|reboot)|[^ ]+( [^ ]+){4,5})$` + EvaluationCron string `json:"evaluationCron"` + + // Query is the underlying query configuration used to fetch data for this monitor. + // +kubebuilder:validation:Required + Query MonitorQuery `json:"query"` + + // Threshold is the configuration that determines when the monitor should fire. + // +kubebuilder:validation:Required + Threshold MonitorThreshold `json:"threshold"` + + // Reconciliation settings for this resource. + // +kubebuilder:validation:Optional + Reconciliation *Reconciliation `json:"reconciliation,omitempty"` +} + +// MonitorThreshold is the threshold configuration used to decide when a monitor should fire. +type MonitorThreshold struct { + // Aggregate is the aggregation function applied over the result set. + // +kubebuilder:validation:Required + // +kubebuilder:validation:Enum=MAX;MIN;AVG + Aggregate console.MonitorAggregate `json:"aggregate"` + + // Value is the numeric value the aggregated metric must cross to trigger the alert. + // It is a string to allow decimal values (e.g. "0.95"). + // +kubebuilder:validation:Required + // +kubebuilder:validation:Type:=string + // +kubebuilder:validation:Pattern=`^-?[0-9]+(\.[0-9]+)?$` + Value string `json:"value"` +} + +func (in *MonitorThreshold) Attributes() (*console.MonitorThresholdAttributes, error) { + value, err := strconv.ParseFloat(in.Value, 64) + if err != nil { + return nil, fmt.Errorf("invalid threshold value %q: %w", in.Value, err) + } + + return &console.MonitorThresholdAttributes{ + Aggregate: in.Aggregate, + Value: value, + }, nil +} + +// MonitorQuery is a wrapper for the underlying query definition for a monitor. +// Exactly one of log or metrics should be set, matching the monitor type. +// +kubebuilder:validation:XValidation:rule="!(has(self.log) && has(self.metrics))",message="only one of log or metrics can be set" +type MonitorQuery struct { + // Log query used when the monitor type is LOG. + // +kubebuilder:validation:Optional + Log *MonitorLogQuery `json:"log,omitempty"` + + // Metrics query used when the monitor type is METRICS. + // +kubebuilder:validation:Optional + Metrics *MonitorMetricsQuery `json:"metrics,omitempty"` +} + +func (in *MonitorQuery) Attributes() console.MonitorQueryAttributes { + return console.MonitorQueryAttributes{ + Log: in.Log.Attributes(), + Metrics: in.Metrics.Attributes(), + } +} + +// MonitorLogQuery is the log query configuration for a monitor. +type MonitorLogQuery struct { + // Tool is the named workbench logs tool. When omitted, the native Plural logs provider is used. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type:=string + Tool *string `json:"tool,omitempty"` + + // Query is the log query string passed through to the underlying log provider. + // +kubebuilder:validation:Required + // +kubebuilder:validation:Type:=string + // +kubebuilder:validation:MinLength=1 + Query string `json:"query"` + + // BucketSize is the time bucket size (e.g. 5m) used when aggregating log results. + // +kubebuilder:validation:Required + // +kubebuilder:validation:Type:=string + // +kubebuilder:validation:Pattern=`^[0-9]+[dmhs]$` + BucketSize string `json:"bucketSize"` + + // Duration is the lookback duration for the log query (e.g. 1h, 10m, 30s). + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type:=string + // +kubebuilder:validation:Pattern=`^[0-9]+[dmhs]$` + Duration *string `json:"duration,omitempty"` + + // Operator to use when combining multiple log queries. + // Defaults to OR, which is also the Console API default. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Enum=OR;AND + // +kubebuilder:default=OR + Operator *console.MonitorOperator `json:"operator,omitempty"` + + // Facets are optional key/value facets applied as additional filters on the log query. + // +kubebuilder:validation:Optional + Facets []MonitorFacet `json:"facets,omitempty"` + + // Options are provider-specific log query options. + // +kubebuilder:validation:Optional + Options *MonitorLogOptions `json:"options,omitempty"` +} + +func (in *MonitorLogQuery) Attributes() *console.MonitorLogQueryAttributes { + if in == nil { + return nil + } + + return &console.MonitorLogQueryAttributes{ + Tool: in.Tool, + Query: in.Query, + BucketSize: in.BucketSize, + Duration: in.Duration, + Operator: in.Operator, + Facets: lo.Map(in.Facets, func(f MonitorFacet, _ int) *console.MonitorFacetAttributes { + return &console.MonitorFacetAttributes{Key: f.Key, Value: f.Value} + }), + Options: in.Options.Attributes(), + } +} + +// MonitorFacet is a key/value facet used to further filter log queries. +type MonitorFacet struct { + // Key is the facet key (e.g. kubernetes namespace or pod label name). + // +kubebuilder:validation:Required + // +kubebuilder:validation:Type:=string + Key string `json:"key"` + + // Value is the facet value to match for the given key. + // +kubebuilder:validation:Required + // +kubebuilder:validation:Type:=string + Value string `json:"value"` +} + +// MonitorLogOptions are provider-specific log query options. +type MonitorLogOptions struct { + // Azure log query options. + // +kubebuilder:validation:Optional + Azure *MonitorLogAzureOptions `json:"azure,omitempty"` +} + +func (in *MonitorLogOptions) Attributes() *console.MonitorLogOptionsAttributes { + if in == nil { + return nil + } + + var azure *console.MonitorLogAzureOptionsAttributes + if in.Azure != nil { + azure = &console.MonitorLogAzureOptionsAttributes{ResourceID: in.Azure.ResourceID} + } + + return &console.MonitorLogOptionsAttributes{Azure: azure} +} + +// MonitorLogAzureOptions are Azure-specific log query options. +type MonitorLogAzureOptions struct { + // ResourceID is the Azure resource ID to query logs for. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type:=string + ResourceID *string `json:"resourceId,omitempty"` +} + +// MonitorMetricsQuery is the metrics query configuration for a monitor. +type MonitorMetricsQuery struct { + // Tool is the named workbench metrics tool. When omitted, the native Plural metrics provider is used. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type:=string + Tool *string `json:"tool,omitempty"` + + // Query is the metrics query string passed through to the underlying metrics provider. + // +kubebuilder:validation:Required + // +kubebuilder:validation:Type:=string + // +kubebuilder:validation:MinLength=1 + Query string `json:"query"` + + // Step is the metrics query step (e.g. 5m). + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type:=string + // +kubebuilder:validation:Pattern=`^[0-9]+[dmhs]$` + Step *string `json:"step,omitempty"` + + // Duration is the lookback duration for the metrics query (e.g. 1h). + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type:=string + // +kubebuilder:validation:Pattern=`^[0-9]+[dmhs]$` + Duration *string `json:"duration,omitempty"` + + // Options are provider-specific metrics query options. + // +kubebuilder:validation:Optional + Options *MonitorMetricsOptions `json:"options,omitempty"` +} + +func (in *MonitorMetricsQuery) Attributes() *console.MonitorMetricsQueryAttributes { + if in == nil { + return nil + } + + return &console.MonitorMetricsQueryAttributes{ + Tool: in.Tool, + Query: in.Query, + Step: in.Step, + Duration: in.Duration, + Options: in.Options.Attributes(), + } +} + +// MonitorMetricsOptions are provider-specific metrics query options. +type MonitorMetricsOptions struct { + // Azure metrics query options. + // +kubebuilder:validation:Optional + Azure *MonitorMetricsAzureOptions `json:"azure,omitempty"` +} + +func (in *MonitorMetricsOptions) Attributes() *console.MonitorMetricsOptionsAttributes { + if in == nil { + return nil + } + + var azure *console.MonitorMetricsAzureOptionsAttributes + if in.Azure != nil { + azure = &console.MonitorMetricsAzureOptionsAttributes{ + ResourceID: in.Azure.ResourceID, + MetricsNamespace: in.Azure.MetricsNamespace, + Aggregation: in.Azure.Aggregation, + Filter: in.Azure.Filter, + OrderBy: in.Azure.OrderBy, + RollUpBy: in.Azure.RollUpBy, + MetricsEndpoint: in.Azure.MetricsEndpoint, + } + } + + return &console.MonitorMetricsOptionsAttributes{Azure: azure} +} + +// MonitorMetricsAzureOptions are Azure-specific metrics query options. +type MonitorMetricsAzureOptions struct { + // ResourceID is the Azure resource ID to query metrics for. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type:=string + ResourceID *string `json:"resourceId,omitempty"` + + // MetricsNamespace is the Azure metrics namespace. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type:=string + MetricsNamespace *string `json:"metricsNamespace,omitempty"` + + // Aggregation is the Azure metrics aggregation type. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type:=string + Aggregation *string `json:"aggregation,omitempty"` + + // Filter is the Azure metrics filter expression. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type:=string + Filter *string `json:"filter,omitempty"` + + // OrderBy is the Azure metrics ordering expression. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type:=string + OrderBy *string `json:"orderBy,omitempty"` + + // RollUpBy is the Azure metrics dimension to roll up by. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type:=string + RollUpBy *string `json:"rollUpBy,omitempty"` + + // MetricsEndpoint is the Azure metrics endpoint override. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type:=string + MetricsEndpoint *string `json:"metricsEndpoint,omitempty"` +} diff --git a/go/controller/api/v1alpha1/workbenchjobmodes_types.go b/go/controller/api/v1alpha1/workbenchjobmodes_types.go new file mode 100644 index 0000000000..463e034cae --- /dev/null +++ b/go/controller/api/v1alpha1/workbenchjobmodes_types.go @@ -0,0 +1,186 @@ +/* +Copyright 2023. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + "fmt" + "strconv" + + "github.com/samber/lo" + + console "github.com/pluralsh/console/go/client" +) + +// WorkbenchJobModes defines mode-specific options for workbench jobs. +type WorkbenchJobModes struct { + // Plan enables planning mode for the job. + // +kubebuilder:validation:Optional + Plan *bool `json:"plan,omitempty"` + + // Verification enables verification mode for the job. + // +kubebuilder:validation:Optional + Verification *bool `json:"verification,omitempty"` + + // Model overrides the AI model used for the job. + // +kubebuilder:validation:Optional + Model *WorkbenchJobModel `json:"model,omitempty"` + + // Coding defines coding mode options for the job. + // +kubebuilder:validation:Optional + Coding *WorkbenchJobCodingModes `json:"coding,omitempty"` + + // Budget defines budget limits for the job. + // +kubebuilder:validation:Optional + Budget *WorkbenchJobBudget `json:"budget,omitempty"` + + // Kubernetes defines kubernetes action options for the job. + // +kubebuilder:validation:Optional + Kubernetes *WorkbenchJobKubernetesModes `json:"kubernetes,omitempty"` +} + +func (in *WorkbenchJobModes) Attributes() (*console.WorkbenchJobModesAttributes, error) { + if in == nil { + return nil, nil + } + + budget, err := in.Budget.Attributes() + if err != nil { + return nil, err + } + + attrs := &console.WorkbenchJobModesAttributes{ + Plan: in.Plan, + Verification: in.Verification, + Budget: budget, + } + + if in.Model != nil { + attrs.Model = &console.WorkbenchJobModelAttributes{ + Provider: in.Model.Provider, + Model: in.Model.Model, + } + } + + if in.Coding != nil { + attrs.Coding = &console.WorkbenchJobCodingModesAttributes{ + Babysit: in.Coding.Babysit, + Approval: in.Coding.Approval, + Review: in.Coding.Review, + } + } + + if in.Kubernetes != nil { + attrs.Kubernetes = &console.WorkbenchJobKubernetesModesAttributes{ + Update: in.Kubernetes.Update, + Delete: in.Kubernetes.Delete, + Exec: in.Kubernetes.Exec, + Drain: in.Kubernetes.Drain, + ExcludeNamespaces: lo.ToSlicePtr(in.Kubernetes.ExcludeNamespaces), + RequireNamespaces: lo.ToSlicePtr(in.Kubernetes.RequireNamespaces), + } + } + + return attrs, nil +} + +// WorkbenchJobModel defines the AI model override for a workbench job. +type WorkbenchJobModel struct { + // Provider is the AI provider for the job. + // +kubebuilder:validation:Required + // +kubebuilder:validation:Enum=OPENAI;ANTHROPIC;OLLAMA;AZURE;BEDROCK;VERTEX;OPENAI_COMPATIBLE;XAI + Provider console.AiProvider `json:"provider"` + + // Model is the model name for the job. + // +kubebuilder:validation:Required + // +kubebuilder:validation:Type:=string + // +kubebuilder:validation:MinLength=1 + Model string `json:"model"` +} + +// WorkbenchJobCodingModes defines coding mode options for a workbench job. +type WorkbenchJobCodingModes struct { + // Babysit enables babysit mode for coding agent runs. + // +kubebuilder:validation:Optional + Babysit *bool `json:"babysit,omitempty"` + + // Approval requires approval before coding agent runs continue. + // +kubebuilder:validation:Optional + Approval *bool `json:"approval,omitempty"` + + // Review enables pull request review mode for coding agent runs. + // +kubebuilder:validation:Optional + Review *bool `json:"review,omitempty"` +} + +// WorkbenchJobBudget defines budget limits for a workbench job. +type WorkbenchJobBudget struct { + // Cost is the maximum cost budget for the job. + // It is a string to allow decimal values (e.g. "12.5"). + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type:=string + // +kubebuilder:validation:Pattern=`^[0-9]+(\.[0-9]+)?$` + Cost *string `json:"cost,omitempty"` + + // Tokens is the maximum token budget for the job. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Minimum=0 + Tokens *int64 `json:"tokens,omitempty"` +} + +func (in *WorkbenchJobBudget) Attributes() (*console.WorkbenchJobBudgetAttributes, error) { + if in == nil { + return nil, nil + } + + attrs := &console.WorkbenchJobBudgetAttributes{Tokens: in.Tokens} + if in.Cost != nil { + cost, err := strconv.ParseFloat(*in.Cost, 64) + if err != nil { + return nil, fmt.Errorf("invalid budget cost %q: %w", *in.Cost, err) + } + attrs.Cost = &cost + } + + return attrs, nil +} + +// WorkbenchJobKubernetesModes defines kubernetes action options for a workbench job. +type WorkbenchJobKubernetesModes struct { + // Update enables kubernetes update actions. + // +kubebuilder:validation:Optional + Update *bool `json:"update,omitempty"` + + // Delete enables kubernetes delete actions. + // +kubebuilder:validation:Optional + Delete *bool `json:"delete,omitempty"` + + // Exec enables kubernetes exec actions. + // +kubebuilder:validation:Optional + Exec *bool `json:"exec,omitempty"` + + // Drain enables kubernetes node drain actions. + // +kubebuilder:validation:Optional + Drain *bool `json:"drain,omitempty"` + + // ExcludeNamespaces are namespaces the agent can never act in. + // +kubebuilder:validation:Optional + ExcludeNamespaces []string `json:"excludeNamespaces,omitempty"` + + // RequireNamespaces, if set, are the only namespaces the agent is allowed to act in. + // +kubebuilder:validation:Optional + RequireNamespaces []string `json:"requireNamespaces,omitempty"` +} diff --git a/go/controller/api/v1alpha1/zz_generated.deepcopy.go b/go/controller/api/v1alpha1/zz_generated.deepcopy.go index 39209fc158..d95bfa3d79 100644 --- a/go/controller/api/v1alpha1/zz_generated.deepcopy.go +++ b/go/controller/api/v1alpha1/zz_generated.deepcopy.go @@ -2536,6 +2536,232 @@ func (in *CustomStackRunSpec) DeepCopy() *CustomStackRunSpec { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Dashboard) DeepCopyInto(out *Dashboard) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Dashboard. +func (in *Dashboard) DeepCopy() *Dashboard { + if in == nil { + return nil + } + out := new(Dashboard) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Dashboard) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DashboardDatasource) DeepCopyInto(out *DashboardDatasource) { + *out = *in + in.Input.DeepCopyInto(&out.Input) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DashboardDatasource. +func (in *DashboardDatasource) DeepCopy() *DashboardDatasource { + if in == nil { + return nil + } + out := new(DashboardDatasource) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DashboardGraph) DeepCopyInto(out *DashboardGraph) { + *out = *in + if in.Title != nil { + in, out := &in.Title, &out.Title + *out = new(string) + **out = **in + } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.SectionID != nil { + in, out := &in.SectionID, &out.SectionID + *out = new(string) + **out = **in + } + if in.Markdown != nil { + in, out := &in.Markdown, &out.Markdown + *out = new(string) + **out = **in + } + if in.Options != nil { + in, out := &in.Options, &out.Options + *out = new(runtime.RawExtension) + (*in).DeepCopyInto(*out) + } + out.Layout = in.Layout + if in.Datasource != nil { + in, out := &in.Datasource, &out.Datasource + *out = new(DashboardDatasource) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DashboardGraph. +func (in *DashboardGraph) DeepCopy() *DashboardGraph { + if in == nil { + return nil + } + out := new(DashboardGraph) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DashboardGraphLayout) DeepCopyInto(out *DashboardGraphLayout) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DashboardGraphLayout. +func (in *DashboardGraphLayout) DeepCopy() *DashboardGraphLayout { + if in == nil { + return nil + } + out := new(DashboardGraphLayout) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DashboardInput) DeepCopyInto(out *DashboardInput) { + *out = *in + if in.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.Default != nil { + in, out := &in.Default, &out.Default + *out = new(string) + **out = **in + } + if in.Options != nil { + in, out := &in.Options, &out.Options + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Required != nil { + in, out := &in.Required, &out.Required + *out = new(bool) + **out = **in + } + if in.Datasource != nil { + in, out := &in.Datasource, &out.Datasource + *out = new(DashboardDatasource) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DashboardInput. +func (in *DashboardInput) DeepCopy() *DashboardInput { + if in == nil { + return nil + } + out := new(DashboardInput) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DashboardList) DeepCopyInto(out *DashboardList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Dashboard, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DashboardList. +func (in *DashboardList) DeepCopy() *DashboardList { + if in == nil { + return nil + } + out := new(DashboardList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DashboardList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DashboardSpec) DeepCopyInto(out *DashboardSpec) { + *out = *in + out.WorkbenchRef = in.WorkbenchRef + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.Graphs != nil { + in, out := &in.Graphs, &out.Graphs + *out = make([]DashboardGraph, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Inputs != nil { + in, out := &in.Inputs, &out.Inputs + *out = make([]DashboardInput, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Reconciliation != nil { + in, out := &in.Reconciliation, &out.Reconciliation + *out = new(Reconciliation) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DashboardSpec. +func (in *DashboardSpec) DeepCopy() *DashboardSpec { + if in == nil { + return nil + } + out := new(DashboardSpec) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DeploymentSettings) DeepCopyInto(out *DeploymentSettings) { *out = *in @@ -4515,156 +4741,517 @@ func (in *ManagedNamespace) DeepCopyObject() runtime.Object { if c := in.DeepCopy(); c != nil { return c } - return nil + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ManagedNamespaceList) DeepCopyInto(out *ManagedNamespaceList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ManagedNamespace, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ManagedNamespaceList. +func (in *ManagedNamespaceList) DeepCopy() *ManagedNamespaceList { + if in == nil { + return nil + } + out := new(ManagedNamespaceList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ManagedNamespaceList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ManagedNamespaceSpec) DeepCopyInto(out *ManagedNamespaceSpec) { + *out = *in + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.Cascade != nil { + in, out := &in.Cascade, &out.Cascade + *out = new(Cascade) + (*in).DeepCopyInto(*out) + } + if in.Labels != nil { + in, out := &in.Labels, &out.Labels + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Annotations != nil { + in, out := &in.Annotations, &out.Annotations + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.PullSecrets != nil { + in, out := &in.PullSecrets, &out.PullSecrets + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Service != nil { + in, out := &in.Service, &out.Service + *out = new(ServiceTemplate) + (*in).DeepCopyInto(*out) + } + if in.Target != nil { + in, out := &in.Target, &out.Target + *out = new(ClusterTarget) + (*in).DeepCopyInto(*out) + } + if in.ProjectRef != nil { + in, out := &in.ProjectRef, &out.ProjectRef + *out = new(v1.ObjectReference) + **out = **in + } + if in.Reconciliation != nil { + in, out := &in.Reconciliation, &out.Reconciliation + *out = new(Reconciliation) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ManagedNamespaceSpec. +func (in *ManagedNamespaceSpec) DeepCopy() *ManagedNamespaceSpec { + if in == nil { + return nil + } + out := new(ManagedNamespaceSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MetadataTemplate) DeepCopyInto(out *MetadataTemplate) { + *out = *in + if in.Namespace != nil { + in, out := &in.Namespace, &out.Namespace + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MetadataTemplate. +func (in *MetadataTemplate) DeepCopy() *MetadataTemplate { + if in == nil { + return nil + } + out := new(MetadataTemplate) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MetricsSettings) DeepCopyInto(out *MetricsSettings) { + *out = *in + if in.Enabled != nil { + in, out := &in.Enabled, &out.Enabled + *out = new(bool) + **out = **in + } + if in.Endpoint != nil { + in, out := &in.Endpoint, &out.Endpoint + *out = new(string) + **out = **in + } + if in.Crontab != nil { + in, out := &in.Crontab, &out.Crontab + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MetricsSettings. +func (in *MetricsSettings) DeepCopy() *MetricsSettings { + if in == nil { + return nil + } + out := new(MetricsSettings) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Monitor) DeepCopyInto(out *Monitor) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Monitor. +func (in *Monitor) DeepCopy() *Monitor { + if in == nil { + return nil + } + out := new(Monitor) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Monitor) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MonitorFacet) DeepCopyInto(out *MonitorFacet) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MonitorFacet. +func (in *MonitorFacet) DeepCopy() *MonitorFacet { + if in == nil { + return nil + } + out := new(MonitorFacet) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MonitorList) DeepCopyInto(out *MonitorList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Monitor, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MonitorList. +func (in *MonitorList) DeepCopy() *MonitorList { + if in == nil { + return nil + } + out := new(MonitorList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *MonitorList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MonitorLogAzureOptions) DeepCopyInto(out *MonitorLogAzureOptions) { + *out = *in + if in.ResourceID != nil { + in, out := &in.ResourceID, &out.ResourceID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MonitorLogAzureOptions. +func (in *MonitorLogAzureOptions) DeepCopy() *MonitorLogAzureOptions { + if in == nil { + return nil + } + out := new(MonitorLogAzureOptions) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MonitorLogOptions) DeepCopyInto(out *MonitorLogOptions) { + *out = *in + if in.Azure != nil { + in, out := &in.Azure, &out.Azure + *out = new(MonitorLogAzureOptions) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MonitorLogOptions. +func (in *MonitorLogOptions) DeepCopy() *MonitorLogOptions { + if in == nil { + return nil + } + out := new(MonitorLogOptions) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MonitorLogQuery) DeepCopyInto(out *MonitorLogQuery) { + *out = *in + if in.Tool != nil { + in, out := &in.Tool, &out.Tool + *out = new(string) + **out = **in + } + if in.Duration != nil { + in, out := &in.Duration, &out.Duration + *out = new(string) + **out = **in + } + if in.Operator != nil { + in, out := &in.Operator, &out.Operator + *out = new(client.MonitorOperator) + **out = **in + } + if in.Facets != nil { + in, out := &in.Facets, &out.Facets + *out = make([]MonitorFacet, len(*in)) + copy(*out, *in) + } + if in.Options != nil { + in, out := &in.Options, &out.Options + *out = new(MonitorLogOptions) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MonitorLogQuery. +func (in *MonitorLogQuery) DeepCopy() *MonitorLogQuery { + if in == nil { + return nil + } + out := new(MonitorLogQuery) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MonitorMetricsAzureOptions) DeepCopyInto(out *MonitorMetricsAzureOptions) { + *out = *in + if in.ResourceID != nil { + in, out := &in.ResourceID, &out.ResourceID + *out = new(string) + **out = **in + } + if in.MetricsNamespace != nil { + in, out := &in.MetricsNamespace, &out.MetricsNamespace + *out = new(string) + **out = **in + } + if in.Aggregation != nil { + in, out := &in.Aggregation, &out.Aggregation + *out = new(string) + **out = **in + } + if in.Filter != nil { + in, out := &in.Filter, &out.Filter + *out = new(string) + **out = **in + } + if in.OrderBy != nil { + in, out := &in.OrderBy, &out.OrderBy + *out = new(string) + **out = **in + } + if in.RollUpBy != nil { + in, out := &in.RollUpBy, &out.RollUpBy + *out = new(string) + **out = **in + } + if in.MetricsEndpoint != nil { + in, out := &in.MetricsEndpoint, &out.MetricsEndpoint + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MonitorMetricsAzureOptions. +func (in *MonitorMetricsAzureOptions) DeepCopy() *MonitorMetricsAzureOptions { + if in == nil { + return nil + } + out := new(MonitorMetricsAzureOptions) + in.DeepCopyInto(out) + return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ManagedNamespaceList) DeepCopyInto(out *ManagedNamespaceList) { +func (in *MonitorMetricsOptions) DeepCopyInto(out *MonitorMetricsOptions) { *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]ManagedNamespace, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } + if in.Azure != nil { + in, out := &in.Azure, &out.Azure + *out = new(MonitorMetricsAzureOptions) + (*in).DeepCopyInto(*out) } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ManagedNamespaceList. -func (in *ManagedNamespaceList) DeepCopy() *ManagedNamespaceList { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MonitorMetricsOptions. +func (in *MonitorMetricsOptions) DeepCopy() *MonitorMetricsOptions { if in == nil { return nil } - out := new(ManagedNamespaceList) + out := new(MonitorMetricsOptions) in.DeepCopyInto(out) return out } -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ManagedNamespaceList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ManagedNamespaceSpec) DeepCopyInto(out *ManagedNamespaceSpec) { +func (in *MonitorMetricsQuery) DeepCopyInto(out *MonitorMetricsQuery) { *out = *in - if in.Name != nil { - in, out := &in.Name, &out.Name + if in.Tool != nil { + in, out := &in.Tool, &out.Tool *out = new(string) **out = **in } - if in.Description != nil { - in, out := &in.Description, &out.Description + if in.Step != nil { + in, out := &in.Step, &out.Step *out = new(string) **out = **in } - if in.Cascade != nil { - in, out := &in.Cascade, &out.Cascade - *out = new(Cascade) - (*in).DeepCopyInto(*out) - } - if in.Labels != nil { - in, out := &in.Labels, &out.Labels - *out = make(map[string]string, len(*in)) - for key, val := range *in { - (*out)[key] = val - } - } - if in.Annotations != nil { - in, out := &in.Annotations, &out.Annotations - *out = make(map[string]string, len(*in)) - for key, val := range *in { - (*out)[key] = val - } - } - if in.PullSecrets != nil { - in, out := &in.PullSecrets, &out.PullSecrets - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.Service != nil { - in, out := &in.Service, &out.Service - *out = new(ServiceTemplate) - (*in).DeepCopyInto(*out) - } - if in.Target != nil { - in, out := &in.Target, &out.Target - *out = new(ClusterTarget) - (*in).DeepCopyInto(*out) - } - if in.ProjectRef != nil { - in, out := &in.ProjectRef, &out.ProjectRef - *out = new(v1.ObjectReference) + if in.Duration != nil { + in, out := &in.Duration, &out.Duration + *out = new(string) **out = **in } - if in.Reconciliation != nil { - in, out := &in.Reconciliation, &out.Reconciliation - *out = new(Reconciliation) + if in.Options != nil { + in, out := &in.Options, &out.Options + *out = new(MonitorMetricsOptions) (*in).DeepCopyInto(*out) } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ManagedNamespaceSpec. -func (in *ManagedNamespaceSpec) DeepCopy() *ManagedNamespaceSpec { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MonitorMetricsQuery. +func (in *MonitorMetricsQuery) DeepCopy() *MonitorMetricsQuery { if in == nil { return nil } - out := new(ManagedNamespaceSpec) + out := new(MonitorMetricsQuery) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MetadataTemplate) DeepCopyInto(out *MetadataTemplate) { +func (in *MonitorQuery) DeepCopyInto(out *MonitorQuery) { *out = *in - if in.Namespace != nil { - in, out := &in.Namespace, &out.Namespace - *out = new(string) - **out = **in + if in.Log != nil { + in, out := &in.Log, &out.Log + *out = new(MonitorLogQuery) + (*in).DeepCopyInto(*out) + } + if in.Metrics != nil { + in, out := &in.Metrics, &out.Metrics + *out = new(MonitorMetricsQuery) + (*in).DeepCopyInto(*out) } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MetadataTemplate. -func (in *MetadataTemplate) DeepCopy() *MetadataTemplate { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MonitorQuery. +func (in *MonitorQuery) DeepCopy() *MonitorQuery { if in == nil { return nil } - out := new(MetadataTemplate) + out := new(MonitorQuery) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MetricsSettings) DeepCopyInto(out *MetricsSettings) { +func (in *MonitorSpec) DeepCopyInto(out *MonitorSpec) { *out = *in - if in.Enabled != nil { - in, out := &in.Enabled, &out.Enabled - *out = new(bool) + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) **out = **in } - if in.Endpoint != nil { - in, out := &in.Endpoint, &out.Endpoint + if in.ServiceRef != nil { + in, out := &in.ServiceRef, &out.ServiceRef + *out = new(v1.LocalObjectReference) + **out = **in + } + if in.Service != nil { + in, out := &in.Service, &out.Service *out = new(string) **out = **in } - if in.Crontab != nil { - in, out := &in.Crontab, &out.Crontab + if in.WorkbenchRef != nil { + in, out := &in.WorkbenchRef, &out.WorkbenchRef + *out = new(v1.LocalObjectReference) + **out = **in + } + if in.Prompt != nil { + in, out := &in.Prompt, &out.Prompt + *out = new(string) + **out = **in + } + if in.Modes != nil { + in, out := &in.Modes, &out.Modes + *out = new(WorkbenchJobModes) + (*in).DeepCopyInto(*out) + } + if in.Description != nil { + in, out := &in.Description, &out.Description *out = new(string) **out = **in } + if in.AlertTemplate != nil { + in, out := &in.AlertTemplate, &out.AlertTemplate + *out = new(string) + **out = **in + } + in.Query.DeepCopyInto(&out.Query) + out.Threshold = in.Threshold + if in.Reconciliation != nil { + in, out := &in.Reconciliation, &out.Reconciliation + *out = new(Reconciliation) + (*in).DeepCopyInto(*out) + } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MetricsSettings. -func (in *MetricsSettings) DeepCopy() *MetricsSettings { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MonitorSpec. +func (in *MonitorSpec) DeepCopy() *MonitorSpec { if in == nil { return nil } - out := new(MetricsSettings) + out := new(MonitorSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MonitorThreshold) DeepCopyInto(out *MonitorThreshold) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MonitorThreshold. +func (in *MonitorThreshold) DeepCopy() *MonitorThreshold { + if in == nil { + return nil + } + out := new(MonitorThreshold) in.DeepCopyInto(out) return out } @@ -10871,6 +11458,166 @@ func (in *WorkbenchInfrastructureConfig) DeepCopy() *WorkbenchInfrastructureConf return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *WorkbenchJobBudget) DeepCopyInto(out *WorkbenchJobBudget) { + *out = *in + if in.Cost != nil { + in, out := &in.Cost, &out.Cost + *out = new(string) + **out = **in + } + if in.Tokens != nil { + in, out := &in.Tokens, &out.Tokens + *out = new(int64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkbenchJobBudget. +func (in *WorkbenchJobBudget) DeepCopy() *WorkbenchJobBudget { + if in == nil { + return nil + } + out := new(WorkbenchJobBudget) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *WorkbenchJobCodingModes) DeepCopyInto(out *WorkbenchJobCodingModes) { + *out = *in + if in.Babysit != nil { + in, out := &in.Babysit, &out.Babysit + *out = new(bool) + **out = **in + } + if in.Approval != nil { + in, out := &in.Approval, &out.Approval + *out = new(bool) + **out = **in + } + if in.Review != nil { + in, out := &in.Review, &out.Review + *out = new(bool) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkbenchJobCodingModes. +func (in *WorkbenchJobCodingModes) DeepCopy() *WorkbenchJobCodingModes { + if in == nil { + return nil + } + out := new(WorkbenchJobCodingModes) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *WorkbenchJobKubernetesModes) DeepCopyInto(out *WorkbenchJobKubernetesModes) { + *out = *in + if in.Update != nil { + in, out := &in.Update, &out.Update + *out = new(bool) + **out = **in + } + if in.Delete != nil { + in, out := &in.Delete, &out.Delete + *out = new(bool) + **out = **in + } + if in.Exec != nil { + in, out := &in.Exec, &out.Exec + *out = new(bool) + **out = **in + } + if in.Drain != nil { + in, out := &in.Drain, &out.Drain + *out = new(bool) + **out = **in + } + if in.ExcludeNamespaces != nil { + in, out := &in.ExcludeNamespaces, &out.ExcludeNamespaces + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.RequireNamespaces != nil { + in, out := &in.RequireNamespaces, &out.RequireNamespaces + *out = make([]string, len(*in)) + copy(*out, *in) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkbenchJobKubernetesModes. +func (in *WorkbenchJobKubernetesModes) DeepCopy() *WorkbenchJobKubernetesModes { + if in == nil { + return nil + } + out := new(WorkbenchJobKubernetesModes) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *WorkbenchJobModel) DeepCopyInto(out *WorkbenchJobModel) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkbenchJobModel. +func (in *WorkbenchJobModel) DeepCopy() *WorkbenchJobModel { + if in == nil { + return nil + } + out := new(WorkbenchJobModel) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *WorkbenchJobModes) DeepCopyInto(out *WorkbenchJobModes) { + *out = *in + if in.Plan != nil { + in, out := &in.Plan, &out.Plan + *out = new(bool) + **out = **in + } + if in.Verification != nil { + in, out := &in.Verification, &out.Verification + *out = new(bool) + **out = **in + } + if in.Model != nil { + in, out := &in.Model, &out.Model + *out = new(WorkbenchJobModel) + **out = **in + } + if in.Coding != nil { + in, out := &in.Coding, &out.Coding + *out = new(WorkbenchJobCodingModes) + (*in).DeepCopyInto(*out) + } + if in.Budget != nil { + in, out := &in.Budget, &out.Budget + *out = new(WorkbenchJobBudget) + (*in).DeepCopyInto(*out) + } + if in.Kubernetes != nil { + in, out := &in.Kubernetes, &out.Kubernetes + *out = new(WorkbenchJobKubernetesModes) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkbenchJobModes. +func (in *WorkbenchJobModes) DeepCopy() *WorkbenchJobModes { + if in == nil { + return nil + } + out := new(WorkbenchJobModes) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *WorkbenchList) DeepCopyInto(out *WorkbenchList) { *out = *in diff --git a/go/controller/cmd/register.go b/go/controller/cmd/register.go index 4b9f6045bd..a6de2ae958 100644 --- a/go/controller/cmd/register.go +++ b/go/controller/cmd/register.go @@ -535,4 +535,24 @@ func init() { Scheme: mgr.GetScheme(), } }) + + types.RegisterController(types.MonitorReconciler, func(mgr ctrl.Manager, consoleClient client.ConsoleClient, + credentialsCache credentials.NamespaceCredentialsCache) types.Controller { + return &controller.MonitorReconciler{ + Client: mgr.GetClient(), + ConsoleClient: consoleClient, + Scheme: mgr.GetScheme(), + CredentialsCache: credentialsCache, + } + }) + + types.RegisterController(types.DashboardReconciler, func(mgr ctrl.Manager, consoleClient client.ConsoleClient, + credentialsCache credentials.NamespaceCredentialsCache) types.Controller { + return &controller.DashboardReconciler{ + Client: mgr.GetClient(), + ConsoleClient: consoleClient, + Scheme: mgr.GetScheme(), + CredentialsCache: credentialsCache, + } + }) } diff --git a/go/controller/config/crd/bases/deployments.plural.sh_dashboards.yaml b/go/controller/config/crd/bases/deployments.plural.sh_dashboards.yaml new file mode 100644 index 0000000000..3ccebf4055 --- /dev/null +++ b/go/controller/config/crd/bases/deployments.plural.sh_dashboards.yaml @@ -0,0 +1,389 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.19.0 + name: dashboards.deployments.plural.sh +spec: + group: deployments.plural.sh + names: + kind: Dashboard + listKind: DashboardList + plural: dashboards + singular: dashboard + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: ID of the Dashboard in the Console API. + jsonPath: .status.id + name: ID + type: string + - description: Whether the Dashboard is ready. + jsonPath: .status.conditions[?(@.type=="Ready")].status + name: READY + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + description: |- + Dashboard represents an observability dashboard owned by a Workbench. It consists of graphs + arranged on a grid, each backed by an observability tool datasource, and optional user-configurable inputs. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: Spec defines the desired state of the Dashboard. + properties: + description: + description: Description is an optional dashboard description. + type: string + graphs: + description: |- + Graphs arranged on the dashboard grid. Graph identifiers must be unique within the dashboard. + Graphs can be grouped by setting sectionId to the identifier of a SECTION graph. + Note that overlapping graph layouts are only validated by the Console API. + items: + description: DashboardGraph is a single graph placed on the dashboard + grid. + properties: + datasource: + description: Datasource is the tool call used to fetch external + data. + properties: + input: + description: Input is passed to the observability tool. + type: object + x-kubernetes-preserve-unknown-fields: true + tool: + description: Tool is the name of the observability tool + used to fetch the data. + minLength: 1 + type: string + type: + description: Type is the kind of data returned by the datasource. + enum: + - LOGS + - METRICS + - TRACES + - LABELS + type: string + required: + - input + - tool + - type + type: object + description: + description: Description is an optional graph description. + type: string + identifier: + description: Identifier is a stable identifier unique within + the dashboard. + maxLength: 128 + minLength: 1 + type: string + layout: + description: Layout is the grid position and size of the graph. + properties: + h: + description: H is the height in grid rows. + format: int64 + minimum: 1 + type: integer + w: + description: W is the width in grid columns. + format: int64 + minimum: 1 + type: integer + x: + description: X is the zero-based horizontal grid coordinate. + format: int64 + minimum: 0 + type: integer + "y": + description: Y is the zero-based vertical grid coordinate. + format: int64 + minimum: 0 + type: integer + required: + - h + - w + - x + - "y" + type: object + markdown: + description: Markdown is the content for MARKDOWN graphs. + type: string + options: + description: Options are visualization-specific display options. + Sections may set collapsed. + type: object + x-kubernetes-preserve-unknown-fields: true + sectionId: + description: SectionID is the identifier of the SECTION graph + containing this graph. Sections cannot be nested. + maxLength: 128 + type: string + title: + description: Title is the graph title. + type: string + type: + description: Type is the graph visualization type. + enum: + - TIMESERIES + - GAUGE + - LOGS + - MARKDOWN + - TABLE + - STAT + - BAR + - PIE + - HEATMAP + - TRACES + - SECTION + maxLength: 16 + type: string + required: + - identifier + - layout + - type + type: object + x-kubernetes-validations: + - message: markdown must be set for MARKDOWN graphs + rule: self.type != 'MARKDOWN' || has(self.markdown) + - message: sections cannot be nested, SECTION graphs cannot set + sectionId + rule: self.type != 'SECTION' || !has(self.sectionId) || size(self.sectionId) + == 0 + maxItems: 200 + type: array + x-kubernetes-list-map-keys: + - identifier + x-kubernetes-list-type: map + inputs: + description: Inputs are user-configurable dashboard variables. + items: + description: DashboardInput is a user-configurable dashboard variable. + properties: + datasource: + description: Datasource is the tool query used to populate input + options, such as metric label search. + properties: + input: + description: Input is passed to the observability tool. + type: object + x-kubernetes-preserve-unknown-fields: true + tool: + description: Tool is the name of the observability tool + used to fetch the data. + minLength: 1 + type: string + type: + description: Type is the kind of data returned by the datasource. + enum: + - LOGS + - METRICS + - TRACES + - LABELS + type: string + required: + - input + - tool + - type + type: object + default: + description: Default is the default input value. + type: string + description: + description: Description is an optional input description. + type: string + label: + description: Label is a human-readable input label. + type: string + name: + description: Name is the variable name referenced by graph datasource + inputs. + minLength: 1 + type: string + options: + description: Options are the allowed values for select inputs. + items: + type: string + type: array + required: + description: Required defines whether a value is required when + rendering. + type: boolean + type: + description: Type is the input control type. + enum: + - TEXT + - NUMBER + - BOOLEAN + - SELECT + - MULTI_SELECT + - TIME_RANGE + type: string + required: + - name + - type + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + name: + description: |- + Name is the dashboard name, unique within its workbench. + If not set, metadata.name is used. + type: string + reconciliation: + description: Reconciliation settings for this resource. + properties: + driftDetection: + default: true + description: |- + DriftDetection enables drift detection for this resource. + It is destined to detect changes made to the related + resources that are not referenced with owner ref. + Use with Interval to set how often drift detection runs. + example: false + type: boolean + interval: + default: 30m + description: |- + Interval for the drift detection mechanism. + It is subject to jitter to avoid the thundering herd problem, + it is calculated as a random value between 50% and 150% of the given duration. + example: 5m30s + type: string + type: object + workbenchRef: + description: |- + WorkbenchRef references the Workbench that owns this dashboard. + The Workbench must be in the same namespace as the dashboard. + It is immutable, a dashboard cannot be moved to a different workbench. + properties: + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + type: object + x-kubernetes-map-type: atomic + x-kubernetes-validations: + - message: name is required + rule: has(self.name) && size(self.name) > 0 + - message: workbenchRef is immutable + rule: self == oldSelf + required: + - workbenchRef + type: object + x-kubernetes-validations: + - message: sectionId must reference an existing SECTION graph + rule: '!has(self.graphs) || self.graphs.all(g, !has(g.sectionId) || + size(g.sectionId) == 0 || self.graphs.exists(s, s.type == ''SECTION'' + && s.identifier == g.sectionId))' + status: + description: Status represents the current state of this resource. + properties: + conditions: + description: Represents the observations of a PrAutomation's current + state. + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + id: + description: ID of the resource in the Console API. + type: string + readonly: + default: false + description: ReadOnly indicates whether the resource is read-only. + type: boolean + sha: + description: SHA of last applied configuration. + type: string + required: + - readonly + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} diff --git a/go/controller/config/crd/bases/deployments.plural.sh_monitors.yaml b/go/controller/config/crd/bases/deployments.plural.sh_monitors.yaml new file mode 100644 index 0000000000..1d99e2c4bf --- /dev/null +++ b/go/controller/config/crd/bases/deployments.plural.sh_monitors.yaml @@ -0,0 +1,526 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.19.0 + name: monitors.deployments.plural.sh +spec: + group: deployments.plural.sh + names: + kind: Monitor + listKind: MonitorList + plural: monitors + singular: monitor + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: ID of the Monitor in the Console API. + jsonPath: .status.id + name: ID + type: string + - description: Monitor data type. + jsonPath: .spec.type + name: TYPE + type: string + - description: Severity of alerts generated by this Monitor. + jsonPath: .spec.severity + name: SEVERITY + type: string + - description: Whether the Monitor is ready. + jsonPath: .status.conditions[?(@.type=="Ready")].status + name: READY + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + description: |- + Monitor represents an observability monitor attached to a service deployment. It periodically + evaluates a log or metrics query against a threshold and fires alerts when it is crossed. + Optionally, it can be attached to a workbench to start an investigation when it fires. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: Spec defines the desired state of the Monitor. + properties: + alertTemplate: + description: AlertTemplate is an optional template used when rendering + alert messages for this monitor. + type: string + description: + description: Description is an optional free-form description of what + this monitor is checking. + type: string + evaluationCron: + description: |- + EvaluationCron is the cron schedule defining when the monitor is evaluated (e.g. */5 * * * *). + It must be a cron expression with 5 fields (or 6 with an optional year), separated by single spaces, + or one of the @yearly, @annually, @monthly, @weekly, @daily, @midnight, @hourly, @minutely, + @secondly or @reboot shortcuts. Field values are validated by the Console API. + minLength: 1 + pattern: ^(@(?i:yearly|annually|monthly|weekly|daily|midnight|hourly|minutely|secondly|reboot)|[^ + ]+( [^ ]+){4,5})$ + type: string + modes: + description: Modes defines mode-specific options for monitor-triggered + workbench jobs. + properties: + budget: + description: Budget defines budget limits for the job. + properties: + cost: + description: |- + Cost is the maximum cost budget for the job. + It is a string to allow decimal values (e.g. "12.5"). + pattern: ^[0-9]+(\.[0-9]+)?$ + type: string + tokens: + description: Tokens is the maximum token budget for the job. + format: int64 + minimum: 0 + type: integer + type: object + coding: + description: Coding defines coding mode options for the job. + properties: + approval: + description: Approval requires approval before coding agent + runs continue. + type: boolean + babysit: + description: Babysit enables babysit mode for coding agent + runs. + type: boolean + review: + description: Review enables pull request review mode for coding + agent runs. + type: boolean + type: object + kubernetes: + description: Kubernetes defines kubernetes action options for + the job. + properties: + delete: + description: Delete enables kubernetes delete actions. + type: boolean + drain: + description: Drain enables kubernetes node drain actions. + type: boolean + excludeNamespaces: + description: ExcludeNamespaces are namespaces the agent can + never act in. + items: + type: string + type: array + exec: + description: Exec enables kubernetes exec actions. + type: boolean + requireNamespaces: + description: RequireNamespaces, if set, are the only namespaces + the agent is allowed to act in. + items: + type: string + type: array + update: + description: Update enables kubernetes update actions. + type: boolean + type: object + model: + description: Model overrides the AI model used for the job. + properties: + model: + description: Model is the model name for the job. + minLength: 1 + type: string + provider: + description: Provider is the AI provider for the job. + enum: + - OPENAI + - ANTHROPIC + - OLLAMA + - AZURE + - BEDROCK + - VERTEX + - OPENAI_COMPATIBLE + - XAI + type: string + required: + - model + - provider + type: object + plan: + description: Plan enables planning mode for the job. + type: boolean + verification: + description: Verification enables verification mode for the job. + type: boolean + type: object + name: + description: |- + Name is the short name used to identify this monitor in the Console API. + If not set, metadata.name is used. + type: string + prompt: + description: Prompt is used when the monitor starts a workbench investigation. + maxLength: 2048 + type: string + query: + description: Query is the underlying query configuration used to fetch + data for this monitor. + properties: + log: + description: Log query used when the monitor type is LOG. + properties: + bucketSize: + description: BucketSize is the time bucket size (e.g. 5m) + used when aggregating log results. + pattern: ^[0-9]+[dmhs]$ + type: string + duration: + description: Duration is the lookback duration for the log + query (e.g. 1h, 10m, 30s). + pattern: ^[0-9]+[dmhs]$ + type: string + facets: + description: Facets are optional key/value facets applied + as additional filters on the log query. + items: + description: MonitorFacet is a key/value facet used to further + filter log queries. + properties: + key: + description: Key is the facet key (e.g. kubernetes namespace + or pod label name). + type: string + value: + description: Value is the facet value to match for the + given key. + type: string + required: + - key + - value + type: object + type: array + operator: + default: OR + description: |- + Operator to use when combining multiple log queries. + Defaults to OR, which is also the Console API default. + enum: + - OR + - AND + type: string + options: + description: Options are provider-specific log query options. + properties: + azure: + description: Azure log query options. + properties: + resourceId: + description: ResourceID is the Azure resource ID to + query logs for. + type: string + type: object + type: object + query: + description: Query is the log query string passed through + to the underlying log provider. + minLength: 1 + type: string + tool: + description: Tool is the named workbench logs tool. When omitted, + the native Plural logs provider is used. + type: string + required: + - bucketSize + - query + type: object + metrics: + description: Metrics query used when the monitor type is METRICS. + properties: + duration: + description: Duration is the lookback duration for the metrics + query (e.g. 1h). + pattern: ^[0-9]+[dmhs]$ + type: string + options: + description: Options are provider-specific metrics query options. + properties: + azure: + description: Azure metrics query options. + properties: + aggregation: + description: Aggregation is the Azure metrics aggregation + type. + type: string + filter: + description: Filter is the Azure metrics filter expression. + type: string + metricsEndpoint: + description: MetricsEndpoint is the Azure metrics + endpoint override. + type: string + metricsNamespace: + description: MetricsNamespace is the Azure metrics + namespace. + type: string + orderBy: + description: OrderBy is the Azure metrics ordering + expression. + type: string + resourceId: + description: ResourceID is the Azure resource ID to + query metrics for. + type: string + rollUpBy: + description: RollUpBy is the Azure metrics dimension + to roll up by. + type: string + type: object + type: object + query: + description: Query is the metrics query string passed through + to the underlying metrics provider. + minLength: 1 + type: string + step: + description: Step is the metrics query step (e.g. 5m). + pattern: ^[0-9]+[dmhs]$ + type: string + tool: + description: Tool is the named workbench metrics tool. When + omitted, the native Plural metrics provider is used. + type: string + required: + - query + type: object + type: object + x-kubernetes-validations: + - message: only one of log or metrics can be set + rule: '!(has(self.log) && has(self.metrics))' + reconciliation: + description: Reconciliation settings for this resource. + properties: + driftDetection: + default: true + description: |- + DriftDetection enables drift detection for this resource. + It is destined to detect changes made to the related + resources that are not referenced with owner ref. + Use with Interval to set how often drift detection runs. + example: false + type: boolean + interval: + default: 30m + description: |- + Interval for the drift detection mechanism. + It is subject to jitter to avoid the thundering herd problem, + it is calculated as a random value between 50% and 150% of the given duration. + example: 5m30s + type: string + type: object + service: + description: |- + Service references an existing service in the Console API this monitor is attached to, + in the format "cluster-handle/service-name" (e.g. mgmt/console). Use it to attach + a monitor to a service that is not managed by a ServiceDeployment resource. + Either ServiceRef or Service must be set. + example: mgmt/console + pattern: ^[^/]+/[^/]+$ + type: string + serviceRef: + description: |- + ServiceRef references the ServiceDeployment resource this monitor is attached to. + The ServiceDeployment must be in the same namespace as the monitor. + Either ServiceRef or Service must be set. + properties: + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + type: object + x-kubernetes-map-type: atomic + x-kubernetes-validations: + - message: name is required + rule: has(self.name) && size(self.name) > 0 + severity: + description: Severity is the severity level applied to alerts generated + by this monitor. + enum: + - LOW + - MEDIUM + - HIGH + - CRITICAL + - UNDEFINED + type: string + threshold: + description: Threshold is the configuration that determines when the + monitor should fire. + properties: + aggregate: + description: Aggregate is the aggregation function applied over + the result set. + enum: + - MAX + - MIN + - AVG + type: string + value: + description: |- + Value is the numeric value the aggregated metric must cross to trigger the alert. + It is a string to allow decimal values (e.g. "0.95"). + pattern: ^-?[0-9]+(\.[0-9]+)?$ + type: string + required: + - aggregate + - value + type: object + type: + description: Type is the monitor data type. + enum: + - LOG + - METRICS + type: string + workbenchRef: + description: |- + WorkbenchRef references the Workbench this monitor is attached to. + When set, the monitor can start a workbench investigation when it fires. + It is required if the query uses a named workbench tool. + The Workbench must be in the same namespace as the monitor. + properties: + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + type: object + x-kubernetes-map-type: atomic + x-kubernetes-validations: + - message: name is required + rule: has(self.name) && size(self.name) > 0 + required: + - evaluationCron + - query + - severity + - threshold + - type + type: object + x-kubernetes-validations: + - message: exactly one of serviceRef or service must be set + rule: has(self.serviceRef) != has(self.service) + - message: query.log must be set when type is LOG + rule: self.type != 'LOG' || has(self.query.log) + - message: query.metrics must be set when type is METRICS + rule: self.type != 'METRICS' || has(self.query.metrics) + - message: workbenchRef is required for tool-backed monitor queries + rule: has(self.workbenchRef) || !((has(self.query.log) && has(self.query.log.tool)) + || (has(self.query.metrics) && has(self.query.metrics.tool))) + status: + description: Status represents the current state of this resource. + properties: + conditions: + description: Represents the observations of a PrAutomation's current + state. + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + id: + description: ID of the resource in the Console API. + type: string + readonly: + default: false + description: ReadOnly indicates whether the resource is read-only. + type: boolean + sha: + description: SHA of last applied configuration. + type: string + required: + - readonly + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} diff --git a/go/controller/config/rbac/role.yaml b/go/controller/config/rbac/role.yaml index 6d7d5993b1..ae29df1313 100644 --- a/go/controller/config/rbac/role.yaml +++ b/go/controller/config/rbac/role.yaml @@ -39,6 +39,7 @@ rules: - complianceReportGenerators - customcompatibilitymatrices - customstackruns + - dashboards - deploymentsettings - federatedcredentials - flows @@ -50,6 +51,7 @@ rules: - infrastructurestacks - managednamespaces - mcpservers + - monitors - namespacecredentialss - notificationrouters - notificationsinks @@ -101,6 +103,7 @@ rules: - complianceReportGenerators/finalizers - customcompatibilitymatrices/finalizers - customstackruns/finalizers + - dashboards/finalizers - deploymentsettings/finalizers - federatedcredentials/finalizers - flows/finalizers @@ -112,6 +115,7 @@ rules: - infrastructurestacks/finalizers - managednamespaces/finalizers - mcpservers/finalizers + - monitors/finalizers - namespacecredentialss/finalizers - notificationrouters/finalizers - notificationsinks/finalizers @@ -157,6 +161,7 @@ rules: - complianceReportGenerators/status - customcompatibilitymatrices/status - customstackruns/status + - dashboards/status - deploymentsettings/status - federatedcredentials/status - flows/status @@ -168,6 +173,7 @@ rules: - infrastructurestacks/status - managednamespaces/status - mcpservers/status + - monitors/status - namespacecredentialss/status - notificationrouters/status - notificationsinks/status diff --git a/go/controller/config/samples/dashboard.yaml b/go/controller/config/samples/dashboard.yaml new file mode 100644 index 0000000000..9afa98b002 --- /dev/null +++ b/go/controller/config/samples/dashboard.yaml @@ -0,0 +1,96 @@ +# Self-contained Dashboard sample showing resource usage of the console running on the `mgmt` cluster. +# Graphs use the native Plural metrics tools (plrl_metrics, plrl_metric_label_search) that are available +# when the workbench has metrics observability enabled, so no additional workbench tools are needed. +# Variables defined in inputs are referenced in datasource inputs with ${name}. +apiVersion: deployments.plural.sh/v1alpha1 +kind: Workbench +metadata: + labels: + app.kubernetes.io/name: workbench + app.kubernetes.io/instance: workbench-monitoring-sample + app.kubernetes.io/part-of: controller + app.kubernetes.io/managed-by: kustomize + app.kubernetes.io/created-by: controller + name: workbench-monitoring-sample + namespace: default +spec: + name: workbench-monitoring-sample + description: Sample workbench used by Monitor and Dashboard samples + configuration: + observability: + logs: true + metrics: true +--- +apiVersion: deployments.plural.sh/v1alpha1 +kind: Dashboard +metadata: + labels: + app.kubernetes.io/name: dashboard + app.kubernetes.io/instance: dashboard-sample + app.kubernetes.io/part-of: controller + app.kubernetes.io/managed-by: kustomize + app.kubernetes.io/created-by: controller + name: dashboard-sample + namespace: default +spec: + workbenchRef: + name: workbench-monitoring-sample + name: console-overview + description: Resource usage of the console on the mgmt cluster + inputs: + - name: namespace + label: Namespace + description: Namespace the console is running in + type: TEXT + default: plrl-console + required: true + - name: pod + label: Pod + description: Filter graphs by console pod + type: SELECT + default: ".*" + required: false + datasource: + type: LABELS + tool: plrl_metric_label_search + input: + metric: container_cpu_usage_seconds_total + label: pod + query: console + graphs: + - identifier: overview + title: Overview + type: SECTION + layout: { x: 0, "y": 0, w: 12, h: 1 } + options: + collapsed: false + - identifier: notes + title: About + description: Dashboard description + type: MARKDOWN + sectionId: overview + markdown: | + ## Console overview + CPU and memory usage of the console pods in the `${namespace}` namespace. + layout: { x: 0, "y": 1, w: 4, h: 4 } + - identifier: cpu + title: CPU usage + description: CPU cores used by console pods + type: TIMESERIES + sectionId: overview + layout: { x: 4, "y": 1, w: 8, h: 4 } + datasource: + type: METRICS + tool: plrl_metrics + input: + query: sum by (pod) (rate(container_cpu_usage_seconds_total{namespace="${namespace}", pod=~"${pod}", container!=""}[5m])) + - identifier: memory + title: Memory usage + description: Working set memory of console pods + type: TIMESERIES + layout: { x: 0, "y": 5, w: 12, h: 4 } + datasource: + type: METRICS + tool: plrl_metrics + input: + query: sum by (pod) (container_memory_working_set_bytes{namespace="${namespace}", pod=~"${pod}", container!=""}) diff --git a/go/controller/config/samples/monitor.yaml b/go/controller/config/samples/monitor.yaml new file mode 100644 index 0000000000..7640bce2a5 --- /dev/null +++ b/go/controller/config/samples/monitor.yaml @@ -0,0 +1,98 @@ +# Self-contained Monitor samples targeting the existing `console` service on the `mgmt` cluster. +# Only resources defined in this file are created, the console service itself is referenced by its +# "cluster-handle/service-name" and is not managed by the operator. +apiVersion: deployments.plural.sh/v1alpha1 +kind: Workbench +metadata: + labels: + app.kubernetes.io/name: workbench + app.kubernetes.io/instance: workbench-monitoring-sample + app.kubernetes.io/part-of: controller + app.kubernetes.io/managed-by: kustomize + app.kubernetes.io/created-by: controller + name: workbench-monitoring-sample + namespace: default +spec: + name: workbench-monitoring-sample + description: Sample workbench used by Monitor and Dashboard samples + configuration: + observability: + logs: true + metrics: true +--- +# Log monitor using the native Plural logs provider. When it fires, it starts an investigation in the workbench. +apiVersion: deployments.plural.sh/v1alpha1 +kind: Monitor +metadata: + labels: + app.kubernetes.io/name: monitor + app.kubernetes.io/instance: monitor-log-sample + app.kubernetes.io/part-of: controller + app.kubernetes.io/managed-by: kustomize + app.kubernetes.io/created-by: controller + name: monitor-log-sample + namespace: default +spec: + name: console-error-logs + service: mgmt/console + workbenchRef: + name: workbench-monitoring-sample + description: Fires when the console logs contain too many errors + alertTemplate: "Monitor {{ monitor.name }} fired for service {{ monitor.service.name }} on cluster {{ monitor.service.cluster.handle }}" + severity: HIGH + type: LOG + evaluationCron: "*/5 * * * *" + prompt: Investigate the spike in console error logs and suggest a fix + modes: + plan: true + verification: false + budget: + cost: "5.0" + tokens: 200000 + kubernetes: + update: false + delete: false + exec: false + drain: false + excludeNamespaces: + - kube-system + query: + log: + query: error + bucketSize: 5m + duration: 30m + operator: OR + threshold: + aggregate: MAX + value: "100" +--- +# Metrics monitor using the native Plural metrics provider. When it fires, it starts an investigation in the workbench. +apiVersion: deployments.plural.sh/v1alpha1 +kind: Monitor +metadata: + labels: + app.kubernetes.io/name: monitor + app.kubernetes.io/instance: monitor-metrics-sample + app.kubernetes.io/part-of: controller + app.kubernetes.io/managed-by: kustomize + app.kubernetes.io/created-by: controller + name: monitor-metrics-sample + namespace: default +spec: + name: console-cpu-usage + service: mgmt/console + workbenchRef: + name: workbench-monitoring-sample + description: Fires when console CPU usage is above 2 cores on average + severity: MEDIUM + type: METRICS + evaluationCron: "*/10 * * * *" + prompt: Investigate the high console CPU usage and suggest a fix + query: + metrics: + query: sum(rate(container_cpu_usage_seconds_total{namespace="plrl-console", container!=""}[5m])) + step: 1m + duration: 1h + threshold: + aggregate: AVG + value: "2" diff --git a/go/controller/docs/api.md b/go/controller/docs/api.md index b2943e89d7..32e40604a7 100644 --- a/go/controller/docs/api.md +++ b/go/controller/docs/api.md @@ -21,6 +21,7 @@ Package v1alpha1 contains API Schema definitions for the deployments v1alpha1 AP - [ComplianceReportGenerator](#compliancereportgenerator) - [CustomCompatibilityMatrix](#customcompatibilitymatrix) - [CustomStackRun](#customstackrun) +- [Dashboard](#dashboard) - [DeploymentSettings](#deploymentsettings) - [FederatedCredential](#federatedcredential) - [Flow](#flow) @@ -32,6 +33,7 @@ Package v1alpha1 contains API Schema definitions for the deployments v1alpha1 AP - [InfrastructureStack](#infrastructurestack) - [MCPServer](#mcpserver) - [ManagedNamespace](#managednamespace) +- [Monitor](#monitor) - [NamespaceCredentials](#namespacecredentials) - [NotificationRouter](#notificationrouter) - [NotificationSink](#notificationsink) @@ -1455,6 +1457,131 @@ _Appears in:_ | `reconciliation` _[Reconciliation](#reconciliation)_ | Reconciliation settings for this resource.
Controls drift detection and reconciliation intervals. | | Optional: \{\}
| +#### Dashboard + + + +Dashboard represents an observability dashboard owned by a Workbench. It consists of graphs +arranged on a grid, each backed by an observability tool datasource, and optional user-configurable inputs. + + + + + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `apiVersion` _string_ | `deployments.plural.sh/v1alpha1` | | | +| `kind` _string_ | `Dashboard` | | | +| `metadata` _[ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#objectmeta-v1-meta)_ | Refer to Kubernetes API documentation for fields of `metadata`. | | | +| `spec` _[DashboardSpec](#dashboardspec)_ | Spec defines the desired state of the Dashboard. | | Required: \{\}
| + + +#### DashboardDatasource + + + +DashboardDatasource defines an observability tool call used to fetch dashboard data. + + + +_Appears in:_ +- [DashboardGraph](#dashboardgraph) +- [DashboardInput](#dashboardinput) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `type` _[DashboardDatasourceType](#dashboarddatasourcetype)_ | Type is the kind of data returned by the datasource. | | Enum: [LOGS METRICS TRACES LABELS]
Required: \{\}
| +| `tool` _string_ | Tool is the name of the observability tool used to fetch the data. | | MinLength: 1
Required: \{\}
Type: string
| +| `input` _[RawExtension](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#rawextension-runtime-pkg)_ | Input is passed to the observability tool. | | Required: \{\}
| + + +#### DashboardGraph + + + +DashboardGraph is a single graph placed on the dashboard grid. + + + +_Appears in:_ +- [DashboardSpec](#dashboardspec) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `identifier` _string_ | Identifier is a stable identifier unique within the dashboard. | | MaxLength: 128
MinLength: 1
Required: \{\}
Type: string
| +| `title` _string_ | Title is the graph title. | | Optional: \{\}
Type: string
| +| `description` _string_ | Description is an optional graph description. | | Optional: \{\}
Type: string
| +| `type` _[DashboardGraphType](#dashboardgraphtype)_ | Type is the graph visualization type. | | Enum: [TIMESERIES GAUGE LOGS MARKDOWN TABLE STAT BAR PIE HEATMAP TRACES SECTION]
MaxLength: 16
Required: \{\}
Type: string
| +| `sectionId` _string_ | SectionID is the identifier of the SECTION graph containing this graph. Sections cannot be nested. | | MaxLength: 128
Optional: \{\}
Type: string
| +| `markdown` _string_ | Markdown is the content for MARKDOWN graphs. | | Optional: \{\}
Type: string
| +| `options` _[RawExtension](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#rawextension-runtime-pkg)_ | Options are visualization-specific display options. Sections may set collapsed. | | Optional: \{\}
| +| `layout` _[DashboardGraphLayout](#dashboardgraphlayout)_ | Layout is the grid position and size of the graph. | | Required: \{\}
| +| `datasource` _[DashboardDatasource](#dashboarddatasource)_ | Datasource is the tool call used to fetch external data. | | Optional: \{\}
| + + +#### DashboardGraphLayout + + + +DashboardGraphLayout defines the grid position and size of a graph. + + + +_Appears in:_ +- [DashboardGraph](#dashboardgraph) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `x` _integer_ | X is the zero-based horizontal grid coordinate. | | Minimum: 0
Required: \{\}
| +| `y` _integer_ | Y is the zero-based vertical grid coordinate. | | Minimum: 0
Required: \{\}
| +| `w` _integer_ | W is the width in grid columns. | | Minimum: 1
Required: \{\}
| +| `h` _integer_ | H is the height in grid rows. | | Minimum: 1
Required: \{\}
| + + +#### DashboardInput + + + +DashboardInput is a user-configurable dashboard variable. + + + +_Appears in:_ +- [DashboardSpec](#dashboardspec) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `name` _string_ | Name is the variable name referenced by graph datasource inputs. | | MinLength: 1
Required: \{\}
Type: string
| +| `label` _string_ | Label is a human-readable input label. | | Optional: \{\}
Type: string
| +| `description` _string_ | Description is an optional input description. | | Optional: \{\}
Type: string
| +| `type` _[DashboardInputType](#dashboardinputtype)_ | Type is the input control type. | | Enum: [TEXT NUMBER BOOLEAN SELECT MULTI_SELECT TIME_RANGE]
Required: \{\}
| +| `default` _string_ | Default is the default input value. | | Optional: \{\}
Type: string
| +| `options` _string array_ | Options are the allowed values for select inputs. | | Optional: \{\}
| +| `required` _boolean_ | Required defines whether a value is required when rendering. | | Optional: \{\}
| +| `datasource` _[DashboardDatasource](#dashboarddatasource)_ | Datasource is the tool query used to populate input options, such as metric label search. | | Optional: \{\}
| + + +#### DashboardSpec + + + +DashboardSpec defines the desired state of a Dashboard. + + + +_Appears in:_ +- [Dashboard](#dashboard) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `workbenchRef` _[LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#localobjectreference-v1-core)_ | WorkbenchRef references the Workbench that owns this dashboard.
The Workbench must be in the same namespace as the dashboard.
It is immutable, a dashboard cannot be moved to a different workbench. | | Required: \{\}
| +| `name` _string_ | Name is the dashboard name, unique within its workbench.
If not set, metadata.name is used. | | Optional: \{\}
Type: string
| +| `description` _string_ | Description is an optional dashboard description. | | Optional: \{\}
Type: string
| +| `graphs` _[DashboardGraph](#dashboardgraph) array_ | Graphs arranged on the dashboard grid. Graph identifiers must be unique within the dashboard.
Graphs can be grouped by setting sectionId to the identifier of a SECTION graph.
Note that overlapping graph layouts are only validated by the Console API. | | MaxItems: 200
Optional: \{\}
| +| `inputs` _[DashboardInput](#dashboardinput) array_ | Inputs are user-configurable dashboard variables. | | Optional: \{\}
| +| `reconciliation` _[Reconciliation](#reconciliation)_ | Reconciliation settings for this resource. | | Optional: \{\}
| + + #### DeploymentSettings @@ -2545,6 +2672,219 @@ _Appears in:_ | `crontab` _string_ | Crontab is the cron expression for how often to export metrics.
Example: "*/5 * * * *" for every 5 minutes. | | Optional: \{\}
| +#### Monitor + + + +Monitor represents an observability monitor attached to a service deployment. It periodically +evaluates a log or metrics query against a threshold and fires alerts when it is crossed. +Optionally, it can be attached to a workbench to start an investigation when it fires. + + + + + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `apiVersion` _string_ | `deployments.plural.sh/v1alpha1` | | | +| `kind` _string_ | `Monitor` | | | +| `metadata` _[ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#objectmeta-v1-meta)_ | Refer to Kubernetes API documentation for fields of `metadata`. | | | +| `spec` _[MonitorSpec](#monitorspec)_ | Spec defines the desired state of the Monitor. | | Required: \{\}
| + + +#### MonitorFacet + + + +MonitorFacet is a key/value facet used to further filter log queries. + + + +_Appears in:_ +- [MonitorLogQuery](#monitorlogquery) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `key` _string_ | Key is the facet key (e.g. kubernetes namespace or pod label name). | | Required: \{\}
Type: string
| +| `value` _string_ | Value is the facet value to match for the given key. | | Required: \{\}
Type: string
| + + +#### MonitorLogAzureOptions + + + +MonitorLogAzureOptions are Azure-specific log query options. + + + +_Appears in:_ +- [MonitorLogOptions](#monitorlogoptions) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `resourceId` _string_ | ResourceID is the Azure resource ID to query logs for. | | Optional: \{\}
Type: string
| + + +#### MonitorLogOptions + + + +MonitorLogOptions are provider-specific log query options. + + + +_Appears in:_ +- [MonitorLogQuery](#monitorlogquery) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `azure` _[MonitorLogAzureOptions](#monitorlogazureoptions)_ | Azure log query options. | | Optional: \{\}
| + + +#### MonitorLogQuery + + + +MonitorLogQuery is the log query configuration for a monitor. + + + +_Appears in:_ +- [MonitorQuery](#monitorquery) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `tool` _string_ | Tool is the named workbench logs tool. When omitted, the native Plural logs provider is used. | | Optional: \{\}
Type: string
| +| `query` _string_ | Query is the log query string passed through to the underlying log provider. | | MinLength: 1
Required: \{\}
Type: string
| +| `bucketSize` _string_ | BucketSize is the time bucket size (e.g. 5m) used when aggregating log results. | | Pattern: `^[0-9]+[dmhs]$`
Required: \{\}
Type: string
| +| `duration` _string_ | Duration is the lookback duration for the log query (e.g. 1h, 10m, 30s). | | Optional: \{\}
Pattern: `^[0-9]+[dmhs]$`
Type: string
| +| `operator` _[MonitorOperator](#monitoroperator)_ | Operator to use when combining multiple log queries.
Defaults to OR, which is also the Console API default. | OR | Enum: [OR AND]
Optional: \{\}
| +| `facets` _[MonitorFacet](#monitorfacet) array_ | Facets are optional key/value facets applied as additional filters on the log query. | | Optional: \{\}
| +| `options` _[MonitorLogOptions](#monitorlogoptions)_ | Options are provider-specific log query options. | | Optional: \{\}
| + + +#### MonitorMetricsAzureOptions + + + +MonitorMetricsAzureOptions are Azure-specific metrics query options. + + + +_Appears in:_ +- [MonitorMetricsOptions](#monitormetricsoptions) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `resourceId` _string_ | ResourceID is the Azure resource ID to query metrics for. | | Optional: \{\}
Type: string
| +| `metricsNamespace` _string_ | MetricsNamespace is the Azure metrics namespace. | | Optional: \{\}
Type: string
| +| `aggregation` _string_ | Aggregation is the Azure metrics aggregation type. | | Optional: \{\}
Type: string
| +| `filter` _string_ | Filter is the Azure metrics filter expression. | | Optional: \{\}
Type: string
| +| `orderBy` _string_ | OrderBy is the Azure metrics ordering expression. | | Optional: \{\}
Type: string
| +| `rollUpBy` _string_ | RollUpBy is the Azure metrics dimension to roll up by. | | Optional: \{\}
Type: string
| +| `metricsEndpoint` _string_ | MetricsEndpoint is the Azure metrics endpoint override. | | Optional: \{\}
Type: string
| + + +#### MonitorMetricsOptions + + + +MonitorMetricsOptions are provider-specific metrics query options. + + + +_Appears in:_ +- [MonitorMetricsQuery](#monitormetricsquery) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `azure` _[MonitorMetricsAzureOptions](#monitormetricsazureoptions)_ | Azure metrics query options. | | Optional: \{\}
| + + +#### MonitorMetricsQuery + + + +MonitorMetricsQuery is the metrics query configuration for a monitor. + + + +_Appears in:_ +- [MonitorQuery](#monitorquery) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `tool` _string_ | Tool is the named workbench metrics tool. When omitted, the native Plural metrics provider is used. | | Optional: \{\}
Type: string
| +| `query` _string_ | Query is the metrics query string passed through to the underlying metrics provider. | | MinLength: 1
Required: \{\}
Type: string
| +| `step` _string_ | Step is the metrics query step (e.g. 5m). | | Optional: \{\}
Pattern: `^[0-9]+[dmhs]$`
Type: string
| +| `duration` _string_ | Duration is the lookback duration for the metrics query (e.g. 1h). | | Optional: \{\}
Pattern: `^[0-9]+[dmhs]$`
Type: string
| +| `options` _[MonitorMetricsOptions](#monitormetricsoptions)_ | Options are provider-specific metrics query options. | | Optional: \{\}
| + + +#### MonitorQuery + + + +MonitorQuery is a wrapper for the underlying query definition for a monitor. +Exactly one of log or metrics should be set, matching the monitor type. + + + +_Appears in:_ +- [MonitorSpec](#monitorspec) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `log` _[MonitorLogQuery](#monitorlogquery)_ | Log query used when the monitor type is LOG. | | Optional: \{\}
| +| `metrics` _[MonitorMetricsQuery](#monitormetricsquery)_ | Metrics query used when the monitor type is METRICS. | | Optional: \{\}
| + + +#### MonitorSpec + + + +MonitorSpec defines the desired state of a Monitor. + + + +_Appears in:_ +- [Monitor](#monitor) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `name` _string_ | Name is the short name used to identify this monitor in the Console API.
If not set, metadata.name is used. | | Optional: \{\}
Type: string
| +| `serviceRef` _[LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#localobjectreference-v1-core)_ | ServiceRef references the ServiceDeployment resource this monitor is attached to.
The ServiceDeployment must be in the same namespace as the monitor.
Either ServiceRef or Service must be set. | | Optional: \{\}
| +| `service` _string_ | Service references an existing service in the Console API this monitor is attached to,
in the format "cluster-handle/service-name" (e.g. mgmt/console). Use it to attach
a monitor to a service that is not managed by a ServiceDeployment resource.
Either ServiceRef or Service must be set. | | Optional: \{\}
Pattern: `^[^/]+/[^/]+$`
Type: string
| +| `workbenchRef` _[LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#localobjectreference-v1-core)_ | WorkbenchRef references the Workbench this monitor is attached to.
When set, the monitor can start a workbench investigation when it fires.
It is required if the query uses a named workbench tool.
The Workbench must be in the same namespace as the monitor. | | Optional: \{\}
| +| `prompt` _string_ | Prompt is used when the monitor starts a workbench investigation. | | MaxLength: 2048
Optional: \{\}
Type: string
| +| `modes` _[WorkbenchJobModes](#workbenchjobmodes)_ | Modes defines mode-specific options for monitor-triggered workbench jobs. | | Optional: \{\}
| +| `description` _string_ | Description is an optional free-form description of what this monitor is checking. | | Optional: \{\}
Type: string
| +| `alertTemplate` _string_ | AlertTemplate is an optional template used when rendering alert messages for this monitor. | | Optional: \{\}
Type: string
| +| `severity` _[AlertSeverity](#alertseverity)_ | Severity is the severity level applied to alerts generated by this monitor. | | Enum: [LOW MEDIUM HIGH CRITICAL UNDEFINED]
Required: \{\}
| +| `type` _[MonitorType](#monitortype)_ | Type is the monitor data type. | | Enum: [LOG METRICS]
Required: \{\}
| +| `evaluationCron` _string_ | EvaluationCron is the cron schedule defining when the monitor is evaluated (e.g. */5 * * * *).
It must be a cron expression with 5 fields (or 6 with an optional year), separated by single spaces,
or one of the @yearly, @annually, @monthly, @weekly, @daily, @midnight, @hourly, @minutely,
@secondly or @reboot shortcuts. Field values are validated by the Console API. | | MinLength: 1
Pattern: `^(@(?i:yearly\|annually\|monthly\|weekly\|daily\|midnight\|hourly\|minutely\|secondly\|reboot)\|[^ ]+( [^ ]+)\{4,5\})$`
Required: \{\}
Type: string
| +| `query` _[MonitorQuery](#monitorquery)_ | Query is the underlying query configuration used to fetch data for this monitor. | | Required: \{\}
| +| `threshold` _[MonitorThreshold](#monitorthreshold)_ | Threshold is the configuration that determines when the monitor should fire. | | Required: \{\}
| +| `reconciliation` _[Reconciliation](#reconciliation)_ | Reconciliation settings for this resource. | | Optional: \{\}
| + + +#### MonitorThreshold + + + +MonitorThreshold is the threshold configuration used to decide when a monitor should fire. + + + +_Appears in:_ +- [MonitorSpec](#monitorspec) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `aggregate` _[MonitorAggregate](#monitoraggregate)_ | Aggregate is the aggregation function applied over the result set. | | Enum: [MAX MIN AVG]
Required: \{\}
| +| `value` _string_ | Value is the numeric value the aggregated metric must cross to trigger the alert.
It is a string to allow decimal values (e.g. "0.95"). | | Pattern: `^-?[0-9]+(\.[0-9]+)?$`
Required: \{\}
Type: string
| + + #### NamespaceCredentials @@ -4421,6 +4761,7 @@ _Appears in:_ - [ComplianceReportGeneratorSpec](#compliancereportgeneratorspec) - [CustomCompatibilityMatrixSpec](#customcompatibilitymatrixspec) - [CustomStackRunSpec](#customstackrunspec) +- [DashboardSpec](#dashboardspec) - [DeploymentSettingsSpec](#deploymentsettingsspec) - [FederatedCredentialSpec](#federatedcredentialspec) - [FlowSpec](#flowspec) @@ -4432,6 +4773,7 @@ _Appears in:_ - [InfrastructureStackSpec](#infrastructurestackspec) - [MCPServerSpec](#mcpserverspec) - [ManagedNamespaceSpec](#managednamespacespec) +- [MonitorSpec](#monitorspec) - [NamespaceCredentialsSpec](#namespacecredentialsspec) - [NotificationRouterSpec](#notificationrouterspec) - [NotificationSinkSpec](#notificationsinkspec) @@ -5859,6 +6201,100 @@ _Appears in:_ | `kubernetes` _boolean_ | Kubernetes enables the Kubernetes capability. | | Optional: \{\}
| +#### WorkbenchJobBudget + + + +WorkbenchJobBudget defines budget limits for a workbench job. + + + +_Appears in:_ +- [WorkbenchJobModes](#workbenchjobmodes) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `cost` _string_ | Cost is the maximum cost budget for the job.
It is a string to allow decimal values (e.g. "12.5"). | | Optional: \{\}
Pattern: `^[0-9]+(\.[0-9]+)?$`
Type: string
| +| `tokens` _integer_ | Tokens is the maximum token budget for the job. | | Minimum: 0
Optional: \{\}
| + + +#### WorkbenchJobCodingModes + + + +WorkbenchJobCodingModes defines coding mode options for a workbench job. + + + +_Appears in:_ +- [WorkbenchJobModes](#workbenchjobmodes) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `babysit` _boolean_ | Babysit enables babysit mode for coding agent runs. | | Optional: \{\}
| +| `approval` _boolean_ | Approval requires approval before coding agent runs continue. | | Optional: \{\}
| +| `review` _boolean_ | Review enables pull request review mode for coding agent runs. | | Optional: \{\}
| + + +#### WorkbenchJobKubernetesModes + + + +WorkbenchJobKubernetesModes defines kubernetes action options for a workbench job. + + + +_Appears in:_ +- [WorkbenchJobModes](#workbenchjobmodes) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `update` _boolean_ | Update enables kubernetes update actions. | | Optional: \{\}
| +| `delete` _boolean_ | Delete enables kubernetes delete actions. | | Optional: \{\}
| +| `exec` _boolean_ | Exec enables kubernetes exec actions. | | Optional: \{\}
| +| `drain` _boolean_ | Drain enables kubernetes node drain actions. | | Optional: \{\}
| +| `excludeNamespaces` _string array_ | ExcludeNamespaces are namespaces the agent can never act in. | | Optional: \{\}
| +| `requireNamespaces` _string array_ | RequireNamespaces, if set, are the only namespaces the agent is allowed to act in. | | Optional: \{\}
| + + +#### WorkbenchJobModel + + + +WorkbenchJobModel defines the AI model override for a workbench job. + + + +_Appears in:_ +- [WorkbenchJobModes](#workbenchjobmodes) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `provider` _[AiProvider](#aiprovider)_ | Provider is the AI provider for the job. | | Enum: [OPENAI ANTHROPIC OLLAMA AZURE BEDROCK VERTEX OPENAI_COMPATIBLE XAI]
Required: \{\}
| +| `model` _string_ | Model is the model name for the job. | | MinLength: 1
Required: \{\}
Type: string
| + + +#### WorkbenchJobModes + + + +WorkbenchJobModes defines mode-specific options for workbench jobs. + + + +_Appears in:_ +- [MonitorSpec](#monitorspec) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `plan` _boolean_ | Plan enables planning mode for the job. | | Optional: \{\}
| +| `verification` _boolean_ | Verification enables verification mode for the job. | | Optional: \{\}
| +| `model` _[WorkbenchJobModel](#workbenchjobmodel)_ | Model overrides the AI model used for the job. | | Optional: \{\}
| +| `coding` _[WorkbenchJobCodingModes](#workbenchjobcodingmodes)_ | Coding defines coding mode options for the job. | | Optional: \{\}
| +| `budget` _[WorkbenchJobBudget](#workbenchjobbudget)_ | Budget defines budget limits for the job. | | Optional: \{\}
| +| `kubernetes` _[WorkbenchJobKubernetesModes](#workbenchjobkubernetesmodes)_ | Kubernetes defines kubernetes action options for the job. | | Optional: \{\}
| + + #### WorkbenchObservabilityConfig diff --git a/go/controller/internal/client/console.go b/go/controller/internal/client/console.go index c5f9ffce25..359be1ae12 100644 --- a/go/controller/internal/client/console.go +++ b/go/controller/internal/client/console.go @@ -20,6 +20,7 @@ type ConsoleClient interface { GetServices() ([]*console.ServiceDeploymentBaseFragment, error) GetService(clusterID, serviceName string) (*console.ServiceDeploymentExtended, error) GetServiceById(id string) (*console.ServiceDeploymentExtended, error) + GetServiceTinyByHandle(clusterHandle, serviceName string) (*console.GetServiceDeploymentTinyByHandle_ServiceDeployment, error) CreateRepository(url string, privateKey, passphrase, username, password *string) (*console.CreateGitRepository, error) CreateGitRepository(attrs console.GitAttributes) (*console.CreateGitRepository, error) ListRepositories() (*console.ListGitRepositories, error) @@ -237,6 +238,16 @@ type ConsoleClient interface { GetIssueWebhookByName(ctx context.Context, name string) (*console.IssueWebhookFragment, error) GetSentinelRun(ctx context.Context, id string) (*console.SentinelRunFragment, error) RunSentinel(ctx context.Context, id string, overrides *console.SentinelRunOverrides) (*string, error) + CreateMonitor(ctx context.Context, attributes console.MonitorAttributes) (*console.MonitorFragment, error) + UpdateMonitor(ctx context.Context, id string, attributes console.MonitorAttributes) (*console.MonitorFragment, error) + GetMonitor(ctx context.Context, id string) (*console.MonitorFragment, error) + DeleteMonitor(ctx context.Context, id string) error + IsMonitorExists(ctx context.Context, id string) (bool, error) + CreateDashboard(ctx context.Context, attributes console.DashboardAttributes) (*console.WorkbenchDashboardFragment, error) + UpdateDashboard(ctx context.Context, id string, attributes console.DashboardAttributes) (*console.WorkbenchDashboardFragment, error) + GetDashboard(ctx context.Context, id string) (*console.WorkbenchDashboardFragment, error) + DeleteDashboard(ctx context.Context, id string) error + IsDashboardExists(ctx context.Context, id string) (bool, error) } func New(url, token string, datadogEnabled, insecureSkipTLSVerify bool) ConsoleClient { diff --git a/go/controller/internal/client/dashboard.go b/go/controller/internal/client/dashboard.go new file mode 100644 index 0000000000..143cd0093a --- /dev/null +++ b/go/controller/internal/client/dashboard.go @@ -0,0 +1,68 @@ +package client + +import ( + "context" + "fmt" + + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/runtime/schema" + + console "github.com/pluralsh/console/go/client" + internalerror "github.com/pluralsh/console/go/controller/internal/errors" +) + +func (c *client) CreateDashboard(ctx context.Context, attributes console.DashboardAttributes) (*console.WorkbenchDashboardFragment, error) { + response, err := c.consoleClient.CreateDashboard(ctx, attributes) + if err != nil { + return nil, err + } + return response.CreateDashboard, nil +} + +func (c *client) UpdateDashboard(ctx context.Context, id string, attributes console.DashboardAttributes) (*console.WorkbenchDashboardFragment, error) { + if id == "" { + return nil, fmt.Errorf("no id specified") + } + + response, err := c.consoleClient.UpdateDashboard(ctx, id, attributes) + if err != nil { + return nil, err + } + return response.UpdateDashboard, nil +} + +func (c *client) GetDashboard(ctx context.Context, id string) (*console.WorkbenchDashboardFragment, error) { + if id == "" { + return nil, fmt.Errorf("no id specified") + } + response, err := c.consoleClient.GetWorkbenchDashboard(ctx, id) + if internalerror.IsNotFound(err) { + return nil, errors.NewNotFound(schema.GroupResource{}, id) + } + if err == nil && (response == nil || response.WorkbenchDashboard == nil) { + return nil, errors.NewNotFound(schema.GroupResource{}, id) + } + if response == nil { + return nil, err + } + return response.WorkbenchDashboard, err +} + +func (c *client) DeleteDashboard(ctx context.Context, id string) error { + _, err := c.consoleClient.DeleteDashboard(ctx, id) + return err +} + +func (c *client) IsDashboardExists(ctx context.Context, id string) (bool, error) { + if id == "" { + return false, fmt.Errorf("no id specified") + } + dashboard, err := c.GetDashboard(ctx, id) + if errors.IsNotFound(err) { + return false, nil + } + if err != nil { + return false, err + } + return dashboard != nil, nil +} diff --git a/go/controller/internal/client/monitor.go b/go/controller/internal/client/monitor.go new file mode 100644 index 0000000000..372f4dccca --- /dev/null +++ b/go/controller/internal/client/monitor.go @@ -0,0 +1,68 @@ +package client + +import ( + "context" + "fmt" + + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/runtime/schema" + + console "github.com/pluralsh/console/go/client" + internalerror "github.com/pluralsh/console/go/controller/internal/errors" +) + +func (c *client) CreateMonitor(ctx context.Context, attributes console.MonitorAttributes) (*console.MonitorFragment, error) { + response, err := c.consoleClient.CreateMonitor(ctx, attributes) + if err != nil { + return nil, err + } + return response.CreateMonitor, nil +} + +func (c *client) UpdateMonitor(ctx context.Context, id string, attributes console.MonitorAttributes) (*console.MonitorFragment, error) { + if id == "" { + return nil, fmt.Errorf("no id specified") + } + + response, err := c.consoleClient.UpdateMonitor(ctx, id, attributes) + if err != nil { + return nil, err + } + return response.UpdateMonitor, nil +} + +func (c *client) GetMonitor(ctx context.Context, id string) (*console.MonitorFragment, error) { + if id == "" { + return nil, fmt.Errorf("no id specified") + } + response, err := c.consoleClient.GetMonitor(ctx, id) + if internalerror.IsNotFound(err) { + return nil, errors.NewNotFound(schema.GroupResource{}, id) + } + if err == nil && (response == nil || response.Monitor == nil) { + return nil, errors.NewNotFound(schema.GroupResource{}, id) + } + if response == nil { + return nil, err + } + return response.Monitor, err +} + +func (c *client) DeleteMonitor(ctx context.Context, id string) error { + _, err := c.consoleClient.DeleteMonitor(ctx, id) + return err +} + +func (c *client) IsMonitorExists(ctx context.Context, id string) (bool, error) { + if id == "" { + return false, fmt.Errorf("no id specified") + } + monitor, err := c.GetMonitor(ctx, id) + if errors.IsNotFound(err) { + return false, nil + } + if err != nil { + return false, err + } + return monitor != nil, nil +} diff --git a/go/controller/internal/client/service.go b/go/controller/internal/client/service.go index 6b0c8b8daf..e898f4f3a4 100644 --- a/go/controller/internal/client/service.go +++ b/go/controller/internal/client/service.go @@ -27,6 +27,26 @@ func (c *client) GetService(clusterID, serviceName string) (*console.ServiceDepl return resp.ServiceDeployment, nil } +// GetServiceTinyByHandle is a lightweight GetService that returns only the service ID and name. +func (c *client) GetServiceTinyByHandle(clusterHandle, serviceName string) (*console.GetServiceDeploymentTinyByHandle_ServiceDeployment, error) { + if clusterHandle == "" || serviceName == "" { + return nil, errors.NewNotFound(schema.GroupResource{}, fmt.Sprintf("%s/%s", clusterHandle, serviceName)) + } + + response, err := c.consoleClient.GetServiceDeploymentTinyByHandle(c.ctx, clusterHandle, serviceName) + if internalerror.IsNotFound(err) { + return nil, errors.NewNotFound(schema.GroupResource{}, fmt.Sprintf("%s/%s", clusterHandle, serviceName)) + } + if err == nil && (response == nil || response.ServiceDeployment == nil) { + return nil, errors.NewNotFound(schema.GroupResource{}, fmt.Sprintf("%s/%s", clusterHandle, serviceName)) + } + if response == nil { + return nil, err + } + + return response.ServiceDeployment, err +} + func (c *client) GetServiceById(id string) (*console.ServiceDeploymentExtended, error) { if id == "" { return nil, errors.NewNotFound(schema.GroupResource{}, "") diff --git a/go/controller/internal/common/workbench.go b/go/controller/internal/common/workbench.go index 62fa1cb5e6..6251fc7a83 100644 --- a/go/controller/internal/common/workbench.go +++ b/go/controller/internal/common/workbench.go @@ -19,22 +19,41 @@ import ( // so that Kubernetes GC cascades deletion from parent to child. func HandleWorkbenchRef(ctx context.Context, c runtimeclient.Client, scheme *runtime.Scheme, child runtimeclient.Object, ref corev1.ObjectReference, namespace string) (string, *ctrl.Result, error) { + workbench, res, err := getReadyWorkbench(ctx, c, ref, namespace) + if res != nil || err != nil { + return "", res, err + } + + if err := controllerutil.SetOwnerReference(workbench, child, scheme); err != nil { + return "", nil, fmt.Errorf("failed to set owner reference: %w", err) + } + + return workbench.Status.GetID(), nil, nil +} + +// WorkbenchID is HandleWorkbenchRef without setting the workbench as the owner. +func WorkbenchID(ctx context.Context, c runtimeclient.Client, ref corev1.ObjectReference, namespace string) (string, *ctrl.Result, error) { + workbench, res, err := getReadyWorkbench(ctx, c, ref, namespace) + if res != nil || err != nil { + return "", res, err + } + + return workbench.Status.GetID(), nil, nil +} + +func getReadyWorkbench(ctx context.Context, c runtimeclient.Client, ref corev1.ObjectReference, namespace string) (*v1alpha1.Workbench, *ctrl.Result, error) { workbench := &v1alpha1.Workbench{} ns := lo.Ternary(ref.Namespace == "", namespace, ref.Namespace) if err := c.Get(ctx, runtimeclient.ObjectKey{Name: ref.Name, Namespace: ns}, workbench); err != nil { if errors.IsNotFound(err) { - return "", lo.ToPtr(Wait()), fmt.Errorf("workbench not found: %s", err.Error()) + return nil, lo.ToPtr(Wait()), fmt.Errorf("workbench not found: %s", err.Error()) } - return "", nil, fmt.Errorf("failed to get workbench: %s", err.Error()) + return nil, nil, fmt.Errorf("failed to get workbench: %s", err.Error()) } if !workbench.Status.HasID() { - return "", lo.ToPtr(Wait()), fmt.Errorf("workbench is not ready") + return nil, lo.ToPtr(Wait()), fmt.Errorf("workbench is not ready") } - if err := controllerutil.SetOwnerReference(workbench, child, scheme); err != nil { - return "", nil, fmt.Errorf("failed to set owner reference: %w", err) - } - - return workbench.Status.GetID(), nil, nil + return workbench, nil, nil } diff --git a/go/controller/internal/controller/dashboard_controller.go b/go/controller/internal/controller/dashboard_controller.go new file mode 100644 index 0000000000..951d0d4e04 --- /dev/null +++ b/go/controller/internal/controller/dashboard_controller.go @@ -0,0 +1,193 @@ +package controller + +import ( + "context" + "fmt" + + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/errors" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/builder" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/controller" + "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" + "sigs.k8s.io/controller-runtime/pkg/log" + "sigs.k8s.io/controller-runtime/pkg/predicate" + "sigs.k8s.io/controller-runtime/pkg/reconcile" + + console "github.com/pluralsh/console/go/client" + "github.com/pluralsh/console/go/controller/api/v1alpha1" + consoleclient "github.com/pluralsh/console/go/controller/internal/client" + "github.com/pluralsh/console/go/controller/internal/common" + "github.com/pluralsh/console/go/controller/internal/credentials" + "github.com/pluralsh/console/go/controller/internal/utils" +) + +// DashboardReconciler reconciles a v1alpha1.Dashboard object. +// Implements reconcile.Reconciler and types.Controller. +type DashboardReconciler struct { + client.Client + ConsoleClient consoleclient.ConsoleClient + Scheme *runtime.Scheme + CredentialsCache credentials.NamespaceCredentialsCache +} + +const ( + // DashboardFinalizer defines the name for the main finalizer that synchronizes + // resource deletion from the Console API prior to removing the CRD. + DashboardFinalizer = "deployments.plural.sh/dashboard-protection" +) + +// +kubebuilder:rbac:groups=deployments.plural.sh,resources=dashboards,verbs=get;list;watch;create;update;patch;delete +// +kubebuilder:rbac:groups=deployments.plural.sh,resources=dashboards/status,verbs=get;update;patch +// +kubebuilder:rbac:groups=deployments.plural.sh,resources=dashboards/finalizers,verbs=update + +// Reconcile is part of the main kubernetes reconciliation loop which aims to +// move the current state of the v1alpha1.Dashboard closer to the desired state +// and syncs it with the Console API state. +func (in *DashboardReconciler) Reconcile(ctx context.Context, req reconcile.Request) (_ reconcile.Result, reterr error) { + logger := log.FromContext(ctx) + + dashboard := new(v1alpha1.Dashboard) + if err := in.Get(ctx, req.NamespacedName, dashboard); err != nil { + return ctrl.Result{}, client.IgnoreNotFound(err) + } + + scope, err := common.NewDefaultScope(ctx, in.Client, dashboard) + if err != nil { + logger.Error(err, "failed to create scope") + return ctrl.Result{}, err + } + defer func() { + if err := scope.PatchObject(); err != nil && reterr == nil { + reterr = err + } + }() + + // Switch to namespace credentials if configured. This has to be done before sending any request to the console. + nc, err := in.ConsoleClient.UseCredentials(req.Namespace, in.CredentialsCache) + credentials.SyncCredentialsInfo(dashboard, dashboard.SetCondition, nc, err) + if err != nil { + logger.Error(err, "failed to use namespace credentials", "namespaceCredentials", nc, "namespacedName", req.NamespacedName) + utils.MarkCondition(dashboard.SetCondition, v1alpha1.SynchronizedConditionType, v1.ConditionFalse, v1alpha1.SynchronizedConditionReasonError, fmt.Sprintf("failed to use %s namespace credentials: %s", nc, err.Error())) + return ctrl.Result{}, err + } + + // Mark the resource as not ready. This will be overridden in the end. + utils.MarkCondition(dashboard.SetCondition, v1alpha1.ReadyConditionType, v1.ConditionFalse, v1alpha1.ReadyConditionReason, "") + + // Handle proper resource deletion via finalizer + if result, err := in.addOrRemoveFinalizer(ctx, dashboard); result != nil || err != nil { + return common.HandleRequeue(result, err, dashboard.SetCondition) + } + + // Mark resource as managed by this operator. + utils.MarkCondition(dashboard.SetCondition, v1alpha1.ReadonlyConditionType, v1.ConditionFalse, v1alpha1.ReadonlyConditionReason, "") + + // Get Dashboard SHA that can be saved back in the status to check for changes + changed, sha, err := dashboard.Diff(utils.HashObject) + if err != nil { + logger.Error(err, "unable to calculate dashboard SHA") + utils.MarkCondition(dashboard.SetCondition, v1alpha1.SynchronizedConditionType, v1.ConditionFalse, v1alpha1.SynchronizedConditionReasonError, err.Error()) + return ctrl.Result{}, err + } + + // Get the workbench that owns this dashboard. + workbenchID, res, err := common.HandleWorkbenchRef(ctx, in.Client, in.Scheme, dashboard, corev1.ObjectReference{Name: dashboard.Spec.WorkbenchRef.Name}, dashboard.Namespace) + if res != nil || err != nil { + return common.HandleRequeue(res, err, dashboard.SetCondition) + } + + // Sync Dashboard CRD with the Console API + apiDashboard, err := in.sync(ctx, dashboard, workbenchID, changed) + if err != nil { + return common.HandleRequeue(nil, err, dashboard.SetCondition) + } + + dashboard.Status.ID = &apiDashboard.ID + dashboard.Status.SHA = &sha + + utils.MarkCondition(dashboard.SetCondition, v1alpha1.ReadyConditionType, v1.ConditionTrue, v1alpha1.ReadyConditionReason, "") + utils.MarkCondition(dashboard.SetCondition, v1alpha1.SynchronizedConditionType, v1.ConditionTrue, v1alpha1.SynchronizedConditionReason, "") + + return dashboard.Spec.Reconciliation.Requeue(), nil +} + +// addOrRemoveFinalizer adds the finalizer or, during deletion, removes the resource from Console first. +// Console errors are returned, not requeued via Spec.Reconciliation, which never requeues without drift detection. +func (in *DashboardReconciler) addOrRemoveFinalizer(ctx context.Context, dashboard *v1alpha1.Dashboard) (*ctrl.Result, error) { + if dashboard.DeletionTimestamp.IsZero() && !controllerutil.ContainsFinalizer(dashboard, DashboardFinalizer) { + controllerutil.AddFinalizer(dashboard, DashboardFinalizer) + } + + // If the dashboard is being deleted, cleanup and remove the finalizer. + if !dashboard.DeletionTimestamp.IsZero() { + // If the dashboard does not have an ID, the finalizer can be removed. + if !dashboard.Status.HasID() { + controllerutil.RemoveFinalizer(dashboard, DashboardFinalizer) + return &ctrl.Result{}, nil + } + + exists, err := in.ConsoleClient.IsDashboardExists(ctx, dashboard.Status.GetID()) + if err != nil { + return nil, err + } + + // Remove the dashboard from Console API if it exists. + if exists { + if err = in.ConsoleClient.DeleteDashboard(ctx, dashboard.Status.GetID()); err != nil { + // If it fails to delete the external dependency here, return with the error + // so that it can be retried. + return nil, err + } + } + + // If our finalizer is present, remove it. + controllerutil.RemoveFinalizer(dashboard, DashboardFinalizer) + + // Stop reconciliation as the item does no longer exist. + return &ctrl.Result{}, nil + } + + return nil, nil +} + +func (in *DashboardReconciler) sync(ctx context.Context, dashboard *v1alpha1.Dashboard, workbenchID string, changed bool) (*console.WorkbenchDashboardFragment, error) { + logger := log.FromContext(ctx) + + // If we already have an ID, try to get the existing resource. + if dashboard.Status.HasID() { + existingDashboard, err := in.ConsoleClient.GetDashboard(ctx, dashboard.Status.GetID()) + if err != nil { + if !errors.IsNotFound(err) { + return nil, err + } + // Not found by ID, create a new one. + logger.Info(fmt.Sprintf("dashboard %s not found by ID, creating it", dashboard.Name)) + return in.ConsoleClient.CreateDashboard(ctx, dashboard.Attributes(workbenchID)) + } + + if changed { + logger.Info(fmt.Sprintf("updating dashboard %s", dashboard.Name)) + return in.ConsoleClient.UpdateDashboard(ctx, existingDashboard.ID, dashboard.Attributes(workbenchID)) + } + + return existingDashboard, nil + } + + // No ID yet, create a new dashboard. + logger.Info(fmt.Sprintf("creating dashboard %s", dashboard.Name)) + return in.ConsoleClient.CreateDashboard(ctx, dashboard.Attributes(workbenchID)) +} + +// SetupWithManager is responsible for initializing a new reconciler within the provided ctrl.Manager. +func (in *DashboardReconciler) SetupWithManager(mgr ctrl.Manager) error { + mgr.GetLogger().Info("Starting reconciler", "reconciler", "dashboard_reconciler") + return ctrl.NewControllerManagedBy(mgr). + WithOptions(controller.Options{MaxConcurrentReconciles: 1}). + Watches(&v1alpha1.NamespaceCredentials{}, credentials.OnCredentialsChange(in.Client, new(v1alpha1.DashboardList))). + For(&v1alpha1.Dashboard{}, builder.WithPredicates(predicate.GenerationChangedPredicate{})). + Complete(in) +} diff --git a/go/controller/internal/controller/dashboard_controller_test.go b/go/controller/internal/controller/dashboard_controller_test.go new file mode 100644 index 0000000000..a04596c158 --- /dev/null +++ b/go/controller/internal/controller/dashboard_controller_test.go @@ -0,0 +1,433 @@ +package controller_test + +import ( + "context" + "encoding/json" + "fmt" + "reflect" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + "github.com/samber/lo" + "github.com/stretchr/testify/mock" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/api/meta" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/types" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/reconcile" + + gqlclient "github.com/pluralsh/console/go/client" + "github.com/pluralsh/console/go/controller/api/v1alpha1" + "github.com/pluralsh/console/go/controller/internal/controller" + common "github.com/pluralsh/console/go/controller/internal/test/common" + "github.com/pluralsh/console/go/controller/internal/test/mocks" +) + +// jsonEqual checks if a JSON string is semantically equal to the expected value. +func jsonEqual(actual *string, expected map[string]any) bool { + if actual == nil { + return false + } + + var got map[string]any + if err := json.Unmarshal([]byte(*actual), &got); err != nil { + return false + } + + return reflect.DeepEqual(got, expected) +} + +var _ = Describe("Dashboard Controller", Ordered, func() { + const namespace = "default" + ctx := context.Background() + + newReconciler := func(consoleClient *mocks.ConsoleClientMock) *controller.DashboardReconciler { + return &controller.DashboardReconciler{ + Client: k8sClient, + Scheme: k8sClient.Scheme(), + ConsoleClient: consoleClient, + CredentialsCache: nil, + } + } + + Context("When reconciling a resource", func() { + const ( + dashboardName = "test-dashboard" + workbenchName = "test-workbench-for-dashboard" + id = "dashboard-123" + workbenchID = "workbench-456" + ) + + typeNamespacedName := types.NamespacedName{Name: dashboardName, Namespace: namespace} + workbenchNamespacedName := types.NamespacedName{Name: workbenchName, Namespace: namespace} + + BeforeAll(func() { + By("creating the parent Workbench resource without an ID") + Expect(common.MaybeCreate(k8sClient, &v1alpha1.Workbench{ + ObjectMeta: metav1.ObjectMeta{Name: workbenchName, Namespace: namespace}, + Spec: v1alpha1.WorkbenchSpec{Name: lo.ToPtr(workbenchName)}, + }, nil)).To(Succeed()) + + By("creating the Dashboard resource") + Expect(common.MaybeCreate(k8sClient, &v1alpha1.Dashboard{ + ObjectMeta: metav1.ObjectMeta{Name: dashboardName, Namespace: namespace}, + Spec: v1alpha1.DashboardSpec{ + WorkbenchRef: corev1.LocalObjectReference{Name: workbenchName}, + Description: lo.ToPtr("Console overview"), + Inputs: []v1alpha1.DashboardInput{ + { + Name: "namespace", + Label: lo.ToPtr("Namespace"), + Type: gqlclient.DashboardInputTypeText, + Default: lo.ToPtr("plrl-console"), + Required: lo.ToPtr(true), + }, + { + Name: "pod", + Type: gqlclient.DashboardInputTypeSelect, + Options: []string{"a", "b"}, + Datasource: &v1alpha1.DashboardDatasource{ + Type: gqlclient.DashboardDatasourceTypeLabels, + Tool: "plrl_metric_label_search", + Input: runtime.RawExtension{Raw: []byte(`{"metric":"up","label":"pod"}`)}, + }, + }, + }, + Graphs: []v1alpha1.DashboardGraph{ + { + Identifier: "overview", + Title: lo.ToPtr("Overview"), + Type: gqlclient.DashboardGraphTypeSection, + Options: &runtime.RawExtension{Raw: []byte(`{"collapsed":true}`)}, + Layout: v1alpha1.DashboardGraphLayout{X: 0, Y: 0, W: 12, H: 1}, + }, + { + Identifier: "notes", + Type: gqlclient.DashboardGraphTypeMarkdown, + SectionID: lo.ToPtr("overview"), + Markdown: lo.ToPtr("## Notes"), + Layout: v1alpha1.DashboardGraphLayout{X: 0, Y: 1, W: 4, H: 4}, + }, + { + Identifier: "cpu", + Title: lo.ToPtr("CPU"), + Description: lo.ToPtr("CPU usage"), + Type: gqlclient.DashboardGraphTypeTimeseries, + SectionID: lo.ToPtr("overview"), + Layout: v1alpha1.DashboardGraphLayout{X: 4, Y: 1, W: 8, H: 4}, + Datasource: &v1alpha1.DashboardDatasource{ + Type: gqlclient.DashboardDatasourceTypeMetrics, + Tool: "plrl_metrics", + Input: runtime.RawExtension{Raw: []byte(`{"query":"sum(rate(cpu[5m]))"}`)}, + }, + }, + }, + }, + }, nil)).To(Succeed()) + }) + + AfterAll(func() { + dashboard := &v1alpha1.Dashboard{} + if err := k8sClient.Get(ctx, typeNamespacedName, dashboard); err == nil { + By("Cleanup the Dashboard resource") + dashboard.Finalizers = nil + Expect(k8sClient.Update(ctx, dashboard)).To(Succeed()) + Expect(client.IgnoreNotFound(k8sClient.Delete(ctx, dashboard))).To(Succeed()) + } + workbench := &v1alpha1.Workbench{} + if err := k8sClient.Get(ctx, workbenchNamespacedName, workbench); err == nil { + By("Cleanup the parent Workbench resource") + Expect(k8sClient.Delete(ctx, workbench)).To(Succeed()) + } + }) + + It("should wait for the workbench to be ready", func() { + fakeConsoleClient := mocks.NewConsoleClientMock(mocks.TestingT) + fakeConsoleClient.On("UseCredentials", mock.Anything, mock.Anything).Return("", nil) + + result, err := newReconciler(fakeConsoleClient).Reconcile(ctx, reconcile.Request{NamespacedName: typeNamespacedName}) + Expect(err).NotTo(HaveOccurred()) + Expect(result.RequeueAfter).NotTo(BeZero()) + fakeConsoleClient.AssertNotCalled(GinkgoT(), "CreateDashboard", mock.Anything, mock.Anything) + + dashboard := &v1alpha1.Dashboard{} + Expect(k8sClient.Get(ctx, typeNamespacedName, dashboard)).To(Succeed()) + Expect(dashboard.Status.ID).To(BeNil()) + condition := meta.FindStatusCondition(dashboard.Status.Conditions, v1alpha1.SynchronizedConditionType.String()) + Expect(condition).NotTo(BeNil()) + Expect(condition.Status).To(Equal(metav1.ConditionFalse)) + Expect(condition.Message).To(ContainSubstring("workbench is not ready")) + }) + + It("should successfully create the dashboard", func() { + Expect(common.MaybePatch(k8sClient, &v1alpha1.Workbench{ + ObjectMeta: metav1.ObjectMeta{Name: workbenchName, Namespace: namespace}, + }, func(p *v1alpha1.Workbench) { + p.Status.ID = lo.ToPtr(workbenchID) + })).To(Succeed()) + + fakeConsoleClient := mocks.NewConsoleClientMock(mocks.TestingT) + fakeConsoleClient.On("UseCredentials", mock.Anything, mock.Anything).Return("", nil) + fakeConsoleClient.On("CreateDashboard", mock.Anything, mock.MatchedBy(func(attrs gqlclient.DashboardAttributes) bool { + if lo.FromPtr(attrs.WorkbenchID) != workbenchID || + lo.FromPtr(attrs.Name) != dashboardName || + lo.FromPtr(attrs.Description) != "Console overview" || + len(attrs.Graphs) != 3 || len(attrs.Inputs) != 2 { + return false + } + + section, notes, cpu := attrs.Graphs[0], attrs.Graphs[1], attrs.Graphs[2] + namespaceInput, podInput := attrs.Inputs[0], attrs.Inputs[1] + return section.Identifier == "overview" && + section.Type == gqlclient.DashboardGraphTypeSection && + jsonEqual(section.Options, map[string]any{"collapsed": true}) && + section.Layout == gqlclient.DashboardGraphLayoutAttributes{X: 0, Y: 0, W: 12, H: 1} && + section.Datasource == nil && + notes.Type == gqlclient.DashboardGraphTypeMarkdown && + lo.FromPtr(notes.Markdown) == "## Notes" && + lo.FromPtr(notes.SectionID) == "overview" && + notes.Options == nil && + cpu.Identifier == "cpu" && + lo.FromPtr(cpu.Title) == "CPU" && + lo.FromPtr(cpu.Description) == "CPU usage" && + cpu.Datasource != nil && + cpu.Datasource.Type == gqlclient.DashboardDatasourceTypeMetrics && + cpu.Datasource.Tool == "plrl_metrics" && + jsonEqual(&cpu.Datasource.Input, map[string]any{"query": "sum(rate(cpu[5m]))"}) && + namespaceInput.Name == "namespace" && + lo.FromPtr(namespaceInput.Label) == "Namespace" && + namespaceInput.Type == gqlclient.DashboardInputTypeText && + lo.FromPtr(namespaceInput.Default) == "plrl-console" && + lo.FromPtr(namespaceInput.Required) && + namespaceInput.Datasource == nil && + podInput.Type == gqlclient.DashboardInputTypeSelect && + len(podInput.Options) == 2 && lo.FromPtr(podInput.Options[1]) == "b" && + podInput.Datasource != nil && + podInput.Datasource.Type == gqlclient.DashboardDatasourceTypeLabels && + jsonEqual(&podInput.Datasource.Input, map[string]any{"metric": "up", "label": "pod"}) + })).Return(&gqlclient.WorkbenchDashboardFragment{ID: id}, nil) + + _, err := newReconciler(fakeConsoleClient).Reconcile(ctx, reconcile.Request{NamespacedName: typeNamespacedName}) + Expect(err).NotTo(HaveOccurred()) + fakeConsoleClient.AssertExpectations(GinkgoT()) + + dashboard := &v1alpha1.Dashboard{} + Expect(k8sClient.Get(ctx, typeNamespacedName, dashboard)).To(Succeed()) + Expect(dashboard.Status.SHA).NotTo(BeNil()) + expectedStatus := readyStatus(id) + expectedStatus.SHA = dashboard.Status.SHA + Expect(common.SanitizeStatusConditions(dashboard.Status)).To(Equal(common.SanitizeStatusConditions(expectedStatus))) + Expect(dashboard.Finalizers).To(ContainElement(controller.DashboardFinalizer)) + + By("checking that the workbench is set as the owner") + Expect(dashboard.OwnerReferences).To(HaveLen(1)) + Expect(dashboard.OwnerReferences[0].Kind).To(Equal("Workbench")) + Expect(dashboard.OwnerReferences[0].Name).To(Equal(workbenchName)) + }) + + It("should not update the dashboard when spec did not change", func() { + fakeConsoleClient := mocks.NewConsoleClientMock(mocks.TestingT) + fakeConsoleClient.On("UseCredentials", mock.Anything, mock.Anything).Return("", nil) + fakeConsoleClient.On("GetDashboard", mock.Anything, id).Return(&gqlclient.WorkbenchDashboardFragment{ID: id}, nil) + + _, err := newReconciler(fakeConsoleClient).Reconcile(ctx, reconcile.Request{NamespacedName: typeNamespacedName}) + Expect(err).NotTo(HaveOccurred()) + fakeConsoleClient.AssertExpectations(GinkgoT()) + fakeConsoleClient.AssertNotCalled(GinkgoT(), "UpdateDashboard", mock.Anything, mock.Anything, mock.Anything) + }) + + It("should successfully update the dashboard when spec changed", func() { + Expect(common.MaybePatchObject(k8sClient, &v1alpha1.Dashboard{ + ObjectMeta: metav1.ObjectMeta{Name: dashboardName, Namespace: namespace}, + }, func(p *v1alpha1.Dashboard) { + p.Spec.Name = lo.ToPtr("renamed-dashboard") + p.Spec.Graphs = p.Spec.Graphs[:2] + })).To(Succeed()) + + fakeConsoleClient := mocks.NewConsoleClientMock(mocks.TestingT) + fakeConsoleClient.On("UseCredentials", mock.Anything, mock.Anything).Return("", nil) + fakeConsoleClient.On("GetDashboard", mock.Anything, id).Return(&gqlclient.WorkbenchDashboardFragment{ID: id}, nil) + fakeConsoleClient.On("UpdateDashboard", mock.Anything, id, mock.MatchedBy(func(attrs gqlclient.DashboardAttributes) bool { + return lo.FromPtr(attrs.Name) == "renamed-dashboard" && len(attrs.Graphs) == 2 + })).Return(&gqlclient.WorkbenchDashboardFragment{ID: id}, nil) + + _, err := newReconciler(fakeConsoleClient).Reconcile(ctx, reconcile.Request{NamespacedName: typeNamespacedName}) + Expect(err).NotTo(HaveOccurred()) + fakeConsoleClient.AssertExpectations(GinkgoT()) + + dashboard := &v1alpha1.Dashboard{} + Expect(k8sClient.Get(ctx, typeNamespacedName, dashboard)).To(Succeed()) + Expect(meta.IsStatusConditionTrue(dashboard.Status.Conditions, v1alpha1.ReadyConditionType.String())).To(BeTrue()) + }) + + It("should recreate the dashboard when it no longer exists in the Console API", func() { + const newID = "dashboard-789" + + fakeConsoleClient := mocks.NewConsoleClientMock(mocks.TestingT) + fakeConsoleClient.On("UseCredentials", mock.Anything, mock.Anything).Return("", nil) + fakeConsoleClient.On("GetDashboard", mock.Anything, id).Return(nil, errors.NewNotFound(schema.GroupResource{}, id)) + fakeConsoleClient.On("CreateDashboard", mock.Anything, mock.Anything).Return(&gqlclient.WorkbenchDashboardFragment{ID: newID}, nil) + + _, err := newReconciler(fakeConsoleClient).Reconcile(ctx, reconcile.Request{NamespacedName: typeNamespacedName}) + Expect(err).NotTo(HaveOccurred()) + fakeConsoleClient.AssertExpectations(GinkgoT()) + + dashboard := &v1alpha1.Dashboard{} + Expect(k8sClient.Get(ctx, typeNamespacedName, dashboard)).To(Succeed()) + Expect(dashboard.Status.ID).To(Equal(lo.ToPtr(newID))) + + // Restore the original ID for the deletion test. + Expect(common.MaybePatch(k8sClient, &v1alpha1.Dashboard{ + ObjectMeta: metav1.ObjectMeta{Name: dashboardName, Namespace: namespace}, + }, func(p *v1alpha1.Dashboard) { + p.Status.ID = lo.ToPtr(id) + })).To(Succeed()) + }) + + It("should reject changing the workbench reference", func() { + err := common.MaybePatchObject(k8sClient, &v1alpha1.Dashboard{ + ObjectMeta: metav1.ObjectMeta{Name: dashboardName, Namespace: namespace}, + }, func(p *v1alpha1.Dashboard) { + p.Spec.WorkbenchRef = corev1.LocalObjectReference{Name: "another-workbench"} + }) + Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(ContainSubstring("workbenchRef is immutable")) + + dashboard := &v1alpha1.Dashboard{} + Expect(k8sClient.Get(ctx, typeNamespacedName, dashboard)).To(Succeed()) + Expect(dashboard.Spec.WorkbenchRef.Name).To(Equal(workbenchName)) + }) + + It("should return the error and keep the finalizer when the Console API fails during deletion", func() { + By("disabling drift detection, so that no requeue is scheduled from the reconciliation settings") + Expect(common.MaybePatchObject(k8sClient, &v1alpha1.Dashboard{ + ObjectMeta: metav1.ObjectMeta{Name: dashboardName, Namespace: namespace}, + }, func(p *v1alpha1.Dashboard) { + p.Spec.Reconciliation = &v1alpha1.Reconciliation{DriftDetection: lo.ToPtr(false)} + })).To(Succeed()) + + resource := &v1alpha1.Dashboard{} + Expect(k8sClient.Get(ctx, typeNamespacedName, resource)).To(Succeed()) + Expect(k8sClient.Delete(ctx, resource)).To(Succeed()) + + By("failing to check if the dashboard exists") + fakeConsoleClient := mocks.NewConsoleClientMock(mocks.TestingT) + fakeConsoleClient.On("UseCredentials", mock.Anything, mock.Anything).Return("", nil) + fakeConsoleClient.On("IsDashboardExists", mock.Anything, id).Return(false, fmt.Errorf("console unavailable")) + + _, err := newReconciler(fakeConsoleClient).Reconcile(ctx, reconcile.Request{NamespacedName: typeNamespacedName}) + Expect(err).To(MatchError(ContainSubstring("console unavailable"))) + fakeConsoleClient.AssertExpectations(GinkgoT()) + + By("failing to delete the dashboard") + fakeConsoleClient = mocks.NewConsoleClientMock(mocks.TestingT) + fakeConsoleClient.On("UseCredentials", mock.Anything, mock.Anything).Return("", nil) + fakeConsoleClient.On("IsDashboardExists", mock.Anything, id).Return(true, nil) + fakeConsoleClient.On("DeleteDashboard", mock.Anything, id).Return(fmt.Errorf("delete failed")) + + _, err = newReconciler(fakeConsoleClient).Reconcile(ctx, reconcile.Request{NamespacedName: typeNamespacedName}) + Expect(err).To(MatchError(ContainSubstring("delete failed"))) + fakeConsoleClient.AssertExpectations(GinkgoT()) + + dashboard := &v1alpha1.Dashboard{} + Expect(k8sClient.Get(ctx, typeNamespacedName, dashboard)).To(Succeed()) + Expect(dashboard.DeletionTimestamp).NotTo(BeNil()) + Expect(dashboard.Finalizers).To(ContainElement(controller.DashboardFinalizer)) + condition := meta.FindStatusCondition(dashboard.Status.Conditions, v1alpha1.SynchronizedConditionType.String()) + Expect(condition).NotTo(BeNil()) + Expect(condition.Status).To(Equal(metav1.ConditionFalse)) + Expect(condition.Message).To(ContainSubstring("delete failed")) + }) + + It("should successfully delete the dashboard", func() { + resource := &v1alpha1.Dashboard{} + Expect(k8sClient.Get(ctx, typeNamespacedName, resource)).To(Succeed()) + Expect(k8sClient.Delete(ctx, resource)).To(Succeed()) + + fakeConsoleClient := mocks.NewConsoleClientMock(mocks.TestingT) + fakeConsoleClient.On("UseCredentials", mock.Anything, mock.Anything).Return("", nil) + fakeConsoleClient.On("IsDashboardExists", mock.Anything, id).Return(true, nil) + fakeConsoleClient.On("DeleteDashboard", mock.Anything, id).Return(nil) + + _, err := newReconciler(fakeConsoleClient).Reconcile(ctx, reconcile.Request{NamespacedName: typeNamespacedName}) + Expect(err).NotTo(HaveOccurred()) + fakeConsoleClient.AssertExpectations(GinkgoT()) + + dashboard := &v1alpha1.Dashboard{} + err = k8sClient.Get(ctx, typeNamespacedName, dashboard) + Expect(errors.IsNotFound(err)).To(BeTrue()) + }) + }) + + Context("When validating Dashboard resources", func() { + newDashboard := func(name string, mutate func(spec *v1alpha1.DashboardSpec)) *v1alpha1.Dashboard { + d := &v1alpha1.Dashboard{ + ObjectMeta: metav1.ObjectMeta{Name: name, Namespace: namespace}, + Spec: v1alpha1.DashboardSpec{ + WorkbenchRef: corev1.LocalObjectReference{Name: "workbench"}, + Graphs: []v1alpha1.DashboardGraph{{ + Identifier: "notes", + Type: gqlclient.DashboardGraphTypeMarkdown, + Markdown: lo.ToPtr("notes"), + Layout: v1alpha1.DashboardGraphLayout{X: 0, Y: 0, W: 1, H: 1}, + }}, + }, + } + mutate(&d.Spec) + return d + } + + DescribeTable("should reject invalid resources", + func(name string, mutate func(spec *v1alpha1.DashboardSpec), message string) { + err := k8sClient.Create(ctx, newDashboard(name, mutate)) + Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(ContainSubstring(message)) + }, + Entry("empty workbench reference name", "invalid-dashboard-empty-ref", func(spec *v1alpha1.DashboardSpec) { + spec.WorkbenchRef = corev1.LocalObjectReference{} + }, "name is required"), + Entry("markdown graph without markdown", "invalid-dashboard-markdown", func(spec *v1alpha1.DashboardSpec) { + spec.Graphs[0].Markdown = nil + }, "markdown must be set for MARKDOWN graphs"), + Entry("duplicate graph identifiers", "invalid-dashboard-duplicate", func(spec *v1alpha1.DashboardSpec) { + spec.Graphs = append(spec.Graphs, spec.Graphs[0]) + }, "Duplicate value"), + Entry("empty graph size", "invalid-dashboard-layout", func(spec *v1alpha1.DashboardSpec) { + spec.Graphs[0].Layout.W = 0 + }, "spec.graphs[0].layout.w"), + Entry("invalid graph type", "invalid-dashboard-type", func(spec *v1alpha1.DashboardSpec) { + spec.Graphs[0].Type = "LINE" + }, "spec.graphs[0].type"), + Entry("graph referencing unknown section", "invalid-dashboard-unknown-section", func(spec *v1alpha1.DashboardSpec) { + spec.Graphs[0].SectionID = lo.ToPtr("missing") + }, "sectionId must reference an existing SECTION graph"), + Entry("graph referencing a non-section graph", "invalid-dashboard-non-section", func(spec *v1alpha1.DashboardSpec) { + spec.Graphs = append(spec.Graphs, v1alpha1.DashboardGraph{ + Identifier: "child", + Type: gqlclient.DashboardGraphTypeStat, + SectionID: lo.ToPtr("notes"), + Layout: v1alpha1.DashboardGraphLayout{X: 1, Y: 0, W: 1, H: 1}, + }) + }, "sectionId must reference an existing SECTION graph"), + Entry("nested sections", "invalid-dashboard-nested-sections", func(spec *v1alpha1.DashboardSpec) { + spec.Graphs = append(spec.Graphs, + v1alpha1.DashboardGraph{ + Identifier: "outer", + Type: gqlclient.DashboardGraphTypeSection, + Layout: v1alpha1.DashboardGraphLayout{X: 0, Y: 1, W: 1, H: 1}, + }, + v1alpha1.DashboardGraph{ + Identifier: "inner", + Type: gqlclient.DashboardGraphTypeSection, + SectionID: lo.ToPtr("outer"), + Layout: v1alpha1.DashboardGraphLayout{X: 0, Y: 2, W: 1, H: 1}, + }, + ) + }, "sections cannot be nested"), + ) + }) +}) diff --git a/go/controller/internal/controller/helpers_test.go b/go/controller/internal/controller/helpers_test.go new file mode 100644 index 0000000000..4ae8139508 --- /dev/null +++ b/go/controller/internal/controller/helpers_test.go @@ -0,0 +1,40 @@ +package controller_test + +import ( + "github.com/samber/lo" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + "github.com/pluralsh/console/go/controller/api/v1alpha1" +) + +// readyStatus returns the expected status of a successfully synchronized resource with the given ID. +func readyStatus(id string) v1alpha1.Status { + return v1alpha1.Status{ + ID: lo.ToPtr(id), + Conditions: []metav1.Condition{ + { + Type: v1alpha1.NamespacedCredentialsConditionType.String(), + Status: metav1.ConditionFalse, + Reason: v1alpha1.NamespacedCredentialsReasonDefault.String(), + Message: v1alpha1.NamespacedCredentialsConditionMessage.String(), + }, + { + Type: v1alpha1.ReadonlyConditionType.String(), + Status: metav1.ConditionFalse, + Reason: v1alpha1.ReadonlyConditionReason.String(), + Message: "", + }, + { + Type: v1alpha1.ReadyConditionType.String(), + Status: metav1.ConditionTrue, + Reason: v1alpha1.ReadyConditionReason.String(), + Message: "", + }, + { + Type: v1alpha1.SynchronizedConditionType.String(), + Status: metav1.ConditionTrue, + Reason: v1alpha1.SynchronizedConditionReason.String(), + }, + }, + } +} diff --git a/go/controller/internal/controller/monitor_controller.go b/go/controller/internal/controller/monitor_controller.go new file mode 100644 index 0000000000..99a16f4d17 --- /dev/null +++ b/go/controller/internal/controller/monitor_controller.go @@ -0,0 +1,279 @@ +package controller + +import ( + "context" + "fmt" + "strings" + + "github.com/samber/lo" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/errors" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/types" + ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/builder" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/controller" + "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" + "sigs.k8s.io/controller-runtime/pkg/log" + "sigs.k8s.io/controller-runtime/pkg/predicate" + "sigs.k8s.io/controller-runtime/pkg/reconcile" + + console "github.com/pluralsh/console/go/client" + "github.com/pluralsh/console/go/controller/api/v1alpha1" + consoleclient "github.com/pluralsh/console/go/controller/internal/client" + "github.com/pluralsh/console/go/controller/internal/common" + "github.com/pluralsh/console/go/controller/internal/credentials" + "github.com/pluralsh/console/go/controller/internal/utils" +) + +// MonitorReconciler reconciles a v1alpha1.Monitor object. +// Implements reconcile.Reconciler and types.Controller. +type MonitorReconciler struct { + client.Client + ConsoleClient consoleclient.ConsoleClient + Scheme *runtime.Scheme + CredentialsCache credentials.NamespaceCredentialsCache +} + +const ( + // MonitorFinalizer defines the name for the main finalizer that synchronizes + // resource deletion from the Console API prior to removing the CRD. + MonitorFinalizer = "deployments.plural.sh/monitor-protection" +) + +// +kubebuilder:rbac:groups=deployments.plural.sh,resources=monitors,verbs=get;list;watch;create;update;patch;delete +// +kubebuilder:rbac:groups=deployments.plural.sh,resources=monitors/status,verbs=get;update;patch +// +kubebuilder:rbac:groups=deployments.plural.sh,resources=monitors/finalizers,verbs=update + +// Reconcile is part of the main kubernetes reconciliation loop which aims to +// move the current state of the v1alpha1.Monitor closer to the desired state +// and syncs it with the Console API state. +func (in *MonitorReconciler) Reconcile(ctx context.Context, req reconcile.Request) (_ reconcile.Result, reterr error) { + logger := log.FromContext(ctx) + + monitor := new(v1alpha1.Monitor) + if err := in.Get(ctx, req.NamespacedName, monitor); err != nil { + return ctrl.Result{}, client.IgnoreNotFound(err) + } + + scope, err := common.NewDefaultScope(ctx, in.Client, monitor) + if err != nil { + logger.Error(err, "failed to create scope") + return ctrl.Result{}, err + } + defer func() { + if err := scope.PatchObject(); err != nil && reterr == nil { + reterr = err + } + }() + + // Switch to namespace credentials if configured. This has to be done before sending any request to the console. + nc, err := in.ConsoleClient.UseCredentials(req.Namespace, in.CredentialsCache) + credentials.SyncCredentialsInfo(monitor, monitor.SetCondition, nc, err) + if err != nil { + logger.Error(err, "failed to use namespace credentials", "namespaceCredentials", nc, "namespacedName", req.NamespacedName) + utils.MarkCondition(monitor.SetCondition, v1alpha1.SynchronizedConditionType, v1.ConditionFalse, v1alpha1.SynchronizedConditionReasonError, fmt.Sprintf("failed to use %s namespace credentials: %s", nc, err.Error())) + return ctrl.Result{}, err + } + + // Mark the resource as not ready. This will be overridden in the end. + utils.MarkCondition(monitor.SetCondition, v1alpha1.ReadyConditionType, v1.ConditionFalse, v1alpha1.ReadyConditionReason, "") + + // Handle proper resource deletion via finalizer + if result, err := in.addOrRemoveFinalizer(ctx, monitor); result != nil || err != nil { + return common.HandleRequeue(result, err, monitor.SetCondition) + } + + // Mark resource as managed by this operator. + utils.MarkCondition(monitor.SetCondition, v1alpha1.ReadonlyConditionType, v1.ConditionFalse, v1alpha1.ReadonlyConditionReason, "") + + // Get Monitor SHA that can be saved back in the status to check for changes + changed, sha, err := monitor.Diff(utils.HashObject) + if err != nil { + logger.Error(err, "unable to calculate monitor SHA") + utils.MarkCondition(monitor.SetCondition, v1alpha1.SynchronizedConditionType, v1.ConditionFalse, v1alpha1.SynchronizedConditionReasonError, err.Error()) + return ctrl.Result{}, err + } + + // Get the service this monitor is attached to. + serviceID, res, err := in.handleService(ctx, monitor) + if res != nil || err != nil { + return common.HandleRequeue(res, err, monitor.SetCondition) + } + + // Get the optional workbench this monitor is attached to. + workbenchID, res, err := in.handleWorkbenchRef(ctx, monitor) + if res != nil || err != nil { + return common.HandleRequeue(res, err, monitor.SetCondition) + } + + attributes, err := monitor.Attributes(serviceID, workbenchID) + if err != nil { + return common.HandleRequeue(nil, err, monitor.SetCondition) + } + + // Sync Monitor CRD with the Console API + apiMonitor, err := in.sync(ctx, monitor, *attributes, changed) + if err != nil { + return common.HandleRequeue(nil, err, monitor.SetCondition) + } + + monitor.Status.ID = &apiMonitor.ID + monitor.Status.SHA = &sha + + utils.MarkCondition(monitor.SetCondition, v1alpha1.ReadyConditionType, v1.ConditionTrue, v1alpha1.ReadyConditionReason, "") + utils.MarkCondition(monitor.SetCondition, v1alpha1.SynchronizedConditionType, v1.ConditionTrue, v1alpha1.SynchronizedConditionReason, "") + + return monitor.Spec.Reconciliation.Requeue(), nil +} + +// addOrRemoveFinalizer adds the finalizer or, during deletion, removes the resource from Console first. +// Console errors are returned, not requeued via Spec.Reconciliation, which never requeues without drift detection. +func (in *MonitorReconciler) addOrRemoveFinalizer(ctx context.Context, monitor *v1alpha1.Monitor) (*ctrl.Result, error) { + if monitor.DeletionTimestamp.IsZero() && !controllerutil.ContainsFinalizer(monitor, MonitorFinalizer) { + controllerutil.AddFinalizer(monitor, MonitorFinalizer) + } + + // If the monitor is being deleted, cleanup and remove the finalizer. + if !monitor.DeletionTimestamp.IsZero() { + // If the monitor does not have an ID, the finalizer can be removed. + if !monitor.Status.HasID() { + controllerutil.RemoveFinalizer(monitor, MonitorFinalizer) + return &ctrl.Result{}, nil + } + + exists, err := in.ConsoleClient.IsMonitorExists(ctx, monitor.Status.GetID()) + if err != nil { + return nil, err + } + + // Remove the monitor from Console API if it exists. + if exists { + if err = in.ConsoleClient.DeleteMonitor(ctx, monitor.Status.GetID()); err != nil { + // If it fails to delete the external dependency here, return with the error + // so that it can be retried. + return nil, err + } + } + + // If our finalizer is present, remove it. + controllerutil.RemoveFinalizer(monitor, MonitorFinalizer) + + // Stop reconciliation as the item does no longer exist. + return &ctrl.Result{}, nil + } + + return nil, nil +} + +// handleService resolves the service ID either from the ServiceDeployment referenced by spec.serviceRef +// or from the existing Console API service referenced by spec.service ("cluster-handle/service-name"). +func (in *MonitorReconciler) handleService(ctx context.Context, monitor *v1alpha1.Monitor) (string, *ctrl.Result, error) { + if monitor.Spec.ServiceRef != nil { + service := &v1alpha1.ServiceDeployment{} + if err := in.Get(ctx, client.ObjectKey{Name: monitor.Spec.ServiceRef.Name, Namespace: monitor.Namespace}, service); err != nil { + if errors.IsNotFound(err) { + return "", lo.ToPtr(common.Wait()), fmt.Errorf("service not found: %s", err.Error()) + } + return "", nil, fmt.Errorf("failed to get service: %s", err.Error()) + } + + if !service.Status.HasID() { + return "", lo.ToPtr(common.Wait()), fmt.Errorf("service is not ready") + } + + // Make the current service the only ServiceDeployment owner. + removeServiceOwnerReferences(monitor, service.GetUID()) + if err := controllerutil.SetOwnerReference(service, monitor, in.Scheme); err != nil { + return "", nil, fmt.Errorf("failed to set owner reference: %w", err) + } + + return service.Status.GetID(), nil, nil + } + + // Drop owners left by a previous serviceRef, so that deleting that service does not delete this monitor. + removeServiceOwnerReferences(monitor, "") + + if monitor.Spec.Service != nil { + ref := lo.FromPtr(monitor.Spec.Service) + split := strings.Split(ref, "/") + if len(split) != 2 || split[0] == "" || split[1] == "" { + return "", nil, fmt.Errorf("invalid service reference %q, expected format cluster-handle/service-name", ref) + } + + clusterHandle, serviceName := split[0], split[1] + service, err := in.ConsoleClient.GetServiceTinyByHandle(clusterHandle, serviceName) + if errors.IsNotFound(err) { + return "", lo.ToPtr(common.Wait()), fmt.Errorf("service %s not found", ref) + } + if err != nil { + return "", nil, fmt.Errorf("failed to get service %s: %s", ref, err.Error()) + } + + return service.ID, nil, nil + } + + return "", nil, fmt.Errorf("either spec.serviceRef or spec.service must be set") +} + +// removeServiceOwnerReferences removes ServiceDeployment owners except the one with the given UID (empty removes all). +func removeServiceOwnerReferences(monitor *v1alpha1.Monitor, keep types.UID) { + serviceGroup := v1alpha1.GroupVersion.Group + monitor.SetOwnerReferences(lo.Reject(monitor.GetOwnerReferences(), func(ref v1.OwnerReference, _ int) bool { + group, _, _ := strings.Cut(ref.APIVersion, "/") + return group == serviceGroup && ref.Kind == "ServiceDeployment" && (keep == "" || ref.UID != keep) + })) +} + +func (in *MonitorReconciler) handleWorkbenchRef(ctx context.Context, monitor *v1alpha1.Monitor) (*string, *ctrl.Result, error) { + if monitor.Spec.WorkbenchRef == nil { + return nil, nil, nil + } + + workbenchID, res, err := common.WorkbenchID(ctx, in.Client, corev1.ObjectReference{Name: monitor.Spec.WorkbenchRef.Name}, monitor.Namespace) + if res != nil || err != nil { + return nil, res, err + } + + return &workbenchID, nil, nil +} + +func (in *MonitorReconciler) sync(ctx context.Context, monitor *v1alpha1.Monitor, attributes console.MonitorAttributes, changed bool) (*console.MonitorFragment, error) { + logger := log.FromContext(ctx) + + // If we already have an ID, try to get the existing resource. + if monitor.Status.HasID() { + existingMonitor, err := in.ConsoleClient.GetMonitor(ctx, monitor.Status.GetID()) + if err != nil { + if !errors.IsNotFound(err) { + return nil, err + } + // Not found by ID, create a new one. + logger.Info(fmt.Sprintf("monitor %s not found by ID, creating it", monitor.Name)) + return in.ConsoleClient.CreateMonitor(ctx, attributes) + } + + if changed { + logger.Info(fmt.Sprintf("updating monitor %s", monitor.Name)) + return in.ConsoleClient.UpdateMonitor(ctx, existingMonitor.ID, attributes) + } + + return existingMonitor, nil + } + + // No ID yet, create a new monitor. + logger.Info(fmt.Sprintf("creating monitor %s", monitor.Name)) + return in.ConsoleClient.CreateMonitor(ctx, attributes) +} + +// SetupWithManager is responsible for initializing a new reconciler within the provided ctrl.Manager. +func (in *MonitorReconciler) SetupWithManager(mgr ctrl.Manager) error { + mgr.GetLogger().Info("Starting reconciler", "reconciler", "monitor_reconciler") + return ctrl.NewControllerManagedBy(mgr). + WithOptions(controller.Options{MaxConcurrentReconciles: 1}). + Watches(&v1alpha1.NamespaceCredentials{}, credentials.OnCredentialsChange(in.Client, new(v1alpha1.MonitorList))). + For(&v1alpha1.Monitor{}, builder.WithPredicates(predicate.GenerationChangedPredicate{})). + Complete(in) +} diff --git a/go/controller/internal/controller/monitor_controller_test.go b/go/controller/internal/controller/monitor_controller_test.go new file mode 100644 index 0000000000..9487e03489 --- /dev/null +++ b/go/controller/internal/controller/monitor_controller_test.go @@ -0,0 +1,660 @@ +package controller_test + +import ( + "context" + "fmt" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + "github.com/samber/lo" + "github.com/stretchr/testify/mock" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/api/meta" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/types" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/reconcile" + + gqlclient "github.com/pluralsh/console/go/client" + "github.com/pluralsh/console/go/controller/api/v1alpha1" + "github.com/pluralsh/console/go/controller/internal/controller" + common "github.com/pluralsh/console/go/controller/internal/test/common" + "github.com/pluralsh/console/go/controller/internal/test/mocks" +) + +var _ = Describe("Monitor Controller", Ordered, func() { + const namespace = "default" + ctx := context.Background() + + newReconciler := func(consoleClient *mocks.ConsoleClientMock) *controller.MonitorReconciler { + return &controller.MonitorReconciler{ + Client: k8sClient, + Scheme: k8sClient.Scheme(), + ConsoleClient: consoleClient, + CredentialsCache: nil, + } + } + + Context("When reconciling a log monitor referencing an existing service by handle", func() { + const ( + monitorName = "test-monitor-handle" + workbenchName = "test-workbench-for-monitor" + id = "monitor-123" + serviceID = "service-123" + workbenchID = "workbench-123" + ) + + typeNamespacedName := types.NamespacedName{Name: monitorName, Namespace: namespace} + workbenchNamespacedName := types.NamespacedName{Name: workbenchName, Namespace: namespace} + + BeforeAll(func() { + By("creating the Workbench resource") + Expect(common.MaybeCreate(k8sClient, &v1alpha1.Workbench{ + ObjectMeta: metav1.ObjectMeta{Name: workbenchName, Namespace: namespace}, + Spec: v1alpha1.WorkbenchSpec{Name: lo.ToPtr(workbenchName)}, + }, func(p *v1alpha1.Workbench) { + p.Status.ID = lo.ToPtr(workbenchID) + })).To(Succeed()) + + By("creating the Monitor resource") + Expect(common.MaybeCreate(k8sClient, &v1alpha1.Monitor{ + ObjectMeta: metav1.ObjectMeta{Name: monitorName, Namespace: namespace}, + Spec: v1alpha1.MonitorSpec{ + Name: lo.ToPtr("console-error-logs"), + Service: lo.ToPtr("mgmt/console"), + WorkbenchRef: &corev1.LocalObjectReference{Name: workbenchName}, + Prompt: lo.ToPtr("Investigate the errors"), + Modes: &v1alpha1.WorkbenchJobModes{ + Plan: lo.ToPtr(true), + Budget: &v1alpha1.WorkbenchJobBudget{Cost: lo.ToPtr("5.5"), Tokens: lo.ToPtr(int64(1000))}, + Kubernetes: &v1alpha1.WorkbenchJobKubernetesModes{ + Delete: lo.ToPtr(false), + ExcludeNamespaces: []string{"kube-system"}, + }, + }, + Description: lo.ToPtr("Fires on too many error logs"), + Severity: gqlclient.AlertSeverityHigh, + Type: gqlclient.MonitorTypeLog, + EvaluationCron: "*/5 * * * *", + Query: v1alpha1.MonitorQuery{ + Log: &v1alpha1.MonitorLogQuery{ + Query: "error", + BucketSize: "5m", + Duration: lo.ToPtr("30m"), + Operator: lo.ToPtr(gqlclient.MonitorOperatorOr), + Facets: []v1alpha1.MonitorFacet{{Key: "namespace", Value: "plrl-console"}}, + }, + }, + Threshold: v1alpha1.MonitorThreshold{Aggregate: gqlclient.MonitorAggregateMax, Value: "100.5"}, + }, + }, nil)).To(Succeed()) + }) + + AfterAll(func() { + monitor := &v1alpha1.Monitor{} + if err := k8sClient.Get(ctx, typeNamespacedName, monitor); err == nil { + By("Cleanup the Monitor resource") + monitor.Finalizers = nil + Expect(k8sClient.Update(ctx, monitor)).To(Succeed()) + Expect(client.IgnoreNotFound(k8sClient.Delete(ctx, monitor))).To(Succeed()) + } + workbench := &v1alpha1.Workbench{} + if err := k8sClient.Get(ctx, workbenchNamespacedName, workbench); err == nil { + By("Cleanup the Workbench resource") + Expect(k8sClient.Delete(ctx, workbench)).To(Succeed()) + } + }) + + It("should successfully create the monitor", func() { + fakeConsoleClient := mocks.NewConsoleClientMock(mocks.TestingT) + fakeConsoleClient.On("UseCredentials", mock.Anything, mock.Anything).Return("", nil) + fakeConsoleClient.On("GetServiceTinyByHandle", "mgmt", "console").Return(&gqlclient.GetServiceDeploymentTinyByHandle_ServiceDeployment{ID: serviceID, Name: "console"}, nil) + fakeConsoleClient.On("CreateMonitor", mock.Anything, mock.MatchedBy(func(attrs gqlclient.MonitorAttributes) bool { + return attrs.ServiceID == serviceID && + lo.FromPtr(attrs.WorkbenchID) == workbenchID && + attrs.Name == "console-error-logs" && + lo.FromPtr(attrs.Prompt) == "Investigate the errors" && + attrs.Severity == gqlclient.AlertSeverityHigh && + attrs.Type == gqlclient.MonitorTypeLog && + attrs.EvaluationCron == "*/5 * * * *" && + attrs.Query.Metrics == nil && + attrs.Query.Log != nil && + attrs.Query.Log.Query == "error" && + attrs.Query.Log.BucketSize == "5m" && + lo.FromPtr(attrs.Query.Log.Duration) == "30m" && + lo.FromPtr(attrs.Query.Log.Operator) == gqlclient.MonitorOperatorOr && + len(attrs.Query.Log.Facets) == 1 && + attrs.Query.Log.Facets[0].Key == "namespace" && + attrs.Query.Log.Facets[0].Value == "plrl-console" && + attrs.Threshold.Aggregate == gqlclient.MonitorAggregateMax && + attrs.Threshold.Value == 100.5 && + attrs.Modes != nil && + lo.FromPtr(attrs.Modes.Plan) && + attrs.Modes.Budget != nil && + lo.FromPtr(attrs.Modes.Budget.Cost) == 5.5 && + lo.FromPtr(attrs.Modes.Budget.Tokens) == 1000 && + attrs.Modes.Kubernetes != nil && + !lo.FromPtr(attrs.Modes.Kubernetes.Delete) && + len(attrs.Modes.Kubernetes.ExcludeNamespaces) == 1 && + lo.FromPtr(attrs.Modes.Kubernetes.ExcludeNamespaces[0]) == "kube-system" + })).Return(&gqlclient.MonitorFragment{ID: id}, nil) + + _, err := newReconciler(fakeConsoleClient).Reconcile(ctx, reconcile.Request{NamespacedName: typeNamespacedName}) + Expect(err).NotTo(HaveOccurred()) + fakeConsoleClient.AssertExpectations(GinkgoT()) + + monitor := &v1alpha1.Monitor{} + Expect(k8sClient.Get(ctx, typeNamespacedName, monitor)).To(Succeed()) + Expect(monitor.Status.SHA).NotTo(BeNil()) + expectedStatus := readyStatus(id) + expectedStatus.SHA = monitor.Status.SHA + Expect(common.SanitizeStatusConditions(monitor.Status)).To(Equal(common.SanitizeStatusConditions(expectedStatus))) + Expect(monitor.Finalizers).To(ContainElement(controller.MonitorFinalizer)) + Expect(monitor.OwnerReferences).To(BeEmpty()) + }) + + It("should not update the monitor when spec did not change", func() { + fakeConsoleClient := mocks.NewConsoleClientMock(mocks.TestingT) + fakeConsoleClient.On("UseCredentials", mock.Anything, mock.Anything).Return("", nil) + fakeConsoleClient.On("GetServiceTinyByHandle", "mgmt", "console").Return(&gqlclient.GetServiceDeploymentTinyByHandle_ServiceDeployment{ID: serviceID, Name: "console"}, nil) + fakeConsoleClient.On("GetMonitor", mock.Anything, id).Return(&gqlclient.MonitorFragment{ID: id}, nil) + + _, err := newReconciler(fakeConsoleClient).Reconcile(ctx, reconcile.Request{NamespacedName: typeNamespacedName}) + Expect(err).NotTo(HaveOccurred()) + fakeConsoleClient.AssertExpectations(GinkgoT()) + fakeConsoleClient.AssertNotCalled(GinkgoT(), "UpdateMonitor", mock.Anything, mock.Anything, mock.Anything) + fakeConsoleClient.AssertNotCalled(GinkgoT(), "CreateMonitor", mock.Anything, mock.Anything) + }) + + It("should successfully update the monitor when spec changed", func() { + Expect(common.MaybePatchObject(k8sClient, &v1alpha1.Monitor{ + ObjectMeta: metav1.ObjectMeta{Name: monitorName, Namespace: namespace}, + }, func(p *v1alpha1.Monitor) { + p.Spec.Severity = gqlclient.AlertSeverityCritical + p.Spec.Threshold.Value = "200" + })).To(Succeed()) + + previous := &v1alpha1.Monitor{} + Expect(k8sClient.Get(ctx, typeNamespacedName, previous)).To(Succeed()) + + fakeConsoleClient := mocks.NewConsoleClientMock(mocks.TestingT) + fakeConsoleClient.On("UseCredentials", mock.Anything, mock.Anything).Return("", nil) + fakeConsoleClient.On("GetServiceTinyByHandle", "mgmt", "console").Return(&gqlclient.GetServiceDeploymentTinyByHandle_ServiceDeployment{ID: serviceID, Name: "console"}, nil) + fakeConsoleClient.On("GetMonitor", mock.Anything, id).Return(&gqlclient.MonitorFragment{ID: id}, nil) + fakeConsoleClient.On("UpdateMonitor", mock.Anything, id, mock.MatchedBy(func(attrs gqlclient.MonitorAttributes) bool { + return attrs.ServiceID == serviceID && + attrs.Severity == gqlclient.AlertSeverityCritical && + attrs.Threshold.Value == 200 + })).Return(&gqlclient.MonitorFragment{ID: id}, nil) + + _, err := newReconciler(fakeConsoleClient).Reconcile(ctx, reconcile.Request{NamespacedName: typeNamespacedName}) + Expect(err).NotTo(HaveOccurred()) + fakeConsoleClient.AssertExpectations(GinkgoT()) + + monitor := &v1alpha1.Monitor{} + Expect(k8sClient.Get(ctx, typeNamespacedName, monitor)).To(Succeed()) + Expect(monitor.Status.ID).To(Equal(lo.ToPtr(id))) + Expect(monitor.Status.SHA).NotTo(Equal(previous.Status.SHA)) + Expect(meta.IsStatusConditionTrue(monitor.Status.Conditions, v1alpha1.ReadyConditionType.String())).To(BeTrue()) + }) + + It("should send the full query when switching the monitor type", func() { + // Full update, as common.MaybePatchObject cannot remove fields. + monitor := &v1alpha1.Monitor{} + Expect(k8sClient.Get(ctx, typeNamespacedName, monitor)).To(Succeed()) + monitor.Spec.Type = gqlclient.MonitorTypeMetrics + monitor.Spec.Query = v1alpha1.MonitorQuery{Metrics: &v1alpha1.MonitorMetricsQuery{Query: "up"}} + monitor.Spec.Description = nil + monitor.Spec.Modes = nil + Expect(k8sClient.Update(ctx, monitor)).To(Succeed()) + + updated := &v1alpha1.Monitor{} + Expect(k8sClient.Get(ctx, typeNamespacedName, updated)).To(Succeed()) + Expect(updated.Spec.Query.Log).To(BeNil()) + Expect(updated.Spec.Description).To(BeNil()) + Expect(updated.Spec.Modes).To(BeNil()) + + fakeConsoleClient := mocks.NewConsoleClientMock(mocks.TestingT) + fakeConsoleClient.On("UseCredentials", mock.Anything, mock.Anything).Return("", nil) + fakeConsoleClient.On("GetServiceTinyByHandle", "mgmt", "console").Return(&gqlclient.GetServiceDeploymentTinyByHandle_ServiceDeployment{ID: serviceID, Name: "console"}, nil) + fakeConsoleClient.On("GetMonitor", mock.Anything, id).Return(&gqlclient.MonitorFragment{ID: id}, nil) + fakeConsoleClient.On("UpdateMonitor", mock.Anything, id, mock.MatchedBy(func(attrs gqlclient.MonitorAttributes) bool { + // Removed fields must be nil so that Console clears them. + return attrs.Type == gqlclient.MonitorTypeMetrics && + attrs.Query.Log == nil && + attrs.Query.Metrics != nil && + attrs.Query.Metrics.Query == "up" && + attrs.Description == nil && + attrs.Modes == nil + })).Return(&gqlclient.MonitorFragment{ID: id}, nil) + + _, err := newReconciler(fakeConsoleClient).Reconcile(ctx, reconcile.Request{NamespacedName: typeNamespacedName}) + Expect(err).NotTo(HaveOccurred()) + fakeConsoleClient.AssertExpectations(GinkgoT()) + }) + + It("should recreate the monitor when it no longer exists in the Console API", func() { + const newID = "monitor-456" + + fakeConsoleClient := mocks.NewConsoleClientMock(mocks.TestingT) + fakeConsoleClient.On("UseCredentials", mock.Anything, mock.Anything).Return("", nil) + fakeConsoleClient.On("GetServiceTinyByHandle", "mgmt", "console").Return(&gqlclient.GetServiceDeploymentTinyByHandle_ServiceDeployment{ID: serviceID, Name: "console"}, nil) + fakeConsoleClient.On("GetMonitor", mock.Anything, id).Return(nil, errors.NewNotFound(schema.GroupResource{}, id)) + fakeConsoleClient.On("CreateMonitor", mock.Anything, mock.Anything).Return(&gqlclient.MonitorFragment{ID: newID}, nil) + + _, err := newReconciler(fakeConsoleClient).Reconcile(ctx, reconcile.Request{NamespacedName: typeNamespacedName}) + Expect(err).NotTo(HaveOccurred()) + fakeConsoleClient.AssertExpectations(GinkgoT()) + + monitor := &v1alpha1.Monitor{} + Expect(k8sClient.Get(ctx, typeNamespacedName, monitor)).To(Succeed()) + Expect(monitor.Status.ID).To(Equal(lo.ToPtr(newID))) + + // Restore the original ID for the deletion test. + Expect(common.MaybePatch(k8sClient, &v1alpha1.Monitor{ + ObjectMeta: metav1.ObjectMeta{Name: monitorName, Namespace: namespace}, + }, func(p *v1alpha1.Monitor) { + p.Status.ID = lo.ToPtr(id) + })).To(Succeed()) + }) + + It("should return the error and keep the finalizer when the Console API fails during deletion", func() { + By("disabling drift detection, so that no requeue is scheduled from the reconciliation settings") + Expect(common.MaybePatchObject(k8sClient, &v1alpha1.Monitor{ + ObjectMeta: metav1.ObjectMeta{Name: monitorName, Namespace: namespace}, + }, func(p *v1alpha1.Monitor) { + p.Spec.Reconciliation = &v1alpha1.Reconciliation{DriftDetection: lo.ToPtr(false)} + })).To(Succeed()) + + resource := &v1alpha1.Monitor{} + Expect(k8sClient.Get(ctx, typeNamespacedName, resource)).To(Succeed()) + Expect(k8sClient.Delete(ctx, resource)).To(Succeed()) + + By("failing to check if the monitor exists") + fakeConsoleClient := mocks.NewConsoleClientMock(mocks.TestingT) + fakeConsoleClient.On("UseCredentials", mock.Anything, mock.Anything).Return("", nil) + fakeConsoleClient.On("IsMonitorExists", mock.Anything, id).Return(false, fmt.Errorf("console unavailable")) + + _, err := newReconciler(fakeConsoleClient).Reconcile(ctx, reconcile.Request{NamespacedName: typeNamespacedName}) + Expect(err).To(MatchError(ContainSubstring("console unavailable"))) + fakeConsoleClient.AssertExpectations(GinkgoT()) + + By("failing to delete the monitor") + fakeConsoleClient = mocks.NewConsoleClientMock(mocks.TestingT) + fakeConsoleClient.On("UseCredentials", mock.Anything, mock.Anything).Return("", nil) + fakeConsoleClient.On("IsMonitorExists", mock.Anything, id).Return(true, nil) + fakeConsoleClient.On("DeleteMonitor", mock.Anything, id).Return(fmt.Errorf("delete failed")) + + _, err = newReconciler(fakeConsoleClient).Reconcile(ctx, reconcile.Request{NamespacedName: typeNamespacedName}) + Expect(err).To(MatchError(ContainSubstring("delete failed"))) + fakeConsoleClient.AssertExpectations(GinkgoT()) + + monitor := &v1alpha1.Monitor{} + Expect(k8sClient.Get(ctx, typeNamespacedName, monitor)).To(Succeed()) + Expect(monitor.DeletionTimestamp).NotTo(BeNil()) + Expect(monitor.Finalizers).To(ContainElement(controller.MonitorFinalizer)) + condition := meta.FindStatusCondition(monitor.Status.Conditions, v1alpha1.SynchronizedConditionType.String()) + Expect(condition).NotTo(BeNil()) + Expect(condition.Status).To(Equal(metav1.ConditionFalse)) + Expect(condition.Message).To(ContainSubstring("delete failed")) + }) + + It("should successfully delete the monitor", func() { + resource := &v1alpha1.Monitor{} + Expect(k8sClient.Get(ctx, typeNamespacedName, resource)).To(Succeed()) + Expect(k8sClient.Delete(ctx, resource)).To(Succeed()) + + fakeConsoleClient := mocks.NewConsoleClientMock(mocks.TestingT) + fakeConsoleClient.On("UseCredentials", mock.Anything, mock.Anything).Return("", nil) + fakeConsoleClient.On("IsMonitorExists", mock.Anything, id).Return(true, nil) + fakeConsoleClient.On("DeleteMonitor", mock.Anything, id).Return(nil) + + _, err := newReconciler(fakeConsoleClient).Reconcile(ctx, reconcile.Request{NamespacedName: typeNamespacedName}) + Expect(err).NotTo(HaveOccurred()) + fakeConsoleClient.AssertExpectations(GinkgoT()) + + monitor := &v1alpha1.Monitor{} + err = k8sClient.Get(ctx, typeNamespacedName, monitor) + Expect(errors.IsNotFound(err)).To(BeTrue()) + }) + }) + + Context("When reconciling a metrics monitor referencing a ServiceDeployment", func() { + const ( + monitorName = "test-monitor-service-ref" + serviceName = "test-service-for-monitor" + otherName = "test-other-service-for-monitor" + otherID = "service-other-789" + clusterName = "test-cluster-for-monitor" + id = "monitor-789" + serviceID = "service-789" + ) + + typeNamespacedName := types.NamespacedName{Name: monitorName, Namespace: namespace} + serviceNamespacedName := types.NamespacedName{Name: serviceName, Namespace: namespace} + otherNamespacedName := types.NamespacedName{Name: otherName, Namespace: namespace} + + BeforeAll(func() { + By("creating the Monitor resource before the service exists") + Expect(common.MaybeCreate(k8sClient, &v1alpha1.Monitor{ + ObjectMeta: metav1.ObjectMeta{Name: monitorName, Namespace: namespace}, + Spec: v1alpha1.MonitorSpec{ + ServiceRef: &corev1.LocalObjectReference{Name: serviceName}, + Severity: gqlclient.AlertSeverityMedium, + Type: gqlclient.MonitorTypeMetrics, + EvaluationCron: "*/10 * * * *", + Query: v1alpha1.MonitorQuery{ + Metrics: &v1alpha1.MonitorMetricsQuery{ + Query: "sum(rate(container_cpu_usage_seconds_total[5m]))", + Step: lo.ToPtr("1m"), + Duration: lo.ToPtr("1h"), + Options: &v1alpha1.MonitorMetricsOptions{ + Azure: &v1alpha1.MonitorMetricsAzureOptions{ResourceID: lo.ToPtr("resource-id")}, + }, + }, + }, + Threshold: v1alpha1.MonitorThreshold{Aggregate: gqlclient.MonitorAggregateAvg, Value: "0.8"}, + }, + }, nil)).To(Succeed()) + }) + + AfterAll(func() { + monitor := &v1alpha1.Monitor{} + if err := k8sClient.Get(ctx, typeNamespacedName, monitor); err == nil { + By("Cleanup the Monitor resource") + monitor.Finalizers = nil + Expect(k8sClient.Update(ctx, monitor)).To(Succeed()) + Expect(client.IgnoreNotFound(k8sClient.Delete(ctx, monitor))).To(Succeed()) + } + for _, name := range []types.NamespacedName{serviceNamespacedName, otherNamespacedName} { + service := &v1alpha1.ServiceDeployment{} + if err := k8sClient.Get(ctx, name, service); err == nil { + By("Cleanup the ServiceDeployment resource " + name.Name) + service.Finalizers = nil + Expect(k8sClient.Update(ctx, service)).To(Succeed()) + Expect(client.IgnoreNotFound(k8sClient.Delete(ctx, service))).To(Succeed()) + } + } + }) + + It("should wait for the referenced service", func() { + fakeConsoleClient := mocks.NewConsoleClientMock(mocks.TestingT) + fakeConsoleClient.On("UseCredentials", mock.Anything, mock.Anything).Return("", nil) + + result, err := newReconciler(fakeConsoleClient).Reconcile(ctx, reconcile.Request{NamespacedName: typeNamespacedName}) + Expect(err).NotTo(HaveOccurred()) + Expect(result.RequeueAfter).NotTo(BeZero()) + fakeConsoleClient.AssertNotCalled(GinkgoT(), "CreateMonitor", mock.Anything, mock.Anything) + + monitor := &v1alpha1.Monitor{} + Expect(k8sClient.Get(ctx, typeNamespacedName, monitor)).To(Succeed()) + Expect(monitor.Status.ID).To(BeNil()) + Expect(meta.IsStatusConditionFalse(monitor.Status.Conditions, v1alpha1.ReadyConditionType.String())).To(BeTrue()) + Expect(meta.IsStatusConditionFalse(monitor.Status.Conditions, v1alpha1.SynchronizedConditionType.String())).To(BeTrue()) + }) + + It("should wait for the referenced service to be ready", func() { + By("creating the ServiceDeployment resource without an ID") + Expect(common.MaybeCreate(k8sClient, &v1alpha1.ServiceDeployment{ + ObjectMeta: metav1.ObjectMeta{Name: serviceName, Namespace: namespace}, + Spec: v1alpha1.ServiceSpec{ + Version: lo.ToPtr("1.0"), + ClusterRef: corev1.ObjectReference{Name: clusterName, Namespace: namespace}, + }, + }, nil)).To(Succeed()) + + fakeConsoleClient := mocks.NewConsoleClientMock(mocks.TestingT) + fakeConsoleClient.On("UseCredentials", mock.Anything, mock.Anything).Return("", nil) + + result, err := newReconciler(fakeConsoleClient).Reconcile(ctx, reconcile.Request{NamespacedName: typeNamespacedName}) + Expect(err).NotTo(HaveOccurred()) + Expect(result.RequeueAfter).NotTo(BeZero()) + fakeConsoleClient.AssertNotCalled(GinkgoT(), "CreateMonitor", mock.Anything, mock.Anything) + }) + + It("should successfully create the monitor once the service is ready", func() { + Expect(common.MaybePatch(k8sClient, &v1alpha1.ServiceDeployment{ + ObjectMeta: metav1.ObjectMeta{Name: serviceName, Namespace: namespace}, + }, func(p *v1alpha1.ServiceDeployment) { + p.Status.ID = lo.ToPtr(serviceID) + })).To(Succeed()) + + fakeConsoleClient := mocks.NewConsoleClientMock(mocks.TestingT) + fakeConsoleClient.On("UseCredentials", mock.Anything, mock.Anything).Return("", nil) + fakeConsoleClient.On("CreateMonitor", mock.Anything, mock.MatchedBy(func(attrs gqlclient.MonitorAttributes) bool { + return attrs.ServiceID == serviceID && + attrs.WorkbenchID == nil && + attrs.Modes == nil && + attrs.Name == monitorName && + attrs.Type == gqlclient.MonitorTypeMetrics && + attrs.Query.Log == nil && + attrs.Query.Metrics != nil && + attrs.Query.Metrics.Query == "sum(rate(container_cpu_usage_seconds_total[5m]))" && + lo.FromPtr(attrs.Query.Metrics.Step) == "1m" && + lo.FromPtr(attrs.Query.Metrics.Duration) == "1h" && + attrs.Query.Metrics.Options != nil && + attrs.Query.Metrics.Options.Azure != nil && + lo.FromPtr(attrs.Query.Metrics.Options.Azure.ResourceID) == "resource-id" && + attrs.Threshold.Aggregate == gqlclient.MonitorAggregateAvg && + attrs.Threshold.Value == 0.8 + })).Return(&gqlclient.MonitorFragment{ID: id}, nil) + + _, err := newReconciler(fakeConsoleClient).Reconcile(ctx, reconcile.Request{NamespacedName: typeNamespacedName}) + Expect(err).NotTo(HaveOccurred()) + fakeConsoleClient.AssertExpectations(GinkgoT()) + + monitor := &v1alpha1.Monitor{} + Expect(k8sClient.Get(ctx, typeNamespacedName, monitor)).To(Succeed()) + expectedStatus := readyStatus(id) + expectedStatus.SHA = monitor.Status.SHA + Expect(common.SanitizeStatusConditions(monitor.Status)).To(Equal(common.SanitizeStatusConditions(expectedStatus))) + + By("checking that the service is set as the owner") + Expect(monitor.OwnerReferences).To(HaveLen(1)) + Expect(monitor.OwnerReferences[0].Kind).To(Equal("ServiceDeployment")) + Expect(monitor.OwnerReferences[0].Name).To(Equal(serviceName)) + }) + + It("should replace the owner reference when switching to another ServiceDeployment", func() { + Expect(common.MaybeCreate(k8sClient, &v1alpha1.ServiceDeployment{ + ObjectMeta: metav1.ObjectMeta{Name: otherName, Namespace: namespace}, + Spec: v1alpha1.ServiceSpec{ + Version: lo.ToPtr("1.0"), + ClusterRef: corev1.ObjectReference{Name: clusterName, Namespace: namespace}, + }, + }, func(p *v1alpha1.ServiceDeployment) { + p.Status.ID = lo.ToPtr(otherID) + })).To(Succeed()) + + monitor := &v1alpha1.Monitor{} + Expect(k8sClient.Get(ctx, typeNamespacedName, monitor)).To(Succeed()) + monitor.Spec.ServiceRef = &corev1.LocalObjectReference{Name: otherName} + Expect(k8sClient.Update(ctx, monitor)).To(Succeed()) + + fakeConsoleClient := mocks.NewConsoleClientMock(mocks.TestingT) + fakeConsoleClient.On("UseCredentials", mock.Anything, mock.Anything).Return("", nil) + fakeConsoleClient.On("GetMonitor", mock.Anything, id).Return(&gqlclient.MonitorFragment{ID: id}, nil) + fakeConsoleClient.On("UpdateMonitor", mock.Anything, id, mock.MatchedBy(func(attrs gqlclient.MonitorAttributes) bool { + return attrs.ServiceID == otherID + })).Return(&gqlclient.MonitorFragment{ID: id}, nil) + + _, err := newReconciler(fakeConsoleClient).Reconcile(ctx, reconcile.Request{NamespacedName: typeNamespacedName}) + Expect(err).NotTo(HaveOccurred()) + fakeConsoleClient.AssertExpectations(GinkgoT()) + + Expect(k8sClient.Get(ctx, typeNamespacedName, monitor)).To(Succeed()) + Expect(monitor.OwnerReferences).To(HaveLen(1)) + Expect(monitor.OwnerReferences[0].Kind).To(Equal("ServiceDeployment")) + Expect(monitor.OwnerReferences[0].Name).To(Equal(otherName)) + }) + + It("should remove the owner reference when switching to a Console service handle", func() { + monitor := &v1alpha1.Monitor{} + Expect(k8sClient.Get(ctx, typeNamespacedName, monitor)).To(Succeed()) + Expect(monitor.OwnerReferences).To(HaveLen(1)) + monitor.Spec.ServiceRef = nil + monitor.Spec.Service = lo.ToPtr("mgmt/console") + Expect(k8sClient.Update(ctx, monitor)).To(Succeed()) + + fakeConsoleClient := mocks.NewConsoleClientMock(mocks.TestingT) + fakeConsoleClient.On("UseCredentials", mock.Anything, mock.Anything).Return("", nil) + fakeConsoleClient.On("GetServiceTinyByHandle", "mgmt", "console").Return(&gqlclient.GetServiceDeploymentTinyByHandle_ServiceDeployment{ID: serviceID, Name: "console"}, nil) + fakeConsoleClient.On("GetMonitor", mock.Anything, id).Return(&gqlclient.MonitorFragment{ID: id}, nil) + fakeConsoleClient.On("UpdateMonitor", mock.Anything, id, mock.MatchedBy(func(attrs gqlclient.MonitorAttributes) bool { + return attrs.ServiceID == serviceID + })).Return(&gqlclient.MonitorFragment{ID: id}, nil) + + _, err := newReconciler(fakeConsoleClient).Reconcile(ctx, reconcile.Request{NamespacedName: typeNamespacedName}) + Expect(err).NotTo(HaveOccurred()) + fakeConsoleClient.AssertExpectations(GinkgoT()) + + Expect(k8sClient.Get(ctx, typeNamespacedName, monitor)).To(Succeed()) + Expect(monitor.OwnerReferences).To(BeEmpty()) + }) + + It("should remove the finalizer when the monitor no longer exists in the Console API", func() { + resource := &v1alpha1.Monitor{} + Expect(k8sClient.Get(ctx, typeNamespacedName, resource)).To(Succeed()) + Expect(k8sClient.Delete(ctx, resource)).To(Succeed()) + + fakeConsoleClient := mocks.NewConsoleClientMock(mocks.TestingT) + fakeConsoleClient.On("UseCredentials", mock.Anything, mock.Anything).Return("", nil) + fakeConsoleClient.On("IsMonitorExists", mock.Anything, id).Return(false, nil) + + _, err := newReconciler(fakeConsoleClient).Reconcile(ctx, reconcile.Request{NamespacedName: typeNamespacedName}) + Expect(err).NotTo(HaveOccurred()) + fakeConsoleClient.AssertExpectations(GinkgoT()) + fakeConsoleClient.AssertNotCalled(GinkgoT(), "DeleteMonitor", mock.Anything, mock.Anything) + + monitor := &v1alpha1.Monitor{} + err = k8sClient.Get(ctx, typeNamespacedName, monitor) + Expect(errors.IsNotFound(err)).To(BeTrue()) + }) + }) + + Context("When reconciling a monitor referencing a missing service by handle", func() { + const monitorName = "test-monitor-missing-service" + typeNamespacedName := types.NamespacedName{Name: monitorName, Namespace: namespace} + + BeforeAll(func() { + Expect(common.MaybeCreate(k8sClient, &v1alpha1.Monitor{ + ObjectMeta: metav1.ObjectMeta{Name: monitorName, Namespace: namespace}, + Spec: v1alpha1.MonitorSpec{ + Service: lo.ToPtr("mgmt/missing"), + Severity: gqlclient.AlertSeverityLow, + Type: gqlclient.MonitorTypeLog, + EvaluationCron: "*/5 * * * *", + Query: v1alpha1.MonitorQuery{Log: &v1alpha1.MonitorLogQuery{Query: "error", BucketSize: "5m"}}, + Threshold: v1alpha1.MonitorThreshold{Aggregate: gqlclient.MonitorAggregateMax, Value: "1"}, + }, + }, nil)).To(Succeed()) + }) + + AfterAll(func() { + monitor := &v1alpha1.Monitor{} + if err := k8sClient.Get(ctx, typeNamespacedName, monitor); err == nil { + monitor.Finalizers = nil + Expect(k8sClient.Update(ctx, monitor)).To(Succeed()) + Expect(client.IgnoreNotFound(k8sClient.Delete(ctx, monitor))).To(Succeed()) + } + }) + + It("should wait until the service exists", func() { + fakeConsoleClient := mocks.NewConsoleClientMock(mocks.TestingT) + fakeConsoleClient.On("UseCredentials", mock.Anything, mock.Anything).Return("", nil) + fakeConsoleClient.On("GetServiceTinyByHandle", "mgmt", "missing").Return(nil, errors.NewNotFound(schema.GroupResource{}, "missing")) + + result, err := newReconciler(fakeConsoleClient).Reconcile(ctx, reconcile.Request{NamespacedName: typeNamespacedName}) + Expect(err).NotTo(HaveOccurred()) + Expect(result.RequeueAfter).NotTo(BeZero()) + fakeConsoleClient.AssertExpectations(GinkgoT()) + fakeConsoleClient.AssertNotCalled(GinkgoT(), "CreateMonitor", mock.Anything, mock.Anything) + + monitor := &v1alpha1.Monitor{} + Expect(k8sClient.Get(ctx, typeNamespacedName, monitor)).To(Succeed()) + Expect(monitor.Status.ID).To(BeNil()) + condition := meta.FindStatusCondition(monitor.Status.Conditions, v1alpha1.SynchronizedConditionType.String()) + Expect(condition).NotTo(BeNil()) + Expect(condition.Status).To(Equal(metav1.ConditionFalse)) + Expect(condition.Message).To(ContainSubstring("mgmt/missing not found")) + }) + }) + + Context("When validating Monitor resources", func() { + newMonitor := func(name string, mutate func(spec *v1alpha1.MonitorSpec)) *v1alpha1.Monitor { + m := &v1alpha1.Monitor{ + ObjectMeta: metav1.ObjectMeta{Name: name, Namespace: namespace}, + Spec: v1alpha1.MonitorSpec{ + Service: lo.ToPtr("mgmt/console"), + Severity: gqlclient.AlertSeverityLow, + Type: gqlclient.MonitorTypeLog, + EvaluationCron: "*/5 * * * *", + Query: v1alpha1.MonitorQuery{Log: &v1alpha1.MonitorLogQuery{Query: "error", BucketSize: "5m"}}, + Threshold: v1alpha1.MonitorThreshold{Aggregate: gqlclient.MonitorAggregateMax, Value: "1"}, + }, + } + mutate(&m.Spec) + return m + } + + DescribeTable("should accept valid evaluation cron expressions", + func(name, cron string) { + monitor := newMonitor(name, func(spec *v1alpha1.MonitorSpec) { + spec.EvaluationCron = cron + }) + Expect(k8sClient.Create(ctx, monitor)).To(Succeed()) + Expect(k8sClient.Delete(ctx, monitor)).To(Succeed()) + }, + Entry("5 fields", "valid-monitor-cron-5", "*/5 * * * *"), + Entry("6 fields with year", "valid-monitor-cron-6", "0 0 1 1 * 2027"), + Entry("shortcut", "valid-monitor-cron-shortcut", "@hourly"), + ) + + DescribeTable("should reject invalid resources", + func(name string, mutate func(spec *v1alpha1.MonitorSpec), message string) { + err := k8sClient.Create(ctx, newMonitor(name, mutate)) + Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(ContainSubstring(message)) + }, + Entry("both service references", "invalid-monitor-both-refs", func(spec *v1alpha1.MonitorSpec) { + spec.ServiceRef = &corev1.LocalObjectReference{Name: "service"} + }, "exactly one of serviceRef or service must be set"), + Entry("empty service reference name", "invalid-monitor-empty-ref", func(spec *v1alpha1.MonitorSpec) { + spec.Service = nil + spec.ServiceRef = &corev1.LocalObjectReference{} + }, "name is required"), + Entry("no service reference", "invalid-monitor-no-refs", func(spec *v1alpha1.MonitorSpec) { + spec.Service = nil + }, "exactly one of serviceRef or service must be set"), + Entry("malformed service handle", "invalid-monitor-bad-handle", func(spec *v1alpha1.MonitorSpec) { + spec.Service = lo.ToPtr("console") + }, "spec.service"), + Entry("log type without log query", "invalid-monitor-no-log", func(spec *v1alpha1.MonitorSpec) { + spec.Query = v1alpha1.MonitorQuery{Metrics: &v1alpha1.MonitorMetricsQuery{Query: "up"}} + }, "query.log must be set when type is LOG"), + Entry("both queries set", "invalid-monitor-both-queries", func(spec *v1alpha1.MonitorSpec) { + spec.Query.Metrics = &v1alpha1.MonitorMetricsQuery{Query: "up"} + }, "only one of log or metrics can be set"), + Entry("tool query without workbench", "invalid-monitor-tool", func(spec *v1alpha1.MonitorSpec) { + spec.Query.Log.Tool = lo.ToPtr("elastic") + }, "workbenchRef is required for tool-backed monitor queries"), + Entry("invalid threshold value", "invalid-monitor-threshold", func(spec *v1alpha1.MonitorSpec) { + spec.Threshold.Value = "high" + }, "spec.threshold.value"), + Entry("invalid bucket size", "invalid-monitor-bucket", func(spec *v1alpha1.MonitorSpec) { + spec.Query.Log.BucketSize = "5 minutes" + }, "spec.query.log.bucketSize"), + Entry("invalid severity", "invalid-monitor-severity", func(spec *v1alpha1.MonitorSpec) { + spec.Severity = "SEVERE" + }, "spec.severity"), + Entry("invalid evaluation cron", "invalid-monitor-cron", func(spec *v1alpha1.MonitorSpec) { + spec.EvaluationCron = "5m" + }, "spec.evaluationCron"), + Entry("evaluation cron with too few fields", "invalid-monitor-cron-fields", func(spec *v1alpha1.MonitorSpec) { + spec.EvaluationCron = "*/5 * * *" + }, "spec.evaluationCron"), + ) + }) +}) diff --git a/go/controller/internal/test/mocks/ConsoleClient_mock.go b/go/controller/internal/test/mocks/ConsoleClient_mock.go index 6ede3b1530..84476e514b 100644 --- a/go/controller/internal/test/mocks/ConsoleClient_mock.go +++ b/go/controller/internal/test/mocks/ConsoleClient_mock.go @@ -319,6 +319,65 @@ func (_c *ConsoleClientMock_CreateCustomStackRun_Call) RunAndReturn(run func(con return _c } +// CreateDashboard provides a mock function with given fields: ctx, attributes +func (_m *ConsoleClientMock) CreateDashboard(ctx context.Context, attributes client.DashboardAttributes) (*client.WorkbenchDashboardFragment, error) { + ret := _m.Called(ctx, attributes) + + if len(ret) == 0 { + panic("no return value specified for CreateDashboard") + } + + var r0 *client.WorkbenchDashboardFragment + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, client.DashboardAttributes) (*client.WorkbenchDashboardFragment, error)); ok { + return rf(ctx, attributes) + } + if rf, ok := ret.Get(0).(func(context.Context, client.DashboardAttributes) *client.WorkbenchDashboardFragment); ok { + r0 = rf(ctx, attributes) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*client.WorkbenchDashboardFragment) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, client.DashboardAttributes) error); ok { + r1 = rf(ctx, attributes) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ConsoleClientMock_CreateDashboard_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'CreateDashboard' +type ConsoleClientMock_CreateDashboard_Call struct { + *mock.Call +} + +// CreateDashboard is a helper method to define mock.On call +// - ctx context.Context +// - attributes client.DashboardAttributes +func (_e *ConsoleClientMock_Expecter) CreateDashboard(ctx interface{}, attributes interface{}) *ConsoleClientMock_CreateDashboard_Call { + return &ConsoleClientMock_CreateDashboard_Call{Call: _e.mock.On("CreateDashboard", ctx, attributes)} +} + +func (_c *ConsoleClientMock_CreateDashboard_Call) Run(run func(ctx context.Context, attributes client.DashboardAttributes)) *ConsoleClientMock_CreateDashboard_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(client.DashboardAttributes)) + }) + return _c +} + +func (_c *ConsoleClientMock_CreateDashboard_Call) Return(_a0 *client.WorkbenchDashboardFragment, _a1 error) *ConsoleClientMock_CreateDashboard_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *ConsoleClientMock_CreateDashboard_Call) RunAndReturn(run func(context.Context, client.DashboardAttributes) (*client.WorkbenchDashboardFragment, error)) *ConsoleClientMock_CreateDashboard_Call { + _c.Call.Return(run) + return _c +} + // CreateFederatedCredential provides a mock function with given fields: ctx, attributes func (_m *ConsoleClientMock) CreateFederatedCredential(ctx context.Context, attributes client.FederatedCredentialAttributes) (*client.FederatedCredentialFragment, error) { ret := _m.Called(ctx, attributes) @@ -612,6 +671,65 @@ func (_c *ConsoleClientMock_CreateGroup_Call) RunAndReturn(run func(context.Cont return _c } +// CreateMonitor provides a mock function with given fields: ctx, attributes +func (_m *ConsoleClientMock) CreateMonitor(ctx context.Context, attributes client.MonitorAttributes) (*client.MonitorFragment, error) { + ret := _m.Called(ctx, attributes) + + if len(ret) == 0 { + panic("no return value specified for CreateMonitor") + } + + var r0 *client.MonitorFragment + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, client.MonitorAttributes) (*client.MonitorFragment, error)); ok { + return rf(ctx, attributes) + } + if rf, ok := ret.Get(0).(func(context.Context, client.MonitorAttributes) *client.MonitorFragment); ok { + r0 = rf(ctx, attributes) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*client.MonitorFragment) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, client.MonitorAttributes) error); ok { + r1 = rf(ctx, attributes) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ConsoleClientMock_CreateMonitor_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'CreateMonitor' +type ConsoleClientMock_CreateMonitor_Call struct { + *mock.Call +} + +// CreateMonitor is a helper method to define mock.On call +// - ctx context.Context +// - attributes client.MonitorAttributes +func (_e *ConsoleClientMock_Expecter) CreateMonitor(ctx interface{}, attributes interface{}) *ConsoleClientMock_CreateMonitor_Call { + return &ConsoleClientMock_CreateMonitor_Call{Call: _e.mock.On("CreateMonitor", ctx, attributes)} +} + +func (_c *ConsoleClientMock_CreateMonitor_Call) Run(run func(ctx context.Context, attributes client.MonitorAttributes)) *ConsoleClientMock_CreateMonitor_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(client.MonitorAttributes)) + }) + return _c +} + +func (_c *ConsoleClientMock_CreateMonitor_Call) Return(_a0 *client.MonitorFragment, _a1 error) *ConsoleClientMock_CreateMonitor_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *ConsoleClientMock_CreateMonitor_Call) RunAndReturn(run func(context.Context, client.MonitorAttributes) (*client.MonitorFragment, error)) *ConsoleClientMock_CreateMonitor_Call { + _c.Call.Return(run) + return _c +} + // CreateNamespace provides a mock function with given fields: ctx, attributes func (_m *ConsoleClientMock) CreateNamespace(ctx context.Context, attributes client.ManagedNamespaceAttributes) (*client.ManagedNamespaceFragment, error) { ret := _m.Called(ctx, attributes) @@ -2251,6 +2369,53 @@ func (_c *ConsoleClientMock_DeleteCustomStackRun_Call) RunAndReturn(run func(con return _c } +// DeleteDashboard provides a mock function with given fields: ctx, id +func (_m *ConsoleClientMock) DeleteDashboard(ctx context.Context, id string) error { + ret := _m.Called(ctx, id) + + if len(ret) == 0 { + panic("no return value specified for DeleteDashboard") + } + + var r0 error + if rf, ok := ret.Get(0).(func(context.Context, string) error); ok { + r0 = rf(ctx, id) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// ConsoleClientMock_DeleteDashboard_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DeleteDashboard' +type ConsoleClientMock_DeleteDashboard_Call struct { + *mock.Call +} + +// DeleteDashboard is a helper method to define mock.On call +// - ctx context.Context +// - id string +func (_e *ConsoleClientMock_Expecter) DeleteDashboard(ctx interface{}, id interface{}) *ConsoleClientMock_DeleteDashboard_Call { + return &ConsoleClientMock_DeleteDashboard_Call{Call: _e.mock.On("DeleteDashboard", ctx, id)} +} + +func (_c *ConsoleClientMock_DeleteDashboard_Call) Run(run func(ctx context.Context, id string)) *ConsoleClientMock_DeleteDashboard_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(string)) + }) + return _c +} + +func (_c *ConsoleClientMock_DeleteDashboard_Call) Return(_a0 error) *ConsoleClientMock_DeleteDashboard_Call { + _c.Call.Return(_a0) + return _c +} + +func (_c *ConsoleClientMock_DeleteDashboard_Call) RunAndReturn(run func(context.Context, string) error) *ConsoleClientMock_DeleteDashboard_Call { + _c.Call.Return(run) + return _c +} + // DeleteFederatedCredential provides a mock function with given fields: ctx, id func (_m *ConsoleClientMock) DeleteFederatedCredential(ctx context.Context, id string) (*client.DeleteFederatedCredential_DeleteFederatedCredential, error) { ret := _m.Called(ctx, id) @@ -2497,6 +2662,53 @@ func (_c *ConsoleClientMock_DeleteMCPServer_Call) RunAndReturn(run func(context. return _c } +// DeleteMonitor provides a mock function with given fields: ctx, id +func (_m *ConsoleClientMock) DeleteMonitor(ctx context.Context, id string) error { + ret := _m.Called(ctx, id) + + if len(ret) == 0 { + panic("no return value specified for DeleteMonitor") + } + + var r0 error + if rf, ok := ret.Get(0).(func(context.Context, string) error); ok { + r0 = rf(ctx, id) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// ConsoleClientMock_DeleteMonitor_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DeleteMonitor' +type ConsoleClientMock_DeleteMonitor_Call struct { + *mock.Call +} + +// DeleteMonitor is a helper method to define mock.On call +// - ctx context.Context +// - id string +func (_e *ConsoleClientMock_Expecter) DeleteMonitor(ctx interface{}, id interface{}) *ConsoleClientMock_DeleteMonitor_Call { + return &ConsoleClientMock_DeleteMonitor_Call{Call: _e.mock.On("DeleteMonitor", ctx, id)} +} + +func (_c *ConsoleClientMock_DeleteMonitor_Call) Run(run func(ctx context.Context, id string)) *ConsoleClientMock_DeleteMonitor_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(string)) + }) + return _c +} + +func (_c *ConsoleClientMock_DeleteMonitor_Call) Return(_a0 error) *ConsoleClientMock_DeleteMonitor_Call { + _c.Call.Return(_a0) + return _c +} + +func (_c *ConsoleClientMock_DeleteMonitor_Call) RunAndReturn(run func(context.Context, string) error) *ConsoleClientMock_DeleteMonitor_Call { + _c.Call.Return(run) + return _c +} + // DeleteNamespace provides a mock function with given fields: ctx, id func (_m *ConsoleClientMock) DeleteNamespace(ctx context.Context, id string) error { ret := _m.Called(ctx, id) @@ -4576,6 +4788,65 @@ func (_c *ConsoleClientMock_GetCustomStackRun_Call) RunAndReturn(run func(contex return _c } +// GetDashboard provides a mock function with given fields: ctx, id +func (_m *ConsoleClientMock) GetDashboard(ctx context.Context, id string) (*client.WorkbenchDashboardFragment, error) { + ret := _m.Called(ctx, id) + + if len(ret) == 0 { + panic("no return value specified for GetDashboard") + } + + var r0 *client.WorkbenchDashboardFragment + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string) (*client.WorkbenchDashboardFragment, error)); ok { + return rf(ctx, id) + } + if rf, ok := ret.Get(0).(func(context.Context, string) *client.WorkbenchDashboardFragment); ok { + r0 = rf(ctx, id) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*client.WorkbenchDashboardFragment) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, string) error); ok { + r1 = rf(ctx, id) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ConsoleClientMock_GetDashboard_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetDashboard' +type ConsoleClientMock_GetDashboard_Call struct { + *mock.Call +} + +// GetDashboard is a helper method to define mock.On call +// - ctx context.Context +// - id string +func (_e *ConsoleClientMock_Expecter) GetDashboard(ctx interface{}, id interface{}) *ConsoleClientMock_GetDashboard_Call { + return &ConsoleClientMock_GetDashboard_Call{Call: _e.mock.On("GetDashboard", ctx, id)} +} + +func (_c *ConsoleClientMock_GetDashboard_Call) Run(run func(ctx context.Context, id string)) *ConsoleClientMock_GetDashboard_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(string)) + }) + return _c +} + +func (_c *ConsoleClientMock_GetDashboard_Call) Return(_a0 *client.WorkbenchDashboardFragment, _a1 error) *ConsoleClientMock_GetDashboard_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *ConsoleClientMock_GetDashboard_Call) RunAndReturn(run func(context.Context, string) (*client.WorkbenchDashboardFragment, error)) *ConsoleClientMock_GetDashboard_Call { + _c.Call.Return(run) + return _c +} + // GetDeploymentSettings provides a mock function with given fields: ctx func (_m *ConsoleClientMock) GetDeploymentSettings(ctx context.Context) (*client.DeploymentSettingsFragment, error) { ret := _m.Called(ctx) @@ -5276,6 +5547,65 @@ func (_c *ConsoleClientMock_GetMCPServer_Call) RunAndReturn(run func(context.Con return _c } +// GetMonitor provides a mock function with given fields: ctx, id +func (_m *ConsoleClientMock) GetMonitor(ctx context.Context, id string) (*client.MonitorFragment, error) { + ret := _m.Called(ctx, id) + + if len(ret) == 0 { + panic("no return value specified for GetMonitor") + } + + var r0 *client.MonitorFragment + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string) (*client.MonitorFragment, error)); ok { + return rf(ctx, id) + } + if rf, ok := ret.Get(0).(func(context.Context, string) *client.MonitorFragment); ok { + r0 = rf(ctx, id) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*client.MonitorFragment) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, string) error); ok { + r1 = rf(ctx, id) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ConsoleClientMock_GetMonitor_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetMonitor' +type ConsoleClientMock_GetMonitor_Call struct { + *mock.Call +} + +// GetMonitor is a helper method to define mock.On call +// - ctx context.Context +// - id string +func (_e *ConsoleClientMock_Expecter) GetMonitor(ctx interface{}, id interface{}) *ConsoleClientMock_GetMonitor_Call { + return &ConsoleClientMock_GetMonitor_Call{Call: _e.mock.On("GetMonitor", ctx, id)} +} + +func (_c *ConsoleClientMock_GetMonitor_Call) Run(run func(ctx context.Context, id string)) *ConsoleClientMock_GetMonitor_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(string)) + }) + return _c +} + +func (_c *ConsoleClientMock_GetMonitor_Call) Return(_a0 *client.MonitorFragment, _a1 error) *ConsoleClientMock_GetMonitor_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *ConsoleClientMock_GetMonitor_Call) RunAndReturn(run func(context.Context, string) (*client.MonitorFragment, error)) *ConsoleClientMock_GetMonitor_Call { + _c.Call.Return(run) + return _c +} + // GetNamespace provides a mock function with given fields: ctx, id func (_m *ConsoleClientMock) GetNamespace(ctx context.Context, id string) (*client.ManagedNamespaceFragment, error) { ret := _m.Called(ctx, id) @@ -6987,6 +7317,65 @@ func (_c *ConsoleClientMock_GetServiceContext_Call) RunAndReturn(run func(string return _c } +// GetServiceTinyByHandle provides a mock function with given fields: clusterHandle, serviceName +func (_m *ConsoleClientMock) GetServiceTinyByHandle(clusterHandle string, serviceName string) (*client.GetServiceDeploymentTinyByHandle_ServiceDeployment, error) { + ret := _m.Called(clusterHandle, serviceName) + + if len(ret) == 0 { + panic("no return value specified for GetServiceTinyByHandle") + } + + var r0 *client.GetServiceDeploymentTinyByHandle_ServiceDeployment + var r1 error + if rf, ok := ret.Get(0).(func(string, string) (*client.GetServiceDeploymentTinyByHandle_ServiceDeployment, error)); ok { + return rf(clusterHandle, serviceName) + } + if rf, ok := ret.Get(0).(func(string, string) *client.GetServiceDeploymentTinyByHandle_ServiceDeployment); ok { + r0 = rf(clusterHandle, serviceName) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*client.GetServiceDeploymentTinyByHandle_ServiceDeployment) + } + } + + if rf, ok := ret.Get(1).(func(string, string) error); ok { + r1 = rf(clusterHandle, serviceName) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ConsoleClientMock_GetServiceTinyByHandle_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetServiceTinyByHandle' +type ConsoleClientMock_GetServiceTinyByHandle_Call struct { + *mock.Call +} + +// GetServiceTinyByHandle is a helper method to define mock.On call +// - clusterHandle string +// - serviceName string +func (_e *ConsoleClientMock_Expecter) GetServiceTinyByHandle(clusterHandle interface{}, serviceName interface{}) *ConsoleClientMock_GetServiceTinyByHandle_Call { + return &ConsoleClientMock_GetServiceTinyByHandle_Call{Call: _e.mock.On("GetServiceTinyByHandle", clusterHandle, serviceName)} +} + +func (_c *ConsoleClientMock_GetServiceTinyByHandle_Call) Run(run func(clusterHandle string, serviceName string)) *ConsoleClientMock_GetServiceTinyByHandle_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(string), args[1].(string)) + }) + return _c +} + +func (_c *ConsoleClientMock_GetServiceTinyByHandle_Call) Return(_a0 *client.GetServiceDeploymentTinyByHandle_ServiceDeployment, _a1 error) *ConsoleClientMock_GetServiceTinyByHandle_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *ConsoleClientMock_GetServiceTinyByHandle_Call) RunAndReturn(run func(string, string) (*client.GetServiceDeploymentTinyByHandle_ServiceDeployment, error)) *ConsoleClientMock_GetServiceTinyByHandle_Call { + _c.Call.Return(run) + return _c +} + // GetServices provides a mock function with no fields func (_m *ConsoleClientMock) GetServices() ([]*client.ServiceDeploymentBaseFragment, error) { ret := _m.Called() @@ -8200,6 +8589,63 @@ func (_c *ConsoleClientMock_IsClusterRestoreExisting_Call) RunAndReturn(run func return _c } +// IsDashboardExists provides a mock function with given fields: ctx, id +func (_m *ConsoleClientMock) IsDashboardExists(ctx context.Context, id string) (bool, error) { + ret := _m.Called(ctx, id) + + if len(ret) == 0 { + panic("no return value specified for IsDashboardExists") + } + + var r0 bool + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string) (bool, error)); ok { + return rf(ctx, id) + } + if rf, ok := ret.Get(0).(func(context.Context, string) bool); ok { + r0 = rf(ctx, id) + } else { + r0 = ret.Get(0).(bool) + } + + if rf, ok := ret.Get(1).(func(context.Context, string) error); ok { + r1 = rf(ctx, id) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ConsoleClientMock_IsDashboardExists_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'IsDashboardExists' +type ConsoleClientMock_IsDashboardExists_Call struct { + *mock.Call +} + +// IsDashboardExists is a helper method to define mock.On call +// - ctx context.Context +// - id string +func (_e *ConsoleClientMock_Expecter) IsDashboardExists(ctx interface{}, id interface{}) *ConsoleClientMock_IsDashboardExists_Call { + return &ConsoleClientMock_IsDashboardExists_Call{Call: _e.mock.On("IsDashboardExists", ctx, id)} +} + +func (_c *ConsoleClientMock_IsDashboardExists_Call) Run(run func(ctx context.Context, id string)) *ConsoleClientMock_IsDashboardExists_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(string)) + }) + return _c +} + +func (_c *ConsoleClientMock_IsDashboardExists_Call) Return(_a0 bool, _a1 error) *ConsoleClientMock_IsDashboardExists_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *ConsoleClientMock_IsDashboardExists_Call) RunAndReturn(run func(context.Context, string) (bool, error)) *ConsoleClientMock_IsDashboardExists_Call { + _c.Call.Return(run) + return _c +} + // IsFederatedCredentialExists provides a mock function with given fields: ctx, id func (_m *ConsoleClientMock) IsFederatedCredentialExists(ctx context.Context, id string) (bool, error) { ret := _m.Called(ctx, id) @@ -8370,6 +8816,63 @@ func (_c *ConsoleClientMock_IsHelmRepositoryExists_Call) RunAndReturn(run func(c return _c } +// IsMonitorExists provides a mock function with given fields: ctx, id +func (_m *ConsoleClientMock) IsMonitorExists(ctx context.Context, id string) (bool, error) { + ret := _m.Called(ctx, id) + + if len(ret) == 0 { + panic("no return value specified for IsMonitorExists") + } + + var r0 bool + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string) (bool, error)); ok { + return rf(ctx, id) + } + if rf, ok := ret.Get(0).(func(context.Context, string) bool); ok { + r0 = rf(ctx, id) + } else { + r0 = ret.Get(0).(bool) + } + + if rf, ok := ret.Get(1).(func(context.Context, string) error); ok { + r1 = rf(ctx, id) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ConsoleClientMock_IsMonitorExists_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'IsMonitorExists' +type ConsoleClientMock_IsMonitorExists_Call struct { + *mock.Call +} + +// IsMonitorExists is a helper method to define mock.On call +// - ctx context.Context +// - id string +func (_e *ConsoleClientMock_Expecter) IsMonitorExists(ctx interface{}, id interface{}) *ConsoleClientMock_IsMonitorExists_Call { + return &ConsoleClientMock_IsMonitorExists_Call{Call: _e.mock.On("IsMonitorExists", ctx, id)} +} + +func (_c *ConsoleClientMock_IsMonitorExists_Call) Run(run func(ctx context.Context, id string)) *ConsoleClientMock_IsMonitorExists_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(string)) + }) + return _c +} + +func (_c *ConsoleClientMock_IsMonitorExists_Call) Return(_a0 bool, _a1 error) *ConsoleClientMock_IsMonitorExists_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *ConsoleClientMock_IsMonitorExists_Call) RunAndReturn(run func(context.Context, string) (bool, error)) *ConsoleClientMock_IsMonitorExists_Call { + _c.Call.Return(run) + return _c +} + // IsObservabilityProviderExists provides a mock function with given fields: ctx, name func (_m *ConsoleClientMock) IsObservabilityProviderExists(ctx context.Context, name string) (bool, error) { ret := _m.Called(ctx, name) @@ -10209,6 +10712,66 @@ func (_c *ConsoleClientMock_UpdateCustomStackRun_Call) RunAndReturn(run func(con return _c } +// UpdateDashboard provides a mock function with given fields: ctx, id, attributes +func (_m *ConsoleClientMock) UpdateDashboard(ctx context.Context, id string, attributes client.DashboardAttributes) (*client.WorkbenchDashboardFragment, error) { + ret := _m.Called(ctx, id, attributes) + + if len(ret) == 0 { + panic("no return value specified for UpdateDashboard") + } + + var r0 *client.WorkbenchDashboardFragment + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string, client.DashboardAttributes) (*client.WorkbenchDashboardFragment, error)); ok { + return rf(ctx, id, attributes) + } + if rf, ok := ret.Get(0).(func(context.Context, string, client.DashboardAttributes) *client.WorkbenchDashboardFragment); ok { + r0 = rf(ctx, id, attributes) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*client.WorkbenchDashboardFragment) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, string, client.DashboardAttributes) error); ok { + r1 = rf(ctx, id, attributes) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ConsoleClientMock_UpdateDashboard_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'UpdateDashboard' +type ConsoleClientMock_UpdateDashboard_Call struct { + *mock.Call +} + +// UpdateDashboard is a helper method to define mock.On call +// - ctx context.Context +// - id string +// - attributes client.DashboardAttributes +func (_e *ConsoleClientMock_Expecter) UpdateDashboard(ctx interface{}, id interface{}, attributes interface{}) *ConsoleClientMock_UpdateDashboard_Call { + return &ConsoleClientMock_UpdateDashboard_Call{Call: _e.mock.On("UpdateDashboard", ctx, id, attributes)} +} + +func (_c *ConsoleClientMock_UpdateDashboard_Call) Run(run func(ctx context.Context, id string, attributes client.DashboardAttributes)) *ConsoleClientMock_UpdateDashboard_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(string), args[2].(client.DashboardAttributes)) + }) + return _c +} + +func (_c *ConsoleClientMock_UpdateDashboard_Call) Return(_a0 *client.WorkbenchDashboardFragment, _a1 error) *ConsoleClientMock_UpdateDashboard_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *ConsoleClientMock_UpdateDashboard_Call) RunAndReturn(run func(context.Context, string, client.DashboardAttributes) (*client.WorkbenchDashboardFragment, error)) *ConsoleClientMock_UpdateDashboard_Call { + _c.Call.Return(run) + return _c +} + // UpdateDeploymentSettings provides a mock function with given fields: ctx, attr func (_m *ConsoleClientMock) UpdateDeploymentSettings(ctx context.Context, attr client.DeploymentSettingsAttributes) (*client.UpdateDeploymentSettings, error) { ret := _m.Called(ctx, attr) @@ -10447,6 +11010,66 @@ func (_c *ConsoleClientMock_UpdateGroup_Call) RunAndReturn(run func(context.Cont return _c } +// UpdateMonitor provides a mock function with given fields: ctx, id, attributes +func (_m *ConsoleClientMock) UpdateMonitor(ctx context.Context, id string, attributes client.MonitorAttributes) (*client.MonitorFragment, error) { + ret := _m.Called(ctx, id, attributes) + + if len(ret) == 0 { + panic("no return value specified for UpdateMonitor") + } + + var r0 *client.MonitorFragment + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string, client.MonitorAttributes) (*client.MonitorFragment, error)); ok { + return rf(ctx, id, attributes) + } + if rf, ok := ret.Get(0).(func(context.Context, string, client.MonitorAttributes) *client.MonitorFragment); ok { + r0 = rf(ctx, id, attributes) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*client.MonitorFragment) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, string, client.MonitorAttributes) error); ok { + r1 = rf(ctx, id, attributes) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ConsoleClientMock_UpdateMonitor_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'UpdateMonitor' +type ConsoleClientMock_UpdateMonitor_Call struct { + *mock.Call +} + +// UpdateMonitor is a helper method to define mock.On call +// - ctx context.Context +// - id string +// - attributes client.MonitorAttributes +func (_e *ConsoleClientMock_Expecter) UpdateMonitor(ctx interface{}, id interface{}, attributes interface{}) *ConsoleClientMock_UpdateMonitor_Call { + return &ConsoleClientMock_UpdateMonitor_Call{Call: _e.mock.On("UpdateMonitor", ctx, id, attributes)} +} + +func (_c *ConsoleClientMock_UpdateMonitor_Call) Run(run func(ctx context.Context, id string, attributes client.MonitorAttributes)) *ConsoleClientMock_UpdateMonitor_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(string), args[2].(client.MonitorAttributes)) + }) + return _c +} + +func (_c *ConsoleClientMock_UpdateMonitor_Call) Return(_a0 *client.MonitorFragment, _a1 error) *ConsoleClientMock_UpdateMonitor_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *ConsoleClientMock_UpdateMonitor_Call) RunAndReturn(run func(context.Context, string, client.MonitorAttributes) (*client.MonitorFragment, error)) *ConsoleClientMock_UpdateMonitor_Call { + _c.Call.Return(run) + return _c +} + // UpdateNamespace provides a mock function with given fields: ctx, id, attributes func (_m *ConsoleClientMock) UpdateNamespace(ctx context.Context, id string, attributes client.ManagedNamespaceAttributes) (*client.ManagedNamespaceFragment, error) { ret := _m.Called(ctx, id, attributes) diff --git a/go/controller/internal/types/reconciler.go b/go/controller/internal/types/reconciler.go index 40bd20e254..091e882f06 100644 --- a/go/controller/internal/types/reconciler.go +++ b/go/controller/internal/types/reconciler.go @@ -71,6 +71,8 @@ const ( WorkbenchToolReconciler Reconciler = "workbenchtool" WorkbenchWebhookReconciler Reconciler = "workbenchwebhook" SentinelTriggerReconciler Reconciler = "sentineltrigger" + MonitorReconciler Reconciler = "monitor" + DashboardReconciler Reconciler = "dashboard" ) // ToController maps a Reconciler to its corresponding Controller. diff --git a/js/documentation/pages/api-reference/kubernetes/management-api-reference.md b/js/documentation/pages/api-reference/kubernetes/management-api-reference.md index b2943e89d7..32e40604a7 100644 --- a/js/documentation/pages/api-reference/kubernetes/management-api-reference.md +++ b/js/documentation/pages/api-reference/kubernetes/management-api-reference.md @@ -21,6 +21,7 @@ Package v1alpha1 contains API Schema definitions for the deployments v1alpha1 AP - [ComplianceReportGenerator](#compliancereportgenerator) - [CustomCompatibilityMatrix](#customcompatibilitymatrix) - [CustomStackRun](#customstackrun) +- [Dashboard](#dashboard) - [DeploymentSettings](#deploymentsettings) - [FederatedCredential](#federatedcredential) - [Flow](#flow) @@ -32,6 +33,7 @@ Package v1alpha1 contains API Schema definitions for the deployments v1alpha1 AP - [InfrastructureStack](#infrastructurestack) - [MCPServer](#mcpserver) - [ManagedNamespace](#managednamespace) +- [Monitor](#monitor) - [NamespaceCredentials](#namespacecredentials) - [NotificationRouter](#notificationrouter) - [NotificationSink](#notificationsink) @@ -1455,6 +1457,131 @@ _Appears in:_ | `reconciliation` _[Reconciliation](#reconciliation)_ | Reconciliation settings for this resource.
Controls drift detection and reconciliation intervals. | | Optional: \{\}
| +#### Dashboard + + + +Dashboard represents an observability dashboard owned by a Workbench. It consists of graphs +arranged on a grid, each backed by an observability tool datasource, and optional user-configurable inputs. + + + + + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `apiVersion` _string_ | `deployments.plural.sh/v1alpha1` | | | +| `kind` _string_ | `Dashboard` | | | +| `metadata` _[ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#objectmeta-v1-meta)_ | Refer to Kubernetes API documentation for fields of `metadata`. | | | +| `spec` _[DashboardSpec](#dashboardspec)_ | Spec defines the desired state of the Dashboard. | | Required: \{\}
| + + +#### DashboardDatasource + + + +DashboardDatasource defines an observability tool call used to fetch dashboard data. + + + +_Appears in:_ +- [DashboardGraph](#dashboardgraph) +- [DashboardInput](#dashboardinput) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `type` _[DashboardDatasourceType](#dashboarddatasourcetype)_ | Type is the kind of data returned by the datasource. | | Enum: [LOGS METRICS TRACES LABELS]
Required: \{\}
| +| `tool` _string_ | Tool is the name of the observability tool used to fetch the data. | | MinLength: 1
Required: \{\}
Type: string
| +| `input` _[RawExtension](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#rawextension-runtime-pkg)_ | Input is passed to the observability tool. | | Required: \{\}
| + + +#### DashboardGraph + + + +DashboardGraph is a single graph placed on the dashboard grid. + + + +_Appears in:_ +- [DashboardSpec](#dashboardspec) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `identifier` _string_ | Identifier is a stable identifier unique within the dashboard. | | MaxLength: 128
MinLength: 1
Required: \{\}
Type: string
| +| `title` _string_ | Title is the graph title. | | Optional: \{\}
Type: string
| +| `description` _string_ | Description is an optional graph description. | | Optional: \{\}
Type: string
| +| `type` _[DashboardGraphType](#dashboardgraphtype)_ | Type is the graph visualization type. | | Enum: [TIMESERIES GAUGE LOGS MARKDOWN TABLE STAT BAR PIE HEATMAP TRACES SECTION]
MaxLength: 16
Required: \{\}
Type: string
| +| `sectionId` _string_ | SectionID is the identifier of the SECTION graph containing this graph. Sections cannot be nested. | | MaxLength: 128
Optional: \{\}
Type: string
| +| `markdown` _string_ | Markdown is the content for MARKDOWN graphs. | | Optional: \{\}
Type: string
| +| `options` _[RawExtension](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#rawextension-runtime-pkg)_ | Options are visualization-specific display options. Sections may set collapsed. | | Optional: \{\}
| +| `layout` _[DashboardGraphLayout](#dashboardgraphlayout)_ | Layout is the grid position and size of the graph. | | Required: \{\}
| +| `datasource` _[DashboardDatasource](#dashboarddatasource)_ | Datasource is the tool call used to fetch external data. | | Optional: \{\}
| + + +#### DashboardGraphLayout + + + +DashboardGraphLayout defines the grid position and size of a graph. + + + +_Appears in:_ +- [DashboardGraph](#dashboardgraph) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `x` _integer_ | X is the zero-based horizontal grid coordinate. | | Minimum: 0
Required: \{\}
| +| `y` _integer_ | Y is the zero-based vertical grid coordinate. | | Minimum: 0
Required: \{\}
| +| `w` _integer_ | W is the width in grid columns. | | Minimum: 1
Required: \{\}
| +| `h` _integer_ | H is the height in grid rows. | | Minimum: 1
Required: \{\}
| + + +#### DashboardInput + + + +DashboardInput is a user-configurable dashboard variable. + + + +_Appears in:_ +- [DashboardSpec](#dashboardspec) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `name` _string_ | Name is the variable name referenced by graph datasource inputs. | | MinLength: 1
Required: \{\}
Type: string
| +| `label` _string_ | Label is a human-readable input label. | | Optional: \{\}
Type: string
| +| `description` _string_ | Description is an optional input description. | | Optional: \{\}
Type: string
| +| `type` _[DashboardInputType](#dashboardinputtype)_ | Type is the input control type. | | Enum: [TEXT NUMBER BOOLEAN SELECT MULTI_SELECT TIME_RANGE]
Required: \{\}
| +| `default` _string_ | Default is the default input value. | | Optional: \{\}
Type: string
| +| `options` _string array_ | Options are the allowed values for select inputs. | | Optional: \{\}
| +| `required` _boolean_ | Required defines whether a value is required when rendering. | | Optional: \{\}
| +| `datasource` _[DashboardDatasource](#dashboarddatasource)_ | Datasource is the tool query used to populate input options, such as metric label search. | | Optional: \{\}
| + + +#### DashboardSpec + + + +DashboardSpec defines the desired state of a Dashboard. + + + +_Appears in:_ +- [Dashboard](#dashboard) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `workbenchRef` _[LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#localobjectreference-v1-core)_ | WorkbenchRef references the Workbench that owns this dashboard.
The Workbench must be in the same namespace as the dashboard.
It is immutable, a dashboard cannot be moved to a different workbench. | | Required: \{\}
| +| `name` _string_ | Name is the dashboard name, unique within its workbench.
If not set, metadata.name is used. | | Optional: \{\}
Type: string
| +| `description` _string_ | Description is an optional dashboard description. | | Optional: \{\}
Type: string
| +| `graphs` _[DashboardGraph](#dashboardgraph) array_ | Graphs arranged on the dashboard grid. Graph identifiers must be unique within the dashboard.
Graphs can be grouped by setting sectionId to the identifier of a SECTION graph.
Note that overlapping graph layouts are only validated by the Console API. | | MaxItems: 200
Optional: \{\}
| +| `inputs` _[DashboardInput](#dashboardinput) array_ | Inputs are user-configurable dashboard variables. | | Optional: \{\}
| +| `reconciliation` _[Reconciliation](#reconciliation)_ | Reconciliation settings for this resource. | | Optional: \{\}
| + + #### DeploymentSettings @@ -2545,6 +2672,219 @@ _Appears in:_ | `crontab` _string_ | Crontab is the cron expression for how often to export metrics.
Example: "*/5 * * * *" for every 5 minutes. | | Optional: \{\}
| +#### Monitor + + + +Monitor represents an observability monitor attached to a service deployment. It periodically +evaluates a log or metrics query against a threshold and fires alerts when it is crossed. +Optionally, it can be attached to a workbench to start an investigation when it fires. + + + + + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `apiVersion` _string_ | `deployments.plural.sh/v1alpha1` | | | +| `kind` _string_ | `Monitor` | | | +| `metadata` _[ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#objectmeta-v1-meta)_ | Refer to Kubernetes API documentation for fields of `metadata`. | | | +| `spec` _[MonitorSpec](#monitorspec)_ | Spec defines the desired state of the Monitor. | | Required: \{\}
| + + +#### MonitorFacet + + + +MonitorFacet is a key/value facet used to further filter log queries. + + + +_Appears in:_ +- [MonitorLogQuery](#monitorlogquery) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `key` _string_ | Key is the facet key (e.g. kubernetes namespace or pod label name). | | Required: \{\}
Type: string
| +| `value` _string_ | Value is the facet value to match for the given key. | | Required: \{\}
Type: string
| + + +#### MonitorLogAzureOptions + + + +MonitorLogAzureOptions are Azure-specific log query options. + + + +_Appears in:_ +- [MonitorLogOptions](#monitorlogoptions) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `resourceId` _string_ | ResourceID is the Azure resource ID to query logs for. | | Optional: \{\}
Type: string
| + + +#### MonitorLogOptions + + + +MonitorLogOptions are provider-specific log query options. + + + +_Appears in:_ +- [MonitorLogQuery](#monitorlogquery) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `azure` _[MonitorLogAzureOptions](#monitorlogazureoptions)_ | Azure log query options. | | Optional: \{\}
| + + +#### MonitorLogQuery + + + +MonitorLogQuery is the log query configuration for a monitor. + + + +_Appears in:_ +- [MonitorQuery](#monitorquery) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `tool` _string_ | Tool is the named workbench logs tool. When omitted, the native Plural logs provider is used. | | Optional: \{\}
Type: string
| +| `query` _string_ | Query is the log query string passed through to the underlying log provider. | | MinLength: 1
Required: \{\}
Type: string
| +| `bucketSize` _string_ | BucketSize is the time bucket size (e.g. 5m) used when aggregating log results. | | Pattern: `^[0-9]+[dmhs]$`
Required: \{\}
Type: string
| +| `duration` _string_ | Duration is the lookback duration for the log query (e.g. 1h, 10m, 30s). | | Optional: \{\}
Pattern: `^[0-9]+[dmhs]$`
Type: string
| +| `operator` _[MonitorOperator](#monitoroperator)_ | Operator to use when combining multiple log queries.
Defaults to OR, which is also the Console API default. | OR | Enum: [OR AND]
Optional: \{\}
| +| `facets` _[MonitorFacet](#monitorfacet) array_ | Facets are optional key/value facets applied as additional filters on the log query. | | Optional: \{\}
| +| `options` _[MonitorLogOptions](#monitorlogoptions)_ | Options are provider-specific log query options. | | Optional: \{\}
| + + +#### MonitorMetricsAzureOptions + + + +MonitorMetricsAzureOptions are Azure-specific metrics query options. + + + +_Appears in:_ +- [MonitorMetricsOptions](#monitormetricsoptions) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `resourceId` _string_ | ResourceID is the Azure resource ID to query metrics for. | | Optional: \{\}
Type: string
| +| `metricsNamespace` _string_ | MetricsNamespace is the Azure metrics namespace. | | Optional: \{\}
Type: string
| +| `aggregation` _string_ | Aggregation is the Azure metrics aggregation type. | | Optional: \{\}
Type: string
| +| `filter` _string_ | Filter is the Azure metrics filter expression. | | Optional: \{\}
Type: string
| +| `orderBy` _string_ | OrderBy is the Azure metrics ordering expression. | | Optional: \{\}
Type: string
| +| `rollUpBy` _string_ | RollUpBy is the Azure metrics dimension to roll up by. | | Optional: \{\}
Type: string
| +| `metricsEndpoint` _string_ | MetricsEndpoint is the Azure metrics endpoint override. | | Optional: \{\}
Type: string
| + + +#### MonitorMetricsOptions + + + +MonitorMetricsOptions are provider-specific metrics query options. + + + +_Appears in:_ +- [MonitorMetricsQuery](#monitormetricsquery) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `azure` _[MonitorMetricsAzureOptions](#monitormetricsazureoptions)_ | Azure metrics query options. | | Optional: \{\}
| + + +#### MonitorMetricsQuery + + + +MonitorMetricsQuery is the metrics query configuration for a monitor. + + + +_Appears in:_ +- [MonitorQuery](#monitorquery) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `tool` _string_ | Tool is the named workbench metrics tool. When omitted, the native Plural metrics provider is used. | | Optional: \{\}
Type: string
| +| `query` _string_ | Query is the metrics query string passed through to the underlying metrics provider. | | MinLength: 1
Required: \{\}
Type: string
| +| `step` _string_ | Step is the metrics query step (e.g. 5m). | | Optional: \{\}
Pattern: `^[0-9]+[dmhs]$`
Type: string
| +| `duration` _string_ | Duration is the lookback duration for the metrics query (e.g. 1h). | | Optional: \{\}
Pattern: `^[0-9]+[dmhs]$`
Type: string
| +| `options` _[MonitorMetricsOptions](#monitormetricsoptions)_ | Options are provider-specific metrics query options. | | Optional: \{\}
| + + +#### MonitorQuery + + + +MonitorQuery is a wrapper for the underlying query definition for a monitor. +Exactly one of log or metrics should be set, matching the monitor type. + + + +_Appears in:_ +- [MonitorSpec](#monitorspec) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `log` _[MonitorLogQuery](#monitorlogquery)_ | Log query used when the monitor type is LOG. | | Optional: \{\}
| +| `metrics` _[MonitorMetricsQuery](#monitormetricsquery)_ | Metrics query used when the monitor type is METRICS. | | Optional: \{\}
| + + +#### MonitorSpec + + + +MonitorSpec defines the desired state of a Monitor. + + + +_Appears in:_ +- [Monitor](#monitor) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `name` _string_ | Name is the short name used to identify this monitor in the Console API.
If not set, metadata.name is used. | | Optional: \{\}
Type: string
| +| `serviceRef` _[LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#localobjectreference-v1-core)_ | ServiceRef references the ServiceDeployment resource this monitor is attached to.
The ServiceDeployment must be in the same namespace as the monitor.
Either ServiceRef or Service must be set. | | Optional: \{\}
| +| `service` _string_ | Service references an existing service in the Console API this monitor is attached to,
in the format "cluster-handle/service-name" (e.g. mgmt/console). Use it to attach
a monitor to a service that is not managed by a ServiceDeployment resource.
Either ServiceRef or Service must be set. | | Optional: \{\}
Pattern: `^[^/]+/[^/]+$`
Type: string
| +| `workbenchRef` _[LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#localobjectreference-v1-core)_ | WorkbenchRef references the Workbench this monitor is attached to.
When set, the monitor can start a workbench investigation when it fires.
It is required if the query uses a named workbench tool.
The Workbench must be in the same namespace as the monitor. | | Optional: \{\}
| +| `prompt` _string_ | Prompt is used when the monitor starts a workbench investigation. | | MaxLength: 2048
Optional: \{\}
Type: string
| +| `modes` _[WorkbenchJobModes](#workbenchjobmodes)_ | Modes defines mode-specific options for monitor-triggered workbench jobs. | | Optional: \{\}
| +| `description` _string_ | Description is an optional free-form description of what this monitor is checking. | | Optional: \{\}
Type: string
| +| `alertTemplate` _string_ | AlertTemplate is an optional template used when rendering alert messages for this monitor. | | Optional: \{\}
Type: string
| +| `severity` _[AlertSeverity](#alertseverity)_ | Severity is the severity level applied to alerts generated by this monitor. | | Enum: [LOW MEDIUM HIGH CRITICAL UNDEFINED]
Required: \{\}
| +| `type` _[MonitorType](#monitortype)_ | Type is the monitor data type. | | Enum: [LOG METRICS]
Required: \{\}
| +| `evaluationCron` _string_ | EvaluationCron is the cron schedule defining when the monitor is evaluated (e.g. */5 * * * *).
It must be a cron expression with 5 fields (or 6 with an optional year), separated by single spaces,
or one of the @yearly, @annually, @monthly, @weekly, @daily, @midnight, @hourly, @minutely,
@secondly or @reboot shortcuts. Field values are validated by the Console API. | | MinLength: 1
Pattern: `^(@(?i:yearly\|annually\|monthly\|weekly\|daily\|midnight\|hourly\|minutely\|secondly\|reboot)\|[^ ]+( [^ ]+)\{4,5\})$`
Required: \{\}
Type: string
| +| `query` _[MonitorQuery](#monitorquery)_ | Query is the underlying query configuration used to fetch data for this monitor. | | Required: \{\}
| +| `threshold` _[MonitorThreshold](#monitorthreshold)_ | Threshold is the configuration that determines when the monitor should fire. | | Required: \{\}
| +| `reconciliation` _[Reconciliation](#reconciliation)_ | Reconciliation settings for this resource. | | Optional: \{\}
| + + +#### MonitorThreshold + + + +MonitorThreshold is the threshold configuration used to decide when a monitor should fire. + + + +_Appears in:_ +- [MonitorSpec](#monitorspec) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `aggregate` _[MonitorAggregate](#monitoraggregate)_ | Aggregate is the aggregation function applied over the result set. | | Enum: [MAX MIN AVG]
Required: \{\}
| +| `value` _string_ | Value is the numeric value the aggregated metric must cross to trigger the alert.
It is a string to allow decimal values (e.g. "0.95"). | | Pattern: `^-?[0-9]+(\.[0-9]+)?$`
Required: \{\}
Type: string
| + + #### NamespaceCredentials @@ -4421,6 +4761,7 @@ _Appears in:_ - [ComplianceReportGeneratorSpec](#compliancereportgeneratorspec) - [CustomCompatibilityMatrixSpec](#customcompatibilitymatrixspec) - [CustomStackRunSpec](#customstackrunspec) +- [DashboardSpec](#dashboardspec) - [DeploymentSettingsSpec](#deploymentsettingsspec) - [FederatedCredentialSpec](#federatedcredentialspec) - [FlowSpec](#flowspec) @@ -4432,6 +4773,7 @@ _Appears in:_ - [InfrastructureStackSpec](#infrastructurestackspec) - [MCPServerSpec](#mcpserverspec) - [ManagedNamespaceSpec](#managednamespacespec) +- [MonitorSpec](#monitorspec) - [NamespaceCredentialsSpec](#namespacecredentialsspec) - [NotificationRouterSpec](#notificationrouterspec) - [NotificationSinkSpec](#notificationsinkspec) @@ -5859,6 +6201,100 @@ _Appears in:_ | `kubernetes` _boolean_ | Kubernetes enables the Kubernetes capability. | | Optional: \{\}
| +#### WorkbenchJobBudget + + + +WorkbenchJobBudget defines budget limits for a workbench job. + + + +_Appears in:_ +- [WorkbenchJobModes](#workbenchjobmodes) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `cost` _string_ | Cost is the maximum cost budget for the job.
It is a string to allow decimal values (e.g. "12.5"). | | Optional: \{\}
Pattern: `^[0-9]+(\.[0-9]+)?$`
Type: string
| +| `tokens` _integer_ | Tokens is the maximum token budget for the job. | | Minimum: 0
Optional: \{\}
| + + +#### WorkbenchJobCodingModes + + + +WorkbenchJobCodingModes defines coding mode options for a workbench job. + + + +_Appears in:_ +- [WorkbenchJobModes](#workbenchjobmodes) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `babysit` _boolean_ | Babysit enables babysit mode for coding agent runs. | | Optional: \{\}
| +| `approval` _boolean_ | Approval requires approval before coding agent runs continue. | | Optional: \{\}
| +| `review` _boolean_ | Review enables pull request review mode for coding agent runs. | | Optional: \{\}
| + + +#### WorkbenchJobKubernetesModes + + + +WorkbenchJobKubernetesModes defines kubernetes action options for a workbench job. + + + +_Appears in:_ +- [WorkbenchJobModes](#workbenchjobmodes) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `update` _boolean_ | Update enables kubernetes update actions. | | Optional: \{\}
| +| `delete` _boolean_ | Delete enables kubernetes delete actions. | | Optional: \{\}
| +| `exec` _boolean_ | Exec enables kubernetes exec actions. | | Optional: \{\}
| +| `drain` _boolean_ | Drain enables kubernetes node drain actions. | | Optional: \{\}
| +| `excludeNamespaces` _string array_ | ExcludeNamespaces are namespaces the agent can never act in. | | Optional: \{\}
| +| `requireNamespaces` _string array_ | RequireNamespaces, if set, are the only namespaces the agent is allowed to act in. | | Optional: \{\}
| + + +#### WorkbenchJobModel + + + +WorkbenchJobModel defines the AI model override for a workbench job. + + + +_Appears in:_ +- [WorkbenchJobModes](#workbenchjobmodes) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `provider` _[AiProvider](#aiprovider)_ | Provider is the AI provider for the job. | | Enum: [OPENAI ANTHROPIC OLLAMA AZURE BEDROCK VERTEX OPENAI_COMPATIBLE XAI]
Required: \{\}
| +| `model` _string_ | Model is the model name for the job. | | MinLength: 1
Required: \{\}
Type: string
| + + +#### WorkbenchJobModes + + + +WorkbenchJobModes defines mode-specific options for workbench jobs. + + + +_Appears in:_ +- [MonitorSpec](#monitorspec) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `plan` _boolean_ | Plan enables planning mode for the job. | | Optional: \{\}
| +| `verification` _boolean_ | Verification enables verification mode for the job. | | Optional: \{\}
| +| `model` _[WorkbenchJobModel](#workbenchjobmodel)_ | Model overrides the AI model used for the job. | | Optional: \{\}
| +| `coding` _[WorkbenchJobCodingModes](#workbenchjobcodingmodes)_ | Coding defines coding mode options for the job. | | Optional: \{\}
| +| `budget` _[WorkbenchJobBudget](#workbenchjobbudget)_ | Budget defines budget limits for the job. | | Optional: \{\}
| +| `kubernetes` _[WorkbenchJobKubernetesModes](#workbenchjobkubernetesmodes)_ | Kubernetes defines kubernetes action options for the job. | | Optional: \{\}
| + + #### WorkbenchObservabilityConfig