Bohan Jiang
405d88c1dc
feat(squad): allow members to create and manage their own squads (MUL-4223) ( #5071 )
...
Squad create/manage was gated behind workspace owner/admin, inconsistent with
agents and projects which any member can create. Move squads to a creator-scoped
model: any member can create a squad and becomes its creator, and manages only
the squads they created; owner/admin continue to manage every squad.
Backend (server/internal/handler/squad.go):
- Add canManageSquad (admin/owner OR creator) and gate UpdateSquad, DeleteSquad,
AddSquadMember, RemoveSquadMember, UpdateSquadMemberRole on it (member load +
squad load + per-squad check, replacing requireWorkspaceRole).
- CreateSquad is now member-creatable.
- Add memberCanWireAgent: a non-admin may only wire agents they can @-trigger
(canInvokeAgent as themselves) as squad leader (create/update) or worker
(add member); admins may wire any workspace agent. Prevents a creator from
smuggling an agent they cannot invoke into a squad.
Frontend:
- squad-detail-page: compute per-squad canManage (admin || creator) and render
the inspector, members tab, instructions and archive read-only otherwise,
mirroring the agent detail canEdit pattern.
- squads-page: per-row actions and the actions column now key off per-squad
canManage instead of workspace-admin.
Squads stay visible workspace-wide (ListSquads unfiltered); creator transfer is
out of scope for this iteration.
Co-authored-by: J <j@multica.ai >
Co-authored-by: multica-agent <github@multica.ai >
2026-07-08 14:51:54 +08:00
..
2026-05-09 16:11:58 +08:00
2026-06-17 15:18:44 +02:00
2026-05-28 16:05:19 +08:00
2026-05-28 16:05:19 +08:00
2026-07-03 14:18:43 +08:00
2026-07-03 14:18:43 +08:00
2026-07-03 14:18:43 +08:00
2026-05-28 19:06:57 +08:00
2026-07-03 14:18:43 +08:00
2026-07-03 17:56:02 +08:00
2026-06-13 15:33:28 +08:00
2026-07-03 17:56:02 +08:00
2026-07-03 17:56:02 +08:00
2026-05-28 19:06:57 +08:00
2026-06-17 08:23:20 +02:00
2026-05-28 15:53:16 +08:00
2026-07-06 17:19:56 +08:00
2026-06-03 16:39:06 +08:00
2026-07-07 20:49:42 +08:00
2026-06-30 12:29:11 +08:00
2026-07-03 14:18:43 +08:00
2026-07-07 20:49:42 +08:00
2026-05-27 15:47:36 +08:00
2026-05-18 12:17:39 +08:00
2026-05-27 15:47:36 +08:00
2026-06-03 16:39:06 +08:00
2026-07-07 20:49:42 +08:00
2026-06-18 09:40:38 +08:00
2026-07-01 12:46:47 +08:00
2026-07-01 12:46:47 +08:00
2026-07-07 13:20:30 +08:00
2026-06-24 12:46:20 +08:00
2026-07-07 13:20:30 +08:00
2026-05-28 16:05:19 +08:00
2026-05-28 16:05:19 +08:00
2026-05-27 14:52:03 +08:00
2026-05-27 14:52:03 +08:00
2026-06-24 09:52:18 +08:00
2026-06-01 08:28:15 +08:00
2026-06-10 14:20:39 +08:00
2026-06-30 12:24:57 +08:00
2026-07-03 17:42:06 +08:00
2026-07-03 14:18:43 +08:00
2026-07-03 14:18:43 +08:00
2026-05-22 13:22:36 +08:00
2026-06-03 16:39:06 +08:00
2026-06-04 13:12:32 +08:00
2026-06-24 16:19:30 +08:00
2026-06-24 16:25:17 +08:00
2026-06-17 16:00:22 +08:00
2026-07-03 14:18:43 +08:00
2026-07-02 18:31:45 +08:00
2026-06-18 11:10:06 +08:00
2026-07-03 14:18:43 +08:00
2026-06-03 16:39:06 +08:00
2026-07-07 12:38:07 +08:00
2026-07-07 12:38:07 +08:00
2026-07-05 13:30:18 +08:00
2026-07-05 13:30:18 +08:00
2026-07-03 14:18:43 +08:00
2026-07-07 14:43:19 +08:00
2026-07-07 14:43:19 +08:00
2026-06-26 12:09:15 +08:00
2026-07-03 16:10:19 +08:00
2026-07-03 16:10:19 +08:00
2026-06-03 16:39:06 +08:00
2026-07-02 14:11:10 +08:00
2026-06-23 00:14:42 +08:00
2026-07-05 01:35:00 +08:00
2026-07-02 15:48:45 +08:00
2026-07-05 02:35:19 +08:00
2026-06-24 16:06:14 +08:00
2026-05-28 14:20:20 +08:00
2026-05-15 18:44:08 +08:00
2026-05-19 10:37:38 +08:00
2026-06-02 17:17:41 +08:00
2026-05-21 16:35:45 +08:00
2026-05-21 16:35:45 +08:00
2026-07-06 19:11:47 +08:00
2026-05-19 17:04:16 +08:00
2026-06-23 13:17:13 +08:00
2026-07-03 14:18:43 +08:00
2026-06-16 12:26:44 +08:00
2026-07-06 19:11:47 +08:00
2026-06-25 00:19:13 +08:00
2026-06-25 00:19:13 +08:00
2026-06-24 12:46:20 +08:00
2026-06-24 12:46:20 +08:00
2026-07-03 14:18:43 +08:00
2026-07-03 14:18:43 +08:00
2026-06-30 12:24:57 +08:00
2026-06-03 16:39:06 +08:00
2026-07-01 17:53:16 +08:00
2026-07-01 17:53:16 +08:00
2026-05-21 15:33:47 +08:00
2026-05-27 22:22:26 +08:00
2026-05-27 22:22:26 +08:00
2026-07-07 17:35:33 +08:00
2026-07-07 17:35:33 +08:00
2026-06-21 23:54:58 +08:00
2026-07-06 12:34:51 +08:00
2026-06-12 16:45:38 +08:00
2026-05-25 10:05:17 +08:00
2026-07-02 18:31:45 +08:00
2026-06-08 13:08:38 +08:00
2026-07-07 12:01:14 +08:00
2026-06-11 13:00:56 +08:00
2026-07-08 13:11:22 +08:00
2026-07-08 13:11:22 +08:00
2026-07-08 13:11:22 +08:00
2026-07-08 13:11:22 +08:00
2026-07-02 14:38:05 +08:00
2026-05-20 12:30:10 +08:00
2026-07-07 12:01:14 +08:00
2026-07-07 12:01:14 +08:00
2026-07-02 14:38:05 +08:00
2026-06-18 11:10:06 +08:00
2026-07-02 14:38:05 +08:00
2026-05-21 15:33:47 +08:00
2026-07-07 12:01:14 +08:00
2026-07-06 12:34:51 +08:00
2026-07-06 12:34:51 +08:00
2026-07-06 12:34:51 +08:00
2026-06-11 13:00:56 +08:00
2026-06-30 14:46:46 +08:00
2026-06-30 14:46:46 +08:00
2026-06-11 13:00:56 +08:00
2026-05-22 12:22:07 +08:00
2026-06-01 15:19:42 +08:00
2026-06-22 13:34:06 +08:00
2026-06-30 14:46:46 +08:00
2026-06-29 14:09:34 +08:00
2026-06-29 14:09:34 +08:00
2026-05-13 18:46:20 +08:00
2026-06-26 16:01:33 +08:00
2026-06-26 16:01:33 +08:00
2026-06-26 16:01:33 +08:00
2026-07-03 17:42:06 +08:00
2026-07-08 14:51:54 +08:00
2026-07-03 14:18:43 +08:00
2026-06-02 13:03:15 +08:00
2026-05-14 14:07:26 +08:00
2026-07-05 02:35:19 +08:00
2026-07-03 17:42:06 +08:00
2026-07-08 14:51:54 +08:00
2026-05-11 12:39:45 +08:00
2026-05-28 15:53:16 +08:00
2026-07-03 14:18:43 +08:00
2026-06-02 14:29:29 +08:00
2026-05-21 15:33:47 +08:00
2026-05-18 14:59:40 +08:00
2026-06-30 12:29:11 +08:00
2026-05-18 12:17:39 +08:00
2026-06-25 01:29:20 +08:00
2026-05-08 19:14:12 +08:00
2026-07-03 14:18:43 +08:00
2026-06-24 12:46:20 +08:00
2026-06-13 01:22:45 +08:00