@inkeep/agents-manage-ui 0.26.2 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/standalone/agents-manage-ui/.next/BUILD_ID +1 -1
- package/.next/standalone/agents-manage-ui/.next/app-build-manifest.json +154 -154
- package/.next/standalone/agents-manage-ui/.next/app-path-routes-manifest.json +5 -5
- package/.next/standalone/agents-manage-ui/.next/build-manifest.json +5 -5
- package/.next/standalone/agents-manage-ui/.next/prerender-manifest.json +15 -15
- package/.next/standalone/agents-manage-ui/.next/react-loadable-manifest.json +4 -4
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/[agentId]/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/[agentId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/[agentId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/new/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/new/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/api-keys/page.js +3 -3
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/api-keys/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/edit/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/edit/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/edit/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/new/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/new/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page.js +3 -3
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page.js +3 -3
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.rsc +8 -8
- package/.next/standalone/agents-manage-ui/.next/server/app/api/data-components/[dataComponentId]/generate-preview/route_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/route_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app-paths-manifest.json +5 -5
- package/.next/standalone/agents-manage-ui/.next/server/chunks/{4376.js → 1483.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/1566.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/{5013.js → 2160.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/3067.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/3468.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/4488.js +1 -196
- package/.next/standalone/agents-manage-ui/.next/server/chunks/4558.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/4608.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/chunks/4629.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/4775.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/{6757.js → 5392.js} +3 -3
- package/.next/standalone/agents-manage-ui/.next/server/chunks/5458.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/5732.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/5787.js +196 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/6737.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/7010.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/7916.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/8876.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/middleware-build-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/middleware-manifest.json +5 -5
- package/.next/standalone/agents-manage-ui/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/pages/404.html +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/pages/500.html +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/13328-4a1d4c948fa31107.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{31030-5934019cfc8cb254.js → 14187-cc3fd1c90d38ddef.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/16631-1b7fdb4431f30490.js +123 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{21078.054dafe1b55fb320.js → 21078.32b5d97ee64dda4b.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{6974-16087027359b6d00.js → 2416-cfff29b28c217ccf.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/25200-2b76cc18361fa58b.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{94167-e9e2c910cda50b04.js → 32072-8fc2be06163181ac.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{47065.0698d6a9ad9c4eca.js → 47065.2f3b7f0aaf81f83f.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/56167-267033876431fab5.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{63736-40bd21fac907cb54.js → 71546-840d5584b7894bd0.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{57196-1f7592bb989976d2.js → 77700-160a2e85ffa6dbc3.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{89814.bd648f5875e206d6.js → 89814.9992418c03ef6af2.js} +4 -4
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{9521.a325d7b909bdaf88.js → 9521.354c888ed22abb07.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/[agentId]/{page-349cc15b60e33d67.js → page-1231e77e66beb21b.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/new/{page-1ee3fe9fe777b85a.js → page-5672e24d1d31274b.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/page-3799960632279030.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/{page-0c8de55640a596d8.js → page-e81c4e25a6617c58.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page-40fcdfec6b0447d2.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/new/page-4f8e61428f394910.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/{page-a4975b62e8371f80.js → page-43dd4a3ae38c8eb1.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/{page-80a315c374bdfde2.js → page-c22b10f1cadf9d10.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/new/{page-e7ab8b5e8a7a7113.js → page-fa5a254c8a76eaa2.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/{page-8c8a8971a2436cff.js → page-6aaf894e2e480bb8.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-93c4cdb48ccffc01.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-1a56e7ec8b9b2289.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-4391c292624d801b.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/{page-9a7af8be7bd5aaa0.js → page-29b9c253151304c4.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/edit/page-b7010b52a1a58cb4.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/external-agents/new/{page-3278140eed942315.js → page-9d93fc373fba9f35.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/external-agents/page-b56c24923670119d.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page-6b298f2c1917edee.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page-0da1362bb966d879.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/new/{page-89ed0ab40a5bd2b4.js → page-aecbdd4d66a32efb.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/{page-8bc6f211cc366345.js → page-8f10eb8d6c489191.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/settings/{page-78ee214eed9eb4ef.js → page-b50af7f7fc063f80.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page-a8555bbb118f5e6e.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-4385ee094122399e.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/page-d1c4fe8a8b28a743.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/{layout-5f0cadd56b24dfab.js → layout-2c79d0ac495bebf8.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{d834c995-5d602f9f843afec0.js → d834c995-8cb74a5eed854312.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{webpack-0fe23a6f517676ef.js → webpack-1185dbe047280553.js} +1 -1
- package/.next/standalone/agents-manage-ui/package.json +1 -1
- package/.next/standalone/packages/agents-core/package.json +2 -1
- package/package.json +4 -4
- package/src/app/[tenantId]/projects/[projectId]/agents/[agentId]/page.tsx +1 -0
- package/src/app/[tenantId]/projects/[projectId]/agents/new/page.tsx +2 -3
- package/src/components/agent/agent.tsx +53 -1
- package/src/components/agent/configuration/edge-types.tsx +2 -0
- package/src/components/agent/configuration/node-types.tsx +34 -2
- package/src/components/agent/node-library/node-library.tsx +1 -0
- package/src/components/agent/nodes/placeholder-node.tsx +5 -2
- package/src/components/agent/nodes/team-agent-node.tsx +60 -0
- package/src/components/agent/sidepane/nodes/team-agent-node-editor.tsx +159 -0
- package/src/components/agent/sidepane/nodes/team-agent-selector/loading.tsx +26 -0
- package/src/components/agent/sidepane/nodes/team-agent-selector/team-agent-item.tsx +38 -0
- package/src/components/agent/sidepane/nodes/team-agent-selector/team-agent-selector.tsx +110 -0
- package/src/components/agent/sidepane/sidepane.tsx +23 -1
- package/src/features/agent/domain/deserialize.ts +55 -2
- package/src/features/agent/domain/serialize.ts +153 -13
- package/src/lib/actions/agent-full.ts +24 -0
- package/src/lib/api/agent-full-client.ts +18 -0
- package/src/lib/types/agent-full.ts +2 -0
- package/src/lib/types/team-agents.ts +5 -0
- package/src/lib/utils/team-agent-utils.ts +32 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/190.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/2107.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/2804.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/5600.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/6495.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/13328-41037a3262960f92.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/16631-4a330f0eb85bd16e.js +0 -123
- package/.next/standalone/agents-manage-ui/.next/static/chunks/25051-60133bfb6688ca68.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/3568-ccdec1b6e9a2217f.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/page-93a80dceb493af14.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page-fced6e7495cd5e63.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/new/page-80d7c90f118c90ea.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-b116c3e53afda314.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-c755c1479d27041f.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-0ee79a72954c4def.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/edit/page-f3069e141dc0cf37.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/external-agents/page-c7a8266b7316091f.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page-f15c5bff0f71f796.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page-1275a6cf1a6b8891.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page-2b07e2fff50589f3.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-0c509f0a4b20f8d2.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/page-28fc047c1f42a3a1.js +0 -1
- /package/.next/standalone/agents-manage-ui/.next/static/{s5gi5htEgmtgz62EelVZG → Bj-8vYnHAeOR5g8hC8_xi}/_buildManifest.js +0 -0
- /package/.next/standalone/agents-manage-ui/.next/static/{s5gi5htEgmtgz62EelVZG → Bj-8vYnHAeOR5g8hC8_xi}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Skeleton } from '@/components/ui/skeleton';
|
|
2
|
+
|
|
3
|
+
interface TeamAgentSelectorLoadingProps {
|
|
4
|
+
title: string;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export function TeamAgentSelectorLoading({ title }: TeamAgentSelectorLoadingProps) {
|
|
8
|
+
return (
|
|
9
|
+
<div className="space-y-2">
|
|
10
|
+
<h3 className="text-sm font-medium mb-2">{title}</h3>
|
|
11
|
+
<div className="flex flex-col gap-2">
|
|
12
|
+
{[...Array(3)].map((_, index) => (
|
|
13
|
+
<div key={index} className="w-full p-3 rounded-lg border border-border">
|
|
14
|
+
<div className="flex items-start gap-3">
|
|
15
|
+
<Skeleton className="size-8 rounded flex-shrink-0" />
|
|
16
|
+
<div className="flex-1 min-w-0 space-y-2">
|
|
17
|
+
<Skeleton className="h-4 w-3/4" />
|
|
18
|
+
<Skeleton className="h-3 w-1/2" />
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
))}
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
);
|
|
26
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Users } from 'lucide-react';
|
|
2
|
+
import { Button } from '@/components/ui/button';
|
|
3
|
+
import type { Agent } from '@/lib/types/agent-full';
|
|
4
|
+
|
|
5
|
+
interface TeamAgentItemProps {
|
|
6
|
+
agent: Agent;
|
|
7
|
+
onClick: (agent: Agent) => void;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function TeamAgentItem({ agent, onClick }: TeamAgentItemProps) {
|
|
11
|
+
const { id, name, description } = agent;
|
|
12
|
+
|
|
13
|
+
return (
|
|
14
|
+
<Button
|
|
15
|
+
variant="unstyled"
|
|
16
|
+
size="unstyled"
|
|
17
|
+
type="button"
|
|
18
|
+
key={id}
|
|
19
|
+
className="w-full p-3 rounded-lg border cursor-pointer transition-colors border-border hover:bg-muted/50 text-left inline-block"
|
|
20
|
+
id={id}
|
|
21
|
+
onClick={() => onClick(agent)}
|
|
22
|
+
>
|
|
23
|
+
<div className="flex items-start gap-3">
|
|
24
|
+
<div className="flex-shrink-0 mt-0.5 size-8 rounded bg-muted flex items-center justify-center">
|
|
25
|
+
<Users className="size-4 text-muted-foreground" />
|
|
26
|
+
</div>
|
|
27
|
+
<div className="flex-1 min-w-0">
|
|
28
|
+
<div className="flex items-center justify-between mb-1 gap-2 min-w-0 truncate">
|
|
29
|
+
<span className="font-medium text-sm truncate">{name}</span>
|
|
30
|
+
</div>
|
|
31
|
+
{description && (
|
|
32
|
+
<p className="text-xs text-muted-foreground truncate mb-1">{description}</p>
|
|
33
|
+
)}
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
36
|
+
</Button>
|
|
37
|
+
);
|
|
38
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { type Node, useReactFlow } from '@xyflow/react';
|
|
2
|
+
import { useParams } from 'next/navigation';
|
|
3
|
+
import { useEffect, useState } from 'react';
|
|
4
|
+
import { toast } from 'sonner';
|
|
5
|
+
import { fetchAgents } from '@/lib/api/agent-full-client';
|
|
6
|
+
import type { Agent } from '@/lib/types/agent-full';
|
|
7
|
+
import { NodeType } from '../../../configuration/node-types';
|
|
8
|
+
import { EmptyState } from '../empty-state';
|
|
9
|
+
import { TeamAgentSelectorLoading } from './loading';
|
|
10
|
+
import { TeamAgentItem } from './team-agent-item';
|
|
11
|
+
|
|
12
|
+
interface TeamAgentSelectorState {
|
|
13
|
+
agents: Agent[];
|
|
14
|
+
isLoading: boolean;
|
|
15
|
+
error: string | null;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const useFetchAvailableAgents = (): TeamAgentSelectorState => {
|
|
19
|
+
const [agents, setAgents] = useState<Agent[]>([]);
|
|
20
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
21
|
+
const [error, setError] = useState<string | null>(null);
|
|
22
|
+
const { tenantId, projectId, agentId } = useParams<{
|
|
23
|
+
tenantId: string;
|
|
24
|
+
projectId: string;
|
|
25
|
+
agentId: string;
|
|
26
|
+
}>();
|
|
27
|
+
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
const loadAgents = async () => {
|
|
30
|
+
try {
|
|
31
|
+
setIsLoading(true);
|
|
32
|
+
setError(null);
|
|
33
|
+
const response = await fetchAgents(tenantId, projectId);
|
|
34
|
+
// Filter out the current agent to prevent self-selection
|
|
35
|
+
const filteredAgents = agentId
|
|
36
|
+
? response.data.filter((agent) => agent.id !== agentId)
|
|
37
|
+
: response.data;
|
|
38
|
+
setAgents(filteredAgents);
|
|
39
|
+
} catch (err) {
|
|
40
|
+
const errorMessage = err instanceof Error ? err.message : 'Failed to load agents';
|
|
41
|
+
setError(errorMessage);
|
|
42
|
+
toast.error(errorMessage);
|
|
43
|
+
} finally {
|
|
44
|
+
setIsLoading(false);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
loadAgents();
|
|
49
|
+
}, [tenantId, projectId, agentId]);
|
|
50
|
+
|
|
51
|
+
return { agents, isLoading, error };
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
export function TeamAgentSelector({ selectedNode }: { selectedNode: Node }) {
|
|
55
|
+
const { updateNode } = useReactFlow();
|
|
56
|
+
const { tenantId, projectId } = useParams<{
|
|
57
|
+
tenantId: string;
|
|
58
|
+
projectId: string;
|
|
59
|
+
}>();
|
|
60
|
+
const { agents, isLoading, error } = useFetchAvailableAgents();
|
|
61
|
+
|
|
62
|
+
const handleSelect = (agent: Agent) => {
|
|
63
|
+
updateNode(selectedNode.id, {
|
|
64
|
+
type: NodeType.TeamAgent,
|
|
65
|
+
data: {
|
|
66
|
+
id: agent.id,
|
|
67
|
+
name: agent.name,
|
|
68
|
+
description: agent.description,
|
|
69
|
+
relationshipId: null, // Will be set after saving to database
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
if (isLoading) {
|
|
75
|
+
return <TeamAgentSelectorLoading title="Select team agent" />;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if (error) {
|
|
79
|
+
return (
|
|
80
|
+
<EmptyState
|
|
81
|
+
message="Something went wrong."
|
|
82
|
+
actionText="Create agent"
|
|
83
|
+
actionHref={`/${tenantId}/projects/${projectId}/agents/new`}
|
|
84
|
+
/>
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if (!agents?.length) {
|
|
89
|
+
return (
|
|
90
|
+
<EmptyState
|
|
91
|
+
message="No agents found."
|
|
92
|
+
actionText="Create agent"
|
|
93
|
+
actionHref={`/${tenantId}/projects/${projectId}/agents/new`}
|
|
94
|
+
/>
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return (
|
|
99
|
+
<div>
|
|
100
|
+
<div className="space-y-2">
|
|
101
|
+
<h3 className="text-sm font-medium mb-2">Select team agent</h3>
|
|
102
|
+
<div className="flex flex-col gap-2 min-w-0 min-h-0">
|
|
103
|
+
{agents.map((agent: Agent) => (
|
|
104
|
+
<TeamAgentItem key={agent.id} agent={agent} onClick={handleSelect} />
|
|
105
|
+
))}
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
108
|
+
</div>
|
|
109
|
+
);
|
|
110
|
+
}
|
|
@@ -7,7 +7,11 @@ import type { ArtifactComponent } from '@/lib/api/artifact-components';
|
|
|
7
7
|
import type { Credential } from '@/lib/api/credentials';
|
|
8
8
|
import type { DataComponent } from '@/lib/api/data-components';
|
|
9
9
|
import { SidePane as SidePaneLayout } from '../../layout/sidepane';
|
|
10
|
-
import type {
|
|
10
|
+
import type {
|
|
11
|
+
AgentToolConfigLookup,
|
|
12
|
+
SubAgentExternalAgentConfigLookup,
|
|
13
|
+
SubAgentTeamAgentConfigLookup,
|
|
14
|
+
} from '../agent';
|
|
11
15
|
import { edgeTypeMap } from '../configuration/edge-types';
|
|
12
16
|
import {
|
|
13
17
|
type AgentNodeData,
|
|
@@ -16,6 +20,7 @@ import {
|
|
|
16
20
|
type MCPNodeData,
|
|
17
21
|
NodeType,
|
|
18
22
|
nodeTypeMap,
|
|
23
|
+
type TeamAgentNodeData,
|
|
19
24
|
} from '../configuration/node-types';
|
|
20
25
|
import EdgeEditor from './edges/edge-editor';
|
|
21
26
|
import { EditorLoadingSkeleton } from './editor-loading-skeleton';
|
|
@@ -27,6 +32,8 @@ import { FunctionToolNodeEditor } from './nodes/function-tool-node-editor';
|
|
|
27
32
|
import { MCPServerNodeEditor } from './nodes/mcp-node-editor';
|
|
28
33
|
import { MCPSelector } from './nodes/mcp-selector/mcp-selector';
|
|
29
34
|
import { SubAgentNodeEditor } from './nodes/sub-agent-node-editor';
|
|
35
|
+
import { TeamAgentNodeEditor } from './nodes/team-agent-node-editor';
|
|
36
|
+
import { TeamAgentSelector } from './nodes/team-agent-selector/team-agent-selector';
|
|
30
37
|
|
|
31
38
|
interface SidePaneProps {
|
|
32
39
|
selectedNodeId: string | null;
|
|
@@ -38,6 +45,7 @@ interface SidePaneProps {
|
|
|
38
45
|
artifactComponentLookup: Record<string, ArtifactComponent>;
|
|
39
46
|
agentToolConfigLookup: AgentToolConfigLookup;
|
|
40
47
|
subAgentExternalAgentConfigLookup: SubAgentExternalAgentConfigLookup;
|
|
48
|
+
subAgentTeamAgentConfigLookup: SubAgentTeamAgentConfigLookup;
|
|
41
49
|
credentialLookup: Record<string, Credential>;
|
|
42
50
|
}
|
|
43
51
|
|
|
@@ -51,6 +59,7 @@ export function SidePane({
|
|
|
51
59
|
artifactComponentLookup,
|
|
52
60
|
agentToolConfigLookup,
|
|
53
61
|
subAgentExternalAgentConfigLookup,
|
|
62
|
+
subAgentTeamAgentConfigLookup,
|
|
54
63
|
credentialLookup,
|
|
55
64
|
}: SidePaneProps) {
|
|
56
65
|
const selectedNode = useNodesData(selectedNodeId || '');
|
|
@@ -125,6 +134,18 @@ export function SidePane({
|
|
|
125
134
|
case NodeType.ExternalAgentPlaceholder: {
|
|
126
135
|
return <ExternalAgentSelector selectedNode={selectedNode as Node} />;
|
|
127
136
|
}
|
|
137
|
+
case NodeType.TeamAgent: {
|
|
138
|
+
return (
|
|
139
|
+
<TeamAgentNodeEditor
|
|
140
|
+
selectedNode={selectedNode as Node<TeamAgentNodeData>}
|
|
141
|
+
subAgentTeamAgentConfigLookup={subAgentTeamAgentConfigLookup}
|
|
142
|
+
errorHelpers={errorHelpers}
|
|
143
|
+
/>
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
case NodeType.TeamAgentPlaceholder: {
|
|
147
|
+
return <TeamAgentSelector selectedNode={selectedNode as Node} />;
|
|
148
|
+
}
|
|
128
149
|
case NodeType.MCPPlaceholder: {
|
|
129
150
|
return <MCPSelector selectedNode={selectedNode as Node} />;
|
|
130
151
|
}
|
|
@@ -162,6 +183,7 @@ export function SidePane({
|
|
|
162
183
|
agentToolConfigLookup,
|
|
163
184
|
credentialLookup,
|
|
164
185
|
subAgentExternalAgentConfigLookup,
|
|
186
|
+
subAgentTeamAgentConfigLookup,
|
|
165
187
|
]);
|
|
166
188
|
|
|
167
189
|
const showBackButton = useMemo(() => {
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { generateId } from '@/lib/utils/id-utils';
|
|
2
1
|
import type { Edge, Node } from '@xyflow/react';
|
|
3
2
|
import * as dagre from 'dagre';
|
|
4
3
|
import { EdgeType } from '@/components/agent/configuration/edge-types';
|
|
@@ -9,9 +8,11 @@ import {
|
|
|
9
8
|
functionToolNodeHandleId,
|
|
10
9
|
mcpNodeHandleId,
|
|
11
10
|
NodeType,
|
|
11
|
+
teamAgentNodeTargetHandleId,
|
|
12
12
|
} from '@/components/agent/configuration/node-types';
|
|
13
13
|
import type { FullAgentDefinition } from '@/lib/types/agent-full';
|
|
14
14
|
import { formatJsonField } from '@/lib/utils';
|
|
15
|
+
import { generateId } from '@/lib/utils/id-utils';
|
|
15
16
|
|
|
16
17
|
interface TransformResult {
|
|
17
18
|
nodes: Node[];
|
|
@@ -101,6 +102,7 @@ export function deserializeAgentData(data: FullAgentDefinition): TransformResult
|
|
|
101
102
|
const nodes: Node[] = [];
|
|
102
103
|
const edges: Edge[] = [];
|
|
103
104
|
const createdExternalAgentNodes = new Set<string>();
|
|
105
|
+
const createdTeamAgentNodes = new Set<string>();
|
|
104
106
|
|
|
105
107
|
const subAgentIds: string[] = Object.keys(data.subAgents);
|
|
106
108
|
for (const subAgentId of subAgentIds) {
|
|
@@ -319,12 +321,14 @@ export function deserializeAgentData(data: FullAgentDefinition): TransformResult
|
|
|
319
321
|
for (const targetSubAgent of sourceAgent.canDelegateTo) {
|
|
320
322
|
let targetSubAgentId: string;
|
|
321
323
|
let isTargetExternal: boolean;
|
|
324
|
+
let isTargetTeamAgent: boolean;
|
|
322
325
|
let headers: Record<string, string> | undefined;
|
|
323
326
|
let relationshipId: string | undefined;
|
|
324
327
|
|
|
325
328
|
if (typeof targetSubAgent === 'object' && 'externalAgentId' in targetSubAgent) {
|
|
326
329
|
targetSubAgentId = targetSubAgent.externalAgentId;
|
|
327
330
|
isTargetExternal = true;
|
|
331
|
+
isTargetTeamAgent = false;
|
|
328
332
|
headers = targetSubAgent.headers ?? undefined;
|
|
329
333
|
relationshipId = targetSubAgent.subAgentExternalAgentRelationId;
|
|
330
334
|
|
|
@@ -370,12 +374,61 @@ export function deserializeAgentData(data: FullAgentDefinition): TransformResult
|
|
|
370
374
|
},
|
|
371
375
|
};
|
|
372
376
|
edges.push(edge);
|
|
377
|
+
} else if (typeof targetSubAgent === 'object' && 'agentId' in targetSubAgent) {
|
|
378
|
+
// Handle team agent delegation
|
|
379
|
+
targetSubAgentId = targetSubAgent.agentId;
|
|
380
|
+
isTargetExternal = false;
|
|
381
|
+
isTargetTeamAgent = true;
|
|
382
|
+
headers = targetSubAgent.headers ?? undefined;
|
|
383
|
+
relationshipId = targetSubAgent.subAgentTeamAgentRelationId;
|
|
384
|
+
|
|
385
|
+
// Create team agent node if it doesn't exist
|
|
386
|
+
if (!createdTeamAgentNodes.has(targetSubAgentId)) {
|
|
387
|
+
const teamAgent = data.teamAgents?.[targetSubAgentId];
|
|
388
|
+
if (teamAgent) {
|
|
389
|
+
const teamAgentNode: Node = {
|
|
390
|
+
id: targetSubAgentId,
|
|
391
|
+
type: NodeType.TeamAgent,
|
|
392
|
+
position: { x: 0, y: 0 },
|
|
393
|
+
data: {
|
|
394
|
+
id: targetSubAgentId,
|
|
395
|
+
name: teamAgent.name,
|
|
396
|
+
description: teamAgent.description,
|
|
397
|
+
relationshipId,
|
|
398
|
+
tempHeaders: headers,
|
|
399
|
+
},
|
|
400
|
+
};
|
|
401
|
+
nodes.push(teamAgentNode);
|
|
402
|
+
createdTeamAgentNodes.add(targetSubAgentId);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
// Create edge from source agent to team agent
|
|
407
|
+
const edge: Edge = {
|
|
408
|
+
id: `edge-${sourceSubAgentId}-${targetSubAgentId}`,
|
|
409
|
+
type: EdgeType.A2ATeam, // Use same edge type as external agents
|
|
410
|
+
source: sourceSubAgentId,
|
|
411
|
+
sourceHandle: agentNodeSourceHandleId,
|
|
412
|
+
target: targetSubAgentId,
|
|
413
|
+
targetHandle: teamAgentNodeTargetHandleId,
|
|
414
|
+
selected: false,
|
|
415
|
+
data: {
|
|
416
|
+
relationships: {
|
|
417
|
+
transferTargetToSource: false,
|
|
418
|
+
transferSourceToTarget: false,
|
|
419
|
+
delegateTargetToSource: false,
|
|
420
|
+
delegateSourceToTarget: true,
|
|
421
|
+
},
|
|
422
|
+
},
|
|
423
|
+
};
|
|
424
|
+
edges.push(edge);
|
|
373
425
|
} else {
|
|
374
426
|
targetSubAgentId = targetSubAgent;
|
|
375
427
|
isTargetExternal = false;
|
|
428
|
+
isTargetTeamAgent = false;
|
|
376
429
|
}
|
|
377
430
|
|
|
378
|
-
if (!isTargetExternal && data.subAgents[targetSubAgentId]) {
|
|
431
|
+
if (!isTargetExternal && !isTargetTeamAgent && data.subAgents[targetSubAgentId]) {
|
|
379
432
|
// Special handling for self-referencing edges
|
|
380
433
|
const isSelfReference = sourceSubAgentId === targetSubAgentId;
|
|
381
434
|
const pairKey = isSelfReference
|
|
@@ -2,6 +2,7 @@ import type { Edge, Node } from '@xyflow/react';
|
|
|
2
2
|
import type {
|
|
3
3
|
AgentToolConfigLookup,
|
|
4
4
|
SubAgentExternalAgentConfigLookup,
|
|
5
|
+
SubAgentTeamAgentConfigLookup,
|
|
5
6
|
} from '@/components/agent/agent';
|
|
6
7
|
import type { AgentMetadata } from '@/components/agent/configuration/agent-types';
|
|
7
8
|
import type { A2AEdgeData } from '@/components/agent/configuration/edge-types';
|
|
@@ -11,6 +12,7 @@ import type { ArtifactComponent } from '@/lib/api/artifact-components';
|
|
|
11
12
|
import type { DataComponent } from '@/lib/api/data-components';
|
|
12
13
|
import type { FullAgentDefinition, InternalAgentDefinition } from '@/lib/types/agent-full';
|
|
13
14
|
import type { ExternalAgent } from '@/lib/types/external-agents';
|
|
15
|
+
import type { TeamAgent } from '@/lib/types/team-agents';
|
|
14
16
|
import { generateId } from '@/lib/utils/id-utils';
|
|
15
17
|
|
|
16
18
|
export type ExtendedAgent = InternalAgentDefinition & {
|
|
@@ -76,10 +78,12 @@ export function serializeAgentData(
|
|
|
76
78
|
dataComponentLookup?: Record<string, DataComponent>,
|
|
77
79
|
artifactComponentLookup?: Record<string, ArtifactComponent>,
|
|
78
80
|
agentToolConfigLookup?: AgentToolConfigLookup,
|
|
79
|
-
subAgentExternalAgentConfigLookup?: SubAgentExternalAgentConfigLookup
|
|
81
|
+
subAgentExternalAgentConfigLookup?: SubAgentExternalAgentConfigLookup,
|
|
82
|
+
subAgentTeamAgentConfigLookup?: SubAgentTeamAgentConfigLookup
|
|
80
83
|
): FullAgentDefinition {
|
|
81
84
|
const subAgents: Record<string, ExtendedAgent> = {};
|
|
82
85
|
const externalAgents: Record<string, ExternalAgent> = {};
|
|
86
|
+
const teamAgents: Record<string, TeamAgent> = {};
|
|
83
87
|
const functionTools: Record<string, any> = {};
|
|
84
88
|
const functions: Record<string, any> = {};
|
|
85
89
|
// Note: Tools are now project-scoped and not included in agent serialization
|
|
@@ -268,14 +272,61 @@ export function serializeAgentData(
|
|
|
268
272
|
};
|
|
269
273
|
|
|
270
274
|
externalAgents[externalAgentId] = externalAgent;
|
|
275
|
+
} else if (node.type === NodeType.TeamAgent) {
|
|
276
|
+
const teamAgentId = (node.data.id as string) || node.id;
|
|
277
|
+
const teamAgent: TeamAgent & {
|
|
278
|
+
relationshipId: string | null;
|
|
279
|
+
tempHeaders: Record<string, string> | null;
|
|
280
|
+
} = {
|
|
281
|
+
id: teamAgentId,
|
|
282
|
+
name: node.data.name as string,
|
|
283
|
+
description: (node.data.description as string) || '',
|
|
284
|
+
tempHeaders: (node.data as any).tempHeaders || null,
|
|
285
|
+
relationshipId: (node.data.relationshipId as string) || null,
|
|
286
|
+
};
|
|
287
|
+
teamAgents[teamAgentId] = teamAgent;
|
|
271
288
|
}
|
|
272
289
|
// External agent nodes are skipped - they are project-scoped resources
|
|
273
290
|
}
|
|
274
291
|
|
|
292
|
+
const subAgentExternalDelegateMap: Record<string, Record<string, any>> = {}; // subAgentId -> relationshipId -> relationship data
|
|
293
|
+
const newSubAgentExternalDelegateMap: Record<string, any> = {}; // subAgentId -> relationship data
|
|
294
|
+
const subAgentTeamDelegateMap: Record<string, Record<string, any>> = {}; // subAgentId -> relationshipId -> relationship data
|
|
295
|
+
const newSubAgentTeamDelegateMap: Record<string, any> = {}; // subAgentId -> relationship data
|
|
296
|
+
|
|
297
|
+
// Populate delegate maps from existing agent data to avoid linear searches
|
|
298
|
+
Object.entries(subAgents).forEach(([subAgentId, agent]) => {
|
|
299
|
+
if (agent.canDelegateTo) {
|
|
300
|
+
agent.canDelegateTo.forEach((delegate) => {
|
|
301
|
+
if (typeof delegate === 'object') {
|
|
302
|
+
if ('externalAgentId' in delegate) {
|
|
303
|
+
// External agent delegation
|
|
304
|
+
if (!subAgentExternalDelegateMap[subAgentId]) {
|
|
305
|
+
subAgentExternalDelegateMap[subAgentId] = {};
|
|
306
|
+
}
|
|
307
|
+
if (delegate.subAgentExternalAgentRelationId) {
|
|
308
|
+
subAgentExternalDelegateMap[subAgentId][delegate.subAgentExternalAgentRelationId] =
|
|
309
|
+
delegate;
|
|
310
|
+
}
|
|
311
|
+
} else if ('agentId' in delegate) {
|
|
312
|
+
// Team agent delegation
|
|
313
|
+
if (!subAgentTeamDelegateMap[subAgentId]) {
|
|
314
|
+
subAgentTeamDelegateMap[subAgentId] = {};
|
|
315
|
+
}
|
|
316
|
+
if (delegate.subAgentTeamAgentRelationId) {
|
|
317
|
+
subAgentTeamDelegateMap[subAgentId][delegate.subAgentTeamAgentRelationId] = delegate;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
});
|
|
324
|
+
|
|
275
325
|
for (const edge of edges) {
|
|
276
326
|
if (
|
|
277
327
|
edge.type === EdgeType.A2A ||
|
|
278
328
|
edge.type === EdgeType.A2AExternal ||
|
|
329
|
+
edge.type === EdgeType.A2ATeam ||
|
|
279
330
|
edge.type === EdgeType.SelfLoop
|
|
280
331
|
) {
|
|
281
332
|
const sourceAgentNode = nodes.find((node) => node.id === edge.source);
|
|
@@ -287,7 +338,9 @@ export function serializeAgentData(
|
|
|
287
338
|
|
|
288
339
|
const targetAgent: ExtendedAgent | undefined = subAgents[targetSubAgentId];
|
|
289
340
|
const targetExternalAgent: ExternalAgent | undefined = externalAgents[targetSubAgentId];
|
|
341
|
+
const targetTeamAgent: TeamAgent | undefined = teamAgents[targetSubAgentId];
|
|
290
342
|
const isTargetExternal = targetExternalAgent !== undefined;
|
|
343
|
+
const isTargetTeamAgent = targetTeamAgent !== undefined;
|
|
291
344
|
|
|
292
345
|
if (!sourceAgent || !(edge.data as any)?.relationships) {
|
|
293
346
|
continue;
|
|
@@ -301,6 +354,7 @@ export function serializeAgentData(
|
|
|
301
354
|
relationshipType: 'canTransferTo' | 'canDelegateTo',
|
|
302
355
|
targetId: string,
|
|
303
356
|
isExternal: boolean = false,
|
|
357
|
+
isTeamAgent: boolean = false,
|
|
304
358
|
headers?: Record<string, string>,
|
|
305
359
|
relationshipId?: string
|
|
306
360
|
) => {
|
|
@@ -311,13 +365,6 @@ export function serializeAgentData(
|
|
|
311
365
|
|
|
312
366
|
// External agents always use object format
|
|
313
367
|
if (isExternal) {
|
|
314
|
-
const existingIndex = agent.canDelegateTo.findIndex(
|
|
315
|
-
(item) =>
|
|
316
|
-
typeof item === 'object' &&
|
|
317
|
-
item.externalAgentId === targetId &&
|
|
318
|
-
item.subAgentExternalAgentRelationId === relationshipId
|
|
319
|
-
);
|
|
320
|
-
|
|
321
368
|
const relationshipData: any = {
|
|
322
369
|
externalAgentId: targetId,
|
|
323
370
|
headers: headers ?? null,
|
|
@@ -328,12 +375,41 @@ export function serializeAgentData(
|
|
|
328
375
|
relationshipData.subAgentExternalAgentRelationId = relationshipId;
|
|
329
376
|
}
|
|
330
377
|
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
agent.
|
|
378
|
+
// Store relationship in map - we'll rebuild canDelegateTo arrays at the end
|
|
379
|
+
if (relationshipId) {
|
|
380
|
+
if (!subAgentExternalDelegateMap[agent.id]) {
|
|
381
|
+
subAgentExternalDelegateMap[agent.id] = {};
|
|
382
|
+
}
|
|
383
|
+
subAgentExternalDelegateMap[agent.id][relationshipId] = relationshipData;
|
|
334
384
|
} else {
|
|
335
|
-
|
|
336
|
-
|
|
385
|
+
if (!newSubAgentExternalDelegateMap[agent.id]) {
|
|
386
|
+
newSubAgentExternalDelegateMap[agent.id] = {};
|
|
387
|
+
}
|
|
388
|
+
newSubAgentExternalDelegateMap[agent.id] = relationshipData;
|
|
389
|
+
}
|
|
390
|
+
} else if (isTeamAgent) {
|
|
391
|
+
// Team agents use object format with agentId
|
|
392
|
+
const relationshipData: any = {
|
|
393
|
+
agentId: targetId,
|
|
394
|
+
headers: headers ?? null,
|
|
395
|
+
};
|
|
396
|
+
|
|
397
|
+
// Only include relationshipId if it's not null (schema expects optional, not nullable)
|
|
398
|
+
if (relationshipId) {
|
|
399
|
+
relationshipData.subAgentTeamAgentRelationId = relationshipId;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
// Store relationship in map - we'll rebuild canDelegateTo arrays at the end
|
|
403
|
+
if (relationshipId) {
|
|
404
|
+
if (!subAgentTeamDelegateMap[agent.id]) {
|
|
405
|
+
subAgentTeamDelegateMap[agent.id] = {};
|
|
406
|
+
}
|
|
407
|
+
subAgentTeamDelegateMap[agent.id][relationshipId] = relationshipData;
|
|
408
|
+
} else {
|
|
409
|
+
if (!newSubAgentTeamDelegateMap[agent.id]) {
|
|
410
|
+
newSubAgentTeamDelegateMap[agent.id] = {};
|
|
411
|
+
}
|
|
412
|
+
newSubAgentTeamDelegateMap[agent.id] = relationshipData;
|
|
337
413
|
}
|
|
338
414
|
} else {
|
|
339
415
|
// Internal agents use string format
|
|
@@ -378,6 +454,7 @@ export function serializeAgentData(
|
|
|
378
454
|
'canDelegateTo',
|
|
379
455
|
targetSubAgentId,
|
|
380
456
|
true, // isExternal
|
|
457
|
+
false, // isTeamAgent
|
|
381
458
|
externalAgentHeaders,
|
|
382
459
|
relationshipId
|
|
383
460
|
);
|
|
@@ -385,6 +462,43 @@ export function serializeAgentData(
|
|
|
385
462
|
continue;
|
|
386
463
|
}
|
|
387
464
|
|
|
465
|
+
// Handle edges to team agents (only delegation is allowed)
|
|
466
|
+
if (isTargetTeamAgent) {
|
|
467
|
+
if (relationships.delegateSourceToTarget) {
|
|
468
|
+
const tempHeaders = (targetAgentNode as any).data?.tempHeaders;
|
|
469
|
+
let teamAgentHeaders: Record<string, string> | undefined;
|
|
470
|
+
const relationshipId = (targetAgentNode as any).data?.relationshipId;
|
|
471
|
+
|
|
472
|
+
if (tempHeaders !== undefined) {
|
|
473
|
+
if (
|
|
474
|
+
typeof tempHeaders === 'object' &&
|
|
475
|
+
tempHeaders !== null &&
|
|
476
|
+
!Array.isArray(tempHeaders)
|
|
477
|
+
) {
|
|
478
|
+
teamAgentHeaders = tempHeaders;
|
|
479
|
+
}
|
|
480
|
+
} else {
|
|
481
|
+
const existingConfig = relationshipId
|
|
482
|
+
? subAgentTeamAgentConfigLookup?.[sourceSubAgentId]?.[relationshipId]
|
|
483
|
+
: null;
|
|
484
|
+
if (existingConfig?.headers) {
|
|
485
|
+
teamAgentHeaders = existingConfig.headers;
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
addRelationship(
|
|
490
|
+
sourceAgent,
|
|
491
|
+
'canDelegateTo',
|
|
492
|
+
targetSubAgentId,
|
|
493
|
+
false, // isExternal
|
|
494
|
+
true, // isTeamAgent
|
|
495
|
+
teamAgentHeaders,
|
|
496
|
+
relationshipId
|
|
497
|
+
);
|
|
498
|
+
}
|
|
499
|
+
continue;
|
|
500
|
+
}
|
|
501
|
+
|
|
388
502
|
// Handle edges between internal agents
|
|
389
503
|
if (targetAgent) {
|
|
390
504
|
// Process transfer relationships
|
|
@@ -505,6 +619,32 @@ export function serializeAgentData(
|
|
|
505
619
|
};
|
|
506
620
|
}
|
|
507
621
|
|
|
622
|
+
// Rebuild canDelegateTo arrays from delegate maps to ensure consistency
|
|
623
|
+
Object.entries(subAgents).forEach(([subAgentId, agent]) => {
|
|
624
|
+
if (agent.canDelegateTo) {
|
|
625
|
+
// Start with internal agent delegations (string format)
|
|
626
|
+
const internalDelegations = agent.canDelegateTo.filter(
|
|
627
|
+
(delegate) => typeof delegate === 'string'
|
|
628
|
+
);
|
|
629
|
+
|
|
630
|
+
// Add external agent delegations from map
|
|
631
|
+
const externalDelegations = Object.values(subAgentExternalDelegateMap[subAgentId] || {});
|
|
632
|
+
|
|
633
|
+
// Add team agent delegations from map
|
|
634
|
+
const teamDelegations = Object.values(subAgentTeamDelegateMap[subAgentId] || {});
|
|
635
|
+
|
|
636
|
+
// Rebuild the array with all delegations
|
|
637
|
+
agent.canDelegateTo = [...internalDelegations, ...externalDelegations, ...teamDelegations];
|
|
638
|
+
|
|
639
|
+
if (newSubAgentExternalDelegateMap[subAgentId]) {
|
|
640
|
+
agent.canDelegateTo.push(newSubAgentExternalDelegateMap[subAgentId]);
|
|
641
|
+
}
|
|
642
|
+
if (newSubAgentTeamDelegateMap[subAgentId]) {
|
|
643
|
+
agent.canDelegateTo.push(newSubAgentTeamDelegateMap[subAgentId]);
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
});
|
|
647
|
+
|
|
508
648
|
return result;
|
|
509
649
|
}
|
|
510
650
|
|
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
createFullAgent as apiCreateFullAgent,
|
|
14
14
|
deleteFullAgent as apiDeleteFullAgent,
|
|
15
15
|
fetchAgents as apiFetchAgents,
|
|
16
|
+
fetchTeamAgents as apiFetchTeamAgents,
|
|
16
17
|
getFullAgent as apiGetFullAgent,
|
|
17
18
|
updateFullAgent as apiUpdateFullAgent,
|
|
18
19
|
} from '../api/agent-full-client';
|
|
@@ -21,6 +22,7 @@ import {
|
|
|
21
22
|
type FullAgentDefinition,
|
|
22
23
|
FullAgentDefinitionSchema,
|
|
23
24
|
} from '../types/agent-full';
|
|
25
|
+
import type { TeamAgent } from '../types/team-agents';
|
|
24
26
|
|
|
25
27
|
/**
|
|
26
28
|
* Result type for server actions - follows a consistent pattern
|
|
@@ -55,6 +57,28 @@ export async function getAllAgentsAction(
|
|
|
55
57
|
}
|
|
56
58
|
}
|
|
57
59
|
|
|
60
|
+
/**
|
|
61
|
+
* Fetch barebones metadata for all agents in a project to be used with team agent relations
|
|
62
|
+
*/
|
|
63
|
+
export async function fetchTeamAgentsAction(
|
|
64
|
+
tenantId: string,
|
|
65
|
+
projectId: string
|
|
66
|
+
): Promise<ActionResult<TeamAgent[]>> {
|
|
67
|
+
try {
|
|
68
|
+
const response = await apiFetchTeamAgents(tenantId, projectId);
|
|
69
|
+
return {
|
|
70
|
+
success: true,
|
|
71
|
+
data: response,
|
|
72
|
+
};
|
|
73
|
+
} catch (error) {
|
|
74
|
+
return {
|
|
75
|
+
success: false,
|
|
76
|
+
error: error instanceof Error ? error.message : 'Failed to fetch team agents',
|
|
77
|
+
code: 'unknown_error',
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
58
82
|
/**
|
|
59
83
|
* Create a new full agent
|
|
60
84
|
*/
|
|
@@ -14,6 +14,7 @@ import type {
|
|
|
14
14
|
} from '../types/agent-full';
|
|
15
15
|
import { ApiError } from '../types/errors';
|
|
16
16
|
import type { ListResponse } from '../types/response';
|
|
17
|
+
import type { TeamAgent } from '../types/team-agents';
|
|
17
18
|
import { makeManagementApiRequest } from './api-config';
|
|
18
19
|
import { validateProjectId, validateTenantId } from './resource-validation';
|
|
19
20
|
|
|
@@ -29,6 +30,23 @@ export async function fetchAgents(
|
|
|
29
30
|
);
|
|
30
31
|
}
|
|
31
32
|
|
|
33
|
+
/**
|
|
34
|
+
* Fetch barebones metadata for all agents in a project to be used with team agent relations
|
|
35
|
+
*/
|
|
36
|
+
export async function fetchTeamAgents(tenantId: string, projectId: string): Promise<TeamAgent[]> {
|
|
37
|
+
validateTenantId(tenantId);
|
|
38
|
+
validateProjectId(projectId);
|
|
39
|
+
|
|
40
|
+
const agents = await fetchAgents(tenantId, projectId);
|
|
41
|
+
return agents.data.map((agent) => {
|
|
42
|
+
return {
|
|
43
|
+
id: agent.id,
|
|
44
|
+
name: agent.name,
|
|
45
|
+
description: agent.description || '',
|
|
46
|
+
};
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
32
50
|
/**
|
|
33
51
|
* Create a new full agent
|
|
34
52
|
*/
|