{"version":3,"sources":["../src/tools/multi-agent.ts"],"names":["tool","z"],"mappings":"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","file":"chunk-GVZN2EAH.cjs","sourcesContent":["/**\n * multi-agent — spawn, list, kill, invoke agents from within agent tool calls.\n *\n * Ported from cagataycali/agi-diy agi.html.\n *\n * The registry is set at app init by useAgents() via `setAgentRegistry()`.\n * Tools read/write through that registry.\n */\nimport { tool } from '@strands-agents/sdk'\nimport { z } from 'zod'\nimport type { UseAgentsReturn } from '../hooks/useAgents'\n\n/** Registry ref set by App.tsx after useAgents() mounts. */\nlet registry: UseAgentsReturn | null = null\n\nexport function setAgentRegistry(r: UseAgentsReturn | null): void {\n  registry = r\n}\n\nfunction ensureRegistry(): UseAgentsReturn {\n  if (!registry) throw new Error('Multi-agent registry not initialized yet')\n  return registry\n}\n\nfunction ok(data: Record<string, unknown>) {\n  return JSON.stringify({ status: 'success', ...data })\n}\nfunction fail(e: unknown) {\n  return JSON.stringify({ status: 'error', error: (e as Error).message || String(e) })\n}\n\nexport const spawnAgentTool = tool({\n  name: 'spawn_agent',\n  description:\n    'Create a new agent in this tab with its own provider/model/system prompt. Returns the new agent id. ' +\n    'By DEFAULT the new agent INHERITS the parent\\'s full tool set and live dynamic context (mesh peers, activity, time, etc.). ' +\n    'Restrict tools with `tool_filter: [\"tool_name\", ...]`. Use `prompt_mode: \"replace\"` to start from a blank base prompt.',\n  inputSchema: z.object({\n    id: z.string().describe('Unique agent id (e.g. researcher, coder, critic)'),\n    provider: z.enum(['anthropic', 'openai', 'google', 'bedrock']).optional().describe('Model provider (default: inherit parent)'),\n    model: z.string().optional().describe('Model id (default: inherit parent)'),\n    systemPrompt: z.string().describe('System prompt defining this agent\\'s role/behavior. In append mode (default) this is added to the careless base identity.'),\n    maxTokens: z.number().optional(),\n    tool_filter: z.array(z.string()).optional().describe(\n      'Optional list of tool NAMES to expose to this sub-agent. Omit to inherit ALL parent tools. ' +\n      'Example: [\"web_search\", \"fetch_url\", \"remember\"] for a focused researcher.'\n    ),\n    prompt_mode: z.enum(['append', 'replace']).optional().describe(\n      '\"append\" (default): sub-agent inherits careless base prompt + live dynamic context, ' +\n      'with your systemPrompt appended as \"## Sub-agent role\". ' +\n      '\"replace\": use systemPrompt verbatim with no base prompt (strict/minimal personas).'\n    ),\n  }),\n  callback: async (input) => {\n    try {\n      const r = ensureRegistry()\n      if (r.slots.has(input.id)) return fail(new Error(`agent '${input.id}' already exists`))\n      const slot = await r.spawn({\n        id: input.id,\n        provider: (input.provider as any) || 'bedrock',\n        model: input.model,\n        systemPrompt: input.systemPrompt,\n        maxTokens: input.maxTokens,\n        tool_filter: input.tool_filter,\n        prompt_mode: input.prompt_mode,\n      })\n      return ok({\n        id: slot.id,\n        provider: slot.provider,\n        color: slot.color,\n        total_agents: r.slots.size + 1,\n        inherited_tools: !slot.tool_filter ? 'all (inherited from parent)' : `${slot.tool_filter.length} filtered`,\n        prompt_mode: slot.prompt_mode,\n      })\n    } catch (e) { return fail(e) }\n  },\n})\n\nexport const killAgentTool = tool({\n  name: 'kill_agent',\n  description: 'Remove an agent and its message history. Cannot be undone.',\n  inputSchema: z.object({\n    id: z.string(),\n    confirm: z.boolean().describe('Must be true'),\n  }),\n  callback: async (input) => {\n    try {\n      if (!input.confirm) return fail(new Error('pass confirm=true to kill'))\n      const r = ensureRegistry()\n      if (!r.slots.has(input.id)) return fail(new Error(`agent '${input.id}' not found`))\n      await r.kill(input.id)\n      return ok({ killed: input.id, remaining: r.slots.size - 1 })\n    } catch (e) { return fail(e) }\n  },\n})\n\nexport const listAgentsTool = tool({\n  name: 'list_agents',\n  description: 'List all agents in this tab with their status, provider, and message counts.',\n  inputSchema: z.object({}),\n  callback: async () => {\n    try {\n      const r = ensureRegistry()\n      const agents = [...r.slots.values()].map(s => ({\n        id: s.id,\n        provider: s.provider,\n        model: s.model,\n        status: s.status,\n        color: s.color,\n        messages: s.messages.length,\n        is_active: s.id === r.activeId,\n      }))\n      return ok({ count: agents.length, active_id: r.activeId, agents })\n    } catch (e) { return fail(e) }\n  },\n})\n\nexport const invokeAgentTool = tool({\n  name: 'invoke_agent',\n  description: 'Send a message to another agent in this tab and await their response. Use list_agents first to see who\\'s available.',\n  inputSchema: z.object({\n    target_id: z.string().describe('Agent id to invoke'),\n    message: z.string().describe('Message to send'),\n  }),\n  callback: async (input) => {\n    try {\n      const r = ensureRegistry()\n      if (!r.slots.has(input.target_id)) return fail(new Error(`agent '${input.target_id}' not found`))\n      const response = await r.send(input.target_id, input.message)\n      return ok({\n        from: input.target_id,\n        response: response.slice(0, 4000),  // truncate very long responses\n        truncated: response.length > 4000,\n        length: response.length,\n      })\n    } catch (e) { return fail(e) }\n  },\n})\n\nexport const broadcastToAgentsTool = tool({\n  name: 'broadcast_to_agents',\n  description: 'Send a message to ALL other agents in this tab in parallel. Returns their responses keyed by id.',\n  inputSchema: z.object({\n    message: z.string(),\n    exclude_self: z.boolean().optional().describe('Exclude the sender from broadcast (default: true — but sender id not known from tool context, so all agents receive)'),\n  }),\n  callback: async (input) => {\n    try {\n      const r = ensureRegistry()\n      if (r.slots.size === 0) return fail(new Error('no agents to broadcast to'))\n      const results = await r.broadcast(input.message)\n      const responses: Record<string, { response?: string; error?: string }> = {}\n      for (const [id, value] of results) {\n        if (value instanceof Error) responses[id] = { error: value.message }\n        else responses[id] = { response: String(value).slice(0, 2000) }\n      }\n      return ok({ broadcast_to: results.size, responses })\n    } catch (e) { return fail(e) }\n  },\n})\n\nexport const updateAgentTool = tool({\n  name: 'update_agent',\n  description: 'Update an agent\\'s system prompt, provider, model, tool filter, or prompt mode at runtime. Runtime rebuilds on next invoke.',\n  inputSchema: z.object({\n    id: z.string(),\n    systemPrompt: z.string().optional(),\n    provider: z.enum(['anthropic', 'openai', 'google', 'bedrock']).optional(),\n    model: z.string().optional(),\n    maxTokens: z.number().optional(),\n    tool_filter: z.array(z.string()).optional().describe('Replace the sub-agent\\'s tool-name filter. Pass [] to disable tools; omit to leave unchanged.'),\n    prompt_mode: z.enum(['append', 'replace']).optional(),\n  }),\n  callback: async (input) => {\n    try {\n      const r = ensureRegistry()\n      if (!r.slots.has(input.id)) return fail(new Error(`agent '${input.id}' not found`))\n      const { id, ...patch } = input\n      await r.update(id, patch as any)\n      return ok({ updated: id, patch: Object.keys(patch) })\n    } catch (e) { return fail(e) }\n  },\n})\n\nexport const MULTI_AGENT_TOOLS = [\n  spawnAgentTool,\n  killAgentTool,\n  listAgentsTool,\n  invokeAgentTool,\n  broadcastToAgentsTool,\n  updateAgentTool,\n]\n"]}