{
  "openapi": "3.1.1",
  "info": {
    "title": "Developer & cloud explorers API",
    "version": "1.0.0",
    "summary": "Deterministic tools for people and AI agents.",
    "description": "Every endpoint performs the same calculation as the human page and returns inputs, result, units, assumptions, sources, warnings and computedAt. MCP endpoint: /mcp."
  },
  "servers": [
    {
      "url": "https://devcloud.usefulweb.site"
    }
  ],
  "paths": {
    "/api/v1/tools": {
      "get": {
        "operationId": "listTools",
        "summary": "Catalog of all tools",
        "responses": {
          "200": {
            "description": "Tool list.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/{id}": {
      "get": {
        "operationId": "getTool",
        "summary": "Definition of one tool",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "api-explorer-of-explorers",
                "cicd-failure-explorer",
                "cron-job-explorer",
                "data-lineage-explorer",
                "distributed-trace-explorer",
                "kubernetes-event-explorer",
                "openapi-diff-explorer",
                "query-plan-visualizer",
                "serverless-performance-explorer",
                "terraform-drift-explorer"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Tool definition.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/api-explorer-of-explorers/calculate": {
      "post": {
        "operationId": "calculateApiExplorerOfExplorers",
        "summary": "Search 2,500+ public APIs or summarise any OpenAPI spec: servers, auth, endpoints, changes.",
        "description": "Search the APIs.guru OpenAPI directory for public APIs (titles, versions, categories, spec links), or paste/link an OpenAPI 3.x or Swagger 2 document (JSON or YAML) to get its servers, authentication schemes and scopes, a full endpoint table with auth per operation, tags, example coverage, schema count and documentation issues. Specs fetched by URL are snapshotted so the next run shows what changed (breaking or not).\n\nMethodology:\n- Directory search: provider names from https://api.apis.guru/v2/providers.json are ranked (exact, prefix, word, substring match); details for the top 5 providers come from https://api.apis.guru/v2/{provider}.json (title, version, categories, OpenAPI version, last update and spec links).\n- Spec summary: servers (OpenAPI servers or Swagger schemes+host+basePath), securitySchemes/securityDefinitions with flows and scope counts, effective security per operation (operation-level overrides the global requirement; [] means public), tags with operation counts and component/definition schema count.\n- Example coverage counts operations whose parameters, request bodies or responses carry example/examples (including examples on referenced schemas).\n- Change detection uses the same direction-aware rules as the OpenAPI Diff Explorer; URL specs are fingerprinted with SHA-256 of their canonical JSON and the snapshot is kept under SHA-256(URL), so the next run reports changes since the last snapshot.",
        "tags": [
          "devcloud"
        ],
        "x-mcp-tool": "api_explorer_of_explorers",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApiExplorerOfExplorersInput"
              },
              "examples": {
                "example1": {
                  "summary": "Summarise a pasted spec (Parcel Tracking API)",
                  "value": {
                    "mode": "spec",
                    "specText": "openapi: 3.0.3\ninfo:\n  title: Parcel Tracking API\n  version: 2.3.0\n  description: Track parcels, manage webhooks and fetch proof of delivery.\nservers:\n  - url: https://api.parcels.example.com/v2\n  - url: http://sandbox.parcels.example.com/v2\nsecurity:\n  - oauth: [parcels.read]\ntags:\n  - name: parcels\n    description: Parcel lookup and history\n  - name: webhooks\n    description: Event subscriptions\npaths:\n  /parcels/{trackingNumber}:\n    get:\n      operationId: getParcel\n      summary: Get a parcel by tracking number\n      tags: [parcels]\n      parameters:\n        - name: trackingNumber\n          in: path\n          required: true\n          schema: {type: string}\n          example: 1Z999AA10123456784\n      responses:\n        '200':\n          description: The parcel\n          content:\n            application/json:\n              schema: {$ref: '#/components/schemas/Parcel'}\n              example: {trackingNumber: 1Z999AA10123456784, status: in_transit}\n        '404': {description: Unknown tracking number}\n  /parcels/{trackingNumber}/events:\n    get:\n      operationId: listParcelEvents\n      summary: Scan events for a parcel\n      tags: [parcels]\n      parameters:\n        - {name: trackingNumber, in: path, required: true, schema: {type: string}}\n        - {name: limit, in: query, schema: {type: integer, maximum: 100}}\n      responses:\n        '200':\n          description: Events, newest first\n          content:\n            application/json:\n              schema:\n                type: array\n                items: {$ref: '#/components/schemas/Event'}\n  /parcels/{trackingNumber}/pod:\n    get:\n      operationId: getProofOfDelivery\n      summary: Proof of delivery (signature image)\n      tags: [parcels]\n      security:\n        - oauth: [parcels.read, pod.read]\n      parameters:\n        - {name: trackingNumber, in: path, required: true, schema: {type: string}}\n      responses:\n        '200':\n          description: PNG image\n          content:\n            image/png: {}\n  /webhooks:\n    get:\n      operationId: listWebhooks\n      summary: List webhook subscriptions\n      tags: [webhooks]\n      responses:\n        '200':\n          description: Subscriptions\n          content:\n            application/json:\n              schema:\n                type: array\n                items: {$ref: '#/components/schemas/Webhook'}\n    post:\n      operationId: createWebhook\n      summary: Subscribe to parcel events\n      tags: [webhooks]\n      security:\n        - oauth: [webhooks.write]\n      requestBody:\n        required: true\n        content:\n          application/json:\n            schema: {$ref: '#/components/schemas/Webhook'}\n            example: {url: 'https://shop.example.com/hooks/parcels', events: [delivered, exception]}\n      responses:\n        '201': {description: Created}\n  /webhooks/{id}:\n    delete:\n      summary: Delete a webhook subscription\n      tags: [webhooks]\n      security:\n        - oauth: [webhooks.write]\n      parameters:\n        - {name: id, in: path, required: true, schema: {type: string}}\n      responses:\n        '204': {description: Deleted}\n  /health:\n    get:\n      operationId: health\n      summary: Liveness check\n      security: []\n      responses:\n        '200': {description: OK}\ncomponents:\n  securitySchemes:\n    oauth:\n      type: oauth2\n      flows:\n        clientCredentials:\n          tokenUrl: https://auth.parcels.example.com/oauth/token\n          scopes:\n            parcels.read: Read parcels\n            pod.read: Read proof of delivery\n            webhooks.write: Manage webhooks\n    apiKey:\n      type: apiKey\n      in: header\n      name: X-Api-Key\n  schemas:\n    Parcel:\n      type: object\n      required: [trackingNumber, status]\n      properties:\n        trackingNumber: {type: string}\n        status: {type: string, enum: [label_created, in_transit, delivered, exception]}\n        eta: {type: string, format: date-time}\n    Event:\n      type: object\n      properties:\n        at: {type: string, format: date-time}\n        location: {type: string}\n        code: {type: string}\n    Webhook:\n      type: object\n      required: [url, events]\n      properties:\n        id: {type: string}\n        url: {type: string, format: uri}\n        events:\n          type: array\n          items: {type: string}\n"
                  }
                },
                "example2": {
                  "summary": "Summarise and compare with the previous version",
                  "value": {
                    "mode": "spec",
                    "specText": "openapi: 3.0.3\ninfo:\n  title: Parcel Tracking API\n  version: 2.3.0\n  description: Track parcels, manage webhooks and fetch proof of delivery.\nservers:\n  - url: https://api.parcels.example.com/v2\n  - url: http://sandbox.parcels.example.com/v2\nsecurity:\n  - oauth: [parcels.read]\ntags:\n  - name: parcels\n    description: Parcel lookup and history\n  - name: webhooks\n    description: Event subscriptions\npaths:\n  /parcels/{trackingNumber}:\n    get:\n      operationId: getParcel\n      summary: Get a parcel by tracking number\n      tags: [parcels]\n      parameters:\n        - name: trackingNumber\n          in: path\n          required: true\n          schema: {type: string}\n          example: 1Z999AA10123456784\n      responses:\n        '200':\n          description: The parcel\n          content:\n            application/json:\n              schema: {$ref: '#/components/schemas/Parcel'}\n              example: {trackingNumber: 1Z999AA10123456784, status: in_transit}\n        '404': {description: Unknown tracking number}\n  /parcels/{trackingNumber}/events:\n    get:\n      operationId: listParcelEvents\n      summary: Scan events for a parcel\n      tags: [parcels]\n      parameters:\n        - {name: trackingNumber, in: path, required: true, schema: {type: string}}\n        - {name: limit, in: query, schema: {type: integer, maximum: 100}}\n      responses:\n        '200':\n          description: Events, newest first\n          content:\n            application/json:\n              schema:\n                type: array\n                items: {$ref: '#/components/schemas/Event'}\n  /parcels/{trackingNumber}/pod:\n    get:\n      operationId: getProofOfDelivery\n      summary: Proof of delivery (signature image)\n      tags: [parcels]\n      security:\n        - oauth: [parcels.read, pod.read]\n      parameters:\n        - {name: trackingNumber, in: path, required: true, schema: {type: string}}\n      responses:\n        '200':\n          description: PNG image\n          content:\n            image/png: {}\n  /webhooks:\n    get:\n      operationId: listWebhooks\n      summary: List webhook subscriptions\n      tags: [webhooks]\n      responses:\n        '200':\n          description: Subscriptions\n          content:\n            application/json:\n              schema:\n                type: array\n                items: {$ref: '#/components/schemas/Webhook'}\n    post:\n      operationId: createWebhook\n      summary: Subscribe to parcel events\n      tags: [webhooks]\n      security:\n        - oauth: [webhooks.write]\n      requestBody:\n        required: true\n        content:\n          application/json:\n            schema: {$ref: '#/components/schemas/Webhook'}\n            example: {url: 'https://shop.example.com/hooks/parcels', events: [delivered, exception]}\n      responses:\n        '201': {description: Created}\n  /webhooks/{id}:\n    delete:\n      summary: Delete a webhook subscription\n      tags: [webhooks]\n      security:\n        - oauth: [webhooks.write]\n      parameters:\n        - {name: id, in: path, required: true, schema: {type: string}}\n      responses:\n        '204': {description: Deleted}\n  /health:\n    get:\n      operationId: health\n      summary: Liveness check\n      security: []\n      responses:\n        '200': {description: OK}\ncomponents:\n  securitySchemes:\n    oauth:\n      type: oauth2\n      flows:\n        clientCredentials:\n          tokenUrl: https://auth.parcels.example.com/oauth/token\n          scopes:\n            parcels.read: Read parcels\n            pod.read: Read proof of delivery\n            webhooks.write: Manage webhooks\n    apiKey:\n      type: apiKey\n      in: header\n      name: X-Api-Key\n  schemas:\n    Parcel:\n      type: object\n      required: [trackingNumber, status]\n      properties:\n        trackingNumber: {type: string}\n        status: {type: string, enum: [label_created, in_transit, delivered, exception]}\n        eta: {type: string, format: date-time}\n    Event:\n      type: object\n      properties:\n        at: {type: string, format: date-time}\n        location: {type: string}\n        code: {type: string}\n    Webhook:\n      type: object\n      required: [url, events]\n      properties:\n        id: {type: string}\n        url: {type: string, format: uri}\n        events:\n          type: array\n          items: {type: string}\n",
                    "previousSpec": "openapi: 3.0.3\ninfo:\n  title: Parcel Tracking API\n  version: 2.2.0\n  description: Track parcels, manage webhooks and fetch proof of delivery.\nservers:\n  - url: https://api.parcels.example.com/v2\n  - url: http://sandbox.parcels.example.com/v2\nsecurity:\n  - oauth: [parcels.read]\ntags:\n  - name: parcels\n    description: Parcel lookup and history\n  - name: webhooks\n    description: Event subscriptions\npaths:\n  /parcels/{trackingNumber}:\n    get:\n      operationId: getParcel\n      summary: Get a parcel by tracking number\n      tags: [parcels]\n      parameters:\n        - name: trackingNumber\n          in: path\n          required: true\n          schema: {type: string}\n          example: 1Z999AA10123456784\n      responses:\n        '200':\n          description: The parcel\n          content:\n            application/json:\n              schema: {$ref: '#/components/schemas/Parcel'}\n              example: {trackingNumber: 1Z999AA10123456784, status: in_transit}\n        '404': {description: Unknown tracking number}\n  /parcels/{trackingNumber}/events:\n    get:\n      operationId: listParcelEvents\n      summary: Scan events for a parcel\n      tags: [parcels]\n      parameters:\n        - {name: trackingNumber, in: path, required: true, schema: {type: string}}\n        - {name: limit, in: query, schema: {type: integer, maximum: 500}}\n      responses:\n        '200':\n          description: Events, newest first\n          content:\n            application/json:\n              schema:\n                type: array\n                items: {$ref: '#/components/schemas/Event'}\n  /webhooks:\n    get:\n      operationId: listWebhooks\n      summary: List webhook subscriptions\n      tags: [webhooks]\n      responses:\n        '200':\n          description: Subscriptions\n          content:\n            application/json:\n              schema:\n                type: array\n                items: {$ref: '#/components/schemas/Webhook'}\n    post:\n      operationId: createWebhook\n      summary: Subscribe to parcel events\n      tags: [webhooks]\n      security:\n        - oauth: [webhooks.write]\n      requestBody:\n        required: true\n        content:\n          application/json:\n            schema: {$ref: '#/components/schemas/Webhook'}\n            example: {url: 'https://shop.example.com/hooks/parcels', events: [delivered, exception]}\n      responses:\n        '201': {description: Created}\n  /webhooks/{id}:\n    delete:\n      summary: Delete a webhook subscription\n      tags: [webhooks]\n      security:\n        - oauth: [webhooks.write]\n      parameters:\n        - {name: id, in: path, required: true, schema: {type: string}}\n      responses:\n        '204': {description: Deleted}\n  /health:\n    get:\n      operationId: health\n      summary: Liveness check\n      security: []\n      responses:\n        '200': {description: OK}\ncomponents:\n  securitySchemes:\n    oauth:\n      type: oauth2\n      flows:\n        clientCredentials:\n          tokenUrl: https://auth.parcels.example.com/oauth/token\n          scopes:\n            parcels.read: Read parcels\n            pod.read: Read proof of delivery\n            webhooks.write: Manage webhooks\n    apiKey:\n      type: apiKey\n      in: header\n      name: X-Api-Key\n  schemas:\n    Parcel:\n      type: object\n      required: [trackingNumber, status]\n      properties:\n        trackingNumber: {type: string}\n        status: {type: string, enum: [label_created, in_transit, delivered, exception, returned]}\n        eta: {type: string, format: date-time}\n        weightGrams: {type: integer}\n    Event:\n      type: object\n      properties:\n        at: {type: string, format: date-time}\n        location: {type: string}\n        code: {type: string}\n    Webhook:\n      type: object\n      required: [url, events]\n      properties:\n        id: {type: string}\n        url: {type: string, format: uri}\n        events:\n          type: array\n          items: {type: string}\n"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiExplorerOfExplorersResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/cicd-failure-explorer/calculate": {
      "post": {
        "operationId": "calculateCicdFailureExplorer",
        "summary": "Paste CI logs from several runs: root cause per run, grouped signatures, top causes and fixes.",
        "description": "Paste or upload logs of several GitHub Actions, GitLab CI or Jenkins runs (separated by \"=== run: name ===\" lines). Each run is classified by a documented pattern catalogue — test assertions (with test names), compile/type errors, dependency resolution, network/registry timeouts, OOM/exit 137, disk full, timeouts, lint, flaky retries, missing secrets/permissions — and runs are grouped by normalised error signature with counts per branch and day.\n\nMethodology:\n- Runs are split at lines \"=== run: <name> ===\" (header metadata branch=, date=, status= is honoured). ANSI colours, GitHub timestamp prefixes and GitLab section markers are stripped.\n- Platform is detected from runner markers (##[group]/##[error], \"Running with gitlab-runner\", \"[Pipeline]\"/\"Finished: …\"). Status comes from the header, then from terminal markers (Process completed with exit code, ERROR: Job failed, Finished: FAILURE/SUCCESS).\n- Every line is matched against a catalogue of documented error markers per cause. When several causes appear, the one with the highest causal priority wins: OOM/exit 137 → disk full → timeout → permission/secret → network → dependency → compile → lint → test → flaky → cancelled (e.g. a test crash after an OOM kill is reported as OOM).\n- The first matching line is the evidence; its normalised form (paths, SHAs, UUIDs, timestamps, IPs, line numbers and durations replaced by placeholders) is the signature used to group runs. Test failures are grouped by the sorted names of the failing tests.\n- Failing test names are extracted from jest/vitest (●/×), pytest (FAILED a::b), go test (--- FAIL), Maven Surefire ([ERROR] Class.method), Gradle (> … FAILED), TAP/node:test (not ok) and RSpec (rspec ./spec …).\n- Flaky suspects: tests that fail in some runs of a job but other runs of the same job (name without #number) pass, and passing runs that contain retry markers.\n- Unclassified failures are labelled with the closest match from the Error Message Translator pattern database when possible.",
        "tags": [
          "devcloud"
        ],
        "x-mcp-tool": "cicd_failure_explorer",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CicdFailureExplorerInput"
              },
              "examples": {
                "example1": {
                  "summary": "Eight runs across GitHub Actions, GitLab and Jenkins",
                  "value": {
                    "logs": "=== run: test #1841 | branch=main | date=2026-10-05T08:12:00Z ===\n2026-10-05T08:12:01.1000000Z Current runner version: '2.328.0'\n2026-10-05T08:12:03.2000000Z ##[group]Run npm test -- --ci\n2026-10-05T08:13:40.5000000Z FAIL src/cart/total.test.ts\n2026-10-05T08:13:40.5100000Z   ● Cart totals › applies discount codes\n2026-10-05T08:13:40.5200000Z     expect(received).toBe(expected) // Object.is equality\n2026-10-05T08:13:40.5300000Z     Expected: 90\n2026-10-05T08:13:40.5400000Z     Received: 100\n2026-10-05T08:13:41.0000000Z Tests:       1 failed, 211 passed, 212 total\n2026-10-05T08:13:41.2000000Z ##[error]Process completed with exit code 1.\n=== run: test #1842 | branch=feature/checkout | date=2026-10-05T11:40:00Z ===\n2026-10-05T11:40:02.0000000Z ##[group]Run npm test -- --ci\n2026-10-05T11:41:10.0000000Z FAIL src/cart/total.test.ts\n2026-10-05T11:41:10.1000000Z   ● Cart totals › applies discount codes\n2026-10-05T11:41:10.2000000Z     Expected: 90\n2026-10-05T11:41:10.3000000Z     Received: 100\n2026-10-05T11:41:11.0000000Z ##[error]Process completed with exit code 1.\n=== run: test #1843 | branch=main | date=2026-10-06T09:00:00Z ===\n2026-10-06T09:00:02.0000000Z ##[group]Run npm test -- --ci\n2026-10-06T09:01:30.0000000Z Tests:       212 passed, 212 total\n2026-10-06T09:01:31.0000000Z Process completed with exit code 0.\n=== run: build-image #77 | branch=main | date=2026-10-06T10:00:00Z ===\nRunning with gitlab-runner 18.4.0 (a1b2c3d4)\nUsing docker executor with image node:22 ...\n$ npm ci\nnpm ERR! code ETIMEDOUT\nnpm ERR! network request to https://registry.npmjs.org/react failed, reason: connect ETIMEDOUT 104.16.2.35:443\nERROR: Job failed: exit code 1\n=== run: build-image #78 | branch=main | date=2026-10-07T10:00:00Z ===\nRunning with gitlab-runner 18.4.0 (a1b2c3d4)\n$ npm ci\nnpm ERR! code ERESOLVE\nnpm ERR! ERESOLVE unable to resolve dependency tree\nnpm ERR! Could not resolve dependency: peer react@\"^18\" from react-beautiful-dnd@13.1.1\nERROR: Job failed: exit code 1\n=== run: integration | branch=release/2.4 | date=2026-10-07T22:15:00Z ===\nStarted by timer\n[Pipeline] { (Integration tests)\n+ ./gradlew integrationTest\n> Task :app:integrationTest\nGradle Test Executor 3 finished executing tests.\n/var/lib/jenkins/workspace/shop/run-tests.sh: line 12:  4121 Killed                  ./gradlew integrationTest\nscript returned exit code 137\nFinished: FAILURE\n=== run: test #1844 | branch=main | date=2026-10-08T09:00:00Z ===\n2026-10-08T09:00:02.0000000Z ##[group]Run npm test -- --ci\n2026-10-08T09:01:00.0000000Z jest-circus: retrying test \"Search › debounces input\" (attempt 2 of 3)\n2026-10-08T09:01:30.0000000Z Tests:       212 passed, 212 total\n2026-10-08T09:01:31.0000000Z Process completed with exit code 0.\n=== run: deploy #310 | branch=main | date=2026-10-08T12:00:00Z ===\n2026-10-08T12:00:05.0000000Z ##[group]Run aws-actions/configure-aws-credentials@v4\n2026-10-08T12:00:06.0000000Z ##[error]Credentials could not be loaded, please check your action inputs: Could not load credentials from any providers\n"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CicdFailureExplorerResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/cron-job-explorer/calculate": {
      "post": {
        "operationId": "calculateCronJobExplorer",
        "summary": "Paste a crontab or CronJob YAML: plain-English schedules, DST-exact next runs, herds and overlaps.",
        "description": "Paste crontab lines (5-field, @daily macros, 6-field with seconds, Quartz with ? L W #), Kubernetes CronJob YAML or GitHub Actions schedules, plus an optional run-history CSV. Get a plain-English description and the next runs of every job in any IANA time zone with correct DST handling, minutes where many jobs start at once, overlapping schedules, jobs that run longer than their interval and failure/retry statistics.\n\nMethodology:\n- Fields: minute 0–59, hour 0–23, day-of-month 1–31, month 1–12 or JAN–DEC, day-of-week 0–7 or SUN–SAT (0 and 7 = Sunday); lists, ranges, steps (*/n, a-b/n, a/n). @yearly, @monthly, @weekly, @daily/@midnight and @hourly are expanded; @reboot has no time schedule.\n- Day matching follows Vixie cron/cronie: when both day-of-month and day-of-week are restricted (neither starts with \"*\"), a day matches if EITHER matches; if one starts with \"*\" (including \"*/2\"), both must match.\n- 6-field lines with a leading seconds field are detected automatically; \"?\", L, W and # select Quartz semantics (day-of-week 1–7 with 1 = Sunday, L = last day, 15W = nearest weekday, 6#3 = third Friday, 5L = last Thursday, optional year field).\n- Next runs are computed by walking local calendar days in the job’s time zone and converting each matching wall-clock time to UTC with Intl (IANA tz database). DST, cronie rules: fixed-time jobs scheduled in a skipped hour run right after the switch and run only once in a repeated hour; jobs with \"*\" in the minute or hour field follow the new wall clock (skip the gap, run in both passes of a repeated hour). The \"wall-clock\" policy skips non-existent times and runs repeated times twice.\n- Herd minutes: within the analysis window, start times of all jobs are bucketed per minute; minutes with at least the threshold of distinct jobs are reported. Overlaps list job pairs sharing start minutes.\n- Run history: per job, runs, failures, timeouts, retries (status contains \"retr\", attempt > 1, or a failed run followed by a new start before the next scheduled run), duration statistics, missed scheduled runs between first and last recorded start, and whether the p95 duration exceeds the shortest interval between scheduled runs (overlapping self-runs). Peak concurrency uses the p95 durations (1 minute when unknown).\n- Kubernetes CronJob: metadata.name, spec.schedule, spec.timeZone, suspend and concurrencyPolicy are read; GitHub Actions on.schedule cron entries are always UTC.",
        "tags": [
          "devcloud"
        ],
        "x-mcp-tool": "cron_job_explorer",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CronJobExplorerInput"
              },
              "examples": {
                "example1": {
                  "summary": "Crontab + Kubernetes CronJob with run history (Berlin)",
                  "value": {
                    "crontab": "# m h dom mon dow command\nCRON_TZ=Europe/Berlin\nMAILTO=ops@example.com\n# Nightly database backup\n30 2 * * * /usr/local/bin/backup-db.sh --full\n*/15 * * * * /opt/app/bin/sync-inventory\n0 * * * * /opt/app/bin/rotate-logs # log-rotate\n0 2 * * * /usr/bin/flock -n /tmp/report.lock python3 /opt/app/reports/build_report.py\n0 9-17/2 * * 1-5 /opt/app/bin/send-digest\n0 0 1 * * /opt/app/bin/invoice-run\n@daily /usr/local/bin/cleanup-tmp\n0 30 6 ? * MON-FRI # quartz-warmup\n---\napiVersion: batch/v1\nkind: CronJob\nmetadata:\n  name: cache-warmer\nspec:\n  schedule: \"0 2 * * *\"\n  timeZone: \"Europe/Berlin\"\n  concurrencyPolicy: Allow\n  jobTemplate:\n    spec:\n      template:\n        spec:\n          containers:\n            - name: warmer\n              image: example/warmer:1.4\n",
                    "history": "job,start,end,status\nNightly database backup,2026-10-08T02:30:00,2026-10-08T03:12:00,success\nNightly database backup,2026-10-09T02:30:00,2026-10-09T03:41:00,success\nNightly database backup,2026-10-10T02:30:00,2026-10-10T02:31:10,failed\nNightly database backup,2026-10-10T02:45:00,2026-10-10T03:30:00,success\nNightly database backup,2026-10-11T02:30:00,2026-10-11T03:20:00,success\nsync-inventory,2026-10-11T09:00:00,2026-10-11T09:21:00,success\nsync-inventory,2026-10-11T09:15:00,2026-10-11T09:33:00,success\nsync-inventory,2026-10-11T09:30:00,2026-10-11T09:31:00,error\nsync-inventory,2026-10-11T09:45:00,2026-10-11T10:04:00,success\npython3 build_report.py,2026-10-10T02:00:00,2026-10-10T02:40:00,success\npython3 build_report.py,2026-10-11T02:00:00,2026-10-11T02:52:00,success\n",
                    "timeZone": "Europe/Berlin",
                    "from": "2026-10-12T08:00",
                    "count": 5
                  }
                },
                "example2": {
                  "summary": "DST weekend: fall-back night 25 Oct 2026",
                  "value": {
                    "crontab": "# hourly-ish ETL\n30 2 * * * /opt/etl/nightly.sh # nightly-etl\n*/30 1-3 * * * /opt/etl/poll.sh # poller\n0 30 2 * * ? # quartz-0230",
                    "timeZone": "Europe/Berlin",
                    "from": "2026-10-24T12:00",
                    "count": 6,
                    "horizonHours": 48
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CronJobExplorerResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/data-lineage-explorer/calculate": {
      "post": {
        "operationId": "calculateDataLineageExplorer",
        "summary": "Paste SQL or dbt models: table lineage graph, column lineage and upstream/downstream of any field.",
        "description": "Paste SQL (CREATE VIEW/TABLE AS SELECT, INSERT … SELECT, MERGE, UPDATE, CTEs, JOINs, UNION) or dbt models with {{ ref() }} and {{ source() }}. A built-in tokenizer and parser derives table-level lineage and column-level lineage for direct references and aliases, marks expressions as derived or aggregated, and traces everything upstream and downstream of a chosen table or column.\n\nMethodology:\n- dbt Jinja is resolved first: {{ ref(\"m\") }} → m, {{ ref(\"pkg\",\"m\") }} → m, {{ source(\"s\",\"t\") }} → s.t, {{ this }} → the current model, {{ config(materialized=…) }} is read; other Jinja is stripped with a note.\n- A hand-written tokenizer handles quoted identifiers (\"x\", `x`, [x]), strings, comments, dollar-quoting and operators; statements are split at top-level semicolons.\n- A recursive-descent parser understands WITH/CTEs (column lists, RECURSIVE), SELECT lists with aliases, FROM/JOIN … ON/USING, comma joins, derived tables, scalar/EXISTS/IN subqueries, UNION/INTERSECT/EXCEPT, SELECT */t.* (incl. EXCEPT/EXCLUDE), CREATE … AS, INSERT … SELECT (positional mapping to the column list or known DDL), MERGE (UPDATE SET / INSERT VALUES) and UPDATE … SET … FROM.\n- Each output column is resolved through CTEs and subqueries to base-table columns. A bare column reference is \"direct\" (or \"renamed\" when aliased); anything else is \"derived\", \"aggregate\" if it uses an aggregate function, or \"constant\" without column inputs. Columns used only in JOIN/WHERE/GROUP BY are listed as filter columns of the statement.\n- Unqualified columns are resolved against the tables in scope using known columns (from CREATE TABLE DDL or earlier statements); if several tables could supply a column it is attributed to all and flagged as ambiguous.\n- Upstream/downstream tracing is a breadth-first walk over column edges (or table edges for a table focus) across all statements; the reported transform is the strongest transformation along the path.\n- Not supported: dynamic SQL, stored procedures, PIVOT/UNPIVOT column lineage, column lineage of table functions (UNNEST/FLATTEN/LATERAL VIEW), Jinja loops and macros, and SELECT * from tables whose columns are unknown (kept as a \"*\" star edge).",
        "tags": [
          "devcloud"
        ],
        "x-mcp-tool": "data_lineage_explorer",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DataLineageExplorerInput"
              },
              "examples": {
                "example1": {
                  "summary": "dbt models + MERGE: where does revenue come from?",
                  "value": {
                    "sql": "-- model: stg_orders\n{{ config(materialized='view') }}\nselect\n  o.id as order_id,\n  o.customer_id,\n  o.amount_cents / 100.0 as amount,\n  o.currency,\n  o.status,\n  o.created_at\nfrom {{ source('shop', 'orders') }} o\nwhere o.status <> 'test'\n\n-- model: stg_customers\nselect id as customer_id, email, country_code as country, created_at as signed_up_at\nfrom {{ source('shop', 'customers') }}\n\n-- model: fct_orders\n{{ config(materialized='table') }}\nwith paid as (\n  select order_id, customer_id, amount, currency, created_at\n  from {{ ref('stg_orders') }}\n  where status = 'paid'\n),\nfx as (\n  select currency, rate_to_eur from {{ source('finance', 'fx_rates') }}\n)\nselect\n  p.order_id,\n  p.customer_id,\n  c.country,\n  p.amount * coalesce(fx.rate_to_eur, 1) as amount_eur,\n  date_trunc('month', p.created_at) as order_month\nfrom paid p\njoin {{ ref('stg_customers') }} c on c.customer_id = p.customer_id\nleft join fx on fx.currency = p.currency\n\n-- model: rpt_revenue_by_country\nselect country, order_month, sum(amount_eur) as revenue, count(distinct customer_id) as customers\nfrom {{ ref('fct_orders') }}\ngroup by country, order_month\n\n-- file: warehouse/merge_dim_customer.sql\nMERGE INTO analytics.dim_customer t\nUSING stg_customers s ON t.customer_id = s.customer_id\nWHEN MATCHED THEN UPDATE SET email = s.email, country = s.country\nWHEN NOT MATCHED THEN INSERT (customer_id, email, country) VALUES (s.customer_id, s.email, upper(s.country));\n",
                    "focus": "rpt_revenue_by_country.revenue",
                    "direction": "both"
                  }
                },
                "example2": {
                  "summary": "Plain SQL: impact of raw.users.plan",
                  "value": {
                    "sql": "CREATE TABLE raw.events (event_id bigint, user_id bigint, event_type text, ts timestamp, payload json);\nCREATE TABLE raw.users (id bigint, email text, plan text);\n\nCREATE OR REPLACE VIEW mart.daily_active AS\nSELECT CAST(e.ts AS date) AS day, u.plan, COUNT(DISTINCT e.user_id) AS dau\nFROM raw.events e\nJOIN raw.users u ON u.id = e.user_id\nWHERE e.event_type IN ('login', 'page_view')\nGROUP BY 1, 2;\n\nINSERT INTO mart.plan_kpis (day, plan, active_users, source)\nSELECT day, plan, dau, 'web' FROM mart.daily_active\nUNION ALL\nSELECT d.day, d.plan, d.active, 'mobile' FROM (SELECT day, plan, users AS active FROM raw.mobile_daily) d;\n",
                    "focus": "raw.users.plan",
                    "direction": "downstream"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DataLineageExplorerResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/distributed-trace-explorer/calculate": {
      "post": {
        "operationId": "calculateDistributedTraceExplorer",
        "summary": "Paste an OTLP, Jaeger or Zipkin trace: span tree, critical path, self-time, N+1 calls and errors.",
        "description": "Paste a trace exported as OTLP JSON (resourceSpans), Jaeger JSON (data[].spans) or Zipkin v2 JSON. The explorer rebuilds the span tree, computes self-time (excluding overlapping child spans), the critical path that determines end-to-end latency, the slowest services, error spans, and detects N+1 queries and fan-out (many sibling spans with the same name), with a service call graph and a waterfall.\n\nMethodology:\n- Formats: OTLP/JSON (resource service.name, startTimeUnixNano/endTimeUnixNano, status.code 2 = ERROR), Jaeger JSON (µs startTime/duration, CHILD_OF references, error=true tag) and Zipkin v2 (µs timestamp/duration, \"error\" tag; shared client/server spans are split so the server span becomes the client span's child).\n- Self-time = span duration minus the union of its children's intervals (clipped to the span), so concurrent children are not double-counted.\n- Critical path: from the longest root span, repeatedly take the child that finishes last before the current cursor, recurse into it, and move the cursor to its start; time not covered by a critical child is the span's own critical time.\n- Repeated siblings: children of one parent with the same service + normalised name/statement (ids and literals masked) at or above the threshold. If their summed duration ≈ wall time they ran sequentially (N+1); if wall time ≤ 40% of the sum they ran in parallel (fan-out).\n- Root-cause errors are error spans none of whose descendants also errored.",
        "tags": [
          "devcloud"
        ],
        "x-mcp-tool": "distributed_trace_explorer",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DistributedTraceExplorerInput"
              },
              "examples": {
                "example1": {
                  "summary": "OTLP: order page with N+1 queries and a timing-out dependency",
                  "value": {
                    "text": "{\"resourceSpans\":[{\"resource\":{\"attributes\":[{\"key\":\"service.name\",\"value\":{\"stringValue\":\"frontend\"}}]},\"scopeSpans\":[{\"scope\":{\"name\":\"otel-js\"},\"spans\":[{\"traceId\":\"4bf92f3577b34da6a3ce929d0e0e4736\",\"spanId\":\"00f067aa0ba90001\",\"name\":\"GET /account/orders\",\"kind\":2,\"startTimeUnixNano\":\"1760263200000000000\",\"endTimeUnixNano\":\"1760263200182000000\",\"attributes\":[{\"key\":\"http.request.method\",\"value\":{\"stringValue\":\"GET\"}},{\"key\":\"http.route\",\"value\":{\"stringValue\":\"/account/orders\"}},{\"key\":\"http.response.status_code\",\"value\":{\"intValue\":\"200\"}}]},{\"traceId\":\"4bf92f3577b34da6a3ce929d0e0e4736\",\"spanId\":\"00f067aa0ba90002\",\"parentSpanId\":\"00f067aa0ba90001\",\"name\":\"GET orders-api\",\"kind\":3,\"startTimeUnixNano\":\"1760263200006000000\",\"endTimeUnixNano\":\"1760263200120000000\",\"attributes\":[{\"key\":\"server.address\",\"value\":{\"stringValue\":\"orders-api\"}}]},{\"traceId\":\"4bf92f3577b34da6a3ce929d0e0e4736\",\"spanId\":\"00f067aa0ba90003\",\"parentSpanId\":\"00f067aa0ba90001\",\"name\":\"GET recommendations\",\"kind\":3,\"startTimeUnixNano\":\"1760263200008000000\",\"endTimeUnixNano\":\"1760263200170000000\",\"attributes\":[{\"key\":\"server.address\",\"value\":{\"stringValue\":\"reco\"}}],\"status\":{\"code\":2,\"message\":\"upstream timeout after 150ms\"}}]}]},{\"resource\":{\"attributes\":[{\"key\":\"service.name\",\"value\":{\"stringValue\":\"orders-api\"}}]},\"scopeSpans\":[{\"scope\":{\"name\":\"otel-java\"},\"spans\":[{\"traceId\":\"4bf92f3577b34da6a3ce929d0e0e4736\",\"spanId\":\"00f067aa0ba90010\",\"parentSpanId\":\"00f067aa0ba90002\",\"name\":\"GET /orders\",\"kind\":2,\"startTimeUnixNano\":\"1760263200009000000\",\"endTimeUnixNano\":\"1760263200118000000\",\"attributes\":[{\"key\":\"http.route\",\"value\":{\"stringValue\":\"/orders\"}}]},{\"traceId\":\"4bf92f3577b34da6a3ce929d0e0e4736\",\"spanId\":\"00f067aa0ba90011\",\"parentSpanId\":\"00f067aa0ba90010\",\"name\":\"SELECT shop.orders\",\"kind\":3,\"startTimeUnixNano\":\"1760263200012000000\",\"endTimeUnixNano\":\"1760263200028000000\",\"attributes\":[{\"key\":\"db.system\",\"value\":{\"stringValue\":\"postgresql\"}},{\"key\":\"db.statement\",\"value\":{\"stringValue\":\"SELECT * FROM orders WHERE customer_id = 42\"}}]},{\"traceId\":\"4bf92f3577b34da6a3ce929d0e0e4736\",\"spanId\":\"00f067aa0ba90012\",\"parentSpanId\":\"00f067aa0ba90010\",\"name\":\"load order items\",\"kind\":1,\"startTimeUnixNano\":\"1760263200030000000\",\"endTimeUnixNano\":\"1760263200106000000\",\"attributes\":[]},{\"traceId\":\"4bf92f3577b34da6a3ce929d0e0e4736\",\"spanId\":\"00f067aa0ba90020\",\"parentSpanId\":\"00f067aa0ba90012\",\"name\":\"SELECT shop.order_items\",\"kind\":3,\"startTimeUnixNano\":\"1760263200032000000\",\"endTimeUnixNano\":\"1760263200040000000\",\"attributes\":[{\"key\":\"db.system\",\"value\":{\"stringValue\":\"postgresql\"}},{\"key\":\"db.statement\",\"value\":{\"stringValue\":\"SELECT * FROM order_items WHERE order_id = 1000\"}}]},{\"traceId\":\"4bf92f3577b34da6a3ce929d0e0e4736\",\"spanId\":\"00f067aa0ba90021\",\"parentSpanId\":\"00f067aa0ba90012\",\"name\":\"SELECT shop.order_items\",\"kind\":3,\"startTimeUnixNano\":\"1760263200041000000\",\"endTimeUnixNano\":\"1760263200049000000\",\"attributes\":[{\"key\":\"db.system\",\"value\":{\"stringValue\":\"postgresql\"}},{\"key\":\"db.statement\",\"value\":{\"stringValue\":\"SELECT * FROM order_items WHERE order_id = 1001\"}}]},{\"traceId\":\"4bf92f3577b34da6a3ce929d0e0e4736\",\"spanId\":\"00f067aa0ba90022\",\"parentSpanId\":\"00f067aa0ba90012\",\"name\":\"SELECT shop.order_items\",\"kind\":3,\"startTimeUnixNano\":\"1760263200050000000\",\"endTimeUnixNano\":\"1760263200058000000\",\"attributes\":[{\"key\":\"db.system\",\"value\":{\"stringValue\":\"postgresql\"}},{\"key\":\"db.statement\",\"value\":{\"stringValue\":\"SELECT * FROM order_items WHERE order_id = 1002\"}}]},{\"traceId\":\"4bf92f3577b34da6a3ce929d0e0e4736\",\"spanId\":\"00f067aa0ba90023\",\"parentSpanId\":\"00f067aa0ba90012\",\"name\":\"SELECT shop.order_items\",\"kind\":3,\"startTimeUnixNano\":\"1760263200059000000\",\"endTimeUnixNano\":\"1760263200067000000\",\"attributes\":[{\"key\":\"db.system\",\"value\":{\"stringValue\":\"postgresql\"}},{\"key\":\"db.statement\",\"value\":{\"stringValue\":\"SELECT * FROM order_items WHERE order_id = 1003\"}}]},{\"traceId\":\"4bf92f3577b34da6a3ce929d0e0e4736\",\"spanId\":\"00f067aa0ba90024\",\"parentSpanId\":\"00f067aa0ba90012\",\"name\":\"SELECT shop.order_items\",\"kind\":3,\"startTimeUnixNano\":\"1760263200068000000\",\"endTimeUnixNano\":\"1760263200076000000\",\"attributes\":[{\"key\":\"db.system\",\"value\":{\"stringValue\":\"postgresql\"}},{\"key\":\"db.statement\",\"value\":{\"stringValue\":\"SELECT * FROM order_items WHERE order_id = 1004\"}}]},{\"traceId\":\"4bf92f3577b34da6a3ce929d0e0e4736\",\"spanId\":\"00f067aa0ba90025\",\"parentSpanId\":\"00f067aa0ba90012\",\"name\":\"SELECT shop.order_items\",\"kind\":3,\"startTimeUnixNano\":\"1760263200077000000\",\"endTimeUnixNano\":\"1760263200085000000\",\"attributes\":[{\"key\":\"db.system\",\"value\":{\"stringValue\":\"postgresql\"}},{\"key\":\"db.statement\",\"value\":{\"stringValue\":\"SELECT * FROM order_items WHERE order_id = 1005\"}}]},{\"traceId\":\"4bf92f3577b34da6a3ce929d0e0e4736\",\"spanId\":\"00f067aa0ba90026\",\"parentSpanId\":\"00f067aa0ba90012\",\"name\":\"SELECT shop.order_items\",\"kind\":3,\"startTimeUnixNano\":\"1760263200086000000\",\"endTimeUnixNano\":\"1760263200094000000\",\"attributes\":[{\"key\":\"db.system\",\"value\":{\"stringValue\":\"postgresql\"}},{\"key\":\"db.statement\",\"value\":{\"stringValue\":\"SELECT * FROM order_items WHERE order_id = 1006\"}}]},{\"traceId\":\"4bf92f3577b34da6a3ce929d0e0e4736\",\"spanId\":\"00f067aa0ba90027\",\"parentSpanId\":\"00f067aa0ba90012\",\"name\":\"SELECT shop.order_items\",\"kind\":3,\"startTimeUnixNano\":\"1760263200095000000\",\"endTimeUnixNano\":\"1760263200103000000\",\"attributes\":[{\"key\":\"db.system\",\"value\":{\"stringValue\":\"postgresql\"}},{\"key\":\"db.statement\",\"value\":{\"stringValue\":\"SELECT * FROM order_items WHERE order_id = 1007\"}}]},{\"traceId\":\"4bf92f3577b34da6a3ce929d0e0e4736\",\"spanId\":\"00f067aa0ba90030\",\"parentSpanId\":\"00f067aa0ba90010\",\"name\":\"serialize response\",\"kind\":1,\"startTimeUnixNano\":\"1760263200107000000\",\"endTimeUnixNano\":\"1760263200116000000\",\"attributes\":[]}]}]},{\"resource\":{\"attributes\":[{\"key\":\"service.name\",\"value\":{\"stringValue\":\"reco\"}}]},\"scopeSpans\":[{\"scope\":{\"name\":\"otel-python\"},\"spans\":[{\"traceId\":\"4bf92f3577b34da6a3ce929d0e0e4736\",\"spanId\":\"00f067aa0ba90040\",\"parentSpanId\":\"00f067aa0ba90003\",\"name\":\"POST /recommend\",\"kind\":2,\"startTimeUnixNano\":\"1760263200011000000\",\"endTimeUnixNano\":\"1760263200169000000\",\"attributes\":[],\"status\":{\"code\":2,\"message\":\"feature store timeout\"}},{\"traceId\":\"4bf92f3577b34da6a3ce929d0e0e4736\",\"spanId\":\"00f067aa0ba90041\",\"parentSpanId\":\"00f067aa0ba90040\",\"name\":\"GET feature-store\",\"kind\":3,\"startTimeUnixNano\":\"1760263200014000000\",\"endTimeUnixNano\":\"1760263200168000000\",\"attributes\":[{\"key\":\"server.address\",\"value\":{\"stringValue\":\"features.internal\"}}],\"status\":{\"code\":2,\"message\":\"deadline exceeded\"}}]}]}]}"
                  }
                },
                "example2": {
                  "summary": "Zipkin v2: gateway with shared client/server spans and a 503",
                  "value": {
                    "text": "[{\"traceId\":\"5af7183fb1d4cf5f\",\"id\":\"6b221d5bc9e6496c\",\"name\":\"get /api\",\"timestamp\":1760263200000000,\"duration\":386000,\"kind\":\"SERVER\",\"localEndpoint\":{\"serviceName\":\"gateway\"},\"tags\":{\"http.path\":\"/api\"}},{\"traceId\":\"5af7183fb1d4cf5f\",\"parentId\":\"6b221d5bc9e6496c\",\"id\":\"352bff9a74ca9ad2\",\"name\":\"get /inventory\",\"timestamp\":1760263200010000,\"duration\":250000,\"kind\":\"CLIENT\",\"localEndpoint\":{\"serviceName\":\"gateway\"},\"remoteEndpoint\":{\"serviceName\":\"inventory\"}},{\"traceId\":\"5af7183fb1d4cf5f\",\"parentId\":\"6b221d5bc9e6496c\",\"id\":\"352bff9a74ca9ad2\",\"name\":\"get /inventory\",\"timestamp\":1760263200015000,\"duration\":240000,\"kind\":\"SERVER\",\"shared\":true,\"localEndpoint\":{\"serviceName\":\"inventory\"}},{\"traceId\":\"5af7183fb1d4cf5f\",\"parentId\":\"352bff9a74ca9ad2\",\"id\":\"a1b2c3d4e5f60718\",\"name\":\"redis get\",\"timestamp\":1760263200020000,\"duration\":3000,\"kind\":\"CLIENT\",\"localEndpoint\":{\"serviceName\":\"inventory\"},\"remoteEndpoint\":{\"serviceName\":\"redis\"}},{\"traceId\":\"5af7183fb1d4cf5f\",\"parentId\":\"6b221d5bc9e6496c\",\"id\":\"bb11cc22dd33ee44\",\"name\":\"post /audit\",\"timestamp\":1760263200270000,\"duration\":110000,\"kind\":\"CLIENT\",\"localEndpoint\":{\"serviceName\":\"gateway\"},\"remoteEndpoint\":{\"serviceName\":\"audit\"},\"tags\":{\"error\":\"503 Service Unavailable\",\"http.status_code\":\"503\"}}]",
                    "repeatThreshold": 3
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DistributedTraceExplorerResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/kubernetes-event-explorer/calculate": {
      "post": {
        "operationId": "calculateKubernetesEventExplorer",
        "summary": "Paste kubectl events and get a timeline, reason taxonomy and likely root causes per workload.",
        "description": "Paste `kubectl get events -A -o json` or the default `kubectl get events` table. Events are grouped by involved object and inferred workload (Pod → ReplicaSet → Deployment), each reason is classified (rollout, crash loop, probes, image pulls, scheduling, volumes, OOM, node pressure…), and evidence-based root-cause hypotheses explain what probably happened and what to check next.\n\nMethodology:\n- JSON events: involvedObject/regarding, reason, message, type, count/series.count, firstTimestamp/lastTimestamp/eventTime are read as documented for core/v1 and events.k8s.io/v1 Events.\n- Table output: columns are located from the header line; relative ages (e.g. \"3m (x7 over 11m)\") are converted to absolute times counted back from capturedAt (default: the analysis time), and the \"xN\" repeat count is used as the occurrence count.\n- Reasons are mapped to categories using the reason strings emitted by kubelet, scheduler, controllers and node-problem-detector; ambiguous reasons are refined by message (BackOff restarting vs pulling image; Unhealthy liveness vs readiness; Failed ErrImagePull vs CreateContainerConfigError).\n- Pods are linked to Deployments via ScalingReplicaSet/SuccessfulCreate messages, then by the <deployment>-<rs-hash>-<pod-hash> naming convention.\n- Root-cause rules combine signals per workload (e.g. liveness failures + back-off → probe-induced restarts; back-off alone → app exits; FailedScheduling message → resources/taints/affinity/PVC).",
        "tags": [
          "devcloud"
        ],
        "x-mcp-tool": "kubernetes_event_explorer",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/KubernetesEventExplorerInput"
              },
              "examples": {
                "example1": {
                  "summary": "Crash-looping checkout, unschedulable worker, bad image tag (JSON)",
                  "value": {
                    "text": "{\"apiVersion\":\"v1\",\"kind\":\"List\",\"items\":[{\"metadata\":{\"name\":\"checkout.1\",\"namespace\":\"shop\"},\"involvedObject\":{\"kind\":\"Deployment\",\"namespace\":\"shop\",\"name\":\"checkout\"},\"reason\":\"ScalingReplicaSet\",\"message\":\"Scaled up replica set checkout-7d9f8b6c5d to 1\",\"type\":\"Normal\",\"count\":1,\"firstTimestamp\":\"2026-10-12T09:40:02Z\",\"lastTimestamp\":\"2026-10-12T09:40:02Z\",\"source\":{\"component\":\"deployment-controller\"}},{\"metadata\":{\"name\":\"checkout-rs.1\",\"namespace\":\"shop\"},\"involvedObject\":{\"kind\":\"ReplicaSet\",\"namespace\":\"shop\",\"name\":\"checkout-7d9f8b6c5d\"},\"reason\":\"SuccessfulCreate\",\"message\":\"Created pod: checkout-7d9f8b6c5d-x2k9p\",\"type\":\"Normal\",\"count\":1,\"firstTimestamp\":\"2026-10-12T09:40:02Z\",\"lastTimestamp\":\"2026-10-12T09:40:02Z\",\"source\":{\"component\":\"replicaset-controller\"}},{\"metadata\":{\"name\":\"p1.1\",\"namespace\":\"shop\"},\"involvedObject\":{\"kind\":\"Pod\",\"namespace\":\"shop\",\"name\":\"checkout-7d9f8b6c5d-x2k9p\"},\"reason\":\"Scheduled\",\"message\":\"Successfully assigned shop/checkout-7d9f8b6c5d-x2k9p to node-a\",\"type\":\"Normal\",\"count\":1,\"firstTimestamp\":\"2026-10-12T09:40:03Z\",\"lastTimestamp\":\"2026-10-12T09:40:03Z\",\"source\":{\"component\":\"default-scheduler\"}},{\"metadata\":{\"name\":\"p1.2\",\"namespace\":\"shop\"},\"involvedObject\":{\"kind\":\"Pod\",\"namespace\":\"shop\",\"name\":\"checkout-7d9f8b6c5d-x2k9p\"},\"reason\":\"Pulled\",\"message\":\"Container image \\\"registry.example.com/checkout:2.4.0\\\" already present on machine\",\"type\":\"Normal\",\"count\":6,\"firstTimestamp\":\"2026-10-12T09:40:04Z\",\"lastTimestamp\":\"2026-10-12T09:49:30Z\",\"source\":{\"component\":\"kubelet\"}},{\"metadata\":{\"name\":\"p1.3\",\"namespace\":\"shop\"},\"involvedObject\":{\"kind\":\"Pod\",\"namespace\":\"shop\",\"name\":\"checkout-7d9f8b6c5d-x2k9p\"},\"reason\":\"Unhealthy\",\"message\":\"Liveness probe failed: Get \\\"http://10.0.3.17:8080/healthz\\\": context deadline exceeded (Client.Timeout exceeded while awaiting headers)\",\"type\":\"Warning\",\"count\":15,\"firstTimestamp\":\"2026-10-12T09:40:40Z\",\"lastTimestamp\":\"2026-10-12T09:49:20Z\",\"source\":{\"component\":\"kubelet\"}},{\"metadata\":{\"name\":\"p1.4\",\"namespace\":\"shop\"},\"involvedObject\":{\"kind\":\"Pod\",\"namespace\":\"shop\",\"name\":\"checkout-7d9f8b6c5d-x2k9p\"},\"reason\":\"Killing\",\"message\":\"Container checkout failed liveness probe, will be restarted\",\"type\":\"Normal\",\"count\":5,\"firstTimestamp\":\"2026-10-12T09:41:00Z\",\"lastTimestamp\":\"2026-10-12T09:49:21Z\",\"source\":{\"component\":\"kubelet\"}},{\"metadata\":{\"name\":\"p1.5\",\"namespace\":\"shop\"},\"involvedObject\":{\"kind\":\"Pod\",\"namespace\":\"shop\",\"name\":\"checkout-7d9f8b6c5d-x2k9p\"},\"reason\":\"BackOff\",\"message\":\"Back-off restarting failed container checkout in pod checkout-7d9f8b6c5d-x2k9p_shop(5b1c)\",\"type\":\"Warning\",\"count\":22,\"firstTimestamp\":\"2026-10-12T09:43:10Z\",\"lastTimestamp\":\"2026-10-12T09:55:00Z\",\"source\":{\"component\":\"kubelet\"}},{\"metadata\":{\"name\":\"w1.1\",\"namespace\":\"shop\"},\"involvedObject\":{\"kind\":\"Pod\",\"namespace\":\"shop\",\"name\":\"worker-0\"},\"reason\":\"FailedScheduling\",\"message\":\"0/3 nodes are available: 1 node(s) had untolerated taint {dedicated: gpu}, 2 Insufficient memory. preemption: 0/3 nodes are available: 1 Preemption is not helpful for scheduling, 2 No preemption victims found for incoming pod.\",\"type\":\"Warning\",\"count\":8,\"firstTimestamp\":\"2026-10-12T09:45:00Z\",\"lastTimestamp\":\"2026-10-12T09:58:00Z\",\"source\":{\"component\":\"default-scheduler\"}},{\"metadata\":{\"name\":\"n1.1\",\"namespace\":\"default\"},\"involvedObject\":{\"kind\":\"Node\",\"name\":\"node-b\"},\"reason\":\"OOMKilling\",\"message\":\"Memory cgroup out of memory: Killed process 4121 (java) total-vm:4512340kB, anon-rss:1048576kB\",\"type\":\"Warning\",\"count\":2,\"firstTimestamp\":\"2026-10-12T09:50:11Z\",\"lastTimestamp\":\"2026-10-12T09:52:40Z\",\"source\":{\"component\":\"kernel-monitor\"}},{\"metadata\":{\"name\":\"img.1\",\"namespace\":\"shop\"},\"involvedObject\":{\"kind\":\"Pod\",\"namespace\":\"shop\",\"name\":\"search-6c77d9b8f4-q8rtz\"},\"reason\":\"Failed\",\"message\":\"Failed to pull image \\\"registry.example.com/search:2.5.1\\\": rpc error: code = NotFound desc = failed to pull and unpack image: manifest unknown\",\"type\":\"Warning\",\"count\":4,\"firstTimestamp\":\"2026-10-12T09:56:00Z\",\"lastTimestamp\":\"2026-10-12T09:59:10Z\",\"source\":{\"component\":\"kubelet\"}},{\"metadata\":{\"name\":\"img.2\",\"namespace\":\"shop\"},\"involvedObject\":{\"kind\":\"Pod\",\"namespace\":\"shop\",\"name\":\"search-6c77d9b8f4-q8rtz\"},\"reason\":\"BackOff\",\"message\":\"Back-off pulling image \\\"registry.example.com/search:2.5.1\\\"\",\"type\":\"Normal\",\"count\":9,\"firstTimestamp\":\"2026-10-12T09:56:20Z\",\"lastTimestamp\":\"2026-10-12T09:59:40Z\",\"source\":{\"component\":\"kubelet\"}}]}"
                  }
                },
                "example2": {
                  "summary": "Missing Secret during scale-up (kubectl table)",
                  "value": {
                    "text": "NAMESPACE   LAST SEEN           TYPE      REASON                    OBJECT                        MESSAGE\npayments    12m                 Normal    ScalingReplicaSet         deployment/api                Scaled up replica set api-5f6d8c9b7 from 2 to 4\npayments    12m                 Normal    SuccessfulCreate          replicaset/api-5f6d8c9b7      Created pod: api-5f6d8c9b7-abcde\npayments    11m                 Warning   FailedMount               pod/api-5f6d8c9b7-abcde       MountVolume.SetUp failed for volume \"db-creds\" : secret \"db-creds\" not found\npayments    3m (x7 over 11m)    Warning   Failed                    pod/api-5f6d8c9b7-abcde       Error: secret \"db-creds\" not found\npayments    2m (x30 over 10m)   Warning   Unhealthy                 pod/api-5f6d8c9b7-zzq1t       Readiness probe failed: HTTP probe failed with statuscode: 503\npayments    90s                 Warning   FailedGetResourceMetric   horizontalpodautoscaler/api   failed to get cpu utilization: missing request for cpu in container \"api\" of Pod \"api-5f6d8c9b7-abcde\"",
                    "capturedAt": "2026-10-12T10:00"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KubernetesEventExplorerResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/openapi-diff-explorer/calculate": {
      "post": {
        "operationId": "calculateOpenapiDiffExplorer",
        "summary": "Compare two versions of an OpenAPI spec and see exactly which changes break clients.",
        "description": "Paste or link two OpenAPI 3.x (or Swagger 2) documents in JSON or YAML. Every operation, parameter, request body, response and schema property is compared (with $ref resolution), and each change is classified as breaking, potentially breaking or non-breaking, with the direction-aware rules API teams use (e.g. a new required request field breaks clients; a new response field does not; a new response enum value might).\n\nMethodology:\n- Operations are matched by method + path; paths that differ only in parameter names ({id} vs {orderId}) are treated as the same operation.\n- Request side (parameters, bodies): removing accepted values, adding required inputs, tightening limits or changing types is breaking.\n- Response side: removing properties or success responses, or making a guaranteed field optional, is breaking; new enum values, new nullability and new success codes are potentially breaking; additions are non-breaking.\n- Local $refs are resolved (cycles detected). Removed operations and changed security requirements are breaking.\n- Semver advice: any breaking change → major; additions only → minor; otherwise patch.",
        "tags": [
          "devcloud"
        ],
        "x-mcp-tool": "openapi_diff_explorer",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OpenapiDiffExplorerInput"
              },
              "examples": {
                "example1": {
                  "summary": "Shop API v1 → v2",
                  "value": {
                    "oldSpec": "openapi: 3.0.3\ninfo:\n  title: Shop API\n  version: 1.0.0\npaths:\n  /orders:\n    get:\n      operationId: listOrders\n      parameters:\n        - name: limit\n          in: query\n          schema: {type: integer, maximum: 100}\n      responses:\n        '200':\n          description: ok\n          content:\n            application/json:\n              schema:\n                type: array\n                items: {$ref: '#/components/schemas/Order'}\n    post:\n      operationId: createOrder\n      requestBody:\n        content:\n          application/json:\n            schema:\n              type: object\n              properties:\n                sku: {type: string}\n                note: {type: string}\n              required: [sku]\n      responses:\n        '201': {description: created}\n  /orders/{id}:\n    delete:\n      operationId: deleteOrder\n      parameters:\n        - {name: id, in: path, required: true, schema: {type: string}}\n      responses:\n        '204': {description: deleted}\ncomponents:\n  schemas:\n    Order:\n      type: object\n      required: [id, status]\n      properties:\n        id: {type: string}\n        status: {type: string, enum: [open, shipped]}\n        total: {type: number}\n",
                    "newSpec": "openapi: 3.0.3\ninfo:\n  title: Shop API\n  version: 1.0.0\npaths:\n  /orders:\n    get:\n      operationId: listOrders\n      parameters:\n        - name: limit\n          in: query\n          schema: {type: integer, maximum: 50}\n      responses:\n        '200':\n          description: ok\n          content:\n            application/json:\n              schema:\n                type: array\n                items: {$ref: '#/components/schemas/Order'}\n    post:\n      operationId: createOrder\n      requestBody:\n        content:\n          application/json:\n            schema:\n              type: object\n              properties:\n                sku: {type: string}\n                quantity: {type: integer}\n              required: [sku, quantity]\n      responses:\n        '201': {description: created}\ncomponents:\n  schemas:\n    Order:\n      type: object\n      required: [id, status]\n      properties:\n        id: {type: string}\n        status: {type: string, enum: [open, shipped, cancelled]}\n"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenapiDiffExplorerResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/query-plan-visualizer/calculate": {
      "post": {
        "operationId": "calculateQueryPlanVisualizer",
        "summary": "PostgreSQL EXPLAIN (ANALYZE) or MySQL EXPLAIN JSON → plan tree, hot nodes and index suggestions.",
        "description": "Paste PostgreSQL EXPLAIN / EXPLAIN ANALYZE output (text or FORMAT JSON) or MySQL EXPLAIN FORMAT=JSON. The plan is drawn as a node tree with cost, estimated vs actual rows, inclusive and exclusive time per node, and checked for the classic problems: row misestimates, sequential scans that discard most rows, sorts and hashes spilling to disk, nested loops over large inputs — each with a concrete fix such as a specific CREATE INDEX statement or work_mem setting.\n\nMethodology:\n- PostgreSQL text plans are parsed by the \"->\" indentation; node headers give cost=startup..total rows width and (actual time=startup..total rows loops); detail lines (Filter, Rows Removed by Filter, Sort Method, Buckets/Batches, Buffers…) are mapped to the same keys as FORMAT JSON.\n- Actual time and rows are per-loop averages (PostgreSQL docs), so inclusive time = actual total time × loops; exclusive time = inclusive − children's inclusive time. Under Gather, time is divided by the number of participating processes.\n- Misestimate = max(estimated, actual)/min(…) rows per loop at or above the threshold (and ≥100 rows absolute difference).\n- Rules: Seq Scan with Filter removing ≥90% of ≥1000 rows; Index Scan still filtering; Sort Method external/Disk; Hash Batches > 1; Nested Loop with ≥1000 outer rows and a sequential inner side or ≥10k inner loops; lossy bitmaps; workers not launched; heap fetches in index-only scans.\n- Index candidates take equality-compared filter columns first, then the first range column (B-tree column-order rule); functions in filters call for expression indexes and leading-wildcard LIKE for pg_trgm.\n- MySQL: access_type ALL / index, filtered %, attached_condition columns, using_join_buffer, using_filesort and using_temporary_table (EXPLAIN FORMAT=JSON has estimates only, no timings).",
        "tags": [
          "devcloud"
        ],
        "x-mcp-tool": "query_plan_visualizer",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QueryPlanVisualizerInput"
              },
              "examples": {
                "example1": {
                  "summary": "PostgreSQL EXPLAIN ANALYZE: seq scan, disk sort, batched hash",
                  "value": {
                    "text": "                                                              QUERY PLAN\n-------------------------------------------------------------------------------------------------------------------------------------------\n Sort  (cost=152340.21..153372.39 rows=412873 width=72) (actual time=2211.041..2389.770 rows=412873 loops=1)\n   Sort Key: o.created_at DESC\n   Sort Method: external merge  Disk: 48960kB\n   Buffers: shared hit=1204 read=58210, temp read=12240 written=12268\n   ->  Hash Join  (cost=31250.00..102149.11 rows=5000 width=72) (actual time=402.118..1712.904 rows=412873 loops=1)\n         Hash Cond: (o.customer_id = c.id)\n         ->  Seq Scan on orders o  (cost=0.00..68340.00 rows=5000 width=40) (actual time=0.031..1105.226 rows=412873 loops=1)\n               Filter: ((status = 'shipped'::text) AND (created_at >= '2026-01-01 00:00:00'::timestamp without time zone))\n               Rows Removed by Filter: 4587127\n         ->  Hash  (cost=18750.00..18750.00 rows=1000000 width=36) (actual time=398.402..398.403 rows=1000000 loops=1)\n               Buckets: 262144  Batches: 8  Memory Usage: 9201kB\n               ->  Seq Scan on customers c  (cost=0.00..18750.00 rows=1000000 width=36) (actual time=0.012..141.882 rows=1000000 loops=1)\n Planning Time: 0.412 ms\n Execution Time: 2412.330 ms\n(14 rows)"
                  }
                },
                "example2": {
                  "summary": "PostgreSQL JSON: nested loop with a misestimate",
                  "value": {
                    "text": "[{\"Plan\":{\"Node Type\":\"Aggregate\",\"Strategy\":\"Plain\",\"Partial Mode\":\"Simple\",\"Parallel Aware\":false,\"Startup Cost\":2412.3,\"Total Cost\":2412.31,\"Plan Rows\":1,\"Plan Width\":32,\"Actual Startup Time\":4380.2,\"Actual Total Time\":4380.21,\"Actual Rows\":1,\"Actual Loops\":1,\"Plans\":[{\"Node Type\":\"Nested Loop\",\"Parent Relationship\":\"Outer\",\"Parallel Aware\":false,\"Join Type\":\"Inner\",\"Startup Cost\":0.43,\"Total Cost\":2412.25,\"Plan Rows\":10,\"Plan Width\":10,\"Actual Startup Time\":0.09,\"Actual Total Time\":4362,\"Actual Rows\":20000,\"Actual Loops\":1,\"Inner Unique\":false,\"Plans\":[{\"Node Type\":\"Index Scan\",\"Parent Relationship\":\"Outer\",\"Parallel Aware\":false,\"Scan Direction\":\"Forward\",\"Index Name\":\"line_items_order_id_idx\",\"Relation Name\":\"line_items\",\"Alias\":\"li\",\"Startup Cost\":0.43,\"Total Cost\":12.5,\"Plan Rows\":10,\"Plan Width\":14,\"Actual Startup Time\":0.03,\"Actual Total Time\":35.1,\"Actual Rows\":20000,\"Actual Loops\":1,\"Index Cond\":\"(order_id = ANY ('{5001,5002,5003}'::integer[]))\",\"Rows Removed by Index Recheck\":0},{\"Node Type\":\"Seq Scan\",\"Parent Relationship\":\"Inner\",\"Parallel Aware\":false,\"Relation Name\":\"products\",\"Alias\":\"p\",\"Startup Cost\":0,\"Total Cost\":240,\"Plan Rows\":1,\"Plan Width\":14,\"Actual Startup Time\":0.1,\"Actual Total Time\":0.215,\"Actual Rows\":1,\"Actual Loops\":20000,\"Filter\":\"(sku = li.sku)\",\"Rows Removed by Filter\":1999}]}]},\"Planning Time\":0.3,\"Triggers\":[],\"Execution Time\":4381}]"
                  }
                },
                "example3": {
                  "summary": "MySQL EXPLAIN FORMAT=JSON: full scan + filesort",
                  "value": {
                    "text": "{\"query_block\":{\"select_id\":1,\"cost_info\":{\"query_cost\":\"10431.25\"},\"ordering_operation\":{\"using_filesort\":true,\"nested_loop\":[{\"table\":{\"table_name\":\"o\",\"access_type\":\"ALL\",\"possible_keys\":null,\"rows_examined_per_scan\":98500,\"rows_produced_per_join\":985,\"filtered\":\"1.00\",\"cost_info\":{\"read_cost\":\"9947.75\",\"eval_cost\":\"98.50\",\"prefix_cost\":\"10046.25\",\"data_read_per_join\":\"30K\"},\"used_columns\":[\"id\",\"customer_id\",\"status\",\"created_at\"],\"attached_condition\":\"((`shop`.`o`.`status` = 'shipped') and (`shop`.`o`.`created_at` >= DATE'2026-01-01'))\"}},{\"table\":{\"table_name\":\"c\",\"access_type\":\"eq_ref\",\"possible_keys\":[\"PRIMARY\"],\"key\":\"PRIMARY\",\"used_key_parts\":[\"id\"],\"key_length\":\"4\",\"ref\":[\"shop.o.customer_id\"],\"rows_examined_per_scan\":1,\"rows_produced_per_join\":985,\"filtered\":\"100.00\",\"cost_info\":{\"read_cost\":\"246.25\",\"eval_cost\":\"98.50\",\"prefix_cost\":\"10391.00\",\"data_read_per_join\":\"61K\"},\"used_columns\":[\"id\",\"name\"]}}]}}}"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QueryPlanVisualizerResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/serverless-performance-explorer/calculate": {
      "post": {
        "operationId": "calculateServerlessPerformanceExplorer",
        "summary": "Lambda REPORT lines → cold-start rate, p50/p95/p99, memory right-sizing and cost per 1M calls.",
        "description": "Paste AWS Lambda REPORT log lines, JSON platform.report records or a CSV/Logs Insights export. Get cold-start rate, init and duration percentiles, memory utilisation with a right-sizing suggestion, and the cost per 1 million invocations on x86_64 and arm64 using the public Lambda prices (overridable).\n\nMethodology:\n- Each REPORT line (plain text or JSON \"platform.report\") yields Duration, Billed Duration, Memory Size, Max Memory Used and, on cold starts, Init Duration (or SnapStart Restore Duration). \"Status: timeout|error\" and \"Task timed out after\" lines mark failed invocations.\n- Cold-start rate = invocations with Init/Restore Duration ÷ all invocations. Percentiles use the nearest-rank method on the observed values.\n- GB-seconds per invocation = Billed Duration (s) × Memory Size (MB) ÷ 1024. If Billed Duration is missing it is estimated as ceil(Duration + Init) because INIT is billed for on-demand functions since 1 Aug 2025.\n- Cost per 1M invocations = price per 1M requests + 1,000,000 × mean GB-s × price per GB-s, for x86_64 and arm64 (first pricing tier, no free tier).\n- Right-sizing: suggested memory = peak Max Memory Used × (1 + headroom), rounded up to 64 MB (128–10,240 MB). Increase if peak use ≥ 90 % of the configured size; decrease if the suggestion is ≤ 75 % of it; otherwise keep. Cost estimates assume the billed duration does not change with memory (CPU scales with memory, so verify).\n- CloudWatch Logs Insights exports report @memorySize/@maxMemoryUsed in bytes; values above 100,000 are converted to MB (10^6 bytes).",
        "tags": [
          "devcloud"
        ],
        "x-mcp-tool": "serverless_performance_explorer",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ServerlessPerformanceExplorerInput"
              },
              "examples": {
                "example1": {
                  "summary": "Two functions from CloudWatch REPORT lines",
                  "value": {
                    "logs": "=== function: checkout-api ===\n2026-10-12T09:00:00.000Z REPORT RequestId: 1a2b3c00-4c1d-4e2f-9a0b-0c0ffee00000\tDuration: 323.82 ms\tBilled Duration: 788 ms\tMemory Size: 1024 MB\tMax Memory Used: 171 MB\tInit Duration: 463.87 ms\n2026-10-12T09:02:00.000Z REPORT RequestId: 1a2b3c01-4c1d-4e2f-9a0b-0c0ffee01eef\tDuration: 97.23 ms\tBilled Duration: 98 ms\tMemory Size: 1024 MB\tMax Memory Used: 176 MB\n2026-10-12T09:04:00.000Z REPORT RequestId: 1a2b3c02-4c1d-4e2f-9a0b-0c0ffee03dde\tDuration: 69.75 ms\tBilled Duration: 70 ms\tMemory Size: 1024 MB\tMax Memory Used: 184 MB\n2026-10-12T09:06:00.000Z REPORT RequestId: 1a2b3c03-4c1d-4e2f-9a0b-0c0ffee05ccd\tDuration: 92.92 ms\tBilled Duration: 93 ms\tMemory Size: 1024 MB\tMax Memory Used: 152 MB\n2026-10-12T09:08:00.000Z REPORT RequestId: 1a2b3c04-4c1d-4e2f-9a0b-0c0ffee07bbc\tDuration: 97.84 ms\tBilled Duration: 98 ms\tMemory Size: 1024 MB\tMax Memory Used: 158 MB\n2026-10-12T09:10:00.000Z REPORT RequestId: 1a2b3c05-4c1d-4e2f-9a0b-0c0ffee09aab\tDuration: 49.60 ms\tBilled Duration: 50 ms\tMemory Size: 1024 MB\tMax Memory Used: 189 MB\n2026-10-12T09:12:00.000Z REPORT RequestId: 1a2b3c06-4c1d-4e2f-9a0b-0c0ffee0b99a\tDuration: 41.54 ms\tBilled Duration: 42 ms\tMemory Size: 1024 MB\tMax Memory Used: 165 MB\n2026-10-12T09:14:00.000Z REPORT RequestId: 1a2b3c07-4c1d-4e2f-9a0b-0c0ffee0d889\tDuration: 39.82 ms\tBilled Duration: 40 ms\tMemory Size: 1024 MB\tMax Memory Used: 152 MB\n2026-10-12T09:16:00.000Z REPORT RequestId: 1a2b3c08-4c1d-4e2f-9a0b-0c0ffee0f778\tDuration: 78.42 ms\tBilled Duration: 79 ms\tMemory Size: 1024 MB\tMax Memory Used: 186 MB\n2026-10-12T09:18:00.000Z REPORT RequestId: 1a2b3c09-4c1d-4e2f-9a0b-0c0ffee11667\tDuration: 86.57 ms\tBilled Duration: 630 ms\tMemory Size: 1024 MB\tMax Memory Used: 152 MB\tInit Duration: 543.42 ms\n2026-10-12T09:20:00.000Z REPORT RequestId: 1a2b3c0a-4c1d-4e2f-9a0b-0c0ffee13556\tDuration: 75.09 ms\tBilled Duration: 76 ms\tMemory Size: 1024 MB\tMax Memory Used: 169 MB\n2026-10-12T09:22:00.000Z REPORT RequestId: 1a2b3c0b-4c1d-4e2f-9a0b-0c0ffee15445\tDuration: 300.23 ms\tBilled Duration: 301 ms\tMemory Size: 1024 MB\tMax Memory Used: 185 MB\n2026-10-12T09:24:00.000Z REPORT RequestId: 1a2b3c0c-4c1d-4e2f-9a0b-0c0ffee17334\tDuration: 42.13 ms\tBilled Duration: 43 ms\tMemory Size: 1024 MB\tMax Memory Used: 182 MB\n2026-10-12T09:26:00.000Z REPORT RequestId: 1a2b3c0d-4c1d-4e2f-9a0b-0c0ffee19223\tDuration: 46.78 ms\tBilled Duration: 47 ms\tMemory Size: 1024 MB\tMax Memory Used: 151 MB\n2026-10-12T09:28:00.000Z REPORT RequestId: 1a2b3c0e-4c1d-4e2f-9a0b-0c0ffee1b112\tDuration: 80.99 ms\tBilled Duration: 81 ms\tMemory Size: 1024 MB\tMax Memory Used: 179 MB\n2026-10-12T09:30:00.000Z REPORT RequestId: 1a2b3c0f-4c1d-4e2f-9a0b-0c0ffee1d001\tDuration: 89.79 ms\tBilled Duration: 90 ms\tMemory Size: 1024 MB\tMax Memory Used: 182 MB\n2026-10-12T09:32:00.000Z REPORT RequestId: 1a2b3c10-4c1d-4e2f-9a0b-0c0ffee1eef0\tDuration: 88.15 ms\tBilled Duration: 89 ms\tMemory Size: 1024 MB\tMax Memory Used: 179 MB\n2026-10-12T09:34:00.000Z REPORT RequestId: 1a2b3c11-4c1d-4e2f-9a0b-0c0ffee20ddf\tDuration: 40.17 ms\tBilled Duration: 512 ms\tMemory Size: 1024 MB\tMax Memory Used: 156 MB\tInit Duration: 471.02 ms\n2026-10-12T09:36:00.000Z REPORT RequestId: 1a2b3c12-4c1d-4e2f-9a0b-0c0ffee22cce\tDuration: 77.53 ms\tBilled Duration: 78 ms\tMemory Size: 1024 MB\tMax Memory Used: 165 MB\n2026-10-12T09:38:00.000Z REPORT RequestId: 1a2b3c13-4c1d-4e2f-9a0b-0c0ffee24bbd\tDuration: 55.96 ms\tBilled Duration: 56 ms\tMemory Size: 1024 MB\tMax Memory Used: 181 MB\n2026-10-12T09:40:00.000Z REPORT RequestId: 1a2b3c14-4c1d-4e2f-9a0b-0c0ffee26aac\tDuration: 56.77 ms\tBilled Duration: 57 ms\tMemory Size: 1024 MB\tMax Memory Used: 184 MB\n2026-10-12T09:42:00.000Z REPORT RequestId: 1a2b3c15-4c1d-4e2f-9a0b-0c0ffee2899b\tDuration: 71.49 ms\tBilled Duration: 72 ms\tMemory Size: 1024 MB\tMax Memory Used: 158 MB\n2026-10-12T09:44:00.000Z REPORT RequestId: 1a2b3c16-4c1d-4e2f-9a0b-0c0ffee2a88a\tDuration: 315.72 ms\tBilled Duration: 316 ms\tMemory Size: 1024 MB\tMax Memory Used: 172 MB\n2026-10-12T09:46:00.000Z REPORT RequestId: 1a2b3c17-4c1d-4e2f-9a0b-0c0ffee2c779\tDuration: 62.91 ms\tBilled Duration: 63 ms\tMemory Size: 1024 MB\tMax Memory Used: 161 MB\n=== function: image-resize ===\nREPORT RequestId: 1a2b3c64-4c1d-4e2f-9a0b-0c0ffeec155c\tDuration: 2076.37 ms\tBilled Duration: 3017 ms\tMemory Size: 512 MB\tMax Memory Used: 454 MB\tInit Duration: 940.16 ms\nREPORT RequestId: 1a2b3c65-4c1d-4e2f-9a0b-0c0ffeec344b\tDuration: 1904.43 ms\tBilled Duration: 1905 ms\tMemory Size: 512 MB\tMax Memory Used: 471 MB\nREPORT RequestId: 1a2b3c66-4c1d-4e2f-9a0b-0c0ffeec533a\tDuration: 1459.25 ms\tBilled Duration: 1460 ms\tMemory Size: 512 MB\tMax Memory Used: 470 MB\nREPORT RequestId: 1a2b3c67-4c1d-4e2f-9a0b-0c0ffeec7229\tDuration: 1232.30 ms\tBilled Duration: 1233 ms\tMemory Size: 512 MB\tMax Memory Used: 436 MB\nREPORT RequestId: 1a2b3c68-4c1d-4e2f-9a0b-0c0ffeec9118\tDuration: 1727.80 ms\tBilled Duration: 1728 ms\tMemory Size: 512 MB\tMax Memory Used: 466 MB\nREPORT RequestId: 1a2b3c69-4c1d-4e2f-9a0b-0c0ffeecb007\tDuration: 1536.59 ms\tBilled Duration: 1537 ms\tMemory Size: 512 MB\tMax Memory Used: 450 MB\nREPORT RequestId: 1a2b3c6a-4c1d-4e2f-9a0b-0c0ffeeccef6\tDuration: 6003.11 ms\tBilled Duration: 6004 ms\tMemory Size: 512 MB\tMax Memory Used: 461 MB\tStatus: timeout\nREPORT RequestId: 1a2b3c6b-4c1d-4e2f-9a0b-0c0ffeecede5\tDuration: 1011.51 ms\tBilled Duration: 1986 ms\tMemory Size: 512 MB\tMax Memory Used: 444 MB\tInit Duration: 974.24 ms\nREPORT RequestId: 1a2b3c6c-4c1d-4e2f-9a0b-0c0ffeed0cd4\tDuration: 1068.91 ms\tBilled Duration: 1069 ms\tMemory Size: 512 MB\tMax Memory Used: 489 MB\nREPORT RequestId: 1a2b3c6d-4c1d-4e2f-9a0b-0c0ffeed2bc3\tDuration: 1745.42 ms\tBilled Duration: 1746 ms\tMemory Size: 512 MB\tMax Memory Used: 473 MB",
                    "architecture": "x86_64",
                    "monthlyInvocations": 5000000
                  }
                },
                "example2": {
                  "summary": "CSV export (arm64, cold starts with billed INIT)",
                  "value": {
                    "logs": "function,timestamp,requestId,duration,billedDuration,memorySize,maxMemoryUsed,initDuration\norders-worker,2026-10-12T08:00:00Z,r1,212.4,640,256,98,427.1\norders-worker,2026-10-12T08:00:05Z,r2,188.0,188,256,101,\norders-worker,2026-10-12T08:00:09Z,r3,176.9,177,256,99,\norders-worker,2026-10-12T08:00:12Z,r4,240.3,241,256,104,\norders-worker,2026-10-12T08:01:30Z,r5,201.7,202,256,103,\norders-worker,2026-10-12T08:02:00Z,r6,195.2,196,256,100,\norders-worker,2026-10-12T08:09:00Z,r7,230.8,705,256,97,473.6\norders-worker,2026-10-12T08:09:02Z,r8,182.5,183,256,102,",
                    "architecture": "arm64"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServerlessPerformanceExplorerResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/terraform-drift-explorer/calculate": {
      "post": {
        "operationId": "calculateTerraformDriftExplorer",
        "summary": "Paste terraform show -json: drift, replacement reasons, attribute diffs and risky deletes.",
        "description": "Paste the JSON of a saved plan (`terraform show -json tfplan`) or the `terraform plan -json` stream. You get counts per action, every resource change with Terraform's own reason (tainted, cannot update, removed from config…), attribute-level before/after diffs with sensitive values masked and \"known after apply\" marked, the drift Terraform detected outside of Terraform during refresh, and risk flags for deleting or replacing databases, buckets and other stateful resources or for opening access.\n\nMethodology:\n- Reads the documented Terraform JSON plan format: resource_changes[].change.actions ([\"delete\",\"create\"] = destroy-then-create replacement, [\"create\",\"delete\"] = create_before_destroy), action_reason, replace_paths, previous_address (moved), importing; resource_drift[] for changes made outside Terraform; output_changes.\n- Attribute diffs flatten before/after into dotted paths; after_unknown marks values \"known after apply\"; any path covered by before_sensitive/after_sensitive is replaced by \"(sensitive value)\" and never shown.\n- Drift: before = last state, after = refreshed real-world value. If the same address has an update planned, applying reverts the drift; a no-op plan means the configuration already matches (or ignore_changes).\n- Risk: delete/replace of a stateful type (databases, buckets, volumes, queues, keys, secrets, DNS zones…) is critical; other deletes high; other replacements medium; updates that open 0.0.0.0/0, grant \"*\" principals/actions, disable deletion protection, encryption, backups or S3 public-access blocks are high; force_destroy / skip_final_snapshot on deletion escalate.\n- The plan -json stream contains actions and reasons but no attribute values, so attribute diffs and value-based checks need the show -json form.",
        "tags": [
          "devcloud"
        ],
        "x-mcp-tool": "terraform_drift_explorer",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TerraformDriftExplorerInput"
              },
              "examples": {
                "example1": {
                  "summary": "Database replacement, bucket deletion, drift on a security group",
                  "value": {
                    "text": "{\"format_version\":\"1.2\",\"terraform_version\":\"1.9.5\",\"resource_drift\":[{\"address\":\"aws_security_group.web\",\"mode\":\"managed\",\"type\":\"aws_security_group\",\"name\":\"web\",\"provider_name\":\"registry.terraform.io/hashicorp/aws\",\"change\":{\"actions\":[\"update\"],\"before\":{\"name\":\"web\",\"description\":\"web tier\",\"vpc_id\":\"vpc-0a1b2c3d\",\"ingress\":[{\"from_port\":443,\"to_port\":443,\"protocol\":\"tcp\",\"cidr_blocks\":[\"0.0.0.0/0\"],\"description\":\"\"}],\"tags\":{\"team\":\"web\"}},\"after\":{\"name\":\"web\",\"description\":\"web tier\",\"vpc_id\":\"vpc-0a1b2c3d\",\"ingress\":[{\"from_port\":443,\"to_port\":443,\"protocol\":\"tcp\",\"cidr_blocks\":[\"0.0.0.0/0\"],\"description\":\"\"},{\"from_port\":22,\"to_port\":22,\"protocol\":\"tcp\",\"cidr_blocks\":[\"203.0.113.7/32\"],\"description\":\"\"}],\"tags\":{\"team\":\"web\"}},\"after_unknown\":{},\"before_sensitive\":{},\"after_sensitive\":{}}},{\"address\":\"aws_s3_bucket.assets\",\"mode\":\"managed\",\"type\":\"aws_s3_bucket\",\"name\":\"assets\",\"provider_name\":\"registry.terraform.io/hashicorp/aws\",\"change\":{\"actions\":[\"update\"],\"before\":{\"bucket\":\"shop-assets\",\"tags\":{\"env\":\"prod\"},\"force_destroy\":false},\"after\":{\"bucket\":\"shop-assets\",\"tags\":{\"env\":\"prod\",\"cost-center\":\"marketing\"},\"force_destroy\":false},\"after_unknown\":{},\"before_sensitive\":{},\"after_sensitive\":{}}}],\"resource_changes\":[{\"address\":\"aws_db_instance.main\",\"mode\":\"managed\",\"type\":\"aws_db_instance\",\"name\":\"main\",\"provider_name\":\"registry.terraform.io/hashicorp/aws\",\"change\":{\"actions\":[\"delete\",\"create\"],\"before\":{\"identifier\":\"shop-prod\",\"engine\":\"postgres\",\"engine_version\":\"16.4\",\"instance_class\":\"db.r6g.large\",\"allocated_storage\":200,\"storage_encrypted\":false,\"deletion_protection\":false,\"skip_final_snapshot\":false,\"username\":\"shop\",\"password\":\"hunter2-not-real\",\"backup_retention_period\":7,\"publicly_accessible\":false,\"id\":\"db-ABCDEFGHIJKL\",\"endpoint\":\"shop-prod.c9abc.eu-west-1.rds.amazonaws.com:5432\"},\"after\":{\"identifier\":\"shop-prod\",\"engine\":\"postgres\",\"engine_version\":\"16.4\",\"instance_class\":\"db.r6g.large\",\"allocated_storage\":200,\"storage_encrypted\":true,\"deletion_protection\":false,\"skip_final_snapshot\":false,\"username\":\"shop\",\"password\":\"hunter2-not-real\",\"backup_retention_period\":7,\"publicly_accessible\":false},\"after_unknown\":{\"id\":true,\"endpoint\":true,\"arn\":true},\"before_sensitive\":{\"password\":true},\"after_sensitive\":{\"password\":true},\"replace_paths\":[[\"storage_encrypted\"]]},\"action_reason\":\"replace_because_cannot_update\"},{\"address\":\"aws_security_group.web\",\"mode\":\"managed\",\"type\":\"aws_security_group\",\"name\":\"web\",\"provider_name\":\"registry.terraform.io/hashicorp/aws\",\"change\":{\"actions\":[\"update\"],\"before\":{\"name\":\"web\",\"description\":\"web tier\",\"vpc_id\":\"vpc-0a1b2c3d\",\"ingress\":[{\"from_port\":443,\"to_port\":443,\"protocol\":\"tcp\",\"cidr_blocks\":[\"0.0.0.0/0\"],\"description\":\"\"},{\"from_port\":22,\"to_port\":22,\"protocol\":\"tcp\",\"cidr_blocks\":[\"203.0.113.7/32\"],\"description\":\"\"}],\"tags\":{\"team\":\"web\"}},\"after\":{\"name\":\"web\",\"description\":\"web tier\",\"vpc_id\":\"vpc-0a1b2c3d\",\"ingress\":[{\"from_port\":443,\"to_port\":443,\"protocol\":\"tcp\",\"cidr_blocks\":[\"0.0.0.0/0\"],\"description\":\"\"}],\"tags\":{\"team\":\"web\"}},\"after_unknown\":{},\"before_sensitive\":{},\"after_sensitive\":{}}},{\"address\":\"aws_s3_bucket.logs\",\"mode\":\"managed\",\"type\":\"aws_s3_bucket\",\"name\":\"logs\",\"provider_name\":\"registry.terraform.io/hashicorp/aws\",\"change\":{\"actions\":[\"delete\"],\"before\":{\"bucket\":\"shop-access-logs\",\"force_destroy\":true,\"tags\":{\"env\":\"prod\"}},\"after\":null,\"after_unknown\":{},\"before_sensitive\":{},\"after_sensitive\":false},\"action_reason\":\"delete_because_no_resource_config\"},{\"address\":\"aws_s3_bucket.assets\",\"mode\":\"managed\",\"type\":\"aws_s3_bucket\",\"name\":\"assets\",\"provider_name\":\"registry.terraform.io/hashicorp/aws\",\"change\":{\"actions\":[\"no-op\"],\"before\":{\"bucket\":\"shop-assets\",\"tags\":{\"env\":\"prod\",\"cost-center\":\"marketing\"}},\"after\":{\"bucket\":\"shop-assets\",\"tags\":{\"env\":\"prod\",\"cost-center\":\"marketing\"}},\"after_unknown\":{},\"before_sensitive\":{},\"after_sensitive\":{}}},{\"address\":\"aws_instance.app[0]\",\"mode\":\"managed\",\"type\":\"aws_instance\",\"name\":\"app\",\"index\":0,\"provider_name\":\"registry.terraform.io/hashicorp/aws\",\"change\":{\"actions\":[\"create\"],\"before\":null,\"after\":{\"ami\":\"ami-0c55b159cbfafe1f0\",\"instance_type\":\"t3.medium\",\"tags\":{\"Name\":\"app-0\"}},\"after_unknown\":{\"id\":true,\"arn\":true,\"private_ip\":true},\"before_sensitive\":false,\"after_sensitive\":{}}},{\"address\":\"aws_iam_role_policy.ci\",\"mode\":\"managed\",\"type\":\"aws_iam_role_policy\",\"name\":\"ci\",\"provider_name\":\"registry.terraform.io/hashicorp/aws\",\"change\":{\"actions\":[\"update\"],\"before\":{\"name\":\"ci-deploy\",\"role\":\"ci\",\"policy\":\"{\\\"Version\\\":\\\"2012-10-17\\\",\\\"Statement\\\":[{\\\"Effect\\\":\\\"Allow\\\",\\\"Action\\\":\\\"s3:PutObject\\\",\\\"Resource\\\":\\\"arn:aws:s3:::shop-assets/*\\\"}]}\"},\"after\":{\"name\":\"ci-deploy\",\"role\":\"ci\",\"policy\":\"{\\\"Version\\\":\\\"2012-10-17\\\",\\\"Statement\\\":[{\\\"Effect\\\":\\\"Allow\\\",\\\"Action\\\":\\\"*\\\",\\\"Resource\\\":\\\"*\\\"}]}\"},\"after_unknown\":{},\"before_sensitive\":{},\"after_sensitive\":{}}},{\"address\":\"module.cdn.aws_cloudfront_distribution.this\",\"module_address\":\"module.cdn\",\"mode\":\"managed\",\"type\":\"aws_cloudfront_distribution\",\"name\":\"this\",\"provider_name\":\"registry.terraform.io/hashicorp/aws\",\"previous_address\":\"aws_cloudfront_distribution.cdn\",\"change\":{\"actions\":[\"no-op\"],\"before\":{\"comment\":\"shop\"},\"after\":{\"comment\":\"shop\"},\"after_unknown\":{},\"before_sensitive\":{},\"after_sensitive\":{}}}],\"output_changes\":{\"db_endpoint\":{\"actions\":[\"update\"],\"before\":\"shop-prod.c9abc.eu-west-1.rds.amazonaws.com:5432\",\"after_unknown\":true,\"before_sensitive\":false,\"after_sensitive\":false}},\"applyable\":true,\"complete\":true,\"errored\":false}"
                  }
                },
                "example2": {
                  "summary": "terraform plan -json stream (GCP)",
                  "value": {
                    "text": "{\"@level\":\"info\",\"@message\":\"Terraform 1.9.5\",\"@module\":\"terraform.ui\",\"@timestamp\":\"2026-10-12T09:58:01.000000Z\",\"terraform\":\"1.9.5\",\"type\":\"version\",\"ui\":\"1.2\"}\n{\"@level\":\"info\",\"@message\":\"google_storage_bucket.media: Drift detected (update)\",\"@module\":\"terraform.ui\",\"@timestamp\":\"2026-10-12T09:58:04.000000Z\",\"change\":{\"resource\":{\"addr\":\"google_storage_bucket.media\",\"module\":\"\",\"resource\":\"google_storage_bucket.media\",\"implied_provider\":\"google\",\"resource_type\":\"google_storage_bucket\",\"resource_name\":\"media\",\"resource_key\":null},\"action\":\"update\"},\"type\":\"resource_drift\"}\n{\"@level\":\"info\",\"@message\":\"google_sql_database_instance.main: Plan to replace\",\"@module\":\"terraform.ui\",\"@timestamp\":\"2026-10-12T09:58:05.000000Z\",\"change\":{\"resource\":{\"addr\":\"google_sql_database_instance.main\",\"module\":\"\",\"resource\":\"google_sql_database_instance.main\",\"implied_provider\":\"google\",\"resource_type\":\"google_sql_database_instance\",\"resource_name\":\"main\",\"resource_key\":null},\"action\":\"replace\",\"reason\":\"cannot_update\"},\"type\":\"planned_change\"}\n{\"@level\":\"info\",\"@message\":\"google_compute_firewall.ssh: Plan to update\",\"@module\":\"terraform.ui\",\"@timestamp\":\"2026-10-12T09:58:05.000000Z\",\"change\":{\"resource\":{\"addr\":\"google_compute_firewall.ssh\",\"module\":\"\",\"resource\":\"google_compute_firewall.ssh\",\"implied_provider\":\"google\",\"resource_type\":\"google_compute_firewall\",\"resource_name\":\"ssh\",\"resource_key\":null},\"action\":\"update\"},\"type\":\"planned_change\"}\n{\"@level\":\"info\",\"@message\":\"google_compute_instance.worker[\\\"b\\\"]: Plan to delete\",\"@module\":\"terraform.ui\",\"@timestamp\":\"2026-10-12T09:58:05.000000Z\",\"change\":{\"resource\":{\"addr\":\"google_compute_instance.worker[\\\"b\\\"]\",\"module\":\"\",\"resource\":\"google_compute_instance.worker[\\\"b\\\"]\",\"implied_provider\":\"google\",\"resource_type\":\"google_compute_instance\",\"resource_name\":\"worker\",\"resource_key\":\"b\"},\"action\":\"delete\",\"reason\":\"delete_because_each_key\"},\"type\":\"planned_change\"}\n{\"@level\":\"info\",\"@message\":\"Plan: 1 to add, 1 to change, 2 to destroy.\",\"@module\":\"terraform.ui\",\"@timestamp\":\"2026-10-12T09:58:06.000000Z\",\"changes\":{\"add\":1,\"change\":1,\"import\":0,\"remove\":2,\"operation\":\"plan\"},\"type\":\"change_summary\"}"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TerraformDriftExplorerResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/workflows": {
      "get": {
        "operationId": "listWorkflows",
        "summary": "Multi-tool workflows",
        "responses": {
          "200": {
            "description": "Workflow list.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Problem": {
        "type": "object",
        "description": "RFC 9457 problem details. 422 responses include per-field `errors`.",
        "required": [
          "type",
          "title",
          "status",
          "detail"
        ],
        "properties": {
          "type": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "integer"
          },
          "detail": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "field",
                "message"
              ],
              "properties": {
                "field": {
                  "type": "string"
                },
                "message": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "ApiExplorerOfExplorersInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "mode": {
            "title": "What do you want to do?",
            "type": "string",
            "enum": [
              "spec",
              "search"
            ],
            "default": "spec"
          },
          "query": {
            "title": "Search for an API / provider",
            "description": "Search mode: matched against APIs.guru provider names (e.g. github.com, googleapis.com).",
            "type": "string",
            "maxLength": 100
          },
          "specText": {
            "title": "OpenAPI / Swagger document (JSON or YAML)",
            "type": "string",
            "maxLength": 4000000
          },
          "specUrl": {
            "title": "Or: URL of the spec",
            "description": "Public URL of a JSON/YAML spec (e.g. a specUrl from search results). Max 4 MiB.",
            "type": "string",
            "format": "uri"
          },
          "previousSpec": {
            "title": "Optional: earlier version to compare with",
            "description": "Paste an older version of the same spec to list breaking and non-breaking changes.",
            "type": "string",
            "maxLength": 4000000
          },
          "remember": {
            "title": "Keep a snapshot of URL specs to show changes next time",
            "type": "boolean",
            "default": true
          }
        },
        "required": []
      },
      "ApiExplorerOfExplorersResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "mode",
              "directory",
              "spec",
              "changes"
            ],
            "properties": {
              "mode": {
                "type": "string",
                "enum": [
                  "spec",
                  "search"
                ]
              },
              "directory": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "query",
                  "totalProviders",
                  "matchedProviders",
                  "apis"
                ],
                "properties": {
                  "query": {
                    "type": "string"
                  },
                  "totalProviders": {
                    "type": "integer"
                  },
                  "matchedProviders": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "apis": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "id",
                        "provider",
                        "title",
                        "version",
                        "description",
                        "categories",
                        "openapiVer",
                        "updated",
                        "specUrl",
                        "specYamlUrl",
                        "originUrl"
                      ],
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "provider": {
                          "type": "string"
                        },
                        "title": {
                          "type": "string"
                        },
                        "version": {
                          "type": "string"
                        },
                        "description": {
                          "type": "string"
                        },
                        "categories": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        },
                        "openapiVer": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "updated": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "specUrl": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "specYamlUrl": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "originUrl": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                }
              },
              "spec": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "title",
                  "version",
                  "specVersion",
                  "description",
                  "servers",
                  "securitySchemes",
                  "globalSecurity",
                  "operations",
                  "tags",
                  "schemaCount",
                  "exampleCoverage",
                  "issues",
                  "fingerprint"
                ],
                "properties": {
                  "title": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "version": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "specVersion": {
                    "type": "string"
                  },
                  "description": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "servers": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "securitySchemes": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "name",
                        "type",
                        "detail",
                        "scopes"
                      ],
                      "properties": {
                        "name": {
                          "type": "string"
                        },
                        "type": {
                          "type": "string"
                        },
                        "detail": {
                          "type": "string"
                        },
                        "scopes": {
                          "type": "integer"
                        }
                      }
                    }
                  },
                  "globalSecurity": {
                    "type": "string"
                  },
                  "operations": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "method",
                        "path",
                        "summary",
                        "operationId",
                        "tags",
                        "deprecated",
                        "auth",
                        "requestExample",
                        "responseExample",
                        "responses"
                      ],
                      "properties": {
                        "method": {
                          "type": "string"
                        },
                        "path": {
                          "type": "string"
                        },
                        "summary": {
                          "type": "string"
                        },
                        "operationId": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "tags": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        },
                        "deprecated": {
                          "type": "boolean"
                        },
                        "auth": {
                          "type": "string"
                        },
                        "requestExample": {
                          "type": "boolean"
                        },
                        "responseExample": {
                          "type": "boolean"
                        },
                        "responses": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  },
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "name",
                        "description",
                        "operations"
                      ],
                      "properties": {
                        "name": {
                          "type": "string"
                        },
                        "description": {
                          "type": "string"
                        },
                        "operations": {
                          "type": "integer"
                        }
                      }
                    }
                  },
                  "schemaCount": {
                    "type": "integer"
                  },
                  "exampleCoverage": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "operations",
                      "withAnyExample",
                      "withRequestExample",
                      "withResponseExample",
                      "percent"
                    ],
                    "properties": {
                      "operations": {
                        "type": "integer"
                      },
                      "withAnyExample": {
                        "type": "integer"
                      },
                      "withRequestExample": {
                        "type": "integer"
                      },
                      "withResponseExample": {
                        "type": "integer"
                      },
                      "percent": {
                        "type": "number"
                      }
                    }
                  },
                  "issues": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "fingerprint": {
                    "type": "string"
                  }
                }
              },
              "changes": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "comparedWith",
                  "previousVersion",
                  "unchanged",
                  "counts",
                  "items",
                  "history"
                ],
                "properties": {
                  "comparedWith": {
                    "type": "string"
                  },
                  "previousVersion": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "unchanged": {
                    "type": "boolean"
                  },
                  "counts": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "breaking",
                      "potentiallyBreaking",
                      "nonBreaking"
                    ],
                    "properties": {
                      "breaking": {
                        "type": "integer"
                      },
                      "potentiallyBreaking": {
                        "type": "integer"
                      },
                      "nonBreaking": {
                        "type": "integer"
                      }
                    }
                  },
                  "items": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "severity",
                        "location",
                        "change",
                        "detail"
                      ],
                      "properties": {
                        "severity": {
                          "type": "string"
                        },
                        "location": {
                          "type": "string"
                        },
                        "change": {
                          "type": "string"
                        },
                        "detail": {
                          "type": "string"
                        }
                      }
                    }
                  },
                  "history": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "at",
                        "version",
                        "fingerprint",
                        "breaking",
                        "total"
                      ],
                      "properties": {
                        "at": {
                          "type": "string"
                        },
                        "version": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "fingerprint": {
                          "type": "string"
                        },
                        "breaking": {
                          "type": "integer"
                        },
                        "total": {
                          "type": "integer"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "CicdFailureExplorerInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "logs": {
            "title": "CI logs",
            "description": "Separate runs with a line \"=== run: <name> ===\". Optional metadata in the header: branch=…, date=YYYY-MM-DD, status=failed|passed. Without separators the whole paste is one run.",
            "type": "string",
            "maxLength": 400000
          },
          "file": {
            "title": "Or upload a log file",
            "description": "Plain-text log export (UTF-8). Combined with any pasted text. Upload as {filename, contentType?, contentBase64}. Max 2048 KiB. Accepts .txt,.log,text/plain.",
            "type": "object",
            "additionalProperties": false,
            "required": [
              "filename",
              "contentBase64"
            ],
            "properties": {
              "filename": {
                "type": "string"
              },
              "contentType": {
                "type": "string"
              },
              "contentBase64": {
                "type": "string"
              }
            }
          }
        },
        "required": []
      },
      "CicdFailureExplorerResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "runCount",
              "failedCount",
              "passedCount",
              "cancelledCount",
              "failureRate",
              "runs",
              "groups",
              "causes",
              "byBranch",
              "byDate",
              "flakySuspects"
            ],
            "properties": {
              "runCount": {
                "type": "integer",
                "minimum": 0
              },
              "failedCount": {
                "type": "integer",
                "minimum": 0
              },
              "passedCount": {
                "type": "integer",
                "minimum": 0
              },
              "cancelledCount": {
                "type": "integer",
                "minimum": 0
              },
              "failureRate": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              "runs": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "name",
                    "platform",
                    "status",
                    "branch",
                    "date",
                    "cause",
                    "causeTitle",
                    "signature",
                    "evidence",
                    "evidenceLine",
                    "step",
                    "failedTests",
                    "secondaryCauses",
                    "retryMarkers",
                    "lineCount"
                  ],
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "platform": {
                      "type": "string",
                      "enum": [
                        "github-actions",
                        "gitlab-ci",
                        "jenkins",
                        "unknown"
                      ]
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "failed",
                        "passed",
                        "cancelled",
                        "unknown"
                      ]
                    },
                    "branch": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "date": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "cause": {
                      "type": "string",
                      "enum": [
                        "oom",
                        "disk-full",
                        "timeout",
                        "permission-secret",
                        "network",
                        "dependency",
                        "compile",
                        "lint",
                        "test-failure",
                        "flaky-retry",
                        "cancelled",
                        "unknown",
                        "none"
                      ]
                    },
                    "causeTitle": {
                      "type": "string"
                    },
                    "signature": {
                      "type": "string"
                    },
                    "evidence": {
                      "type": "string"
                    },
                    "evidenceLine": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "step": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "failedTests": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "secondaryCauses": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "retryMarkers": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "lineCount": {
                      "type": "integer",
                      "minimum": 0
                    }
                  }
                }
              },
              "groups": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "cause",
                    "causeTitle",
                    "signature",
                    "count",
                    "runs",
                    "branches",
                    "firstSeen",
                    "lastSeen"
                  ],
                  "properties": {
                    "cause": {
                      "type": "string"
                    },
                    "causeTitle": {
                      "type": "string"
                    },
                    "signature": {
                      "type": "string"
                    },
                    "count": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "runs": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "branches": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "firstSeen": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "lastSeen": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  }
                }
              },
              "causes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "cause",
                    "title",
                    "count",
                    "share",
                    "fixes"
                  ],
                  "properties": {
                    "cause": {
                      "type": "string"
                    },
                    "title": {
                      "type": "string"
                    },
                    "count": {
                      "type": "integer"
                    },
                    "share": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 1
                    },
                    "fixes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              },
              "byBranch": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "branch",
                    "runs",
                    "failed"
                  ],
                  "properties": {
                    "branch": {
                      "type": "string"
                    },
                    "runs": {
                      "type": "integer"
                    },
                    "failed": {
                      "type": "integer"
                    }
                  }
                }
              },
              "byDate": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "date",
                    "runs",
                    "failed"
                  ],
                  "properties": {
                    "date": {
                      "type": "string"
                    },
                    "runs": {
                      "type": "integer"
                    },
                    "failed": {
                      "type": "integer"
                    }
                  }
                }
              },
              "flakySuspects": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "test",
                    "job",
                    "failedRuns",
                    "passedRuns",
                    "reason"
                  ],
                  "properties": {
                    "test": {
                      "type": "string"
                    },
                    "job": {
                      "type": "string"
                    },
                    "failedRuns": {
                      "type": "integer"
                    },
                    "passedRuns": {
                      "type": "integer"
                    },
                    "reason": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "CronJobExplorerInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "crontab": {
            "title": "Crontab / schedules",
            "description": "One job per line. CRON_TZ=Zone lines change the zone for following jobs. A trailing \"# name\" or the comment line above names a job. Kubernetes CronJob / GitHub Actions YAML documents can be pasted too (separate with ---).",
            "type": "string",
            "maxLength": 200000
          },
          "history": {
            "title": "Run history CSV (optional)",
            "description": "Header job,start,end,status (optional attempt). Times without offset are read in the selected time zone. Job names match the job name or appear in its command.",
            "type": "string",
            "maxLength": 400000
          },
          "timeZone": {
            "title": "Time zone",
            "description": "IANA zone used for jobs without their own CRON_TZ / timeZone, and for displaying times.",
            "type": "string",
            "maxLength": 64,
            "default": "UTC"
          },
          "from": {
            "title": "Start from (local time)",
            "description": "Defaults to now. Local date-time YYYY-MM-DDTHH:mm",
            "type": "string"
          },
          "count": {
            "title": "Next runs per job",
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 5
          },
          "format": {
            "title": "Expression format",
            "type": "string",
            "enum": [
              "auto",
              "standard",
              "seconds",
              "quartz"
            ],
            "default": "auto"
          },
          "dstPolicy": {
            "title": "DST handling",
            "type": "string",
            "enum": [
              "auto",
              "vixie",
              "wall-clock"
            ],
            "default": "auto"
          },
          "horizonHours": {
            "title": "Analysis window",
            "description": "Window for the timeline, herd minutes and overlaps.",
            "type": "integer",
            "minimum": 1,
            "maximum": 168,
            "default": 24,
            "x-unit": "hours"
          },
          "herdThreshold": {
            "title": "Herd threshold",
            "description": "Flag minutes where at least this many jobs start together.",
            "type": "integer",
            "minimum": 2,
            "maximum": 100,
            "default": 3
          }
        },
        "required": [
          "crontab"
        ]
      },
      "CronJobExplorerResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "timeZone",
              "from",
              "jobs",
              "herdMinutes",
              "overlaps",
              "history",
              "peakConcurrency"
            ],
            "properties": {
              "timeZone": {
                "type": "string"
              },
              "from": {
                "type": "string"
              },
              "jobs": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "name",
                    "schedule",
                    "format",
                    "source",
                    "timeZone",
                    "command",
                    "line",
                    "description",
                    "valid",
                    "error",
                    "suspended",
                    "fixedTime",
                    "dstPolicy",
                    "nextRuns",
                    "runsInWindow",
                    "minIntervalMinutes",
                    "notes"
                  ],
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "schedule": {
                      "type": "string"
                    },
                    "format": {
                      "type": "string"
                    },
                    "source": {
                      "type": "string",
                      "enum": [
                        "crontab",
                        "kubernetes",
                        "github-actions"
                      ]
                    },
                    "timeZone": {
                      "type": "string"
                    },
                    "command": {
                      "type": "string"
                    },
                    "line": {
                      "type": "integer"
                    },
                    "description": {
                      "type": "string"
                    },
                    "valid": {
                      "type": "boolean"
                    },
                    "error": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "suspended": {
                      "type": "boolean"
                    },
                    "fixedTime": {
                      "type": "boolean"
                    },
                    "dstPolicy": {
                      "type": "string"
                    },
                    "nextRuns": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": false,
                        "required": [
                          "utc",
                          "local",
                          "offset",
                          "dst"
                        ],
                        "properties": {
                          "utc": {
                            "type": "string"
                          },
                          "local": {
                            "type": "string"
                          },
                          "offset": {
                            "type": "string"
                          },
                          "dst": {
                            "type": [
                              "string",
                              "null"
                            ]
                          }
                        }
                      }
                    },
                    "runsInWindow": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "minIntervalMinutes": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "notes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              },
              "herdMinutes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "utc",
                    "local",
                    "jobs"
                  ],
                  "properties": {
                    "utc": {
                      "type": "string"
                    },
                    "local": {
                      "type": "string"
                    },
                    "jobs": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              },
              "overlaps": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "a",
                    "b",
                    "sharedStarts",
                    "identical"
                  ],
                  "properties": {
                    "a": {
                      "type": "string"
                    },
                    "b": {
                      "type": "string"
                    },
                    "sharedStarts": {
                      "type": "integer"
                    },
                    "identical": {
                      "type": "boolean"
                    }
                  }
                }
              },
              "history": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "job",
                    "matchedJob",
                    "runs",
                    "failures",
                    "timeouts",
                    "retries",
                    "successRate",
                    "avgDurationMin",
                    "p95DurationMin",
                    "maxDurationMin",
                    "lastStatus",
                    "lastStart",
                    "exceedsInterval",
                    "missedRuns"
                  ],
                  "properties": {
                    "job": {
                      "type": "string"
                    },
                    "matchedJob": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "runs": {
                      "type": "integer"
                    },
                    "failures": {
                      "type": "integer"
                    },
                    "timeouts": {
                      "type": "integer"
                    },
                    "retries": {
                      "type": "integer"
                    },
                    "successRate": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "avgDurationMin": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "p95DurationMin": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "maxDurationMin": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "lastStatus": {
                      "type": "string"
                    },
                    "lastStart": {
                      "type": "string"
                    },
                    "exceedsInterval": {
                      "type": "boolean"
                    },
                    "missedRuns": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    }
                  }
                }
              },
              "peakConcurrency": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "properties": {
                  "count": {
                    "type": "integer"
                  },
                  "local": {
                    "type": "string"
                  },
                  "jobs": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "DataLineageExplorerInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "sql": {
            "title": "SQL / dbt models",
            "description": "Separate statements with \";\". Mark dbt models with a line \"-- model: name\" (or \"-- file: models/name.sql\"); the model’s SELECT becomes that table.",
            "type": "string",
            "maxLength": 400000
          },
          "file": {
            "title": "Or upload a .sql file",
            "type": "object",
            "description": "Upload as {filename, contentType?, contentBase64}. Max 2048 KiB. Accepts .sql,.txt,text/plain.",
            "additionalProperties": false,
            "required": [
              "filename",
              "contentBase64"
            ],
            "properties": {
              "filename": {
                "type": "string"
              },
              "contentType": {
                "type": "string"
              },
              "contentBase64": {
                "type": "string"
              }
            }
          },
          "focus": {
            "title": "Focus table or column",
            "description": "table or table.column. Defaults to the last target in the input.",
            "type": "string",
            "maxLength": 200
          },
          "direction": {
            "title": "Trace",
            "type": "string",
            "enum": [
              "both",
              "upstream",
              "downstream"
            ],
            "default": "both"
          }
        },
        "required": []
      },
      "DataLineageExplorerResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "statements",
              "tables",
              "tableEdges",
              "columns",
              "focus",
              "notes",
              "errors"
            ],
            "properties": {
              "statements": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "index",
                    "kind",
                    "target",
                    "sources",
                    "columnCount",
                    "filterColumns"
                  ],
                  "properties": {
                    "index": {
                      "type": "integer"
                    },
                    "kind": {
                      "type": "string"
                    },
                    "target": {
                      "type": "string"
                    },
                    "sources": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "columnCount": {
                      "type": "integer"
                    },
                    "filterColumns": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              },
              "tables": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "name",
                    "role",
                    "upstream",
                    "downstream",
                    "columns"
                  ],
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "role": {
                      "type": "string",
                      "enum": [
                        "source",
                        "model",
                        "report"
                      ]
                    },
                    "upstream": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "downstream": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "columns": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              },
              "tableEdges": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "from",
                    "to",
                    "kinds"
                  ],
                  "properties": {
                    "from": {
                      "type": "string"
                    },
                    "to": {
                      "type": "string"
                    },
                    "kinds": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              },
              "columns": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "target",
                    "column",
                    "transform",
                    "sources",
                    "expr",
                    "via"
                  ],
                  "properties": {
                    "target": {
                      "type": "string"
                    },
                    "column": {
                      "type": "string"
                    },
                    "transform": {
                      "type": "string",
                      "enum": [
                        "direct",
                        "renamed",
                        "derived",
                        "aggregate",
                        "constant",
                        "star"
                      ]
                    },
                    "sources": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "expr": {
                      "type": "string"
                    },
                    "via": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              },
              "focus": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "input",
                  "type",
                  "resolved",
                  "upstream",
                  "downstream"
                ],
                "properties": {
                  "input": {
                    "type": "string"
                  },
                  "type": {
                    "type": "string",
                    "enum": [
                      "table",
                      "column"
                    ]
                  },
                  "resolved": {
                    "type": "string"
                  },
                  "upstream": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "node",
                        "depth",
                        "transform"
                      ],
                      "properties": {
                        "node": {
                          "type": "string"
                        },
                        "depth": {
                          "type": "integer"
                        },
                        "transform": {
                          "type": "string"
                        }
                      }
                    }
                  },
                  "downstream": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "node",
                        "depth",
                        "transform"
                      ],
                      "properties": {
                        "node": {
                          "type": "string"
                        },
                        "depth": {
                          "type": "integer"
                        },
                        "transform": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              },
              "notes": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "errors": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "DistributedTraceExplorerInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "text": {
            "title": "Trace JSON",
            "description": "OTLP/JSON export (e.g. from the OpenTelemetry Collector file exporter), Jaeger UI \"Download JSON\" / API /api/traces/{id}, or a Zipkin v2 span array.",
            "type": "string",
            "maxLength": 3000000
          },
          "file": {
            "title": "Or upload the file",
            "description": "Read in memory as UTF-8 text and not stored. Max 5 MiB. Upload as {filename, contentType?, contentBase64}. Max 5120 KiB. Accepts .json.",
            "type": "object",
            "additionalProperties": false,
            "required": [
              "filename",
              "contentBase64"
            ],
            "properties": {
              "filename": {
                "type": "string"
              },
              "contentType": {
                "type": "string"
              },
              "contentBase64": {
                "type": "string"
              }
            }
          },
          "traceId": {
            "title": "Trace id (optional)",
            "description": "If the payload contains several traces; default is the trace with the most spans.",
            "type": "string",
            "maxLength": 64
          },
          "repeatThreshold": {
            "title": "Flag repeated sibling spans from",
            "description": "Minimum number of same-named sibling spans to report as N+1 / fan-out.",
            "type": "integer",
            "minimum": 2,
            "maximum": 100,
            "default": 5
          }
        },
        "required": []
      },
      "DistributedTraceExplorerResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "format",
              "traceId",
              "traceCount",
              "spanCount",
              "durationMs",
              "services",
              "criticalPath",
              "errors",
              "repeats",
              "spans",
              "orphanSpans"
            ],
            "properties": {
              "format": {
                "type": "string",
                "enum": [
                  "otlp",
                  "jaeger",
                  "zipkin"
                ]
              },
              "traceId": {
                "type": "string"
              },
              "traceCount": {
                "type": "integer"
              },
              "spanCount": {
                "type": "integer"
              },
              "durationMs": {
                "type": "number"
              },
              "orphanSpans": {
                "type": "integer"
              },
              "services": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "service",
                    "spans",
                    "errors",
                    "selfMs",
                    "selfPct",
                    "criticalMs"
                  ],
                  "properties": {
                    "service": {
                      "type": "string"
                    },
                    "spans": {
                      "type": "integer"
                    },
                    "errors": {
                      "type": "integer"
                    },
                    "selfMs": {
                      "type": "number"
                    },
                    "selfPct": {
                      "type": "number"
                    },
                    "criticalMs": {
                      "type": "number"
                    }
                  }
                }
              },
              "criticalPath": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "spanId",
                    "service",
                    "name",
                    "durationMs",
                    "criticalMs"
                  ],
                  "properties": {
                    "spanId": {
                      "type": "string"
                    },
                    "service": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "durationMs": {
                      "type": "number"
                    },
                    "criticalMs": {
                      "type": "number"
                    }
                  }
                }
              },
              "errors": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "spanId",
                    "service",
                    "name",
                    "message",
                    "isRootCause"
                  ],
                  "properties": {
                    "spanId": {
                      "type": "string"
                    },
                    "service": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "message": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "isRootCause": {
                      "type": "boolean"
                    }
                  }
                }
              },
              "repeats": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "parent",
                    "parentName",
                    "service",
                    "name",
                    "count",
                    "totalMs",
                    "wallMs",
                    "pattern",
                    "advice"
                  ],
                  "properties": {
                    "parent": {
                      "type": "string"
                    },
                    "parentName": {
                      "type": "string"
                    },
                    "service": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "count": {
                      "type": "integer"
                    },
                    "totalMs": {
                      "type": "number"
                    },
                    "wallMs": {
                      "type": "number"
                    },
                    "pattern": {
                      "type": "string"
                    },
                    "advice": {
                      "type": "string"
                    }
                  }
                }
              },
              "spans": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "spanId",
                    "parentId",
                    "service",
                    "name",
                    "kind",
                    "depth",
                    "startMs",
                    "durationMs",
                    "selfMs",
                    "error"
                  ],
                  "properties": {
                    "spanId": {
                      "type": "string"
                    },
                    "parentId": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "service": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "kind": {
                      "type": "string"
                    },
                    "depth": {
                      "type": "integer"
                    },
                    "startMs": {
                      "type": "number"
                    },
                    "durationMs": {
                      "type": "number"
                    },
                    "selfMs": {
                      "type": "number"
                    },
                    "error": {
                      "type": "boolean"
                    }
                  }
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "KubernetesEventExplorerInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "text": {
            "title": "kubectl events output",
            "description": "Output of `kubectl get events -A -o json` (best: exact timestamps) or the plain `kubectl get events -A` table including the header line. events.k8s.io/v1 JSON also works.",
            "type": "string",
            "maxLength": 3000000
          },
          "file": {
            "title": "Or upload the file",
            "description": "Read in memory as UTF-8 text and not stored. Max 5 MiB. Upload as {filename, contentType?, contentBase64}. Max 5120 KiB. Accepts .json,.txt,.log.",
            "type": "object",
            "additionalProperties": false,
            "required": [
              "filename",
              "contentBase64"
            ],
            "properties": {
              "filename": {
                "type": "string"
              },
              "contentType": {
                "type": "string"
              },
              "contentBase64": {
                "type": "string"
              }
            }
          },
          "namespace": {
            "title": "Only this namespace (optional)",
            "type": "string",
            "maxLength": 253
          },
          "warningsOnly": {
            "title": "Only show Warning events in the timeline",
            "type": "boolean",
            "default": false
          },
          "capturedAt": {
            "title": "Table output captured at (UTC, optional)",
            "description": "Only for the text table: relative ages like \"5m\" are counted back from this time. Default: now. Local date-time YYYY-MM-DDTHH:mm",
            "type": "string"
          }
        },
        "required": []
      },
      "KubernetesEventExplorerResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "format",
              "eventCount",
              "occurrences",
              "byType",
              "categories",
              "reasons",
              "objects",
              "diagnoses",
              "window"
            ],
            "properties": {
              "format": {
                "type": "string",
                "enum": [
                  "json",
                  "table"
                ]
              },
              "eventCount": {
                "type": "integer"
              },
              "occurrences": {
                "type": "integer"
              },
              "byType": {
                "type": "object",
                "additionalProperties": {
                  "type": "integer"
                }
              },
              "categories": {
                "type": "object",
                "additionalProperties": {
                  "type": "integer"
                }
              },
              "window": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "first",
                  "last"
                ],
                "properties": {
                  "first": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "last": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "reasons": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "reason",
                    "signal",
                    "category",
                    "type",
                    "events",
                    "occurrences",
                    "objects",
                    "first",
                    "last",
                    "meaning"
                  ],
                  "properties": {
                    "reason": {
                      "type": "string"
                    },
                    "signal": {
                      "type": "string"
                    },
                    "category": {
                      "type": "string"
                    },
                    "type": {
                      "type": "string"
                    },
                    "events": {
                      "type": "integer"
                    },
                    "occurrences": {
                      "type": "integer"
                    },
                    "objects": {
                      "type": "integer"
                    },
                    "first": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "last": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "meaning": {
                      "type": "string"
                    }
                  }
                }
              },
              "objects": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "object",
                    "workload",
                    "warnings",
                    "normal",
                    "topSignals",
                    "first",
                    "last"
                  ],
                  "properties": {
                    "object": {
                      "type": "string"
                    },
                    "workload": {
                      "type": "string"
                    },
                    "warnings": {
                      "type": "integer"
                    },
                    "normal": {
                      "type": "integer"
                    },
                    "topSignals": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "first": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "last": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  }
                }
              },
              "diagnoses": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "object",
                    "severity",
                    "finding",
                    "explanation",
                    "nextSteps",
                    "evidence"
                  ],
                  "properties": {
                    "object": {
                      "type": "string"
                    },
                    "severity": {
                      "type": "string",
                      "enum": [
                        "critical",
                        "warning",
                        "info"
                      ]
                    },
                    "finding": {
                      "type": "string"
                    },
                    "explanation": {
                      "type": "string"
                    },
                    "nextSteps": {
                      "type": "string"
                    },
                    "evidence": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "OpenapiDiffExplorerInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "oldSpec": {
            "title": "Old spec (JSON or YAML)",
            "type": "string",
            "maxLength": 4000000
          },
          "newSpec": {
            "title": "New spec (JSON or YAML)",
            "type": "string",
            "maxLength": 4000000
          },
          "oldUrl": {
            "title": "Or: URL of the old spec",
            "type": "string",
            "format": "uri"
          },
          "newUrl": {
            "title": "Or: URL of the new spec",
            "type": "string",
            "format": "uri"
          }
        },
        "required": []
      },
      "OpenapiDiffExplorerResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "old",
              "new",
              "counts",
              "changes",
              "semverAdvice"
            ],
            "properties": {
              "old": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "title",
                  "version",
                  "operations"
                ],
                "properties": {
                  "title": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "version": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "operations": {
                    "type": "integer"
                  }
                }
              },
              "new": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "title",
                  "version",
                  "operations"
                ],
                "properties": {
                  "title": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "version": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "operations": {
                    "type": "integer"
                  }
                }
              },
              "counts": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "breaking",
                  "potentiallyBreaking",
                  "nonBreaking"
                ],
                "properties": {
                  "breaking": {
                    "type": "integer"
                  },
                  "potentiallyBreaking": {
                    "type": "integer"
                  },
                  "nonBreaking": {
                    "type": "integer"
                  }
                }
              },
              "semverAdvice": {
                "type": "string",
                "enum": [
                  "major",
                  "minor",
                  "patch"
                ]
              },
              "changes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "severity",
                    "location",
                    "change",
                    "detail"
                  ],
                  "properties": {
                    "severity": {
                      "type": "string",
                      "enum": [
                        "breaking",
                        "potentially-breaking",
                        "non-breaking"
                      ]
                    },
                    "location": {
                      "type": "string"
                    },
                    "change": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "QueryPlanVisualizerInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "text": {
            "title": "EXPLAIN output",
            "description": "PostgreSQL: EXPLAIN (ANALYZE, BUFFERS) … as text, or EXPLAIN (ANALYZE, FORMAT JSON). MySQL: EXPLAIN FORMAT=JSON …. psql headers, \"+\" line continuations and \"(N rows)\" footers are ignored.",
            "type": "string",
            "maxLength": 3000000
          },
          "file": {
            "title": "Or upload the file",
            "description": "Read in memory as UTF-8 text and not stored. Max 5 MiB. Upload as {filename, contentType?, contentBase64}. Max 5120 KiB. Accepts .txt,.json,.sql,.log.",
            "type": "object",
            "additionalProperties": false,
            "required": [
              "filename",
              "contentBase64"
            ],
            "properties": {
              "filename": {
                "type": "string"
              },
              "contentType": {
                "type": "string"
              },
              "contentBase64": {
                "type": "string"
              }
            }
          },
          "misestimateFactor": {
            "title": "Flag row misestimates from",
            "description": "Ratio between estimated and actual rows per loop.",
            "type": "number",
            "minimum": 2,
            "maximum": 1000,
            "default": 10,
            "x-unit": "×"
          }
        },
        "required": []
      },
      "QueryPlanVisualizerResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "engine",
              "format",
              "analyzed",
              "planningMs",
              "executionMs",
              "totalCost",
              "nodeCount",
              "nodes",
              "findings",
              "indexCandidates"
            ],
            "properties": {
              "engine": {
                "type": "string",
                "enum": [
                  "postgresql",
                  "mysql"
                ]
              },
              "format": {
                "type": "string",
                "enum": [
                  "json",
                  "text"
                ]
              },
              "analyzed": {
                "type": "boolean"
              },
              "planningMs": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "executionMs": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "totalCost": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "nodeCount": {
                "type": "integer"
              },
              "nodes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "id",
                    "parentId",
                    "depth",
                    "type",
                    "label",
                    "relation",
                    "index",
                    "startupCost",
                    "totalCost",
                    "exclusiveCost",
                    "planRows",
                    "actualRows",
                    "loops",
                    "inclusiveMs",
                    "exclusiveMs",
                    "rowsRatio",
                    "details"
                  ],
                  "properties": {
                    "id": {
                      "type": "integer"
                    },
                    "parentId": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "depth": {
                      "type": "integer"
                    },
                    "type": {
                      "type": "string"
                    },
                    "label": {
                      "type": "string"
                    },
                    "relation": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "index": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "startupCost": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "totalCost": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "exclusiveCost": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "planRows": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "actualRows": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "loops": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "inclusiveMs": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "exclusiveMs": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "rowsRatio": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "details": {
                      "type": "object",
                      "additionalProperties": {
                        "type": [
                          "string",
                          "number",
                          "boolean"
                        ]
                      }
                    }
                  }
                }
              },
              "findings": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "nodeId",
                    "severity",
                    "issue",
                    "detail",
                    "suggestion"
                  ],
                  "properties": {
                    "nodeId": {
                      "type": "integer"
                    },
                    "severity": {
                      "type": "string",
                      "enum": [
                        "high",
                        "medium",
                        "low"
                      ]
                    },
                    "issue": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    },
                    "suggestion": {
                      "type": "string"
                    }
                  }
                }
              },
              "indexCandidates": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "relation",
                    "columns",
                    "statement",
                    "reason"
                  ],
                  "properties": {
                    "relation": {
                      "type": "string"
                    },
                    "columns": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "statement": {
                      "type": "string"
                    },
                    "reason": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "ServerlessPerformanceExplorerInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "logs": {
            "title": "REPORT lines or CSV",
            "description": "CloudWatch REPORT lines, JSON log-format platform.report records, or CSV with columns like requestId,duration,billedDuration,memorySize,maxMemoryUsed,initDuration[,function,timestamp]. Separate functions with \"=== function: name ===\".",
            "type": "string",
            "maxLength": 400000
          },
          "file": {
            "title": "Or upload a log/CSV file",
            "type": "object",
            "description": "Upload as {filename, contentType?, contentBase64}. Max 4096 KiB. Accepts .txt,.log,.csv,.json,text/plain,text/csv.",
            "additionalProperties": false,
            "required": [
              "filename",
              "contentBase64"
            ],
            "properties": {
              "filename": {
                "type": "string"
              },
              "contentType": {
                "type": "string"
              },
              "contentBase64": {
                "type": "string"
              }
            }
          },
          "architecture": {
            "title": "Current architecture",
            "type": "string",
            "enum": [
              "x86_64",
              "arm64"
            ],
            "default": "x86_64"
          },
          "priceGbSecondX86": {
            "title": "Price per GB-second (x86_64)",
            "description": "Default: us-east-1 first tier, verified 2026-10-14.",
            "type": "number",
            "minimum": 0,
            "default": 0.0000166667,
            "x-unit": "USD/GB-s"
          },
          "priceGbSecondArm": {
            "title": "Price per GB-second (arm64)",
            "type": "number",
            "minimum": 0,
            "default": 0.0000133334,
            "x-unit": "USD/GB-s"
          },
          "pricePerMillionRequests": {
            "title": "Price per 1M requests",
            "type": "number",
            "minimum": 0,
            "default": 0.2,
            "x-unit": "USD"
          },
          "monthlyInvocations": {
            "title": "Monthly invocations (optional)",
            "description": "Adds a monthly cost estimate (free tier not deducted).",
            "type": "integer",
            "minimum": 0,
            "maximum": 1000000000000
          },
          "headroomPercent": {
            "title": "Memory headroom",
            "description": "Added to the peak observed memory when suggesting a size.",
            "type": "number",
            "minimum": 0,
            "maximum": 200,
            "default": 20,
            "x-unit": "%"
          }
        },
        "required": []
      },
      "ServerlessPerformanceExplorerResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "invocations",
              "functions",
              "prices"
            ],
            "properties": {
              "invocations": {
                "type": "integer",
                "minimum": 0
              },
              "functions": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "function",
                    "invocations",
                    "coldStarts",
                    "coldStartRate",
                    "initP50Ms",
                    "initP95Ms",
                    "initMaxMs",
                    "durationP50Ms",
                    "durationP95Ms",
                    "durationP99Ms",
                    "durationMaxMs",
                    "durationMeanMs",
                    "billedMeanMs",
                    "memorySizeMb",
                    "memorySizesSeen",
                    "maxMemoryUsedP95Mb",
                    "maxMemoryUsedMaxMb",
                    "memoryUtilisationP95",
                    "memoryUtilisationMax",
                    "errors",
                    "timeouts",
                    "gbSecondsPerInvocation",
                    "costPer1M",
                    "monthlyCost",
                    "recommendation",
                    "initBilled"
                  ],
                  "properties": {
                    "function": {
                      "type": "string"
                    },
                    "invocations": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "coldStarts": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "coldStartRate": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 1
                    },
                    "initP50Ms": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "initP95Ms": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "initMaxMs": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "durationP50Ms": {
                      "type": "number"
                    },
                    "durationP95Ms": {
                      "type": "number"
                    },
                    "durationP99Ms": {
                      "type": "number"
                    },
                    "durationMaxMs": {
                      "type": "number"
                    },
                    "durationMeanMs": {
                      "type": "number"
                    },
                    "billedMeanMs": {
                      "type": "number"
                    },
                    "memorySizeMb": {
                      "type": "number"
                    },
                    "memorySizesSeen": {
                      "type": "array",
                      "items": {
                        "type": "number"
                      }
                    },
                    "maxMemoryUsedP95Mb": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "maxMemoryUsedMaxMb": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "memoryUtilisationP95": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "memoryUtilisationMax": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "errors": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "timeouts": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "gbSecondsPerInvocation": {
                      "type": "number",
                      "minimum": 0
                    },
                    "costPer1M": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "x86_64",
                        "arm64",
                        "requests"
                      ],
                      "properties": {
                        "x86_64": {
                          "type": "number"
                        },
                        "arm64": {
                          "type": "number"
                        },
                        "requests": {
                          "type": "number"
                        }
                      }
                    },
                    "monthlyCost": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "x86_64": {
                          "type": "number"
                        },
                        "arm64": {
                          "type": "number"
                        }
                      }
                    },
                    "recommendation": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "action",
                        "memoryMb",
                        "reason",
                        "estCostPer1M",
                        "estSavingPct"
                      ],
                      "properties": {
                        "action": {
                          "type": "string",
                          "enum": [
                            "decrease",
                            "increase",
                            "keep",
                            "unknown"
                          ]
                        },
                        "memoryMb": {
                          "type": "number"
                        },
                        "reason": {
                          "type": "string"
                        },
                        "estCostPer1M": {
                          "type": "number"
                        },
                        "estSavingPct": {
                          "type": "number"
                        }
                      }
                    },
                    "initBilled": {
                      "type": "string",
                      "enum": [
                        "included",
                        "not-included",
                        "unknown"
                      ]
                    }
                  }
                }
              },
              "prices": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "gbSecondX86",
                  "gbSecondArm",
                  "perMillionRequests",
                  "defaults"
                ],
                "properties": {
                  "gbSecondX86": {
                    "type": "number"
                  },
                  "gbSecondArm": {
                    "type": "number"
                  },
                  "perMillionRequests": {
                    "type": "number"
                  },
                  "defaults": {
                    "type": "boolean"
                  }
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "TerraformDriftExplorerInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "text": {
            "title": "Terraform plan JSON",
            "description": "Run `terraform plan -out=tfplan && terraform show -json tfplan` (full detail) or paste `terraform plan -json` output (actions and reasons only, no attribute values).",
            "type": "string",
            "maxLength": 3000000
          },
          "file": {
            "title": "Or upload the file",
            "description": "Read in memory as UTF-8 text and not stored. Max 5 MiB. Upload as {filename, contentType?, contentBase64}. Max 5120 KiB. Accepts .json,.txt,.log.",
            "type": "object",
            "additionalProperties": false,
            "required": [
              "filename",
              "contentBase64"
            ],
            "properties": {
              "filename": {
                "type": "string"
              },
              "contentType": {
                "type": "string"
              },
              "contentBase64": {
                "type": "string"
              }
            }
          },
          "showNoOp": {
            "title": "List unchanged (no-op) resources too",
            "type": "boolean",
            "default": false
          }
        },
        "required": []
      },
      "TerraformDriftExplorerResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "format",
              "terraformVersion",
              "counts",
              "changes",
              "drift",
              "attributeDiffs",
              "outputs",
              "diagnostics",
              "applyable",
              "errored"
            ],
            "properties": {
              "format": {
                "type": "string",
                "enum": [
                  "plan-json",
                  "plan-stream"
                ]
              },
              "terraformVersion": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "applyable": {
                "type": [
                  "boolean",
                  "null"
                ]
              },
              "errored": {
                "type": [
                  "boolean",
                  "null"
                ]
              },
              "counts": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "create",
                  "update",
                  "delete",
                  "replace",
                  "read",
                  "noop",
                  "move",
                  "forget",
                  "import",
                  "drift",
                  "critical",
                  "high"
                ],
                "properties": {
                  "create": {
                    "type": "integer"
                  },
                  "update": {
                    "type": "integer"
                  },
                  "delete": {
                    "type": "integer"
                  },
                  "replace": {
                    "type": "integer"
                  },
                  "read": {
                    "type": "integer"
                  },
                  "noop": {
                    "type": "integer"
                  },
                  "move": {
                    "type": "integer"
                  },
                  "forget": {
                    "type": "integer"
                  },
                  "import": {
                    "type": "integer"
                  },
                  "drift": {
                    "type": "integer"
                  },
                  "critical": {
                    "type": "integer"
                  },
                  "high": {
                    "type": "integer"
                  }
                }
              },
              "changes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "address",
                    "type",
                    "provider",
                    "action",
                    "actions",
                    "reason",
                    "reasonText",
                    "risk",
                    "riskReasons",
                    "changedAttributes",
                    "replacePaths",
                    "movedFrom",
                    "importing"
                  ],
                  "properties": {
                    "address": {
                      "type": "string"
                    },
                    "type": {
                      "type": "string"
                    },
                    "provider": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "action": {
                      "type": "string",
                      "enum": [
                        "create",
                        "update",
                        "delete",
                        "replace",
                        "read",
                        "no-op",
                        "forget",
                        "move"
                      ]
                    },
                    "actions": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "reason": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "reasonText": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "risk": {
                      "type": "string",
                      "enum": [
                        "critical",
                        "high",
                        "medium",
                        "low",
                        "none"
                      ]
                    },
                    "riskReasons": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "changedAttributes": {
                      "type": "integer"
                    },
                    "replacePaths": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "movedFrom": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "importing": {
                      "type": "boolean"
                    }
                  }
                }
              },
              "drift": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "address",
                    "type",
                    "action",
                    "attributes",
                    "planAction",
                    "interpretation"
                  ],
                  "properties": {
                    "address": {
                      "type": "string"
                    },
                    "type": {
                      "type": "string"
                    },
                    "action": {
                      "type": "string"
                    },
                    "attributes": {
                      "type": "integer"
                    },
                    "planAction": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "interpretation": {
                      "type": "string"
                    }
                  }
                }
              },
              "attributeDiffs": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "address",
                    "section",
                    "path",
                    "before",
                    "after",
                    "note"
                  ],
                  "properties": {
                    "address": {
                      "type": "string"
                    },
                    "section": {
                      "type": "string",
                      "enum": [
                        "change",
                        "drift"
                      ]
                    },
                    "path": {
                      "type": "string"
                    },
                    "before": {
                      "type": "string"
                    },
                    "after": {
                      "type": "string"
                    },
                    "note": {
                      "type": "string"
                    }
                  }
                }
              },
              "outputs": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "name",
                    "action",
                    "sensitive"
                  ],
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "action": {
                      "type": "string"
                    },
                    "sensitive": {
                      "type": "boolean"
                    }
                  }
                }
              },
              "diagnostics": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "severity",
                    "summary",
                    "detail"
                  ],
                  "properties": {
                    "severity": {
                      "type": "string"
                    },
                    "summary": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      }
    }
  }
}