-- Unwrap the retired {status, headers, data} transport envelope from-- persisted OpenAPI tool output schemas. The runtime now returns the-- upstream payload as `data` (status/headers moved to the ToolResult-- `http` side channel), so persisted schemas must describe the payload-- only. Rows produced before the envelope existed (pre-#854) are already-- payload-shaped and don't match the predicates; re-running is a no-op.---- The old producer emitted `"data": {}` when an operation declared no-- response schema; the new producer persists NULL for those.---- output_schema is a `json` column, so structural comparisons cast to-- jsonb (json has no equality operator).UPDATE "tool"SET "output_schema" = CASE WHEN ("output_schema" -> 'properties' -> 'data')::jsonb = '{}'::jsonb THEN NULL ELSE "output_schema" -> 'properties' -> 'data'ENDWHERE "plugin_id" = 'openapi' AND "output_schema" IS NOT NULL AND "output_schema" ->> 'type' = 'object' AND ("output_schema" -> 'required')::jsonb = '["status", "headers", "data"]'::jsonb AND ("output_schema" -> 'properties' -> 'status')::jsonb = '{"type": "integer"}'::jsonb AND ("output_schema" -> 'properties' -> 'headers')::jsonb = '{"type": "object", "additionalProperties": {"type": "string"}}'::jsonb;
-- Unwrap the retired {status, headers, data} transport envelope from
-- persisted OpenAPI tool output schemas. The runtime now returns the
-- upstream payload as `data` (status/headers moved to the ToolResult
-- `http` side channel), so persisted schemas must describe the payload
-- only. Rows produced before the envelope existed (pre-#854) are already
-- payload-shaped and don't match the predicates; re-running is a no-op.
--
-- The old producer emitted `"data": {}` when an operation declared no
-- response schema; the new producer persists NULL for those.
--
-- output_schema is a `json` column, so structural comparisons cast to
-- jsonb (json has no equality operator).
UPDATE "tool"
SET "output_schema" = CASE
WHEN ("output_schema" -> 'properties' -> 'data')::jsonb = '{}'::jsonb THEN NULL
ELSE "output_schema" -> 'properties' -> 'data'
END
WHERE "plugin_id" = 'openapi'
AND "output_schema" IS NOT NULL
AND "output_schema" ->> 'type' = 'object'
AND ("output_schema" -> 'required')::jsonb = '["status", "headers", "data"]'::jsonb
AND ("output_schema" -> 'properties' -> 'status')::jsonb = '{"type": "integer"}'::jsonb
AND ("output_schema" -> 'properties' -> 'headers')::jsonb = '{"type": "object", "additionalProperties": {"type": "string"}}'::jsonb;