From 48194753eee9c6cb8995cf52afcbd615cf115491 Mon Sep 17 00:00:00 2001 From: Adam Malczewski Date: Fri, 29 May 2026 15:38:35 +0900 Subject: feat: subagent summon — catalog filter, error hints, system prompt, AgentBuilder default, SubAgent mode display MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Filter summon tool catalog to is_subagent-flagged agents only - Return fresh subagent list in error when slug not found - Add subagent hint to system prompt when summon tool available - Default is_subagent checkbox to true in AgentBuilder - Fix tab-created event to include agentSlug and agentModels - Add SubAgent read-only mode to ModelSelector with model slider --- .../src/lib/components/ModelSelector.svelte | 67 +++++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) (limited to 'packages/frontend/src/lib/components/ModelSelector.svelte') diff --git a/packages/frontend/src/lib/components/ModelSelector.svelte b/packages/frontend/src/lib/components/ModelSelector.svelte index 235cf3b..a752f5d 100644 --- a/packages/frontend/src/lib/components/ModelSelector.svelte +++ b/packages/frontend/src/lib/components/ModelSelector.svelte @@ -36,6 +36,8 @@ const modelCache = new Map(); activeModelId = null, reasoningEffort = "max", activeAgentSlug = null, + activeTabParentId = null as string | null, + activeAgentModels = null as Array<{ key_id: string; model_id: string }> | null, workingDirectory = null, onKeyChange, onModelChange, @@ -48,6 +50,8 @@ const modelCache = new Map(); activeModelId?: string | null; reasoningEffort?: string; activeAgentSlug?: string | null; + activeTabParentId?: string | null; + activeAgentModels?: Array<{ key_id: string; model_id: string }> | null; workingDirectory?: string | null; onKeyChange: (keyId: string) => void; onModelChange: (keyId: string, modelId: string) => void; @@ -91,7 +95,11 @@ const modelCache = new Map(); }); let modeOverride = $state<"manual" | "agent" | null>(null); - let mode = $derived(modeOverride ?? (activeAgentSlug ? "agent" : "manual")); + let mode = $derived( + activeTabParentId && activeAgentSlug + ? "subagent" + : modeOverride ?? (activeAgentSlug ? "agent" : "manual"), + ); let agents = $state([]); let visibleAgents = $derived(agents.filter((a) => !a.is_subagent)); let loadingAgents = $state(false); @@ -202,6 +210,7 @@ const modelCache = new Map(); @@ -220,9 +229,16 @@ const modelCache = new Map(); if (cwdEl) cwdEl.value = agentToApply.cwd ?? ""; } }} + disabled={mode === 'subagent'} > Agent + {#if mode === "manual"} @@ -256,6 +272,55 @@ const modelCache = new Map(); {/if} + {:else if mode === "subagent"} + + {@const subModels = activeAgentModels ?? []} + {@const hasSubModels = subModels.length > 1} + {@const subActiveIdx = subModels.findIndex( + (m) => m.key_id === activeKeyId && m.model_id === activeModelId, + )} +
+
+ SubAgent + {activeAgentSlug} +
+
+ Key + {activeKeyId ?? "default"} +
+
+ Model + {activeModelId ?? "default"} +
+ {#if hasSubModels} + {@const displayIdx = subActiveIdx >= 0 ? subActiveIdx : 0} +
+
Model fallback chain
+ +
+ {#each subModels as _, i} + {i + 1} + {/each} +
+
+ {#each subModels as m, i} +
+ {i + 1}. {m.key_id} / {m.model_id} +
+ {/each} +
+
+ {/if} +

This tab was spawned by a parent agent. Settings cannot be changed.

+
{:else} {#if loadingAgents} -- cgit v1.2.3