ZacharyZhang-NY
ff9a52324e
Route work-product clicks through a resolver IPC
...
Filesystem work products store `external_id` as a workspace-relative
path so artifacts survive a workspace-root move, but the renderer was
handing that relative fragment straight to `shell.openPath`, which
needs an absolute managed path. Clicks flickered into a failed open.
Add a dedicated `openWorkProduct({ companyId, id })` IPC backed by
`resolveWorkProductTarget` on the DB layer. The resolver joins the
work-product row back to its originating task → workspace (or run →
workspace for taskless runs), composes an absolute path, and rejects
any relative fragment that would escape the workspace root. The
renderer now passes the work product's id — path resolution stays on
the main process where the managed-path policy already lives.
2026-04-19 15:05:21 -04:00
..
2026-04-19 14:55:23 -04:00
2026-04-19 15:01:41 -04:00
2026-04-19 14:59:05 -04:00
2026-04-19 00:58:39 -04:00
2026-04-17 14:03:56 -04:00
2026-04-17 14:03:56 -04:00
2026-04-19 15:05:21 -04:00
2026-04-19 14:43:57 -04:00
2026-04-19 14:43:57 -04:00
2026-04-19 14:38:04 -04:00
2026-04-17 16:35:30 -04:00
2026-04-19 14:51:26 -04:00
2026-04-19 14:43:57 -04:00
2026-04-16 23:02:58 -04:00
2026-04-16 23:03:47 -04:00
2026-04-18 21:37:56 -04:00
2026-04-04 12:03:50 -04:00
2026-04-17 14:03:56 -04:00
2026-04-18 23:37:37 -04:00
2026-04-17 14:03:56 -04:00
2026-04-16 23:34:13 -04:00
2026-04-17 15:25:13 -04:00
2026-04-17 15:25:13 -04:00
2026-04-17 15:25:13 -04:00
2026-04-18 23:37:37 -04:00
2026-04-17 22:38:10 -04:00
2026-04-17 02:00:37 -04:00
2026-04-17 02:00:37 -04:00
2026-04-17 14:03:56 -04:00
2026-04-17 02:00:46 -04:00
2026-04-17 02:00:46 -04:00
2026-04-18 23:37:37 -04:00
2026-04-17 02:20:56 -04:00
2026-04-18 23:09:59 -04:00
2026-04-18 22:14:09 -04:00
2026-04-18 23:09:59 -04:00
2026-04-19 15:01:41 -04:00
2026-04-19 15:05:21 -04:00
2026-04-16 23:10:32 -04:00
2026-04-17 20:32:34 -04:00
2026-04-17 14:03:56 -04:00
2026-04-17 20:32:34 -04:00
2026-04-17 15:25:13 -04:00
2026-04-16 23:00:43 -04:00
2026-04-17 14:03:56 -04:00
2026-04-17 15:25:13 -04:00
2026-03-18 01:15:58 -04:00
2026-04-17 22:38:10 -04:00
2026-03-18 01:15:58 -04:00
2026-04-17 15:25:13 -04:00
2026-04-17 15:25:13 -04:00
2026-04-17 15:25:13 -04:00
2026-04-18 23:09:59 -04:00
2026-04-18 23:37:37 -04:00
2026-04-17 22:38:10 -04:00
2026-04-04 12:03:50 -04:00
2026-04-18 23:37:37 -04:00
2026-04-19 15:05:21 -04:00
2026-04-17 16:16:08 -04:00
2026-04-17 15:25:13 -04:00
2026-04-17 01:28:26 -04:00
2026-04-17 15:25:13 -04:00
2026-04-17 15:25:13 -04:00
2026-04-16 21:48:47 -04:00
2026-03-18 01:15:58 -04:00
2026-04-17 22:38:10 -04:00
2026-04-17 16:22:31 -04:00
2026-04-18 21:37:56 -04:00
2026-04-19 01:19:23 -04:00
2026-03-18 01:15:58 -04:00
2026-04-18 22:14:09 -04:00
2026-04-17 14:03:56 -04:00
2026-04-19 01:21:26 -04:00
2026-04-17 14:48:22 -04:00
2026-04-18 21:37:56 -04:00
2026-04-19 01:06:50 -04:00
2026-04-17 15:25:13 -04:00
2026-04-17 14:03:56 -04:00
2026-04-18 22:14:09 -04:00
2026-04-04 12:03:50 -04:00
2026-04-04 12:03:50 -04:00
2026-04-18 23:37:37 -04:00
2026-04-17 19:11:04 -04:00
2026-04-19 14:38:04 -04:00
2026-04-18 23:37:37 -04:00
2026-04-17 14:03:56 -04:00
2026-04-16 21:58:32 -04:00
2026-03-29 14:08:15 -04:00
2026-04-04 12:03:50 -04:00
2026-04-17 14:03:56 -04:00
2026-04-17 02:36:53 -04:00
2026-04-17 16:16:08 -04:00
2026-04-16 23:07:08 -04:00
2026-04-16 22:52:16 -04:00
2026-04-17 14:03:56 -04:00
2026-04-16 23:08:06 -04:00
2026-04-19 14:38:04 -04:00