Cloud agent: viewing any image ends the session with `CAPIError: 400 The image data you provided does not represent a valid image`
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 45/100
- Tipo de issue
- Bug
- Clareza
- Claramente especificada
- Status de atividade
- Ativa
- Domínio
- ai-infra-agents, cli, cloud
Direção de pesquisa
The issue is in the cloud agent's image handling for data residency tenants. Start by examining the view tool's implementation in the copilot-cli codebase, likely in a tools or commands directory. Look for where images are processed and sent to the model. The error suggests a validation failure in the API call after viewing. Check the session state management and error reporting. Reproduce with the provided PNG generation script. 'Done' is when viewing an image does not cause a session failure, and the error message is accurate.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Describe the bug
Summary
In a Copilot cloud agent session on a GHEC data residency tenant (<tenant>.ghe.com), the view tool on any image file ends the session. The tool itself reports success. The next model call is rejected, and the session dies.
The error names the image as the fault. The image is never the fault. A 4 KB, 1280x720 PNG that Pillow reads as a valid RGB image fails exactly like a real screenshot.
What the session gets
Viewed image file at path /tmp/img-720.png
then
CAPIError: 400 The image data you provided does not represent a valid image.
Please check your input and try again with one of the supported image formats:
['image/jpeg', 'image/png', 'image/gif', 'image/webp']
The session state goes to failed and that message is the task's recorded error.
Reproduction
Any session. No repository state is needed.
python3 - <<'PY'
import zlib, struct
w, h = 1280, 720
row = b'\x00' + bytes([200, 40, 90]) * w
raw = row * h
def chunk(t, d):
c = t + d
return struct.pack('>I', len(d)) + c + struct.pack('>I', zlib.crc32(c) & 0xffffffff)
hdr = struct.pack('>IIBBBBB', w, h, 8, 2, 0, 0, 0)
open('/tmp/img.png', 'wb').write(b'\x89PNG\r\n\x1a\n' + chunk(b'IHDR', hdr) + chunk(b'IDAT', zlib.compress(raw, 6)) + chunk(b'IEND', b''))
PY
Then call view on /tmp/img.png. The file is 4319 bytes. PIL.Image.open reads it as (1280, 720) RGB.
What I ruled out
I made five PNGs of 1280 pixels wide and 720, 1440, 2880, 5760 and 11520 pixels tall, then viewed them one per turn, smallest first. The session died on the first one.
| Variable | Tested | Result |
|---|---|---|
| Height | 720 through 11520 | dies on the smallest |
| Byte size | 4 KB synthetic, 78 KB real screenshot, 128 KB real screenshot | all die |
| Images per turn | one | dies on one |
| Source | hand-written PNG, Playwright page.screenshot |
both die |
| Model | sweagent-capi:gpt-5.6-sol, sweagent-capi:gpt-5.6-terra |
both die |
Why this is worse than it reads
- The failing step reports success.
viewanswersViewed image file at path <path>. The agent has no way to know it has just ended the session. - The error blames the file. Every reader goes and checks the file, and the file is fine.
- It kills a session that already did its work. In our case a session implemented a work item across 24 files, passed 691 unit tests and 6 Playwright end-to-end tests, wrote its screenshots, then viewed three of them and died before it could open the pull request.
- It makes your own guidance fatal. Any instruction that tells an agent to check a screen capture before attaching it now ends the session that follows it.
What I ask for
- Make image input work, or say plainly that a cloud agent session cannot take image input on a data residency tenant.
- If it cannot, make
viewrefuse an image with a clear message instead of accepting it and killing the next model call. - Fix the error text. "The image data you provided does not represent a valid image" is wrong for a valid image, and it sends every reader to the wrong place.
Affected version
No response
Steps to reproduce the behavior
No response
Expected behavior
No response
Additional context
No response
- Linguagem predominante
- Shell
- Estrelas
- 11.2k
- Forks
- 1.9k
- Merge médio
- 14h 16min
- PRs com merge (30d)
- 6
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de github/copilot-cli
-
triage
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
github/copilot-cli#4932 ·
-
triage
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
github/copilot-cli#4909 ·
-
triage
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
github/copilot-cli#4906 ·
-
triage
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
github/copilot-cli#4848 ·
-
area:agents area:mcp
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
github/copilot-cli#4729 ·
Todas as issues de github/copilot-cli
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 85/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
-
bug easy help wanted
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
lacs-project/sysknife#503 ·
-
help wanted kind/documentation
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
liquidmetal-dev/flintlock#1239 ·