core: boundImages spends its image-budget cut on remote images that carry no payload
Mantenedores costumam responder em até 1 dia
@jimmyallinai já está trabalhando nisso.
Desde 3/11/2026.
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 72/100
- Tipo de issue
- Bug
- Clareza
- Claramente especificada
- Status de atividade
- Ativa
- Stack de tecnologia
- typescript
- Domínio
- backend
Direção de pesquisa
Comece em packages/core/src/session/model-request.ts: mediaBytes, por volta das linhas 153-154, retorna 0 para mídias remotas e de referência, e boundImages, por volta das linhas 208-221, escolhe o corte a partir de sizes, mas o aplica pela posição no documento. Faça a fila de remoção pular imagens de custo zero para que nunca sejam substituídas. Execute bun run script/test.ts test/session-model-request.test.ts -t "spends the image budget" a partir de packages/core; está pronto quando apenas uma imagem inline é removida e as duas imagens remotas são mantidas.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Description
boundImages sizes the inline image budget with mediaBytes, which returns 0 for url and ref sources — the comment at packages/core/src/session/model-request.ts:153-154 states that "Remote and provider-referenced media carry no local payload and never count toward the inline budget".
The cut is then chosen by walking sizes in order (:208-214) but applied by document position (:217-221), so zero-cost media occupies slots in the removal queue. When the loop reaches a remote image it subtracts 0 from kept and still advances cut, spending a removal that frees nothing. Remote images are therefore replaced with IMAGE_REMOVED even though deleting them cannot help the budget, and the session loses content that was free to keep.
Steps to reproduce
Two remote images followed by two 13 MiB inline images (26 MiB passes the 25 MiB trigger; one inline image returns it under the 15 MiB target):
expect(removed(boundImages([remote("a.png"), remote("b.png"), inline("c.png"), inline("d.png")]))).toBe(1)
// Expected: 1, Received: 3
cd packages/core && bun run script/test.ts test/session-model-request.test.ts -t "spends the image budget"
Three images are replaced — both remote ones plus one inline — where only the inline one costs anything.
Plugins
none
OpenCode version
dev
Screenshot
No response
- Linguagem predominante
- TypeScript
- Estrelas
- 224k
- Forks
- 30k
- Merge médio
- 6h 12min
- PRs com merge (30d)
- 445
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o 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 anomalyco/opencode
-
tui: @/ cannot mention project root in non-Git locationsTalvez já em andamento Um pull request vinculado a esta issue está aberto ou já foi mesclado. Abertareproduced
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
anomalyco/opencode#61640 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
reproduced
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
anomalyco/opencode#61627 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
mcp: "enabled": false is dropped at parse, so the server still startsTalvez já em andamento Um pull request vinculado a esta issue está aberto ou já foi mesclado. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
anomalyco/opencode#61589 · 2 comentários ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 66/100
anomalyco/opencode#61587 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
ai: openai-compatible-chat rejects reasoning delivered as an encrypted object (Iceman)Talvez já em andamento @jimmyallinai assumiu há 1 dia. Abertareproduced
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
anomalyco/opencode#61512 · 2 comentários ·
Mantenedores costumam responder em até 1 dia
Todas as issues de anomalyco/opencode
Issues semelhantes
-
[fullsend] E2E: scorecard — filecheck GitLab entity metrics unavailable due to initialDelay timingAbertae2e-failure ready-to-code
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
redhat-developer/rhdh-plugin-export-overlays#4698 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
devswha/herdr-web-ui#2884 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
Mantenedores costumam responder em até 1 dia
-
b:minor bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
software-mansion/argent#1771 ·
Mantenedores costumam responder em até 1 dia
-
Resources: New palettes of XiamenTalvez já em andamento @rmt-svc assumiu hoje. Abertaresources
Dificuldade 1/5 1-3 horas Facilidade para iniciantes 74/100
railmapgen/rmg-palette#2491 ·
Mantenedores costumam responder em até 4 dias