{
  "file": "F06-conversation-events.md",
  "bullet": "Image content (`F06.send-image`).",
  "ids": [
    "F06.send-image"
  ],
  "line": 316,
  "script": "QA_IMG=$(control-agent-server conversation start --no-autotitle --tools none --print-id)\nQA_PNG='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg=='\ncontrol-agent-server api POST \"<redacted:session-cookie>/$QA_IMG/events\" \\\n  --json \"{\\\"content\\\":[{\\\"type\\\":\\\"text\\\",\\\"text\\\":\\\"QA_F06_IMAGE\\\"},{\\\"type\\\":\\\"image\\\",\\\"image_urls\\\":[\\\"$QA_PNG\\\"]}]}\" \\\n  --expect 200 --check success eq true --save F06.send-image/post\nIMG_ID=$(control-agent-server api GET \"<redacted:session-cookie>/$QA_IMG/events/search\" --query source=user \\\n  --check items len-eq 1 --check items.0.llm_message.content.0.text eq QA_F06_IMAGE \\\n  --check items.0.llm_message.content.1.type eq image --check items.0.llm_message.content.1.image_urls len-eq 1 \\\n  --check items.0.llm_message.content.1.image_urls.0 eq \"$QA_PNG\" --save F06.send-image/search --field items.0.id)\ncontrol-agent-server api GET \"<redacted:session-cookie>/$QA_IMG/events/$IMG_ID\" --expect 200 \\\n  --check llm_message.content.1.type eq image --check llm_message.content.1.image_urls.0 eq \"$QA_PNG\"\nIMG_WS=$(control-agent-server ws listen \"/sockets/events/$QA_IMG\" --query resend_mode=all --duration 3 \\\n  --save F06.send-image/replay | jq -r .saved)\njq -e --arg id \"$IMG_ID\" --arg url \"$QA_PNG\" '[.frames[] | select(.direction == \"received\") | .frame | select(.id == $id) | .llm_message.content[1].image_urls] == [[$url]]' \"$IMG_WS\"\ncontrol-agent-server api POST \"<redacted:session-cookie>/$QA_IMG/events\" --json '{\"content\":[{\"type\":\"image\"}]}' --expect 422 \\\n  --check detail.2.loc contains ImageContent --check detail.2.loc contains image_urls --check detail.2.type eq missing \\\n  --save F06.send-image/no-urls\ncontrol-agent-server api GET \"<redacted:session-cookie>/$QA_IMG/events/count\" --query source=user --check . eq 1\n",
  "exit_code": 0,
  "elapsed_ms": 13987,
  "failed_line": null,
  "failed_command": null,
  "stdout": "{\n  \"ok\": true,\n  \"status\": 200,\n  \"request\": {\n    \"method\": \"POST\",\n    \"path\": \"<redacted:session-cookie>/46cf2c65-195f-427f-8688-95e7bf0384b2/events\",\n    \"query\": [],\n    \"auth\": \"header\",\n    \"body\": {\n      \"content\": [\n        {\n          \"type\": \"text\",\n          \"text\": \"QA_F06_IMAGE\"\n        },\n        {\n          \"type\": \"image\",\n          \"image_urls\": [\n            \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==\"\n          ]\n        }\n      ]\n    },\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 200,\n    \"headers\": {\n      \"content-length\": \"16\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": {\n      \"success\": true\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 513,\n  \"checks\": [\n    {\n      \"check\": \"success eq true\",\n      \"ok\": true,\n      \"actual\": \"true\"\n    }\n  ],\n  \"saved\": \"/workspace/verification-artifacts/runs/20261013-030025-5cd8-map-f06/evidence/F06.send-image/post.json\"\n}\n{\n  \"ok\": true,\n  \"status\": 200,\n  \"request\": {\n    \"method\": \"GET\",\n    \"path\": \"<redacted:session-cookie>/46cf2c65-195f-427f-8688-95e7bf0384b2/events/67aa3c1f-a71a-428a-b4eb-f63122f266a0\",\n    \"query\": [],\n    \"auth\": \"header\",\n    \"body\": null,\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 200,\n    \"headers\": {\n      \"content-length\": \"680\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": {\n      \"id\": \"67aa3c1f-a71a-428a-b4eb-f63122f266a0\",\n      \"timestamp\": \"2026-10-13T03:02:04.261285\",\n      \"source\": \"user\",\n      \"parent_id\": \"af1b6eed-9de3-475e-beb8-55dd49bd877d\",\n      \"llm_message\": {\n        \"role\": \"user\",\n        \"content\": [\n          {\n            \"cache_prompt\": false,\n            \"type\": \"text\",\n            \"text\": \"QA_F06_IMAGE\"\n          },\n          {\n            \"cache_prompt\": false,\n            \"type\": \"image\",\n            \"image_urls\": [\n              \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==\"\n            ]\n          }\n        ],\n        \"tool_calls\": null,\n        \"tool_call_id\": null,\n        \"name\": null,\n        \"reasoning_content\": null,\n        \"thinking_blocks\": [],\n        \"responses_reasoning_item\": null\n      },\n      \"llm_response_id\": null,\n      \"activated_skills\": [],\n      \"extended_content\": [],\n      \"sender\": null,\n      \"critic_result\": null,\n      \"kind\": \"MessageEvent\"\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 141,\n  \"checks\": [\n    {\n      \"check\": \"llm_message.content.1.type eq image\",\n      \"ok\": true,\n      \"actual\": \"image\"\n    },\n    {\n      \"check\": \"llm_message.content.1.image_urls.0 eq data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==\",\n      \"ok\": true,\n      \"actual\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==\"\n    }\n  ]\n}\ntrue\n{\n  \"ok\": true,\n  \"status\": 422,\n  \"request\": {\n    \"method\": \"POST\",\n    \"path\": \"<redacted:session-cookie>/46cf2c65-195f-427f-8688-95e7bf0384b2/events\",\n    \"query\": [],\n    \"auth\": \"header\",\n    \"body\": {\n      \"content\": [\n        {\n          \"type\": \"image\"\n        }\n      ]\n    },\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 422,\n    \"headers\": {\n      \"content-length\": \"397\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": {\n      \"detail\": [\n        {\n          \"type\": \"literal_error\",\n          \"loc\": [\n            \"body\",\n            \"content\",\n            0,\n            \"TextContent\",\n            \"type\"\n          ],\n          \"msg\": \"Input should be 'text'\",\n          \"input\": \"image\",\n          \"ctx\": {\n            \"expected\": \"'text'\"\n          }\n        },\n        {\n          \"type\": \"missing\",\n          \"loc\": [\n            \"body\",\n            \"content\",\n            0,\n            \"TextContent\",\n            \"text\"\n          ],\n          \"msg\": \"Field required\",\n          \"input\": {\n            \"type\": \"image\"\n          }\n        },\n        {\n          \"type\": \"missing\",\n          \"loc\": [\n            \"body\",\n            \"content\",\n            0,\n            \"ImageContent\",\n            \"image_urls\"\n          ],\n          \"msg\": \"Field required\",\n          \"input\": {\n            \"type\": \"image\"\n          }\n        }\n      ]\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 144,\n  \"checks\": [\n    {\n      \"check\": \"detail.2.loc contains ImageContent\",\n      \"ok\": true,\n      \"actual\": \"[\\\"body\\\", \\\"content\\\", 0, \\\"ImageContent\\\", \\\"image_urls\\\"]\"\n    },\n    {\n      \"check\": \"detail.2.loc contains image_urls\",\n      \"ok\": true,\n      \"actual\": \"[\\\"body\\\", \\\"content\\\", 0, \\\"ImageContent\\\", \\\"image_urls\\\"]\"\n    },\n    {\n      \"check\": \"detail.2.type eq missing\",\n      \"ok\": true,\n      \"actual\": \"missing\"\n    }\n  ],\n  \"saved\": \"/workspace/verification-artifacts/runs/20261013-030025-5cd8-map-f06/evidence/F06.send-image/no-urls.json\"\n}\n{\n  \"ok\": true,\n  \"status\": 200,\n  \"request\": {\n    \"method\": \"GET\",\n    \"path\": \"<redacted:session-cookie>/46cf2c65-195f-427f-8688-95e7bf0384b2/events/count\",\n    \"query\": [\n      [\n        \"source\",\n        \"user\"\n      ]\n    ],\n    \"auth\": \"header\",\n    \"body\": null,\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 200,\n    \"headers\": {\n      \"content-length\": \"1\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": 1,\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 256,\n  \"checks\": [\n    {\n      \"check\": \". eq 1\",\n      \"ok\": true,\n      \"actual\": \"1\"\n    }\n  ]\n}\n",
  "stderr": ""
}
