open-swe/ui
Johannes du Plessis b19804536c
feat: handle images sent to non-vision models in Slack, Linear, and web UI (#1560)
* feat: handle images sent to non-vision models in Slack, Linear, and web UI

Add vision capability checks across all image input paths. When a user
sends images to a text-only model (e.g. GLM 5.2, DeepSeek V4 Pro), the
images are now skipped and a warning is injected into the prompt instead
of sending unsupported content to the model.

- Slack: resolve model at webhook time, skip image fetch + add warning
- Linear: same pattern as Slack
- Queued message middleware: read resolved model from thread metadata,
  strip images from queued payloads for text-only models
- Web UI: disable submit + show inline warning when images are attached
  to a non-vision model selection
- Shared: resolve_agent_model_id helper + vision_not_supported_warning

Co-authored-by: open-swe[bot] <open-swe@users.noreply.github.com>

* test: mock resolve_agent_model_id in Slack mention test

The test_process_slack_mention_queues_active_thread_message test was
missing a mock for the new resolve_agent_model_id call added to the
Slack webhook handler, causing a TypeError when image URLs triggered
the model resolution path.

Co-authored-by: open-swe[bot] <open-swe@users.noreply.github.com>

* fix: include vision warning in queued payload for text-only models

Update the prompt variable (not just content_blocks) before clearing
image_urls so the queued payload also carries the warning text when a
Slack/Linear follow-up arrives while the thread is busy.

Co-authored-by: open-swe[bot] <open-swe@users.noreply.github.com>

---------

Co-authored-by: open-swe[bot] <open-swe@users.noreply.github.com>
2026-06-17 09:12:52 -07:00
..
assets feat: restructure Open SWE Review tab + wire create_prs (#1319) 2026-05-21 09:17:07 -07:00
public feat: PR review page (#1495) 2026-06-11 16:11:10 -07:00
src feat: handle images sent to non-vision models in Slack, Linear, and web UI (#1560) 2026-06-17 09:12:52 -07:00
.cta.json feat: open-swe dashboard for per-user profile config (#1302) 2026-05-15 11:23:53 -07:00
.gitignore feat: add right-click open trace context menu for threads (#1490) 2026-06-10 15:40:43 -07:00
.prettierignore feat: open-swe dashboard for per-user profile config (#1302) 2026-05-15 11:23:53 -07:00
.prettierrc feat: open-swe dashboard for per-user profile config (#1302) 2026-05-15 11:23:53 -07:00
bun.lock feat(open-swe): stream agent chat via @langchain/react v2 protocol (#1475) 2026-06-11 09:54:35 -07:00
components.json feat: open-swe dashboard for per-user profile config (#1302) 2026-05-15 11:23:53 -07:00
eslint.config.js fix(ui): resolve eslint errors in dashboard components (#1538) 2026-06-15 17:29:38 -07:00
package.json chore(deps): bump the npm_and_yarn group across 1 directory with 5 updates (#1554) 2026-06-16 19:39:51 -07:00
README.md feat: open-swe dashboard for per-user profile config (#1302) 2026-05-15 11:23:53 -07:00
tsconfig.json feat(open-swe): stream agent chat via @langchain/react v2 protocol (#1475) 2026-06-11 09:54:35 -07:00
vercel.json chore(ui): deploy dashboard as a static SPA instead of SSR (#1395) 2026-06-03 19:56:46 +00:00
vite.config.ts feat: live reviewer eval logs on a dedicated admin page (#1527) 2026-06-15 11:29:16 -07:00
yarn.lock chore(deps): bump the npm_and_yarn group across 1 directory with 5 updates (#1554) 2026-06-16 19:39:51 -07:00

TanStack Start + shadcn/ui

This is a template for a new TanStack Start project with React, TypeScript, and shadcn/ui.

Adding components

To add components to your app, run the following command:

npx shadcn@latest add button

This will place the ui components in the components directory.

Using components

To use the components in your app, import them as follows:

import { Button } from "@/components/ui/button";