@inkeep/agents-manage-ui 0.26.1 → 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 +199 -199
- package/.next/standalone/agents-manage-ui/.next/app-path-routes-manifest.json +7 -7
- 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 +8 -8
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +10 -10
- 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 +7 -7
- 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/{7165.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/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/5392.js +14 -0
- 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/5793.js +1 -1
- 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/7565.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/7916.js +1 -0
- 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/{23113.3fede21b6eaf9227.js → 23113.536c8c9bea4a8c7b.js} +4 -4
- package/.next/standalone/agents-manage-ui/.next/static/chunks/2416-cfff29b28c217ccf.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/25200-2b76cc18361fa58b.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{95926-f6acf9933512734b.js → 27747-c0d04833f4851356.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{47199-6dbd2190fc527d1a.js → 32072-8fc2be06163181ac.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/44341-459871afa12cd37c.js +1 -0
- 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/71546-840d5584b7894bd0.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/77700-160a2e85ffa6dbc3.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{88831-cc7c54f946c90858.js → 88831-184f3ffcba8295bb.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-b7141ed5f8a77eb9.js → page-1231e77e66beb21b.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/new/{page-f9134d7a48cd0972.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-d5bc2158bed826dc.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-43dd4a3ae38c8eb1.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/{page-16e165f559ef3131.js → page-c22b10f1cadf9d10.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/new/page-fa5a254c8a76eaa2.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/{page-984321197f47e001.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/new/providers/page-67505a9888f7c31c.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/{page-679cd6ca7dadaf0c.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-9d93fc373fba9f35.js +1 -0
- 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-baee0631b8f2d789.js → page-aecbdd4d66a32efb.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/{page-97ad4c58ba209b90.js → page-8f10eb8d6c489191.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/settings/{page-22de5b7b4e6aaf93.js → page-b50af7f7fc063f80.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/ai-calls/page-7abd4edcd4a9ae2c.js +1 -0
- 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-4f5f509425b1d0ea.js → page-d1c4fe8a8b28a743.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-2c79d0ac495bebf8.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{d834c995-f79913da716f009c.js → d834c995-8cb74a5eed854312.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{webpack-c7f22f43be63d6fd.js → webpack-1185dbe047280553.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/css/931594c58db54400.css +1 -0
- 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/app/[tenantId]/projects/[projectId]/credentials/new/providers/page.tsx +4 -4
- 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/function-tool-node-editor.tsx +28 -25
- 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/components/api-keys/api-key-display.tsx +1 -1
- package/src/components/api-keys/form/api-key-form.tsx +1 -1
- package/src/components/api-keys/form/api-key-update-form.tsx +1 -1
- package/src/components/artifact-components/form/artifact-component-form.tsx +1 -1
- package/src/components/credentials/views/edit-credential-form.tsx +1 -1
- package/src/components/credentials/views/generic-auth-form.tsx +6 -5
- package/src/components/credentials/views/nango-providers-grid.tsx +1 -13
- package/src/components/data-components/form/data-component-form.tsx +1 -1
- package/src/components/data-components/preview/component-preview-generator.tsx +70 -53
- package/src/components/mcp-servers/form/mcp-server-form.tsx +1 -1
- package/src/components/ui/sidebar.tsx +1 -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/122.js +0 -196
- package/.next/standalone/agents-manage-ui/.next/server/chunks/3086.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/3137.js +0 -14
- package/.next/standalone/agents-manage-ui/.next/server/chunks/6109.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/653.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/7537.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-f92fdc7f74df3e1e.js +0 -123
- package/.next/standalone/agents-manage-ui/.next/static/chunks/16887-528540c5b265fc13.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/2173-e5e0c4f24a8e0c46.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/27854-c9d9d59f8de29ed4.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/37775-7406a92cbd39daef.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/50127-83157505921c89db.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/8515-8a6bb9b1af63dc60.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/page-b0b409e0d879bf3c.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page-8141ebc086c4e8cc.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/new/page-172f0be9de89cc0f.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/page-30e656b3c0eb6c84.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/new/page-ebb650d4f36d73c4.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-2bd7c36e74bc6c4a.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-9430afc1b74ecef2.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-a63d4b5df3460d68.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/page-6da4e0dc3c76645f.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/edit/page-6572a90cd3cb51bb.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/external-agents/new/page-33a0e22b08c72216.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/external-agents/page-1d139f2e776d666e.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page-097db4d419336446.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page-69e44e2331b90339.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/ai-calls/page-9d4fe2c46f1ea437.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-2b47946997ff7507.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-ce49c29e3bf4049e.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/css/40728d39bb342f02.css +0 -1
- /package/.next/standalone/agents-manage-ui/.next/static/{7r2zCPzpVSsXFd1vvyJK8 → Bj-8vYnHAeOR5g8hC8_xi}/_buildManifest.js +0 -0
- /package/.next/standalone/agents-manage-ui/.next/static/{7r2zCPzpVSsXFd1vvyJK8 → Bj-8vYnHAeOR5g8hC8_xi}/_ssgManifest.js +0 -0
|
@@ -53,6 +53,11 @@ export type SubAgentExternalAgentConfig = {
|
|
|
53
53
|
headers?: Record<string, string>;
|
|
54
54
|
};
|
|
55
55
|
|
|
56
|
+
export type SubAgentTeamAgentConfig = {
|
|
57
|
+
agentId: string;
|
|
58
|
+
headers?: Record<string, string>;
|
|
59
|
+
};
|
|
60
|
+
|
|
56
61
|
// AgentToolConfigLookup: subAgentId -> relationshipId -> config
|
|
57
62
|
export type AgentToolConfigLookup = Record<string, Record<string, AgentToolConfig>>;
|
|
58
63
|
|
|
@@ -62,6 +67,9 @@ export type SubAgentExternalAgentConfigLookup = Record<
|
|
|
62
67
|
Record<string, SubAgentExternalAgentConfig>
|
|
63
68
|
>;
|
|
64
69
|
|
|
70
|
+
// SubAgentTeamAgentConfigLookup: subAgentId -> relationshipId -> config
|
|
71
|
+
export type SubAgentTeamAgentConfigLookup = Record<string, Record<string, SubAgentTeamAgentConfig>>;
|
|
72
|
+
|
|
65
73
|
import type { ExternalAgent } from '@/lib/api/external-agents';
|
|
66
74
|
import { EdgeType, edgeTypes, initialEdges } from './configuration/edge-types';
|
|
67
75
|
import {
|
|
@@ -73,6 +81,7 @@ import {
|
|
|
73
81
|
NodeType,
|
|
74
82
|
newNodeDefaults,
|
|
75
83
|
nodeTypes,
|
|
84
|
+
teamAgentNodeTargetHandleId,
|
|
76
85
|
} from './configuration/node-types';
|
|
77
86
|
import { AgentErrorSummary } from './error-display/agent-error-summary';
|
|
78
87
|
import { DefaultMarker } from './markers/default-marker';
|
|
@@ -229,6 +238,29 @@ function Flow({
|
|
|
229
238
|
return lookup;
|
|
230
239
|
}, [agent?.subAgents]);
|
|
231
240
|
|
|
241
|
+
const subAgentTeamAgentConfigLookup = useMemo((): SubAgentTeamAgentConfigLookup => {
|
|
242
|
+
if (!agent?.subAgents) return {} as SubAgentTeamAgentConfigLookup;
|
|
243
|
+
const lookup: SubAgentTeamAgentConfigLookup = {};
|
|
244
|
+
Object.entries(agent.subAgents).forEach(([subAgentId, agentData]) => {
|
|
245
|
+
if ('canDelegateTo' in agentData && agentData.canDelegateTo) {
|
|
246
|
+
const teamAgentConfigs: Record<string, SubAgentTeamAgentConfig> = {};
|
|
247
|
+
agentData.canDelegateTo
|
|
248
|
+
.filter((delegate) => typeof delegate === 'object' && 'agentId' in delegate)
|
|
249
|
+
.forEach((delegate) => {
|
|
250
|
+
// For team agents, the delegate is just the target agent ID string
|
|
251
|
+
teamAgentConfigs[delegate.agentId] = {
|
|
252
|
+
agentId: delegate.agentId,
|
|
253
|
+
headers: delegate.headers ?? undefined,
|
|
254
|
+
};
|
|
255
|
+
});
|
|
256
|
+
if (Object.keys(teamAgentConfigs).length > 0) {
|
|
257
|
+
lookup[subAgentId] = teamAgentConfigs;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
return lookup;
|
|
262
|
+
}, [agent?.subAgents]);
|
|
263
|
+
|
|
232
264
|
const {
|
|
233
265
|
screenToFlowPosition,
|
|
234
266
|
updateNodeData,
|
|
@@ -408,6 +440,23 @@ function Flow({
|
|
|
408
440
|
},
|
|
409
441
|
},
|
|
410
442
|
};
|
|
443
|
+
} else if (
|
|
444
|
+
(sourceHandle === agentNodeSourceHandleId || sourceHandle === agentNodeTargetHandleId) &&
|
|
445
|
+
targetHandle === teamAgentNodeTargetHandleId
|
|
446
|
+
) {
|
|
447
|
+
newEdge = {
|
|
448
|
+
...newEdge,
|
|
449
|
+
type: EdgeType.A2ATeam,
|
|
450
|
+
selected: true,
|
|
451
|
+
data: {
|
|
452
|
+
relationships: {
|
|
453
|
+
transferTargetToSource: false,
|
|
454
|
+
transferSourceToTarget: false,
|
|
455
|
+
delegateTargetToSource: false,
|
|
456
|
+
delegateSourceToTarget: true,
|
|
457
|
+
},
|
|
458
|
+
},
|
|
459
|
+
};
|
|
411
460
|
}
|
|
412
461
|
|
|
413
462
|
// Update MCP node subAgentId when connecting agent to MCP tool
|
|
@@ -601,7 +650,8 @@ function Flow({
|
|
|
601
650
|
dataComponentLookup,
|
|
602
651
|
artifactComponentLookup,
|
|
603
652
|
agentToolConfigLookup,
|
|
604
|
-
subAgentExternalAgentConfigLookup
|
|
653
|
+
subAgentExternalAgentConfigLookup,
|
|
654
|
+
subAgentTeamAgentConfigLookup
|
|
605
655
|
);
|
|
606
656
|
|
|
607
657
|
const functionToolNodeMap = new Map<string, string>();
|
|
@@ -729,6 +779,7 @@ function Flow({
|
|
|
729
779
|
agentToolConfigLookup,
|
|
730
780
|
toolLookup,
|
|
731
781
|
subAgentExternalAgentConfigLookup,
|
|
782
|
+
subAgentTeamAgentConfigLookup,
|
|
732
783
|
externalAgentLookup,
|
|
733
784
|
]);
|
|
734
785
|
|
|
@@ -968,6 +1019,7 @@ function Flow({
|
|
|
968
1019
|
artifactComponentLookup={artifactComponentLookup}
|
|
969
1020
|
agentToolConfigLookup={agentToolConfigLookup}
|
|
970
1021
|
subAgentExternalAgentConfigLookup={subAgentExternalAgentConfigLookup}
|
|
1022
|
+
subAgentTeamAgentConfigLookup={subAgentTeamAgentConfigLookup}
|
|
971
1023
|
credentialLookup={credentialLookup}
|
|
972
1024
|
/>
|
|
973
1025
|
{showPlayground && agent?.id && (
|
|
@@ -12,6 +12,7 @@ export enum A2AEdgeType {
|
|
|
12
12
|
export enum EdgeType {
|
|
13
13
|
A2A = 'a2a',
|
|
14
14
|
A2AExternal = 'a2a-external',
|
|
15
|
+
A2ATeam = 'a2a-team',
|
|
15
16
|
// Built-in 'default' edges ignore the `data` prop.
|
|
16
17
|
// Use a custom edge type instead to access `data` in rendering.
|
|
17
18
|
Default = 'custom',
|
|
@@ -35,6 +36,7 @@ export const edgeTypes = {
|
|
|
35
36
|
[EdgeType.A2A]: AgentToAgentEdge,
|
|
36
37
|
[EdgeType.Default]: DefaultEdge,
|
|
37
38
|
[EdgeType.A2AExternal]: DefaultEdge,
|
|
39
|
+
[EdgeType.A2ATeam]: DefaultEdge,
|
|
38
40
|
[EdgeType.SelfLoop]: SelfLoopEdge,
|
|
39
41
|
} as const;
|
|
40
42
|
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { Bot, Code, Globe, Hammer } from 'lucide-react';
|
|
1
|
+
import { Bot, Code, Globe, Hammer, Users } from 'lucide-react';
|
|
2
2
|
import { ExternalAgentNode } from '../nodes/external-agent-node';
|
|
3
3
|
import { FunctionToolNode } from '../nodes/function-tool-node';
|
|
4
4
|
import { MCPNode } from '../nodes/mcp-node';
|
|
5
5
|
import { PlaceholderNode } from '../nodes/placeholder-node';
|
|
6
6
|
import { SubAgentNode } from '../nodes/sub-agent-node';
|
|
7
|
+
import { TeamAgentNode } from '../nodes/team-agent-node';
|
|
7
8
|
import type { AgentModels } from './agent-types';
|
|
8
9
|
|
|
9
10
|
interface NodeData {
|
|
@@ -11,7 +12,7 @@ interface NodeData {
|
|
|
11
12
|
isDefault?: boolean;
|
|
12
13
|
subAgentId?: string | null; // Optional for MCP nodes
|
|
13
14
|
relationshipId?: string | null; // Optional for MCP nodes
|
|
14
|
-
type?: 'mcp-placeholder' | 'external-agent-placeholder'; // Optional for placeholder nodes
|
|
15
|
+
type?: 'mcp-placeholder' | 'external-agent-placeholder' | 'team-agent-placeholder'; // Optional for placeholder nodes
|
|
15
16
|
}
|
|
16
17
|
|
|
17
18
|
import type { SubAgentStopWhen } from '@inkeep/agents-core/client-exports';
|
|
@@ -67,9 +68,18 @@ export interface FunctionToolNodeData extends Record<string, unknown> {
|
|
|
67
68
|
isDelegating?: boolean;
|
|
68
69
|
}
|
|
69
70
|
|
|
71
|
+
export interface TeamAgentNodeData extends Record<string, unknown> {
|
|
72
|
+
id: string;
|
|
73
|
+
name: string;
|
|
74
|
+
description?: string;
|
|
75
|
+
relationshipId?: string | null;
|
|
76
|
+
}
|
|
77
|
+
|
|
70
78
|
export enum NodeType {
|
|
71
79
|
SubAgent = 'agent',
|
|
72
80
|
ExternalAgent = 'external-agent',
|
|
81
|
+
TeamAgent = 'team-agent',
|
|
82
|
+
TeamAgentPlaceholder = 'team-agent-placeholder',
|
|
73
83
|
ExternalAgentPlaceholder = 'external-agent-placeholder',
|
|
74
84
|
MCP = 'mcp',
|
|
75
85
|
MCPPlaceholder = 'mcp-placeholder',
|
|
@@ -80,6 +90,8 @@ export const nodeTypes = {
|
|
|
80
90
|
[NodeType.SubAgent]: SubAgentNode,
|
|
81
91
|
[NodeType.ExternalAgent]: ExternalAgentNode,
|
|
82
92
|
[NodeType.ExternalAgentPlaceholder]: PlaceholderNode,
|
|
93
|
+
[NodeType.TeamAgent]: TeamAgentNode,
|
|
94
|
+
[NodeType.TeamAgentPlaceholder]: PlaceholderNode,
|
|
83
95
|
[NodeType.MCP]: MCPNode,
|
|
84
96
|
[NodeType.MCPPlaceholder]: PlaceholderNode,
|
|
85
97
|
[NodeType.FunctionTool]: FunctionToolNode,
|
|
@@ -90,6 +102,7 @@ export const agentNodeSourceHandleId = 'source-agent';
|
|
|
90
102
|
export const agentNodeTargetHandleId = 'target-agent';
|
|
91
103
|
export const externalAgentNodeTargetHandleId = 'target-external-agent';
|
|
92
104
|
export const functionToolNodeHandleId = 'target-function-tool';
|
|
105
|
+
export const teamAgentNodeTargetHandleId = 'target-team-agent';
|
|
93
106
|
|
|
94
107
|
export const newNodeDefaults: Record<keyof typeof nodeTypes, NodeData> = {
|
|
95
108
|
[NodeType.SubAgent]: {
|
|
@@ -115,6 +128,15 @@ export const newNodeDefaults: Record<keyof typeof nodeTypes, NodeData> = {
|
|
|
115
128
|
name: 'Function Tool',
|
|
116
129
|
subAgentId: null,
|
|
117
130
|
},
|
|
131
|
+
[NodeType.TeamAgent]: {
|
|
132
|
+
name: 'Team Agent',
|
|
133
|
+
subAgentId: null,
|
|
134
|
+
relationshipId: null,
|
|
135
|
+
},
|
|
136
|
+
[NodeType.TeamAgentPlaceholder]: {
|
|
137
|
+
name: 'Select team agent',
|
|
138
|
+
type: 'team-agent-placeholder',
|
|
139
|
+
},
|
|
118
140
|
};
|
|
119
141
|
|
|
120
142
|
export const nodeTypeMap = {
|
|
@@ -148,4 +170,14 @@ export const nodeTypeMap = {
|
|
|
148
170
|
name: 'Function Tool',
|
|
149
171
|
Icon: Code,
|
|
150
172
|
},
|
|
173
|
+
[NodeType.TeamAgent]: {
|
|
174
|
+
type: NodeType.TeamAgent,
|
|
175
|
+
name: 'Team Agent',
|
|
176
|
+
Icon: Users,
|
|
177
|
+
},
|
|
178
|
+
[NodeType.TeamAgentPlaceholder]: {
|
|
179
|
+
type: NodeType.TeamAgentPlaceholder,
|
|
180
|
+
name: 'Team Agent',
|
|
181
|
+
Icon: Users,
|
|
182
|
+
},
|
|
151
183
|
};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { NodeProps } from '@xyflow/react';
|
|
2
|
-
import { Globe, Hammer } from 'lucide-react';
|
|
2
|
+
import { Globe, Hammer, Users } from 'lucide-react';
|
|
3
3
|
import { BaseNode, BaseNodeHeader, BaseNodeHeaderTitle } from './base-node';
|
|
4
4
|
|
|
5
5
|
type PlaceholderNodeData = {
|
|
6
6
|
name: string;
|
|
7
|
-
type: 'mcp-placeholder' | 'external-agent-placeholder';
|
|
7
|
+
type: 'mcp-placeholder' | 'external-agent-placeholder' | 'team-agent-placeholder';
|
|
8
8
|
};
|
|
9
9
|
|
|
10
10
|
export function PlaceholderNode(props: NodeProps & { data: PlaceholderNodeData }) {
|
|
@@ -20,6 +20,9 @@ export function PlaceholderNode(props: NodeProps & { data: PlaceholderNodeData }
|
|
|
20
20
|
{data.type === 'external-agent-placeholder' && (
|
|
21
21
|
<Globe className="size-4 text-muted-foreground/65" />
|
|
22
22
|
)}
|
|
23
|
+
{data.type === 'team-agent-placeholder' && (
|
|
24
|
+
<Users className="size-4 text-muted-foreground/65" />
|
|
25
|
+
)}
|
|
23
26
|
<BaseNodeHeaderTitle className="text-muted-foreground">{name}</BaseNodeHeaderTitle>
|
|
24
27
|
</BaseNodeHeader>
|
|
25
28
|
</BaseNode>
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { type NodeProps, Position } from '@xyflow/react';
|
|
2
|
+
import { Users } from 'lucide-react';
|
|
3
|
+
import { Badge } from '@/components/ui/badge';
|
|
4
|
+
import { NODE_WIDTH } from '@/features/agent/domain/deserialize';
|
|
5
|
+
import { useAgentErrors } from '@/hooks/use-agent-errors';
|
|
6
|
+
import { cn } from '@/lib/utils';
|
|
7
|
+
import type { TeamAgentNodeData } from '../configuration/node-types';
|
|
8
|
+
import { teamAgentNodeTargetHandleId } from '../configuration/node-types';
|
|
9
|
+
import { ErrorIndicator } from '../error-display/error-indicator';
|
|
10
|
+
import { BaseNode, BaseNodeContent, BaseNodeHeader, BaseNodeHeaderTitle } from './base-node';
|
|
11
|
+
import { Handle } from './handle';
|
|
12
|
+
import { NodeTab } from './node-tab';
|
|
13
|
+
|
|
14
|
+
export function TeamAgentNode(props: NodeProps & { data: TeamAgentNodeData }) {
|
|
15
|
+
const { data, selected, id } = props;
|
|
16
|
+
const { name, description } = data;
|
|
17
|
+
const { getNodeErrors, hasNodeErrors } = useAgentErrors();
|
|
18
|
+
|
|
19
|
+
// Use the agent ID from node data if available, otherwise fall back to React Flow node ID
|
|
20
|
+
const subAgentId = data.id || id;
|
|
21
|
+
const nodeErrors = getNodeErrors(subAgentId);
|
|
22
|
+
const hasErrors = hasNodeErrors(subAgentId);
|
|
23
|
+
|
|
24
|
+
return (
|
|
25
|
+
<div className="relative">
|
|
26
|
+
<NodeTab isSelected={selected}>Team</NodeTab>
|
|
27
|
+
<BaseNode
|
|
28
|
+
isSelected={selected}
|
|
29
|
+
className={cn('rounded-tl-none', hasErrors && 'ring-2 ring-red-300 border-red-300')}
|
|
30
|
+
style={{ width: NODE_WIDTH }}
|
|
31
|
+
>
|
|
32
|
+
<BaseNodeHeader className="flex items-center justify-between gap-2">
|
|
33
|
+
<div className="flex items-center gap-2 min-w-0">
|
|
34
|
+
<Users className="size-4 text-muted-foreground" />
|
|
35
|
+
<BaseNodeHeaderTitle>{name || 'Team Agent'}</BaseNodeHeaderTitle>
|
|
36
|
+
</div>
|
|
37
|
+
<Badge variant="primary" className="text-xs uppercase">
|
|
38
|
+
Team Agent
|
|
39
|
+
</Badge>
|
|
40
|
+
{hasErrors && (
|
|
41
|
+
<ErrorIndicator errors={nodeErrors} className="absolute -top-2 -right-2 w-6 h-6" />
|
|
42
|
+
)}
|
|
43
|
+
</BaseNodeHeader>
|
|
44
|
+
<BaseNodeContent>
|
|
45
|
+
<div
|
|
46
|
+
className={`text-sm ${description ? ' text-muted-foreground' : 'text-muted-foreground/50'}`}
|
|
47
|
+
>
|
|
48
|
+
{description || 'No description'}
|
|
49
|
+
</div>
|
|
50
|
+
</BaseNodeContent>
|
|
51
|
+
<Handle
|
|
52
|
+
id={teamAgentNodeTargetHandleId}
|
|
53
|
+
type="target"
|
|
54
|
+
position={Position.Top}
|
|
55
|
+
isConnectable
|
|
56
|
+
/>
|
|
57
|
+
</BaseNode>
|
|
58
|
+
</div>
|
|
59
|
+
);
|
|
60
|
+
}
|
|
@@ -110,7 +110,7 @@ export function FunctionToolNodeEditor({ selectedNode }: FunctionToolNodeEditorP
|
|
|
110
110
|
);
|
|
111
111
|
|
|
112
112
|
return (
|
|
113
|
-
<div className="space-y-
|
|
113
|
+
<div className="space-y-8">
|
|
114
114
|
<InputField
|
|
115
115
|
ref={(el) => setFieldRef('name', el)}
|
|
116
116
|
id="function-tool-name"
|
|
@@ -135,31 +135,29 @@ export function FunctionToolNodeEditor({ selectedNode }: FunctionToolNodeEditorP
|
|
|
135
135
|
isRequired
|
|
136
136
|
maxHeight="max-h-32"
|
|
137
137
|
/>
|
|
138
|
+
<div className="space-y-2">
|
|
139
|
+
<ExpandableTextArea
|
|
140
|
+
id="function-tool-code"
|
|
141
|
+
label="Code"
|
|
142
|
+
value={code}
|
|
143
|
+
onChange={handleCodeChange}
|
|
144
|
+
placeholder="Enter function code here..."
|
|
145
|
+
data-invalid={getFieldError('code') ? '' : undefined}
|
|
146
|
+
isRequired
|
|
147
|
+
className="font-mono text-sm data-invalid:border-red-300 data-invalid:focus-visible:border-red-300 data-invalid:focus-visible:ring-red-300"
|
|
148
|
+
/>
|
|
149
|
+
<p className="text-xs text-muted-foreground">
|
|
150
|
+
JavaScript function code to be executed by the tool. The function will receive arguments
|
|
151
|
+
based on the input schema and should return a result.
|
|
152
|
+
</p>
|
|
138
153
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
label="Code"
|
|
142
|
-
value={code}
|
|
143
|
-
onChange={handleCodeChange}
|
|
144
|
-
placeholder="Enter function code here..."
|
|
145
|
-
data-invalid={getFieldError('code') ? '' : undefined}
|
|
146
|
-
isRequired
|
|
147
|
-
className="font-mono text-sm data-invalid:border-red-300 data-invalid:focus-visible:border-red-300 data-invalid:focus-visible:ring-red-300"
|
|
148
|
-
/>
|
|
149
|
-
<p className="text-sm text-muted-foreground">
|
|
150
|
-
JavaScript function code to be executed by the tool. The function will receive arguments
|
|
151
|
-
based on the input schema and should return a result.
|
|
152
|
-
</p>
|
|
153
|
-
{getFieldError('code') && <p className="text-sm text-red-600">{getFieldError('code')}</p>}
|
|
154
|
-
|
|
154
|
+
{getFieldError('code') && <p className="text-sm text-red-600">{getFieldError('code')}</p>}
|
|
155
|
+
</div>
|
|
155
156
|
<div className="space-y-2">
|
|
156
157
|
<div className="text-sm font-medium">
|
|
157
158
|
Input Schema <span className="text-red-500">*</span>
|
|
158
159
|
</div>
|
|
159
|
-
|
|
160
|
-
JSON schema defining the parameters that the function will receive. This defines the
|
|
161
|
-
structure and validation rules for the function's input arguments.
|
|
162
|
-
</p>
|
|
160
|
+
|
|
163
161
|
<StandaloneJsonEditor
|
|
164
162
|
value={inputSchema}
|
|
165
163
|
onChange={handleInputSchemaChange}
|
|
@@ -178,6 +176,10 @@ export function FunctionToolNodeEditor({ selectedNode }: FunctionToolNodeEditorP
|
|
|
178
176
|
"required": ["param1"]
|
|
179
177
|
}`}
|
|
180
178
|
/>
|
|
179
|
+
<p className="text-xs text-muted-foreground">
|
|
180
|
+
JSON schema defining the parameters that the function will receive. This defines the
|
|
181
|
+
structure and validation rules for the function's input arguments.
|
|
182
|
+
</p>
|
|
181
183
|
{getFieldError('inputSchema') && (
|
|
182
184
|
<p className="text-sm text-red-600">{getFieldError('inputSchema')}</p>
|
|
183
185
|
)}
|
|
@@ -185,10 +187,7 @@ export function FunctionToolNodeEditor({ selectedNode }: FunctionToolNodeEditorP
|
|
|
185
187
|
|
|
186
188
|
<div className="space-y-2">
|
|
187
189
|
<div className="text-sm font-medium">Dependencies</div>
|
|
188
|
-
|
|
189
|
-
External npm packages that the function code requires. These packages will be installed
|
|
190
|
-
before executing the function.
|
|
191
|
-
</p>
|
|
190
|
+
|
|
192
191
|
<StandaloneJsonEditor
|
|
193
192
|
value={dependencies}
|
|
194
193
|
onChange={handleDependenciesChange}
|
|
@@ -197,6 +196,10 @@ export function FunctionToolNodeEditor({ selectedNode }: FunctionToolNodeEditorP
|
|
|
197
196
|
"lodash": "^4.17.21"
|
|
198
197
|
}`}
|
|
199
198
|
/>
|
|
199
|
+
<p className="text-xs text-muted-foreground">
|
|
200
|
+
External npm packages that the function code requires. These packages will be installed
|
|
201
|
+
before executing the function.
|
|
202
|
+
</p>
|
|
200
203
|
{getFieldError('dependencies') && (
|
|
201
204
|
<p className="text-sm text-red-600">{getFieldError('dependencies')}</p>
|
|
202
205
|
)}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { type Node, useReactFlow } from '@xyflow/react';
|
|
2
|
+
import { Trash2 } from 'lucide-react';
|
|
3
|
+
import { useParams } from 'next/navigation';
|
|
4
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
5
|
+
import { ExpandableJsonEditor } from '@/components/form/expandable-json-editor';
|
|
6
|
+
import { Button } from '@/components/ui/button';
|
|
7
|
+
import { ExternalLink } from '@/components/ui/external-link';
|
|
8
|
+
import { Separator } from '@/components/ui/separator';
|
|
9
|
+
import { useAgentActions } from '@/features/agent/state/use-agent-store';
|
|
10
|
+
import type { ErrorHelpers } from '@/hooks/use-agent-errors';
|
|
11
|
+
import { useAutoPrefillIdZustand } from '@/hooks/use-auto-prefill-id-zustand';
|
|
12
|
+
import { useNodeEditor } from '@/hooks/use-node-editor';
|
|
13
|
+
import { getCurrentHeadersForTeamAgentNode } from '@/lib/utils/team-agent-utils';
|
|
14
|
+
import type { SubAgentTeamAgentConfigLookup } from '../../agent';
|
|
15
|
+
import type { TeamAgentNodeData } from '../../configuration/node-types';
|
|
16
|
+
import { InputField, TextareaField } from './form-fields';
|
|
17
|
+
|
|
18
|
+
interface TeamAgentNodeEditorProps {
|
|
19
|
+
selectedNode: Node<TeamAgentNodeData>;
|
|
20
|
+
subAgentTeamAgentConfigLookup: SubAgentTeamAgentConfigLookup;
|
|
21
|
+
errorHelpers?: ErrorHelpers;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function TeamAgentNodeEditor({
|
|
25
|
+
selectedNode,
|
|
26
|
+
subAgentTeamAgentConfigLookup,
|
|
27
|
+
errorHelpers,
|
|
28
|
+
}: TeamAgentNodeEditorProps) {
|
|
29
|
+
const { updateNodeData } = useReactFlow();
|
|
30
|
+
const { markUnsaved } = useAgentActions();
|
|
31
|
+
const { handleInputChange, getFieldError, setFieldRef, updateField, deleteNode } = useNodeEditor({
|
|
32
|
+
selectedNodeId: selectedNode.id,
|
|
33
|
+
errorHelpers,
|
|
34
|
+
});
|
|
35
|
+
const { tenantId, projectId } = useParams<{
|
|
36
|
+
tenantId: string;
|
|
37
|
+
projectId: string;
|
|
38
|
+
}>();
|
|
39
|
+
const handleHeadersChange = (value: string) => {
|
|
40
|
+
// Always update the input state (allows user to type invalid JSON)
|
|
41
|
+
setHeadersInputValue(value);
|
|
42
|
+
|
|
43
|
+
// Only save to node data if the JSON is valid
|
|
44
|
+
try {
|
|
45
|
+
const parsedHeaders = value.trim() === '' ? {} : JSON.parse(value);
|
|
46
|
+
if (
|
|
47
|
+
typeof parsedHeaders === 'object' &&
|
|
48
|
+
parsedHeaders !== null &&
|
|
49
|
+
!Array.isArray(parsedHeaders)
|
|
50
|
+
) {
|
|
51
|
+
// Valid format - save to node data
|
|
52
|
+
updateNodeData(selectedNode.id, {
|
|
53
|
+
...selectedNode.data,
|
|
54
|
+
tempHeaders: parsedHeaders,
|
|
55
|
+
});
|
|
56
|
+
markUnsaved();
|
|
57
|
+
}
|
|
58
|
+
} catch {
|
|
59
|
+
// Invalid JSON - don't save, but allow user to continue typing
|
|
60
|
+
// The ExpandableJsonEditor will show the validation error
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const handleIdChange = useCallback(
|
|
65
|
+
(generatedId: string) => {
|
|
66
|
+
updateField('id', generatedId);
|
|
67
|
+
},
|
|
68
|
+
[updateField]
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
// Auto-prefill ID based on name field (always enabled for agent nodes)
|
|
72
|
+
useAutoPrefillIdZustand({
|
|
73
|
+
nameValue: selectedNode.data.name,
|
|
74
|
+
idValue: selectedNode.data.id,
|
|
75
|
+
onIdChange: handleIdChange,
|
|
76
|
+
isEditing: false,
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
const getCurrentHeaders = useCallback((): Record<string, string> => {
|
|
80
|
+
return getCurrentHeadersForTeamAgentNode(selectedNode, subAgentTeamAgentConfigLookup, []);
|
|
81
|
+
}, [selectedNode, subAgentTeamAgentConfigLookup]);
|
|
82
|
+
|
|
83
|
+
// Local state for headers input (allows invalid JSON while typing)
|
|
84
|
+
const [headersInputValue, setHeadersInputValue] = useState('{}');
|
|
85
|
+
|
|
86
|
+
// Sync input value when node changes (but not on every data change)
|
|
87
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: intentionally omit getCurrentHeaders to prevent reset loops
|
|
88
|
+
useEffect(() => {
|
|
89
|
+
const newHeaders = getCurrentHeaders();
|
|
90
|
+
setHeadersInputValue(JSON.stringify(newHeaders, null, 2));
|
|
91
|
+
}, [selectedNode.id]);
|
|
92
|
+
|
|
93
|
+
return (
|
|
94
|
+
<div className="space-y-8 flex flex-col">
|
|
95
|
+
<p className="text-sm text-muted-foreground">
|
|
96
|
+
Team agents are other agents within the same project that can collaborate and delegate tasks
|
|
97
|
+
using the A2A (Agent-to-Agent) protocol. Team agents enable you to create specialized agents
|
|
98
|
+
that work together to accomplish complex tasks.
|
|
99
|
+
</p>
|
|
100
|
+
|
|
101
|
+
<InputField
|
|
102
|
+
ref={(el) => setFieldRef('name', el)}
|
|
103
|
+
id="name"
|
|
104
|
+
name="name"
|
|
105
|
+
label="Name"
|
|
106
|
+
value={selectedNode.data.name || ''}
|
|
107
|
+
onChange={handleInputChange}
|
|
108
|
+
placeholder="Support agent"
|
|
109
|
+
disabled
|
|
110
|
+
error={getFieldError('name')}
|
|
111
|
+
/>
|
|
112
|
+
|
|
113
|
+
<InputField
|
|
114
|
+
ref={(el) => setFieldRef('id', el)}
|
|
115
|
+
id="id"
|
|
116
|
+
name="id"
|
|
117
|
+
label="Id"
|
|
118
|
+
value={selectedNode.data.id || ''}
|
|
119
|
+
onChange={handleInputChange}
|
|
120
|
+
placeholder="my-external-agent"
|
|
121
|
+
error={getFieldError('id')}
|
|
122
|
+
disabled
|
|
123
|
+
description="Choose a unique identifier for this agent. Using an existing id will replace that agent."
|
|
124
|
+
isRequired
|
|
125
|
+
/>
|
|
126
|
+
|
|
127
|
+
<TextareaField
|
|
128
|
+
ref={(el) => setFieldRef('description', el)}
|
|
129
|
+
id="description"
|
|
130
|
+
name="description"
|
|
131
|
+
label="Description"
|
|
132
|
+
value={selectedNode.data.description || ''}
|
|
133
|
+
onChange={handleInputChange}
|
|
134
|
+
placeholder="This agent is responsible for..."
|
|
135
|
+
error={getFieldError('description')}
|
|
136
|
+
disabled
|
|
137
|
+
/>
|
|
138
|
+
|
|
139
|
+
<ExpandableJsonEditor
|
|
140
|
+
name="headers"
|
|
141
|
+
label="Headers"
|
|
142
|
+
value={headersInputValue}
|
|
143
|
+
onChange={handleHeadersChange}
|
|
144
|
+
placeholder="{}"
|
|
145
|
+
className=""
|
|
146
|
+
/>
|
|
147
|
+
<ExternalLink href={`/${tenantId}/projects/${projectId}/agents/${selectedNode.data.id}`}>
|
|
148
|
+
Edit Agent
|
|
149
|
+
</ExternalLink>
|
|
150
|
+
<Separator />
|
|
151
|
+
<div className="flex justify-end">
|
|
152
|
+
<Button variant="destructive-outline" size="sm" onClick={deleteNode}>
|
|
153
|
+
<Trash2 className="size-4" />
|
|
154
|
+
Delete
|
|
155
|
+
</Button>
|
|
156
|
+
</div>
|
|
157
|
+
</div>
|
|
158
|
+
);
|
|
159
|
+
}
|
|
@@ -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
|
+
}
|