From fb97d4cb72d0a90dde102b7001603716ee6e4c3b Mon Sep 17 00:00:00 2001 From: Adam Malczewski Date: Fri, 22 May 2026 00:19:14 +0900 Subject: feat: agent summoning system, todo improvements, security fixes, double-execution bug fix - Add summon/retrieve tools for spawning child agents in new tabs - summon: non-blocking, returns agent_id immediately - retrieve: blocking, waits for child to finish, returns result - Child tools are intersected with parent permissions (no privilege escalation) - Working directory validated to stay within workspace - Abort controller stops orphaned agents on tab close - Rename task_list tool to todo with comprehensive usage guidance in system prompt - Rename PermissionLog.svelte to ToolPermissions.svelte - Add 'Summon agents' toggle to tool permissions UI - Redesign TaskListPanel with DaisyUI checkboxes (indeterminate for in-progress) - Remove 'blocked' status from task system - Add tab-created WebSocket event for child agent tab visibility - Add HMR cleanup for WebSocket connections (close stale connections on hot reload) - Fix ensureAssistantMessage to not throw on closed tabs - Fix double tool execution: remove execute from AI SDK tool() in registry.ts (agent.ts already executes tools manually via executeToolWithStreaming) - Fix all pre-existing test failures (missing mocks, stale API signatures) - Add debug info to copy button (tab ID, injected skills, all tab IDs) - Add tab ID and tools to conversation copy output --- .../src/lib/components/TaskListPanel.svelte | 103 ++++++++++++--------- 1 file changed, 57 insertions(+), 46 deletions(-) (limited to 'packages/frontend/src/lib/components/TaskListPanel.svelte') diff --git a/packages/frontend/src/lib/components/TaskListPanel.svelte b/packages/frontend/src/lib/components/TaskListPanel.svelte index 5f2ffe2..d70373f 100644 --- a/packages/frontend/src/lib/components/TaskListPanel.svelte +++ b/packages/frontend/src/lib/components/TaskListPanel.svelte @@ -1,41 +1,45 @@
@@ -43,28 +47,35 @@

No tasks yet.

{:else}

- {tasks.length} task{tasks.length !== 1 ? "s" : ""} - ({doneCount} done, {inProgressCount} in progress) + {doneCount}/{tasks.length} done{#if inProgressCount > 0}, {inProgressCount} in progress{/if}

-