Teknium
769ee86cd2
feat(kanban): attach images referenced in task bodies to worker vision ( #34210 )
...
Kanban workers now scan the task body for local image paths and
http(s) image URLs and attach them to the worker's first user turn —
matching the CLI/gateway behaviour for inbound images. Before, a
user pasting `/home/me/screenshot.png` or `https://example.com/img.png `
into a kanban task description had it sent to the model as plain
text and the pixels were never seen.
How it works:
* agent/image_routing.py gains extract_image_refs(text) → (paths, urls)
that mirrors gateway/platforms/base.py:extract_local_files (absolute /
~-relative paths, image extensions only, ignores fenced/inline code).
* build_native_content_parts() accepts an optional image_urls= kwarg
and emits passthrough image_url parts for remote URLs alongside the
base64 data: URLs used for local paths.
* cli.py (single-query/quiet branch — the path every dispatcher-spawned
worker takes) detects HERMES_KANBAN_TASK, reads the task body via
kanban_db.get_task, runs extract_image_refs, and threads the results
into the existing image-routing decision (native vs text). Best-effort:
enrichment failures never block worker startup.
Tested:
* tests/agent/test_image_routing.py — 22 new tests for extract_image_refs
and URL pass-through in build_native_content_parts.
* tests/hermes_cli/test_kanban_worker_image_extraction.py — 10 new tests
driving real kanban_db round-trip (create task → read body → extract
refs → build parts).
* E2E: created a fake kanban task with a body referencing both a local
PNG and an https URL; verified the worker pipeline produces a
multimodal user turn with 1 text part + 2 image_url parts (data URL
for the local file, passthrough URL for the remote).
2026-05-28 17:50:42 -07:00
..
2026-02-26 03:20:08 +03:00
2026-05-27 02:12:27 -07:00
2026-05-19 11:10:51 -07:00
2026-05-25 01:20:33 -07:00
2026-05-25 01:20:33 -07:00
2026-04-07 17:19:07 -07:00
2026-05-27 00:43:32 -07:00
2026-04-26 05:43:31 -07:00
2026-05-09 11:10:53 -07:00
2026-05-27 00:43:32 -07:00
2026-05-23 21:03:51 -07:00
2026-04-21 14:31:48 -05:00
2026-04-07 17:19:07 -07:00
2026-04-07 17:19:07 -07:00
2026-05-28 01:33:10 -07:00
2026-05-25 01:23:31 -07:00
2026-05-18 10:26:55 -07:00
2026-05-28 05:47:30 -07:00
2026-05-28 00:19:31 -07:00
2026-05-27 09:38:58 -07:00
2026-04-14 01:43:45 -07:00
2026-05-23 17:47:36 -07:00
2026-04-24 03:00:33 -07:00
2026-05-08 14:27:40 -07:00
2026-05-24 04:25:32 -07:00
2026-05-19 14:51:21 -07:00
2026-05-18 20:01:34 -07:00
2026-05-18 10:14:38 -07:00
2026-05-18 10:14:38 -07:00
2026-05-25 05:07:52 -07:00
2026-05-28 15:14:05 +10:00
2026-05-15 14:45:43 -07:00
2026-03-18 03:17:37 -07:00
2026-04-23 23:28:34 -07:00
2026-05-13 17:32:22 -07:00
2026-05-28 15:14:05 +10:00
2026-05-18 21:38:05 -07:00
2026-04-09 16:24:53 -07:00
2026-04-29 23:18:55 -07:00
2026-04-11 01:52:58 -07:00
2026-05-25 01:20:33 -07:00
2026-05-28 15:50:25 +10:00
2026-05-28 03:34:47 -07:00
2026-03-09 21:36:29 -07:00
2026-05-09 23:17:25 -07:00
2026-05-27 12:16:15 -07:00
2026-05-15 02:31:30 -07:00
2026-05-17 02:29:41 -07:00
2026-05-20 19:14:21 -07:00
2026-05-13 09:34:15 -07:00
2026-04-21 14:23:45 -07:00
2026-04-29 23:18:55 -07:00
2026-04-17 19:03:26 -07:00
2026-04-28 01:40:25 -07:00
2026-05-25 15:07:19 -07:00
2026-04-29 23:18:55 -07:00
2026-05-24 18:05:33 -07:00
2026-04-10 03:44:43 -07:00
2026-04-28 01:18:09 -07:00
2026-04-24 05:09:08 -07:00
2026-04-24 03:33:29 -07:00
2026-04-24 05:09:08 -07:00
2026-05-18 17:39:50 +00:00
2026-05-05 05:15:54 -07:00
2026-05-09 18:43:40 -07:00
2026-05-07 05:27:47 -07:00
2026-05-07 05:27:47 -07:00
2026-05-21 23:40:58 -07:00
2026-04-25 18:47:53 -07:00
2026-05-19 14:50:38 -07:00
2026-05-27 02:12:27 -07:00
2026-05-27 02:12:27 -07:00
2026-05-27 02:12:27 -07:00
2026-05-27 02:12:27 -07:00
2026-05-27 02:12:27 -07:00
2026-05-27 02:12:27 -07:00
2026-05-27 02:12:27 -07:00
2026-05-27 02:12:27 -07:00
2026-05-27 02:12:27 -07:00
2026-05-27 02:12:27 -07:00
2026-05-27 02:12:27 -07:00
2026-05-27 02:12:27 -07:00
2026-04-30 06:43:22 -04:00
2026-04-30 02:30:20 -07:00
2026-05-12 13:59:22 -04:00
2026-05-24 15:43:48 -07:00
2026-05-18 16:34:24 +05:30
2026-04-16 06:48:33 -07:00
2026-05-09 11:04:46 -07:00
2026-04-20 22:14:29 -07:00
2026-04-20 22:14:29 -07:00
2026-04-17 05:08:07 -07:00
2026-05-03 03:25:45 -07:00
2026-04-14 23:13:11 -07:00
2026-05-09 13:36:33 -07:00
2026-05-27 00:43:32 -07:00
2026-05-28 15:14:05 +10:00
2026-05-13 18:40:14 -07:00
2026-05-23 17:17:05 -07:00
2026-05-04 15:31:15 -04:00
2026-05-23 05:24:57 -07:00
2026-04-09 16:24:53 -07:00
2026-05-12 15:06:25 -07:00
2026-05-09 17:54:17 -07:00
2026-03-14 12:11:23 -07:00
2026-05-28 12:42:13 +10:00
2026-05-15 14:45:43 -07:00
2026-05-19 17:27:24 -07:00
2026-05-28 03:25:32 -07:00
2026-05-19 17:27:24 -07:00
2026-05-19 11:23:15 -07:00
2026-04-24 04:46:17 -07:00
2026-04-20 23:20:33 -07:00
2026-05-27 00:43:32 -07:00
2026-05-13 22:55:09 -07:00
2026-04-20 20:53:51 -07:00
2026-04-29 20:33:29 -07:00
2026-05-28 00:19:31 -07:00
2026-05-21 19:17:45 -07:00
2026-05-28 11:33:16 -07:00
2026-05-19 17:26:23 -07:00
2026-05-18 20:17:10 -07:00
2026-05-18 21:33:08 -07:00
2026-05-27 14:31:55 -07:00
2026-05-18 20:17:48 -07:00
2026-05-28 03:38:09 -07:00
2026-05-18 09:40:44 -07:00
2026-05-18 20:26:02 -07:00
2026-05-18 20:47:01 -07:00
2026-05-23 02:34:34 -07:00
2026-05-23 23:10:36 -07:00
2026-05-07 13:04:41 -07:00
2026-05-07 13:04:41 -07:00
2026-05-18 21:10:12 -07:00
2026-05-28 17:50:42 -07:00
2026-03-29 21:54:36 -07:00
2026-05-06 03:50:59 -07:00
2026-04-11 17:23:36 -07:00
2026-05-19 01:28:32 -07:00
2026-05-07 05:17:03 -07:00
2026-05-26 12:48:14 -07:00
2026-05-07 05:17:03 -07:00
2026-04-29 21:56:47 -07:00
2026-05-26 12:48:14 -07:00
2026-05-17 02:29:41 -07:00
2026-05-20 09:18:23 -07:00
2026-05-11 18:08:16 -07:00
2026-04-24 05:24:54 -07:00
2026-04-17 06:33:21 -07:00
2026-05-13 13:21:33 -07:00
2026-04-25 18:47:53 -07:00
2026-04-16 01:16:14 -07:00
2026-05-19 10:57:35 -07:00
2026-04-24 04:58:46 -07:00
2026-04-08 19:58:16 -07:00
2026-05-26 20:44:43 -07:00
2026-04-22 17:33:42 -07:00
2026-05-28 00:19:31 -07:00
2026-04-20 22:14:03 -07:00
2026-05-28 00:19:31 -07:00
2026-05-13 18:40:14 -07:00
2026-04-13 04:33:52 -07:00
2026-05-22 14:17:40 -07:00
2026-05-28 00:19:31 -07:00
2026-04-24 04:58:46 -07:00
2026-05-04 12:38:15 -07:00
2026-05-09 23:17:25 -07:00
2026-05-06 09:08:33 -07:00
2026-05-17 02:29:41 -07:00
2026-04-21 05:19:43 -07:00
2026-04-24 05:20:05 -07:00
2026-03-16 06:07:45 -07:00
2026-05-05 04:37:47 -07:00
2026-05-18 16:34:10 +05:30
2026-03-14 10:35:14 -07:00
2026-05-23 17:49:47 -07:00
2026-04-17 01:05:09 -07:00
2026-04-21 21:30:10 -07:00
2026-05-25 01:20:33 -07:00
2026-05-25 01:41:19 -07:00
2026-05-24 18:04:54 -07:00
2026-05-15 22:12:57 -07:00
2026-05-09 13:02:25 -07:00
2026-05-17 13:54:12 -07:00
2026-05-25 05:07:58 -07:00
2026-04-01 11:20:33 -07:00
2026-05-24 18:07:47 -07:00
2026-05-13 09:34:15 -07:00
2026-05-23 01:43:52 -07:00
2026-05-25 01:20:33 -07:00
2026-04-28 01:28:25 -07:00
2026-05-28 02:36:37 -07:00
2026-05-28 02:36:09 -07:00
2026-05-21 16:40:04 +05:30
2026-04-09 14:20:16 -07:00
2026-05-07 05:10:33 -07:00
2026-04-28 01:47:20 -07:00
2026-05-08 14:27:40 -07:00
2026-04-27 08:52:12 -07:00
2026-05-28 03:34:47 -07:00
2026-05-27 00:43:32 -07:00
2026-05-25 01:20:33 -07:00
2026-05-12 01:02:25 -07:00
2026-05-24 15:15:16 -07:00
2026-05-16 23:00:58 -05:00
2026-05-28 13:42:27 +10:00
2026-04-26 18:49:48 -07:00
2026-05-10 13:06:25 -07:00
2026-05-16 16:51:42 -07:00
2026-04-26 18:31:07 -07:00
2026-05-27 00:43:32 -07:00
2026-05-02 02:08:06 -07:00
2026-05-15 10:36:38 +05:30
2026-04-29 21:56:51 -07:00
2026-04-10 21:15:59 -07:00
2026-05-19 14:23:19 -07:00
2026-04-25 22:02:02 -07:00
2026-04-26 18:49:48 -07:00
2026-05-19 01:28:32 -07:00
2026-05-25 01:20:33 -07:00
2026-05-13 13:28:25 -07:00
2026-05-27 00:43:32 -07:00
2026-05-28 11:59:58 -07:00
2026-04-24 03:46:46 -07:00
2026-05-28 04:53:13 -07:00
2026-03-17 01:59:07 -07:00
2026-03-28 14:32:23 -07:00
2026-03-11 00:50:39 -07:00
2026-05-18 20:05:23 -07:00
2026-05-08 17:01:12 -07:00
2026-05-07 05:53:14 -07:00
2026-05-08 16:07:23 -07:00
2026-05-28 00:19:31 -07:00
2026-05-28 00:19:31 -07:00
2026-04-17 01:05:09 -07:00
2026-03-30 11:17:15 -07:00
2026-05-06 03:55:47 -07:00
2026-05-08 11:18:14 -07:00
2026-05-27 00:43:32 -07:00
2026-04-10 02:57:39 -07:00
2026-05-25 01:47:55 -07:00
2026-04-13 16:32:04 -07:00
2026-03-29 20:05:59 -07:00
2026-05-28 00:28:42 -07:00
2026-03-26 13:39:41 -07:00
2026-05-24 18:04:54 -07:00
2026-05-15 14:45:43 -07:00
2026-05-27 22:03:45 -05:00
2026-05-22 00:16:52 -05:00
2026-05-22 14:27:38 -07:00
2026-05-14 14:28:14 -07:00
2026-05-15 14:45:43 -07:00
2026-05-24 19:51:46 -07:00
2026-04-19 22:43:09 -07:00
2026-04-17 21:29:24 -07:00
2026-05-19 03:01:02 -07:00
2026-05-17 02:29:41 -07:00
2026-05-08 14:55:40 -07:00
2026-05-25 05:50:29 -07:00
2026-04-30 19:44:26 -07:00
2026-05-15 12:11:32 -07:00
2026-05-06 15:49:59 -07:00
2026-05-17 16:56:37 -07:00
2026-05-25 01:15:24 -07:00
2026-05-24 15:00:44 -07:00
2026-05-24 17:47:24 -07:00
2026-05-27 00:43:32 -07:00
2026-05-28 03:34:47 -07:00
2026-05-24 04:55:18 -07:00
2026-05-15 14:32:14 -07:00
2026-05-17 12:35:01 -07:00
2026-05-24 18:12:16 -07:00
2026-05-20 09:18:23 -07:00
2026-05-27 00:43:32 -07:00