Scope workspace tasks to the bot that has them

A workspace's task now carries the bot that has it there (bot_id with
workspace_id), or none while it's shared. A bot reaches its own list and,
in its workspaces, its own tasks plus the shared ones; a workspace admin
every task there. Bots create workspace tasks for themselves by default,
take a shared one by starting it, and hand-overs record the new bot.
Removing or deleting a bot makes its workspace tasks shared again. The
conversation's Tasks modal shows that bot's tasks in the workspace.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
2026-10-27 19:19:01 +01:00
co-authored by Claude Opus 5.5
parent 184407d76b
commit 864dcce30a
31 changed files with 316 additions and 153 deletions
@@ -4,7 +4,7 @@ type Params = {
tasks: BUN_SQLITE_COBBLE_TASKS[];
title: string;
/**
* Same collection: a bot's own list, or a workspace's.
* Same list: a bot's own, or a workspace's (whoever has it there).
*/
bot_id?: number | null;
workspace_id?: number | null;
@@ -23,7 +23,7 @@ export default function findDuplicateTask({ tasks, title, bot_id, workspace_id }
if (task.status == "done" || task.status == "cancelled") return false;
if (workspace_id) {
if (Number(task.workspace_id || 0) != Number(workspace_id)) return false;
} else if (Number(task.bot_id || 0) != Number(bot_id || 0)) {
} else if (task.workspace_id || Number(task.bot_id || 0) != Number(bot_id || 0)) {
return false;
}