@inkeep/agents-manage-ui 0.23.4 → 0.24.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 +104 -104
- package/.next/standalone/agents-manage-ui/.next/app-path-routes-manifest.json +3 -3
- package/.next/standalone/agents-manage-ui/.next/build-manifest.json +2 -2
- package/.next/standalone/agents-manage-ui/.next/prerender-manifest.json +3 -3
- 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.js.nft.json +1 -1
- 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.js.nft.json +1 -1
- 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.js.nft.json +1 -1
- 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 +2 -2
- 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 +1 -1
- 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.js.nft.json +1 -1
- 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.js.nft.json +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.js.nft.json +1 -1
- 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]/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.js.nft.json +1 -1
- 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 +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page.js.nft.json +1 -1
- 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 +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page.js.nft.json +1 -1
- 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 +1 -1
- 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 +2 -2
- 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.js.nft.json +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.js.nft.json +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 +9 -9
- package/.next/standalone/agents-manage-ui/.next/server/app/api/data-components/[dataComponentId]/generate-preview/route.js +1 -1
- 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_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.js.nft.json +1 -1
- 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 +3 -3
- package/.next/standalone/agents-manage-ui/.next/server/chunks/{9853.js → 1525.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/2005.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/244.js +14 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/2851.js +196 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/3041.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/3547.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/5109.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/5450.js +3 -3
- package/.next/standalone/agents-manage-ui/.next/server/chunks/5642.js +4080 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/5732.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/6741.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/728.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/7711.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/7848.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/{7953.js → 7977.js} +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/chunks/7988.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/chunks/9003.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/middleware-manifest.json +5 -5
- 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/20837-041beb6a2f540583.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/27396-d1c1a1a24f7b06ca.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/28186-1f8894e8a9f58785.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/39523-c0cadec114d31336.js +25 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/47216-52f3cc04486d36c9.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{4875-6cc31870e1b4f78e.js → 4875-306209ac5547e001.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{30721-9fe13c117a9408a9.js → 55851-6ebca09d3e107386.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/57786-36b73daa228df68d.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/83858-2bfa9973ce3ce326.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/87367-c73fa08200830a15.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{78225-17ad3e82fb563fc9.js → 93231-f6a13c3278793654.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/94167-3fd33f8ffc652db2.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/[agentId]/{page-06ad671ecebdb051.js → page-f68f3c960e8db83f.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/new/{page-432441460d16cfca.js → page-2a7d8de41c87958d.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/page-62cab20aa4353d45.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-81d720721aab1586.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/{page-45aa3756e3432ab6.js → page-9d7e4ff201cf3345.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/new/{page-819342f697b73b23.js → page-8f72a85f26135a46.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/{page-9163d82f18c05859.js → page-9f13fb47f54d0757.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/{page-cabbbb12300d69e2.js → page-59df08cb46c7e592.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/new/{page-15e5f802e35f9b2d.js → page-a4738db9057ca109.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/{page-ed01a0be181bc578.js → page-87415ca1bf6d1477.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-91ba0f87b3d09f30.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-bdf1d5105b7e878a.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-8d2ec09f9385c4a6.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/page-609abc0d3feeef77.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/{page-b52db9884e7955e1.js → page-cbf0830dece4f6c4.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page-d5ff2cbd01568451.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/new/page-e410d10ef6ae24de.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/page-14b54cd8fc861b32.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/settings/{page-dbf18aaaa9aaf047.js → page-f64f1dc069a6d95b.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page-73c7ac508b857ff8.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-39b4c79dd6ee832e.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/{page-e142f8be4dd06553.js → page-d48f9593e232f3e1.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-25a2e915d1b1d0ba.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/css/86b7c14b860f21e3.css +1 -0
- package/.next/standalone/agents-manage-ui/package.json +2 -2
- package/.next/standalone/packages/agents-core/package.json +1 -1
- package/package.json +5 -5
- package/src/app/api/data-components/[dataComponentId]/generate-preview/route.ts +17 -2
- package/src/app/api/signoz/conversations/[conversationId]/route.ts +15 -0
- package/src/app/globals.css +21 -0
- package/src/components/agent/agent.tsx +176 -5
- package/src/components/agent/configuration/edge-types.tsx +7 -1
- package/src/components/agent/configuration/node-types.tsx +7 -0
- package/src/components/agent/edges/agent-to-agent-edge.tsx +11 -5
- package/src/components/agent/edges/default-edge.tsx +54 -11
- package/src/components/agent/node-library/node-item.tsx +1 -1
- package/src/components/agent/nodes/base-node.tsx +15 -20
- package/src/components/agent/nodes/external-agent-node.tsx +9 -4
- package/src/components/agent/nodes/function-tool-node.tsx +7 -2
- package/src/components/agent/nodes/mcp-node.tsx +29 -26
- package/src/components/agent/nodes/node-tab.tsx +7 -6
- package/src/components/agent/nodes/sub-agent-node.tsx +8 -3
- package/src/components/agent/playground/chat-widget.tsx +2 -2
- package/src/components/agent/playground/playground.tsx +32 -2
- package/src/components/agent/toolbar/toolbar.tsx +18 -7
- package/src/components/mcp-servers/form/mcp-server-form.tsx +3 -3
- package/src/components/mcp-servers/selection/mcp-server-selection.tsx +3 -3
- package/src/components/traces/timeline/render-panel-content.tsx +55 -9
- package/src/components/traces/timeline/timeline-item.tsx +32 -0
- package/src/features/agent/domain/deserialize.ts +2 -2
- package/src/features/agent/domain/serialize.ts +5 -5
- package/src/hooks/use-auto-prefill-id-zustand.ts +2 -2
- package/src/hooks/use-auto-prefill-id.ts +1 -1
- package/src/lib/actions/data-components.ts +2 -1
- package/src/lib/utils/generate-id.ts +1 -1
- package/src/lib/utils/id-utils.ts +4 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/3884.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/7283.js +0 -4080
- package/.next/standalone/agents-manage-ui/.next/server/chunks/7613.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/7714.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/8664.js +0 -196
- package/.next/standalone/agents-manage-ui/.next/server/chunks/9525.js +0 -14
- package/.next/standalone/agents-manage-ui/.next/static/chunks/20837-57e1345903eae942.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/2646-5e494997093f8a20.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/27604-8d9cf308292ec547.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/39438-3324f04d95405812.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/40343-c601d93c1e721f8e.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/49858-7e18c65ea9efae5d.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/53821-8e97ecfda24c69bb.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/85014-410be6cfd6c0b753.js +0 -25
- package/.next/standalone/agents-manage-ui/.next/static/chunks/94167-1d0eb19e0f384370.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/page-3865a57b0e18e871.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-356ac0d696aa5be8.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-15c26f9aa3b849e1.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-ad9c88bc8654631b.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-fca9f040a66152f9.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/page-c1364202b7b6e78e.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page-1d0fdaea2ee9fb94.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/new/page-99a3f138e54fa2a3.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/page-f2a8df9cb8983d75.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page-ca177c1cd0f1f45a.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-5de5d73ac6b2641e.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-37eaa5406f98632b.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/css/6966eea3739e6598.css +0 -1
- /package/.next/standalone/agents-manage-ui/.next/static/{GEgg7iTyqia87yUa_7Nha → pSmoxTjEZijMAqPrIfiP9}/_buildManifest.js +0 -0
- /package/.next/standalone/agents-manage-ui/.next/static/{GEgg7iTyqia87yUa_7Nha → pSmoxTjEZijMAqPrIfiP9}/_ssgManifest.js +0 -0
|
@@ -14,7 +14,6 @@ import {
|
|
|
14
14
|
useOnSelectionChange,
|
|
15
15
|
useReactFlow,
|
|
16
16
|
} from '@xyflow/react';
|
|
17
|
-
import { nanoid } from 'nanoid';
|
|
18
17
|
import { useParams, useRouter } from 'next/navigation';
|
|
19
18
|
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
20
19
|
import { toast } from 'sonner';
|
|
@@ -38,6 +37,7 @@ import type { DataComponent } from '@/lib/api/data-components';
|
|
|
38
37
|
import { saveAgent } from '@/lib/services/save-agent';
|
|
39
38
|
import type { MCPTool } from '@/lib/types/tools';
|
|
40
39
|
import { getErrorSummaryMessage, parseAgentValidationErrors } from '@/lib/utils/agent-error-parser';
|
|
40
|
+
import { generateId } from '@/lib/utils/id-utils';
|
|
41
41
|
import { getToolTypeAndName } from '@/lib/utils/mcp-utils';
|
|
42
42
|
import { detectOrphanedToolsAndGetWarning } from '@/lib/utils/orphaned-tools-detector';
|
|
43
43
|
|
|
@@ -103,7 +103,7 @@ function Flow({
|
|
|
103
103
|
const initialNodes = useMemo<Node[]>(
|
|
104
104
|
() => [
|
|
105
105
|
{
|
|
106
|
-
id:
|
|
106
|
+
id: generateId(),
|
|
107
107
|
type: NodeType.SubAgent,
|
|
108
108
|
position: { x: 0, y: 0 },
|
|
109
109
|
data: { name: '', isDefault: true },
|
|
@@ -422,7 +422,7 @@ function Flow({
|
|
|
422
422
|
x: event.clientX,
|
|
423
423
|
y: event.clientY,
|
|
424
424
|
});
|
|
425
|
-
const nodeId =
|
|
425
|
+
const nodeId = generateId();
|
|
426
426
|
const newNode = {
|
|
427
427
|
id: nodeId,
|
|
428
428
|
type: nodeData.type,
|
|
@@ -693,6 +693,171 @@ function Flow({
|
|
|
693
693
|
toolLookup,
|
|
694
694
|
]);
|
|
695
695
|
|
|
696
|
+
useEffect(() => {
|
|
697
|
+
const onDataOperation: EventListenerOrEventListenerObject = (event) => {
|
|
698
|
+
// @ts-expect-error -- improve types
|
|
699
|
+
const data = event.detail;
|
|
700
|
+
|
|
701
|
+
switch (data.type) {
|
|
702
|
+
case 'agent_initializing': {
|
|
703
|
+
// TODO
|
|
704
|
+
break;
|
|
705
|
+
}
|
|
706
|
+
case 'delegation_sent':
|
|
707
|
+
case 'transfer': {
|
|
708
|
+
const { fromSubAgent, targetSubAgent } = data.details.data;
|
|
709
|
+
setEdges((prevEdges) =>
|
|
710
|
+
prevEdges.map((edge) => ({
|
|
711
|
+
...edge,
|
|
712
|
+
data: {
|
|
713
|
+
...edge.data,
|
|
714
|
+
delegating: edge.source === fromSubAgent && edge.target === targetSubAgent,
|
|
715
|
+
},
|
|
716
|
+
}))
|
|
717
|
+
);
|
|
718
|
+
setNodes((prevNodes) =>
|
|
719
|
+
prevNodes.map((node) => ({
|
|
720
|
+
...node,
|
|
721
|
+
data: {
|
|
722
|
+
...node.data,
|
|
723
|
+
isDelegating: node.id === fromSubAgent || node.id === targetSubAgent,
|
|
724
|
+
},
|
|
725
|
+
}))
|
|
726
|
+
);
|
|
727
|
+
break;
|
|
728
|
+
}
|
|
729
|
+
case 'delegation_returned': {
|
|
730
|
+
const { targetSubAgent } = data.details.data;
|
|
731
|
+
setEdges((prevEdges) =>
|
|
732
|
+
prevEdges.map((edge) => ({
|
|
733
|
+
...edge,
|
|
734
|
+
data: { ...edge.data, delegating: false },
|
|
735
|
+
}))
|
|
736
|
+
);
|
|
737
|
+
setNodes((prevNodes) =>
|
|
738
|
+
prevNodes.map((node) => ({
|
|
739
|
+
...node,
|
|
740
|
+
data: { ...node.data, isExecuting: node.id === targetSubAgent, isDelegating: false },
|
|
741
|
+
}))
|
|
742
|
+
);
|
|
743
|
+
break;
|
|
744
|
+
}
|
|
745
|
+
case 'tool_call': {
|
|
746
|
+
const { toolName } = data.details.data;
|
|
747
|
+
const { subAgentId } = data.details;
|
|
748
|
+
setNodes((prevNodes) => {
|
|
749
|
+
setEdges((prevEdges) =>
|
|
750
|
+
prevEdges.map((edge) => {
|
|
751
|
+
const node = prevNodes.find((node) => node.id === edge.target);
|
|
752
|
+
const toolId = node?.data.toolId as string;
|
|
753
|
+
const toolData = toolLookup[toolId];
|
|
754
|
+
const hasTool = toolData?.availableTools?.some((tool) => tool.name === toolName);
|
|
755
|
+
const hasDots = edge.source === subAgentId && hasTool;
|
|
756
|
+
return {
|
|
757
|
+
...edge,
|
|
758
|
+
data: { ...edge.data, delegating: hasDots },
|
|
759
|
+
};
|
|
760
|
+
})
|
|
761
|
+
);
|
|
762
|
+
return prevNodes.map((node) => {
|
|
763
|
+
const toolId = node.data.toolId as string;
|
|
764
|
+
const toolData = toolLookup[toolId];
|
|
765
|
+
|
|
766
|
+
return {
|
|
767
|
+
...node,
|
|
768
|
+
data: {
|
|
769
|
+
...node.data,
|
|
770
|
+
isExecuting: false,
|
|
771
|
+
isDelegating:
|
|
772
|
+
node.data.id === subAgentId ||
|
|
773
|
+
toolData?.availableTools?.some((tool) => tool.name === toolName),
|
|
774
|
+
},
|
|
775
|
+
};
|
|
776
|
+
});
|
|
777
|
+
});
|
|
778
|
+
break;
|
|
779
|
+
}
|
|
780
|
+
case 'tool_result': {
|
|
781
|
+
const { toolName } = data.details.data;
|
|
782
|
+
const { subAgentId } = data.details;
|
|
783
|
+
setNodes((prevNodes) => {
|
|
784
|
+
setEdges((prevEdges) =>
|
|
785
|
+
prevEdges.map((edge) => {
|
|
786
|
+
const node = prevNodes.find((node) => node.id === edge.target);
|
|
787
|
+
const toolId = node?.data.toolId as string;
|
|
788
|
+
const toolData = toolLookup[toolId];
|
|
789
|
+
const hasTool = toolData?.availableTools?.some((tool) => tool.name === toolName);
|
|
790
|
+
|
|
791
|
+
return {
|
|
792
|
+
...edge,
|
|
793
|
+
data: {
|
|
794
|
+
...edge.data,
|
|
795
|
+
delegating: subAgentId === edge.source && hasTool ? 'inverted' : false,
|
|
796
|
+
},
|
|
797
|
+
};
|
|
798
|
+
})
|
|
799
|
+
);
|
|
800
|
+
return prevNodes.map((node) => {
|
|
801
|
+
const toolId = node.data.toolId as string;
|
|
802
|
+
const toolData = toolLookup[toolId];
|
|
803
|
+
return {
|
|
804
|
+
...node,
|
|
805
|
+
data: {
|
|
806
|
+
...node.data,
|
|
807
|
+
isDelegating: node.id === subAgentId,
|
|
808
|
+
isExecuting: toolData?.availableTools?.some((tool) => tool.name === toolName),
|
|
809
|
+
},
|
|
810
|
+
};
|
|
811
|
+
});
|
|
812
|
+
});
|
|
813
|
+
break;
|
|
814
|
+
}
|
|
815
|
+
case 'completion': {
|
|
816
|
+
onCompletion();
|
|
817
|
+
break;
|
|
818
|
+
}
|
|
819
|
+
case 'agent_generate': {
|
|
820
|
+
const { subAgentId } = data.details;
|
|
821
|
+
setEdges((prevEdges) =>
|
|
822
|
+
prevEdges.map((node) => ({
|
|
823
|
+
...node,
|
|
824
|
+
data: { ...node.data, delegating: false },
|
|
825
|
+
}))
|
|
826
|
+
);
|
|
827
|
+
setNodes((prevNodes) =>
|
|
828
|
+
prevNodes.map((node) => ({
|
|
829
|
+
...node,
|
|
830
|
+
data: { ...node.data, isExecuting: node.id === subAgentId, isDelegating: false },
|
|
831
|
+
}))
|
|
832
|
+
);
|
|
833
|
+
break;
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
};
|
|
837
|
+
|
|
838
|
+
const onCompletion = () => {
|
|
839
|
+
setEdges((prevEdges) =>
|
|
840
|
+
prevEdges.map((edge) => ({
|
|
841
|
+
...edge,
|
|
842
|
+
data: { ...edge.data, delegating: false },
|
|
843
|
+
}))
|
|
844
|
+
);
|
|
845
|
+
setNodes((prevNodes) =>
|
|
846
|
+
prevNodes.map((node) => ({
|
|
847
|
+
...node,
|
|
848
|
+
data: { ...node.data, isExecuting: false, isDelegating: false },
|
|
849
|
+
}))
|
|
850
|
+
);
|
|
851
|
+
};
|
|
852
|
+
|
|
853
|
+
document.addEventListener('ikp-data-operation', onDataOperation);
|
|
854
|
+
document.addEventListener('ikp-aborted', onCompletion);
|
|
855
|
+
return () => {
|
|
856
|
+
document.removeEventListener('ikp-data-operation', onDataOperation);
|
|
857
|
+
document.removeEventListener('ikp-aborted', onCompletion);
|
|
858
|
+
};
|
|
859
|
+
}, [setEdges, toolLookup, setNodes]);
|
|
860
|
+
|
|
696
861
|
return (
|
|
697
862
|
<div className="w-full h-full relative bg-muted/20 dark:bg-background flex rounded-b-[14px] overflow-hidden">
|
|
698
863
|
<div className={`flex-1 h-full relative transition-all duration-300 ease-in-out`}>
|
|
@@ -700,7 +865,9 @@ function Flow({
|
|
|
700
865
|
<SelectedMarker />
|
|
701
866
|
<ReactFlow
|
|
702
867
|
defaultEdgeOptions={{
|
|
703
|
-
|
|
868
|
+
// Built-in 'default' edges ignore the `data` prop.
|
|
869
|
+
// Use a custom edge type instead to access `data` in rendering.
|
|
870
|
+
type: 'custom',
|
|
704
871
|
}}
|
|
705
872
|
nodeTypes={nodeTypes}
|
|
706
873
|
edgeTypes={edgeTypes}
|
|
@@ -725,7 +892,11 @@ function Flow({
|
|
|
725
892
|
<Panel position="top-left">
|
|
726
893
|
<NodeLibrary />
|
|
727
894
|
</Panel>
|
|
728
|
-
<Panel
|
|
895
|
+
<Panel
|
|
896
|
+
position="top-right"
|
|
897
|
+
// width of NodeLibrary
|
|
898
|
+
className="left-52"
|
|
899
|
+
>
|
|
729
900
|
<Toolbar
|
|
730
901
|
onSubmit={onSubmit}
|
|
731
902
|
inPreviewDisabled={!agent?.id}
|
|
@@ -12,7 +12,9 @@ export enum A2AEdgeType {
|
|
|
12
12
|
export enum EdgeType {
|
|
13
13
|
A2A = 'a2a',
|
|
14
14
|
A2AExternal = 'a2a-external',
|
|
15
|
-
|
|
15
|
+
// Built-in 'default' edges ignore the `data` prop.
|
|
16
|
+
// Use a custom edge type instead to access `data` in rendering.
|
|
17
|
+
Default = 'custom',
|
|
16
18
|
SelfLoop = 'self-loop',
|
|
17
19
|
}
|
|
18
20
|
|
|
@@ -23,6 +25,10 @@ export type A2AEdgeData = {
|
|
|
23
25
|
delegateTargetToSource: boolean;
|
|
24
26
|
delegateSourceToTarget: boolean;
|
|
25
27
|
};
|
|
28
|
+
/**
|
|
29
|
+
* Indicates whether this node delegates its task to another node.
|
|
30
|
+
*/
|
|
31
|
+
delegating: boolean | 'inverted';
|
|
26
32
|
};
|
|
27
33
|
|
|
28
34
|
export const edgeTypes = {
|
|
@@ -22,6 +22,8 @@ export interface MCPNodeData extends Record<string, unknown> {
|
|
|
22
22
|
name?: string;
|
|
23
23
|
imageUrl?: string;
|
|
24
24
|
provider?: string;
|
|
25
|
+
isExecuting?: boolean;
|
|
26
|
+
isDelegating?: boolean;
|
|
25
27
|
}
|
|
26
28
|
|
|
27
29
|
// Re-export the shared type for consistency
|
|
@@ -36,6 +38,9 @@ export interface AgentNodeData extends Record<string, unknown> {
|
|
|
36
38
|
artifactComponents?: string[];
|
|
37
39
|
models?: AgentModels; // Use same structure as agent
|
|
38
40
|
stopWhen?: SubAgentStopWhen;
|
|
41
|
+
isDefault?: boolean;
|
|
42
|
+
isExecuting?: boolean;
|
|
43
|
+
isDelegating?: boolean;
|
|
39
44
|
}
|
|
40
45
|
|
|
41
46
|
export interface ExternalAgentNodeData extends Record<string, unknown> {
|
|
@@ -57,6 +62,8 @@ export interface FunctionToolNodeData extends Record<string, unknown> {
|
|
|
57
62
|
code?: string;
|
|
58
63
|
inputSchema?: Record<string, unknown>;
|
|
59
64
|
dependencies?: Record<string, unknown>;
|
|
65
|
+
isExecuting?: boolean;
|
|
66
|
+
isDelegating?: boolean;
|
|
60
67
|
}
|
|
61
68
|
|
|
62
69
|
export enum NodeType {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { BaseEdge, EdgeLabelRenderer, type EdgeProps, getBezierPath } from '@xyflow/react';
|
|
2
2
|
import { ArrowRight, ArrowRightLeft } from 'lucide-react';
|
|
3
|
+
import { AnimatedCircle } from '@/components/agent/edges/default-edge';
|
|
3
4
|
import type { A2AEdgeData } from '../configuration/edge-types';
|
|
4
5
|
|
|
5
6
|
interface AgentToAgentEdgeProps extends EdgeProps {
|
|
@@ -22,6 +23,7 @@ export function AgentToAgentEdge({
|
|
|
22
23
|
delegateTargetToSource: false,
|
|
23
24
|
delegateSourceToTarget: false,
|
|
24
25
|
};
|
|
26
|
+
const delegating = data?.delegating;
|
|
25
27
|
|
|
26
28
|
const hasDelegate = relationships.delegateTargetToSource || relationships.delegateSourceToTarget;
|
|
27
29
|
const hasTransfer = relationships.transferTargetToSource || relationships.transferSourceToTarget;
|
|
@@ -86,16 +88,20 @@ export function AgentToAgentEdge({
|
|
|
86
88
|
const delegateMarkerEnd =
|
|
87
89
|
hasDelegate && relationships.delegateSourceToTarget ? getMarker(!!selected) : undefined;
|
|
88
90
|
|
|
91
|
+
const className =
|
|
92
|
+
selected || delegating ? '!stroke-primary' : '!stroke-border dark:!stroke-muted-foreground';
|
|
93
|
+
|
|
89
94
|
return (
|
|
90
95
|
<>
|
|
96
|
+
{/* Animated circles based on delegating direction */}
|
|
97
|
+
{delegating && <AnimatedCircle edgePath={edgePath} inverted={delegating === 'inverted'} />}
|
|
98
|
+
|
|
91
99
|
{/* Render transfer path (solid line) */}
|
|
92
100
|
{hasTransfer && (
|
|
93
101
|
<BaseEdge
|
|
94
|
-
className={
|
|
102
|
+
className={className}
|
|
95
103
|
path={hasDelegate ? calculateOffsetPath(-3)[0] : edgePath}
|
|
96
|
-
style={{
|
|
97
|
-
strokeWidth: 2,
|
|
98
|
-
}}
|
|
104
|
+
style={{ strokeWidth: 2 }}
|
|
99
105
|
markerEnd={transferMarkerEnd}
|
|
100
106
|
markerStart={transferMarkerStart}
|
|
101
107
|
/>
|
|
@@ -104,7 +110,7 @@ export function AgentToAgentEdge({
|
|
|
104
110
|
{/* Render delegate path (dashed line) */}
|
|
105
111
|
{hasDelegate && (
|
|
106
112
|
<BaseEdge
|
|
107
|
-
className={
|
|
113
|
+
className={className}
|
|
108
114
|
path={hasTransfer ? calculateOffsetPath(3)[0] : edgePath}
|
|
109
115
|
style={{
|
|
110
116
|
strokeDasharray: '5,5',
|
|
@@ -1,6 +1,39 @@
|
|
|
1
1
|
import { BaseEdge, type EdgeProps, getBezierPath } from '@xyflow/react';
|
|
2
|
+
import { type FC, useRef, useEffect } from 'react';
|
|
2
3
|
|
|
3
|
-
type DefaultEdgeProps = EdgeProps
|
|
4
|
+
type DefaultEdgeProps = EdgeProps & {
|
|
5
|
+
data?: {
|
|
6
|
+
delegating: boolean | 'inverted';
|
|
7
|
+
};
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export const AnimatedCircle: FC<{ edgePath: string; inverted: boolean }> = ({
|
|
11
|
+
edgePath,
|
|
12
|
+
inverted,
|
|
13
|
+
}) => {
|
|
14
|
+
const ref = useRef<SVGAnimateElement>(null);
|
|
15
|
+
|
|
16
|
+
// Without this useEffect, the animation won't start when this component is rendered dynamically.
|
|
17
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: We need restart animation when invert is changed
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
ref.current?.beginElement();
|
|
20
|
+
}, [inverted]);
|
|
21
|
+
|
|
22
|
+
return (
|
|
23
|
+
<circle fill="var(--primary)" r="6">
|
|
24
|
+
<animateMotion
|
|
25
|
+
ref={ref}
|
|
26
|
+
dur="2s"
|
|
27
|
+
path={edgePath}
|
|
28
|
+
{...(inverted && {
|
|
29
|
+
pathLength: '1',
|
|
30
|
+
keyPoints: '1;0',
|
|
31
|
+
keyTimes: '0;1',
|
|
32
|
+
})}
|
|
33
|
+
/>
|
|
34
|
+
</circle>
|
|
35
|
+
);
|
|
36
|
+
};
|
|
4
37
|
|
|
5
38
|
export function DefaultEdge({
|
|
6
39
|
id,
|
|
@@ -13,6 +46,7 @@ export function DefaultEdge({
|
|
|
13
46
|
label,
|
|
14
47
|
selected,
|
|
15
48
|
markerEnd,
|
|
49
|
+
data,
|
|
16
50
|
}: DefaultEdgeProps) {
|
|
17
51
|
const [edgePath] = getBezierPath({
|
|
18
52
|
sourceX,
|
|
@@ -23,16 +57,25 @@ export function DefaultEdge({
|
|
|
23
57
|
targetPosition,
|
|
24
58
|
});
|
|
25
59
|
|
|
60
|
+
const className =
|
|
61
|
+
selected || data?.delegating
|
|
62
|
+
? '!stroke-primary'
|
|
63
|
+
: '!stroke-border dark:!stroke-muted-foreground';
|
|
64
|
+
|
|
26
65
|
return (
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
66
|
+
<>
|
|
67
|
+
{/* Animated circles based on delegating direction */}
|
|
68
|
+
{data?.delegating && (
|
|
69
|
+
<AnimatedCircle edgePath={edgePath} inverted={data.delegating === 'inverted'} />
|
|
70
|
+
)}
|
|
71
|
+
<BaseEdge
|
|
72
|
+
id={id}
|
|
73
|
+
path={edgePath}
|
|
74
|
+
label={label}
|
|
75
|
+
markerEnd={markerEnd}
|
|
76
|
+
style={{ strokeWidth: 2 }}
|
|
77
|
+
className={className}
|
|
78
|
+
/>
|
|
79
|
+
</>
|
|
37
80
|
);
|
|
38
81
|
}
|
|
@@ -23,7 +23,7 @@ export function NodeItem({ node }: NodeItemProps) {
|
|
|
23
23
|
role="button"
|
|
24
24
|
tabIndex={disabled ? -1 : 0}
|
|
25
25
|
aria-label={`Drag ${name} node`}
|
|
26
|
-
className="border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 flex font-medium items-center text-sm rounded-md p-2 justify-between gap-2 text-left h-auto w-full group group-hover:bg-muted/50 transition-all ease-in-out duration-200 cursor-grab active:cursor-grabbing"
|
|
26
|
+
className="backdrop-blur-3xl border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 flex font-medium items-center text-sm rounded-md p-2 justify-between gap-2 text-left h-auto w-full group group-hover:bg-muted/50 transition-all ease-in-out duration-200 cursor-grab active:cursor-grabbing"
|
|
27
27
|
draggable={!disabled}
|
|
28
28
|
onDragStart={(e) => onDragStart(e, node)}
|
|
29
29
|
>
|
|
@@ -1,30 +1,25 @@
|
|
|
1
|
-
import { forwardRef, type HTMLAttributes } from 'react';
|
|
1
|
+
import { type FC, forwardRef, type HTMLAttributes } from 'react';
|
|
2
2
|
import { cn } from '@/lib/utils';
|
|
3
3
|
|
|
4
4
|
interface BaseNodeProps extends HTMLAttributes<HTMLDivElement> {
|
|
5
5
|
isSelected?: boolean;
|
|
6
6
|
}
|
|
7
7
|
|
|
8
|
-
export const BaseNode =
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
// tabIndex={0}
|
|
23
|
-
{...props}
|
|
24
|
-
/>
|
|
25
|
-
)
|
|
8
|
+
export const BaseNode: FC<BaseNodeProps> = ({ className, isSelected, ...props }) => (
|
|
9
|
+
<div
|
|
10
|
+
className={cn(
|
|
11
|
+
'relative rounded-lg border bg-card text-card-foreground',
|
|
12
|
+
// React Flow displays node elements inside of a `NodeWrapper` component,
|
|
13
|
+
// which compiles down to a div with a the class `react-flow__node`.
|
|
14
|
+
// When a node is selected, the class `selected` is added to the
|
|
15
|
+
// `react-flow__node` element. This allows us to style the node when it
|
|
16
|
+
isSelected ? 'ring-2 ring-primary' : 'hover:ring-2 hover:ring-gray-700/5',
|
|
17
|
+
className
|
|
18
|
+
)}
|
|
19
|
+
// tabIndex={0}
|
|
20
|
+
{...props}
|
|
21
|
+
/>
|
|
26
22
|
);
|
|
27
|
-
BaseNode.displayName = 'BaseNode';
|
|
28
23
|
|
|
29
24
|
/**
|
|
30
25
|
* A container for a consistent header layout intended to be used inside the
|
|
@@ -9,10 +9,11 @@ import { ErrorIndicator } from '../error-display/error-indicator';
|
|
|
9
9
|
import { BaseNode, BaseNodeContent, BaseNodeHeader, BaseNodeHeaderTitle } from './base-node';
|
|
10
10
|
import { Handle } from './handle';
|
|
11
11
|
import { NodeTab } from './node-tab';
|
|
12
|
+
import { cn } from '@/lib/utils';
|
|
12
13
|
|
|
13
14
|
export function ExternalAgentNode(props: NodeProps & { data: AgentNodeData }) {
|
|
14
15
|
const { data, selected, id } = props;
|
|
15
|
-
const { name, description } = data;
|
|
16
|
+
const { name, description, isExecuting } = data;
|
|
16
17
|
const { getNodeErrors, hasNodeErrors } = useAgentErrors();
|
|
17
18
|
|
|
18
19
|
// Use the agent ID from node data if available, otherwise fall back to React Flow node ID
|
|
@@ -22,10 +23,14 @@ export function ExternalAgentNode(props: NodeProps & { data: AgentNodeData }) {
|
|
|
22
23
|
|
|
23
24
|
return (
|
|
24
25
|
<div className="relative">
|
|
25
|
-
<NodeTab
|
|
26
|
+
<NodeTab isSelected={selected}>External</NodeTab>
|
|
26
27
|
<BaseNode
|
|
27
|
-
isSelected={selected}
|
|
28
|
-
className={
|
|
28
|
+
isSelected={selected || data.isDelegating}
|
|
29
|
+
className={cn(
|
|
30
|
+
'rounded-tl-none',
|
|
31
|
+
hasErrors && 'ring-2 ring-red-300 border-red-300',
|
|
32
|
+
isExecuting && 'node-executing'
|
|
33
|
+
)}
|
|
29
34
|
style={{ width: NODE_WIDTH }}
|
|
30
35
|
>
|
|
31
36
|
<BaseNodeHeader className="flex items-center justify-between gap-2">
|
|
@@ -5,6 +5,7 @@ import { type FunctionToolNodeData, functionToolNodeHandleId } from '../configur
|
|
|
5
5
|
import { ErrorIndicator } from '../error-display/error-indicator';
|
|
6
6
|
import { BaseNode, BaseNodeHeader, BaseNodeHeaderTitle } from './base-node';
|
|
7
7
|
import { Handle } from './handle';
|
|
8
|
+
import { cn } from '@/lib/utils';
|
|
8
9
|
|
|
9
10
|
export function FunctionToolNode(props: NodeProps & { data: FunctionToolNodeData }) {
|
|
10
11
|
const { data, selected, id } = props;
|
|
@@ -21,8 +22,12 @@ export function FunctionToolNode(props: NodeProps & { data: FunctionToolNodeData
|
|
|
21
22
|
return (
|
|
22
23
|
<div className="relative">
|
|
23
24
|
<BaseNode
|
|
24
|
-
isSelected={selected}
|
|
25
|
-
className={
|
|
25
|
+
isSelected={selected || data.isDelegating}
|
|
26
|
+
className={cn(
|
|
27
|
+
'rounded-4xl min-w-40 max-w-xs',
|
|
28
|
+
hasErrors && 'ring-2 ring-red-300 border-red-300',
|
|
29
|
+
data.isExecuting && 'node-executing'
|
|
30
|
+
)}
|
|
26
31
|
>
|
|
27
32
|
<BaseNodeHeader className="mb-0 py-3">
|
|
28
33
|
<div className="flex flex-col gap-1.5">
|
|
@@ -5,8 +5,9 @@ import { Badge } from '@/components/ui/badge';
|
|
|
5
5
|
import { useAgentStore } from '@/features/agent/state/use-agent-store';
|
|
6
6
|
import { getCurrentSelectedToolsForNode } from '@/lib/utils/orphaned-tools-detector';
|
|
7
7
|
import { type MCPNodeData, mcpNodeHandleId } from '../configuration/node-types';
|
|
8
|
-
import { BaseNode, BaseNodeHeader, BaseNodeHeaderTitle } from './base-node';
|
|
8
|
+
import { BaseNode, BaseNodeContent, BaseNodeHeader, BaseNodeHeaderTitle } from './base-node';
|
|
9
9
|
import { Handle } from './handle';
|
|
10
|
+
import { cn } from '@/lib/utils';
|
|
10
11
|
|
|
11
12
|
const TOOLS_SHOWN_LIMIT = 4;
|
|
12
13
|
|
|
@@ -78,32 +79,34 @@ export function MCPNode(props: NodeProps & { data: MCPNodeData }) {
|
|
|
78
79
|
const toolBadges = getToolDisplay();
|
|
79
80
|
|
|
80
81
|
return (
|
|
81
|
-
<BaseNode
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
key={index}
|
|
98
|
-
variant="code"
|
|
99
|
-
className="px-2 text-2xs text-gray-700 dark:text-gray-300 flex-shrink-0"
|
|
100
|
-
>
|
|
101
|
-
{label}
|
|
102
|
-
</Badge>
|
|
103
|
-
))}
|
|
104
|
-
</div>
|
|
105
|
-
</div>
|
|
82
|
+
<BaseNode
|
|
83
|
+
isSelected={selected || data.isDelegating}
|
|
84
|
+
className={cn(
|
|
85
|
+
'rounded-4xl min-w-40 min-h-13 max-w-3xs',
|
|
86
|
+
data.isExecuting && 'node-executing'
|
|
87
|
+
)}
|
|
88
|
+
>
|
|
89
|
+
<BaseNodeHeader className="flex items-center justify-between gap-2">
|
|
90
|
+
<MCPToolImage
|
|
91
|
+
imageUrl={imageUrl}
|
|
92
|
+
name={name}
|
|
93
|
+
provider={provider || undefined}
|
|
94
|
+
size={24}
|
|
95
|
+
className="flex-shrink-0"
|
|
96
|
+
/>
|
|
97
|
+
<BaseNodeHeaderTitle>{name}</BaseNodeHeaderTitle>
|
|
106
98
|
</BaseNodeHeader>
|
|
99
|
+
<BaseNodeContent>
|
|
100
|
+
{toolBadges.map((label, index) => (
|
|
101
|
+
<Badge
|
|
102
|
+
key={index}
|
|
103
|
+
variant="code"
|
|
104
|
+
className="px-2 text-2xs text-gray-700 dark:text-gray-300 flex-shrink-0"
|
|
105
|
+
>
|
|
106
|
+
{label}
|
|
107
|
+
</Badge>
|
|
108
|
+
))}
|
|
109
|
+
</BaseNodeContent>
|
|
107
110
|
<Handle id={mcpNodeHandleId} type="target" position={Position.Top} isConnectable />
|
|
108
111
|
</BaseNode>
|
|
109
112
|
);
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
+
import type { FC, ReactNode } from 'react';
|
|
1
2
|
import { cn } from '@/lib/utils';
|
|
2
3
|
|
|
3
4
|
interface NodeTabProps {
|
|
4
|
-
|
|
5
|
-
children:
|
|
5
|
+
isSelected?: boolean;
|
|
6
|
+
children: ReactNode;
|
|
6
7
|
}
|
|
7
8
|
|
|
8
|
-
export
|
|
9
|
+
export const NodeTab: FC<NodeTabProps> = ({ isSelected, children }) => {
|
|
9
10
|
return (
|
|
10
11
|
<div
|
|
11
12
|
className={cn(
|
|
12
|
-
'
|
|
13
|
-
|
|
13
|
+
'px-2 py-0.5 rounded-t-md flex items-center gap-2 w-fit border border-b-0 font-medium font-mono text-xs uppercase',
|
|
14
|
+
isSelected
|
|
14
15
|
? 'bg-primary border-primary text-white ring-2 ring-primary'
|
|
15
16
|
: 'bg-muted text-muted-foreground border-border'
|
|
16
17
|
)}
|
|
@@ -18,4 +19,4 @@ export function NodeTab({ selected, children }: NodeTabProps) {
|
|
|
18
19
|
{children}
|
|
19
20
|
</div>
|
|
20
21
|
);
|
|
21
|
-
}
|
|
22
|
+
};
|
|
@@ -14,6 +14,7 @@ import { ErrorIndicator } from '../error-display/error-indicator';
|
|
|
14
14
|
import { BaseNode, BaseNodeContent, BaseNodeHeader, BaseNodeHeaderTitle } from './base-node';
|
|
15
15
|
import { Handle } from './handle';
|
|
16
16
|
import { NodeTab } from './node-tab';
|
|
17
|
+
import { cn } from '@/lib/utils';
|
|
17
18
|
|
|
18
19
|
const ListSection = ({
|
|
19
20
|
title,
|
|
@@ -73,10 +74,14 @@ export function SubAgentNode(props: NodeProps & { data: AgentNodeData }) {
|
|
|
73
74
|
|
|
74
75
|
return (
|
|
75
76
|
<div className="relative">
|
|
76
|
-
{isDefault
|
|
77
|
+
{isDefault && <NodeTab isSelected={selected || data.isDelegating}>Default</NodeTab>}
|
|
77
78
|
<BaseNode
|
|
78
|
-
isSelected={selected}
|
|
79
|
-
className={
|
|
79
|
+
isSelected={selected || data.isDelegating}
|
|
80
|
+
className={cn(
|
|
81
|
+
isDefault && 'rounded-tl-none',
|
|
82
|
+
hasErrors && 'ring-2 ring-red-300 border-red-300',
|
|
83
|
+
data.isExecuting && 'node-executing'
|
|
84
|
+
)}
|
|
80
85
|
style={{ width: NODE_WIDTH }}
|
|
81
86
|
>
|
|
82
87
|
<BaseNodeHeader className="flex items-center justify-between gap-2">
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { InkeepEmbeddedChat } from '@inkeep/agents-ui';
|
|
3
3
|
import type { ComponentsConfig, InkeepCallbackEvent } from '@inkeep/agents-ui/types';
|
|
4
|
-
import { nanoid } from 'nanoid';
|
|
5
4
|
import { useCallback, useEffect, useRef } from 'react';
|
|
6
5
|
import { DynamicComponentRenderer } from '@/components/data-components/preview/dynamic-component-renderer';
|
|
7
6
|
import type { ConversationDetail } from '@/components/traces/timeline/types';
|
|
8
7
|
import { useRuntimeConfig } from '@/contexts/runtime-config-context';
|
|
9
8
|
import type { DataComponent } from '@/lib/api/data-components';
|
|
9
|
+
import { generateId } from '@/lib/utils/id-utils';
|
|
10
10
|
import { IkpMessage as IkpMessageComponent } from './ikp-message';
|
|
11
11
|
|
|
12
12
|
interface ChatWidgetProps {
|
|
@@ -205,7 +205,7 @@ export function ChatWidget({
|
|
|
205
205
|
stopPollingTimeoutRef.current = null;
|
|
206
206
|
}
|
|
207
207
|
stopPolling();
|
|
208
|
-
setConversationId(
|
|
208
|
+
setConversationId(generateId());
|
|
209
209
|
}
|
|
210
210
|
},
|
|
211
211
|
primaryBrandColor: '#3784ff',
|