DumbCode v0.12.2 — image input + prompt-injection hardening
New features
🖼️ Image input
Attach images (PNG/JPG/GIF/WebP, ≤5 MB) to any question or chat turn — they're sent as multimodal content parts to vision-capable models:
dumbcode ask "what's wrong with this UI?" --file screenshot.png
dumbcode chat # then: /file diagram.png and ask about itProvider shapes are converted automatically: OpenAI-compatible content parts, Anthropic base64 image blocks, Gemini inline_data, and Ollama native images — in both streaming and non-streaming paths. Text-only flows are completely unchanged.
🛡️ Prompt-injection hardening
Tool output (file reads, greps, shell, tests, web fetches) can carry attacker-written instructions. DumbCode now:
- Fences untrusted content: everything from guarded tools is wrapped in
<<<UNTRUSTED CONTENT>>>markers at the single choke point shared by the CLI and MCP — and the system prompt instructs the model to treat fenced content as data, never directives. - Scans for injection smells: "ignore previous instructions", secret-exfil requests, fake tool-call syntax, mode-override attempts — flagged on the console when they appear in tool output.
- Protects the GitHub bot: issue/PR comment text that summons DumbestBOT is wrapped the same way, so a comment can't steer the agent.
Also in this release
- GitHub App bot scaffold (DumbestBOT): webhook server, in-process agent runs, per-PR fix PRs, one-command app registration via
npm run bot:setup -- --org <org>
Verification
- 125/125 tests pass (10 new covering images + guard)
dumbcode.exereports v0.12.2; SHA256SUMS included