Teknium
b47cb1bbf2
feat(kanban): file attachments on tasks ( #35395 )
...
Tasks can now carry file attachments (PDFs, images, source docs) that
workers read directly — closes the gap where source material had to be
pasted as a path into the task body.
- kanban_db: task_attachments table (additive), Attachment dataclass,
add/list/get/delete accessors, attachments_root/task_attachments_dir
path helpers (per-board, HERMES_KANBAN_ATTACHMENTS_ROOT override)
- build_worker_context: surfaces each attachment's absolute path so the
worker (full file/terminal tool access) reads it via read_file/pdftotext
- dashboard API: POST/GET/DELETE attachment routes (multipart upload,
25MB cap, traversal-safe filenames, root-containment check on download)
- dashboard UI: Attachments section in the task drawer — upload button,
list with download, per-row remove
- docs + tests (13 cases: DB accessors, REST round-trip, traversal
rejection, collision suffixing, worker-context surfacing)
Closes #35338
2026-05-30 07:41:04 -07:00
..
2026-05-29 12:17:12 +10:00
2026-05-29 04:22:27 -07:00
2026-05-28 18:11:49 -07:00
2026-05-23 21:03:51 -07:00
2026-05-28 22:26:25 -07:00
2026-05-29 02:24:48 -07:00
2026-05-29 02:24:48 -07:00
2026-05-18 10:14:38 -07:00
2026-05-29 13:22:54 -07:00
2026-05-30 02:53:37 -07:00
2026-05-19 22:34:05 -07:00
2026-05-28 15:14:05 +10:00
2026-05-28 22:26:25 -07:00
2026-05-25 01:20:33 -07:00
2026-05-28 22:26:25 -07:00
2026-05-11 11:13:25 -07:00
2026-05-25 01:20:33 -07:00
2026-05-13 22:54:21 -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-03-30 17:07:21 -07:00
2026-05-29 17:49:15 -07:00
2026-05-13 09:34:15 -07:00
2026-05-30 02:08:11 -07:00
2026-05-25 12:23:23 +10:00
2026-05-11 11:13:25 -07:00
2026-05-18 17:39:50 +00:00
2026-05-11 11:13:25 -07:00
2026-05-21 23:40:58 -07:00
2026-05-29 04:22:27 -07:00
2026-03-26 01:34:27 -07:00
2026-05-18 16:34:24 +05:30
2026-05-11 11:13:25 -07:00
2026-05-30 00:32:05 -07:00
2026-05-28 15:14:05 +10:00
2026-05-25 15:18:55 -07:00
2026-05-23 05:24:57 -07:00
2026-05-23 05:24:57 -07:00
2026-05-28 03:25:32 -07:00
2026-05-29 12:36:59 -07:00
2026-05-16 23:05:27 -07:00
2026-05-11 11:13:25 -07:00
2026-05-13 22:31:11 -07:00
2026-05-30 07:41:04 -07:00
2026-05-27 22:07:49 -07:00
2026-05-29 04:22:27 -07:00
2026-05-27 22:07:49 -07:00
2026-05-28 21:00:46 -07:00
2026-05-28 23:41:44 -07:00
2026-04-11 17:23:36 -07:00
2026-05-30 02:53:42 -07:00
2026-05-28 22:26:25 -07:00
2026-05-29 12:32:19 -07:00
2026-05-26 12:48:14 -07:00
2026-05-29 22:29:48 -07:00
2026-05-20 09:18:23 -07:00
2026-05-29 00:25:36 -07:00
2026-05-27 00:43:32 -07:00
2026-05-29 12:32:35 -07:00
2026-05-30 01:41:33 -07:00
2026-05-30 06:25:43 -07:00
2026-05-30 03:45:12 +00:00
2026-05-30 07:31:48 -07:00
2026-05-07 07:18:21 -07:00
2026-05-29 17:49:15 -07:00
2026-04-29 21:56:51 -07:00
2026-05-29 00:59:42 -07:00
2026-05-28 22:26:25 -07:00
2026-05-29 04:22:27 -07:00
2026-05-28 22:26:25 -07:00
2026-05-25 05:07:58 -07:00
2026-05-29 22:29:48 -07:00
2026-05-30 02:53:42 -07:00
2026-05-27 00:43:32 -07:00
2026-05-28 02:36:09 -07:00
2026-05-29 00:31:44 -07:00
2026-05-11 11:13:25 -07:00
2026-05-08 14:27:40 -07:00
2026-05-29 02:24:48 -07:00
2026-05-25 01:20:33 -07:00
2026-05-28 22:26:25 -07:00
2026-05-29 13:24:12 -07:00
2026-05-28 22:26:25 -07:00
2026-05-16 23:00:58 -05:00
2026-05-28 13:42:27 +10:00
2026-05-17 02:29:41 -07:00
2026-05-29 22:26:24 +05:30
2026-04-29 04:03:03 -07:00
2026-05-28 04:53:13 -07:00
2026-05-18 20:05:23 -07:00
2026-05-08 17:01:12 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-19 14:25:10 -07:00
2026-05-26 15:41:11 -07:00
2026-05-29 13:24:12 -07:00
2026-05-29 17:24:38 -07:00
2026-05-06 15:49:59 -07:00
2026-05-30 07:33:02 -07:00
2026-05-24 04:55:18 -07:00
2026-05-20 09:18:23 -07:00