Skip to content

v0.1.19 — image input

Latest

Choose a tag to compare

@dat-lequoc dat-lequoc released this 25 Aug 20:13
· 3 commits to main since this release

Kiro routes can now take images. The adapter previously refused all image content
with UNSUPPORTED_CONTENT, which also kept the harness's own read_image tool
shut: that tool gates on inputModalities.includes('image'), and this reported
every model as text-only.

Capability is read, not guessed

ListAvailableModels states it per model as supportedInputTypes: ["TEXT","IMAGE"].
On the verified account 17 of 19 models accept images, including every Claude
route, while glm-5 and minimax-m2.5 report text only — an id-based rule would
have sent images to those two.

models[].inputModalities overrides the catalog, and a model that states nothing
stays text-only, matching the harness rule that an unstated capability is not a
capability.

How images travel

  • userInputMessage.imagesImageBlock { format, source: { bytes } }, format
    limited to png, jpeg, gif and webp
  • re-encoded to at most 8000×8000 pixels and 3.75 MB before base64 expansion
  • bytes come from the attachment service via readImageRequest, resolved per
    request and capability-checked, so a profile without it reports images
    unsupported rather than failing mid-request

Placement follows the wire

Only user messages have an image seat. AssistantResponseMessage has none, so an
image in replayed assistant history is refused rather than silently dropped. And
ToolResultContentBlock is a union of text and json alone, so an image returned by
a tool is hoisted onto the user turn carrying its result — the nearest seat that
keeps it.

Verified live, twice

  • Raw wire (tests/live-image.spec.ts): a generated PNG of green over red —
    colours the prompt never named — answered green red.
  • Full harness: a headless turn on a temporary profile used read_image on a
    blue-over-yellow PNG and answered blue / yellow, exercising the capability
    gate, the attachment service, this adapter, and the model together.

npm run check: 204 tests pass (10 live probes skipped), plus typecheck, build and
syntax checks.

Install

dsh plugin --profile <name> add github:dat-lequoc/dsh-kiro#v0.1.19

Artifact checksum

sha256  5b371b0bfc3ace981e6009e450cdfc61ca96e22a32e728e41258e57916b2bc96  dsh-kiro-0.1.19.tgz