@inkeep/agents-manage-ui 0.8.7 → 0.10.1
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 +186 -186
- package/.next/standalone/agents-manage-ui/.next/app-path-routes-manifest.json +6 -6
- 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 +17 -17
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/page.js +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]/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]/artifact-components/[artifactComponentId]/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifact-components/[artifactComponentId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifact-components/[artifactComponentId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifact-components/new/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifact-components/new/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifact-components/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifact-components/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifact-components/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page.js +2 -2
- 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_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]/data-components/[dataComponentId]/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/data-components/[dataComponentId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/data-components/[dataComponentId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/data-components/new/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/data-components/new/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/data-components/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/data-components/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/data-components/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/[graphId]/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/[graphId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/[graphId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/new/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/new/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/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 +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_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 +3 -3
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.rsc +9 -9
- 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_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app-paths-manifest.json +6 -6
- package/.next/standalone/agents-manage-ui/.next/server/chunks/2539.js +8 -8
- package/.next/standalone/agents-manage-ui/.next/server/chunks/{7929.js → 3251.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/3424.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/3859.js +19 -3
- package/.next/standalone/agents-manage-ui/.next/server/chunks/425.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/5232.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/5294.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/6116.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/6777.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/679.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/6957.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/chunks/720.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/726.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/{3404.js → 7965.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/8284.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/8444.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/8449.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/chunks/{9772.js → 9093.js} +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/chunks/9235.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/middleware-build-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/middleware-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/{1016-065c7c4004850849.js → 1231-4cd082da6edbfe60.js} +2 -2
- package/.next/standalone/agents-manage-ui/.next/static/chunks/1348-d5a92ab92bcff5e2.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/2063-51504d0b4f82277e.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/2823-d5aa2a7ec93a8174.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{4090-041bb034eaa7be6c.js → 4160-58edceff96697674.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{4229.a3af860481552dea.js → 4229.8460547691a15bed.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{6497-d25dae53e4f0b68a.js → 6497-95887fafcaf35d31.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/7167-5ae757a48267eecd.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{8531.15d8d4ac923abbfd.js → 8531.1dafd6b1ecb8f349.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-4293910b444cc135.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifact-components/[artifactComponentId]/{page-49ed1a294d705e2b.js → page-c3ed0ba99186d0d6.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifact-components/new/{page-49ed1a294d705e2b.js → page-c3ed0ba99186d0d6.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifact-components/{page-620d86f21e1681e4.js → page-874c135f55b0ca0f.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-ba0f0ba1b92291e8.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-8dbbb7c3696c4b18.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-62a5f6c00f915faf.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/page-71df4b4a01fc0dd1.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/data-components/[dataComponentId]/{page-2a339c25cf52f458.js → page-0f4fd1d8b7db8265.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/data-components/new/{page-2a339c25cf52f458.js → page-0f4fd1d8b7db8265.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/data-components/page-318381630d4f6030.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/graphs/[graphId]/{page-83f03615dc11014b.js → page-09211eb5d072f78c.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/graphs/new/{page-da8ddb54272917ab.js → page-dedc24c2a11b92e3.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/graphs/page-0302c606381a745f.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/{page-c65e011074a1fcce.js → page-46c65d299589f5ee.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/{page-aa753859a6cd98f8.js → page-d4d01b9c19e6a359.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/new/{page-b1024549b5350223.js → page-6c3986967816a7e7.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/page-3eb5183a82b07c23.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/settings/{page-d9b96584b3200c5d.js → page-3e56a25e59c5c30e.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-250e186f12cac2f8.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/page-3e96b2df7be28113.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-238b7db4cb9e8101.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{webpack-4a10374a948c9803.js → webpack-211ed257f0444458.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/css/2f1b486594d6d68b.css +1 -0
- package/.next/standalone/agents-manage-ui/package.json +1 -1
- package/.next/standalone/package.json +1 -6
- package/.next/standalone/packages/agents-core/package.json +5 -3
- package/package.json +4 -4
- package/src/app/api/signoz/conversations/[conversationId]/route.ts +20 -4
- package/src/components/graph/configuration/node-types.tsx +6 -0
- package/src/components/graph/graph.tsx +109 -38
- package/src/components/graph/nodes/mcp-node.tsx +3 -2
- package/src/components/graph/playground/custom-headers-dialog.tsx +1 -1
- package/src/components/graph/playground/playground.tsx +48 -17
- package/src/components/graph/sidepane/nodes/mcp-node-editor.tsx +14 -22
- package/src/components/graph/sidepane/nodes/mcp-selector/mcp-selector.tsx +1 -1
- package/src/components/traces/timeline/activity-timeline.tsx +3 -0
- package/src/components/traces/timeline/render-panel-content.tsx +63 -9
- package/src/components/traces/timeline/timeline-item.tsx +19 -1
- package/src/components/traces/timeline/timeline-wrapper.tsx +12 -7
- package/src/components/traces/timeline/types.ts +4 -0
- package/src/features/graph/domain/deserialize.ts +22 -53
- package/src/features/graph/domain/serialize.ts +15 -6
- package/src/features/graph/state/use-graph-store.ts +37 -13
- package/src/lib/utils/mcp-urls.ts +1 -2
- package/src/lib/utils/orphaned-tools-detector.ts +76 -50
- package/.next/standalone/agents-manage-ui/.next/server/chunks/3086.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/581.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/5956.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/6314.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/1038-54d48d86de704a66.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/2063-fdc0702cbb1a1a89.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/7167-62fb01db4bf7c93f.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/9015-a88871b0493fa6a4.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-d4772fb2fe52d502.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-1adc6c6811c5224b.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-3a6d23feb7e81c60.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-943ca6e800bfb42e.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/page-d98ce43ab8686e03.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/data-components/page-2b56d1bb8facba92.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/graphs/page-e43da749deafb4dd.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/page-15d74bf9095a3a5f.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-989cf7b49617d609.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/page-3610d41580ae65f5.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-62da969ed126dce3.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/css/98c416ff19152db0.css +0 -1
- /package/.next/standalone/agents-manage-ui/.next/static/{2w7Mtrd1QqrH5dFKfhc0T → b4zppSKvfyEEhDL6m73WI}/_buildManifest.js +0 -0
- /package/.next/standalone/agents-manage-ui/.next/static/{2w7Mtrd1QqrH5dFKfhc0T → b4zppSKvfyEEhDL6m73WI}/_ssgManifest.js +0 -0
|
@@ -41,40 +41,20 @@ import { detectOrphanedToolsAndGetWarning } from '@/lib/utils/orphaned-tools-det
|
|
|
41
41
|
|
|
42
42
|
// Type for agent tool configuration lookup including both selection and headers
|
|
43
43
|
export type AgentToolConfig = {
|
|
44
|
+
toolId: string;
|
|
44
45
|
toolSelection?: string[];
|
|
45
46
|
headers?: Record<string, string>;
|
|
46
47
|
};
|
|
47
48
|
|
|
49
|
+
// AgentToolConfigLookup: agentId -> relationshipId -> config
|
|
48
50
|
export type AgentToolConfigLookup = Record<string, Record<string, AgentToolConfig>>;
|
|
49
51
|
|
|
50
|
-
// Utility function to derive selectedToolsLookup from agentToolConfigLookup
|
|
51
|
-
export function getSelectedToolsLookup(
|
|
52
|
-
agentToolConfigLookup: AgentToolConfigLookup
|
|
53
|
-
): Record<string, Record<string, string[]>> {
|
|
54
|
-
const selectedToolsLookup: Record<string, Record<string, string[]>> = {};
|
|
55
|
-
|
|
56
|
-
Object.entries(agentToolConfigLookup).forEach(([agentId, toolsMap]) => {
|
|
57
|
-
const selectedToolsMap: Record<string, string[]> = {};
|
|
58
|
-
|
|
59
|
-
Object.entries(toolsMap).forEach(([toolId, config]) => {
|
|
60
|
-
if (config.toolSelection) {
|
|
61
|
-
selectedToolsMap[toolId] = config.toolSelection;
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
if (Object.keys(selectedToolsMap).length > 0) {
|
|
66
|
-
selectedToolsLookup[agentId] = selectedToolsMap;
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
return selectedToolsLookup;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
52
|
import { EdgeType, edgeTypes, initialEdges } from './configuration/edge-types';
|
|
74
53
|
import {
|
|
75
54
|
agentNodeSourceHandleId,
|
|
76
55
|
agentNodeTargetHandleId,
|
|
77
56
|
externalAgentNodeTargetHandleId,
|
|
57
|
+
type MCPNodeData,
|
|
78
58
|
mcpNodeHandleId,
|
|
79
59
|
NodeType,
|
|
80
60
|
newNodeDefaults,
|
|
@@ -175,19 +155,20 @@ function Flow({
|
|
|
175
155
|
if ('canUse' in agentData && agentData.canUse) {
|
|
176
156
|
const toolsMap: Record<string, AgentToolConfig> = {};
|
|
177
157
|
agentData.canUse.forEach((tool) => {
|
|
178
|
-
|
|
158
|
+
if (tool.agentToolRelationId) {
|
|
159
|
+
const config: AgentToolConfig = {
|
|
160
|
+
toolId: tool.toolId,
|
|
161
|
+
};
|
|
179
162
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
163
|
+
if (tool.toolSelection) {
|
|
164
|
+
config.toolSelection = tool.toolSelection;
|
|
165
|
+
}
|
|
183
166
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
167
|
+
if (tool.headers) {
|
|
168
|
+
config.headers = tool.headers;
|
|
169
|
+
}
|
|
187
170
|
|
|
188
|
-
|
|
189
|
-
if (config.toolSelection || config.headers) {
|
|
190
|
-
toolsMap[tool.toolId] = config;
|
|
171
|
+
toolsMap[tool.agentToolRelationId] = config;
|
|
191
172
|
}
|
|
192
173
|
});
|
|
193
174
|
if (Object.keys(toolsMap).length > 0) {
|
|
@@ -198,7 +179,7 @@ function Flow({
|
|
|
198
179
|
return lookup;
|
|
199
180
|
}, [graph?.agents]);
|
|
200
181
|
|
|
201
|
-
const { screenToFlowPosition } = useReactFlow();
|
|
182
|
+
const { screenToFlowPosition, updateNodeData, fitView } = useReactFlow();
|
|
202
183
|
const {
|
|
203
184
|
nodes: storeNodes,
|
|
204
185
|
edges,
|
|
@@ -212,7 +193,6 @@ function Flow({
|
|
|
212
193
|
markSaved,
|
|
213
194
|
clearSelection,
|
|
214
195
|
markUnsaved,
|
|
215
|
-
selectedToolsLookup,
|
|
216
196
|
} = useGraphStore();
|
|
217
197
|
|
|
218
198
|
// Always use enriched nodes for ReactFlow
|
|
@@ -229,7 +209,7 @@ function Flow({
|
|
|
229
209
|
dataComponentLookup,
|
|
230
210
|
artifactComponentLookup,
|
|
231
211
|
toolLookup,
|
|
232
|
-
|
|
212
|
+
agentToolConfigLookup
|
|
233
213
|
);
|
|
234
214
|
}, []);
|
|
235
215
|
|
|
@@ -279,6 +259,28 @@ function Flow({
|
|
|
279
259
|
}
|
|
280
260
|
}, []);
|
|
281
261
|
|
|
262
|
+
// Auto-center graph when sidepane opens/closes
|
|
263
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: we want to trigger on isOpen changes
|
|
264
|
+
useEffect(() => {
|
|
265
|
+
// Delay to allow CSS transition to complete (300ms transition + 50ms buffer)
|
|
266
|
+
const timer = setTimeout(() => {
|
|
267
|
+
fitView({ maxZoom: 1, duration: 200 });
|
|
268
|
+
}, 350);
|
|
269
|
+
|
|
270
|
+
return () => clearTimeout(timer);
|
|
271
|
+
}, [isOpen, fitView]);
|
|
272
|
+
|
|
273
|
+
// Auto-center graph when playground opens/closes
|
|
274
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: we want to trigger on showPlayground changes
|
|
275
|
+
useEffect(() => {
|
|
276
|
+
// Delay to allow CSS transition to complete
|
|
277
|
+
const timer = setTimeout(() => {
|
|
278
|
+
fitView({ maxZoom: 1, duration: 200 });
|
|
279
|
+
}, 350);
|
|
280
|
+
|
|
281
|
+
return () => clearTimeout(timer);
|
|
282
|
+
}, [showPlayground, fitView]);
|
|
283
|
+
|
|
282
284
|
// biome-ignore lint/correctness/useExhaustiveDependencies: we only want to add/connect edges once
|
|
283
285
|
const onConnectWrapped = useCallback((params: Connection) => {
|
|
284
286
|
markUnsaved();
|
|
@@ -337,6 +339,22 @@ function Flow({
|
|
|
337
339
|
};
|
|
338
340
|
}
|
|
339
341
|
|
|
342
|
+
// Update MCP node agentId when connecting agent to MCP tool
|
|
343
|
+
if (
|
|
344
|
+
targetHandle === mcpNodeHandleId &&
|
|
345
|
+
(sourceHandle === agentNodeSourceHandleId || sourceHandle === agentNodeTargetHandleId)
|
|
346
|
+
) {
|
|
347
|
+
const targetNode = nodes.find((n) => n.id === params.target);
|
|
348
|
+
if (targetNode && targetNode.type === NodeType.MCP) {
|
|
349
|
+
const agentId = params.source;
|
|
350
|
+
updateNodeData(targetNode.id, {
|
|
351
|
+
...targetNode.data,
|
|
352
|
+
agentId,
|
|
353
|
+
relationshipId: null, // Will be set after saving to database
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
|
|
340
358
|
requestAnimationFrame(() => {
|
|
341
359
|
commandManager.execute(
|
|
342
360
|
new AddPreparedEdgeCommand(newEdge, { deselectOtherEdgesIfA2A: true })
|
|
@@ -494,7 +512,11 @@ function Flow({
|
|
|
494
512
|
|
|
495
513
|
const onSubmit = useCallback(async () => {
|
|
496
514
|
// Check for orphaned tools before saving
|
|
497
|
-
const warningMessage = detectOrphanedToolsAndGetWarning(
|
|
515
|
+
const warningMessage = detectOrphanedToolsAndGetWarning(
|
|
516
|
+
nodes,
|
|
517
|
+
agentToolConfigLookup,
|
|
518
|
+
toolLookup
|
|
519
|
+
);
|
|
498
520
|
|
|
499
521
|
if (warningMessage) {
|
|
500
522
|
toast.warning(warningMessage, {
|
|
@@ -526,6 +548,54 @@ function Flow({
|
|
|
526
548
|
closeButton: true,
|
|
527
549
|
});
|
|
528
550
|
markSaved();
|
|
551
|
+
|
|
552
|
+
// Update MCP nodes with new relationshipIds from backend response
|
|
553
|
+
if (res.data) {
|
|
554
|
+
// Create a map to track which relationships were processed
|
|
555
|
+
const processedRelationships = new Set<string>();
|
|
556
|
+
|
|
557
|
+
// Update nodes with the new relationshipIds
|
|
558
|
+
setNodes((currentNodes) =>
|
|
559
|
+
currentNodes.map((node) => {
|
|
560
|
+
if (node.type === NodeType.MCP) {
|
|
561
|
+
const mcpNode = node as Node & { data: MCPNodeData };
|
|
562
|
+
if (mcpNode.data.agentId && mcpNode.data.toolId) {
|
|
563
|
+
// If node already has a relationshipId, keep it (it's an existing relationship)
|
|
564
|
+
if (mcpNode.data.relationshipId) {
|
|
565
|
+
return node;
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
// For new nodes (relationshipId is null), find the first unprocessed relationship
|
|
569
|
+
// that matches this agent and tool
|
|
570
|
+
const agentId = mcpNode.data.agentId;
|
|
571
|
+
const toolId = mcpNode.data.toolId;
|
|
572
|
+
|
|
573
|
+
if ('canUse' in res.data.agents[agentId] && res.data.agents[agentId].canUse) {
|
|
574
|
+
const matchingRelationship = res.data.agents[agentId].canUse.find(
|
|
575
|
+
(tool: any) =>
|
|
576
|
+
tool.toolId === toolId &&
|
|
577
|
+
tool.agentToolRelationId &&
|
|
578
|
+
!processedRelationships.has(tool.agentToolRelationId)
|
|
579
|
+
);
|
|
580
|
+
|
|
581
|
+
if (matchingRelationship?.agentToolRelationId) {
|
|
582
|
+
processedRelationships.add(matchingRelationship.agentToolRelationId);
|
|
583
|
+
return {
|
|
584
|
+
...node,
|
|
585
|
+
data: {
|
|
586
|
+
...node.data,
|
|
587
|
+
relationshipId: matchingRelationship.agentToolRelationId,
|
|
588
|
+
},
|
|
589
|
+
};
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
return node;
|
|
595
|
+
})
|
|
596
|
+
);
|
|
597
|
+
}
|
|
598
|
+
|
|
529
599
|
if (!graph?.id && res.data?.id) {
|
|
530
600
|
setMetadata('id', res.data.id);
|
|
531
601
|
router.push(`/${tenantId}/projects/${projectId}/graphs/${res.data.id}`);
|
|
@@ -553,13 +623,13 @@ function Flow({
|
|
|
553
623
|
artifactComponentLookup,
|
|
554
624
|
markSaved,
|
|
555
625
|
setMetadata,
|
|
626
|
+
setNodes,
|
|
556
627
|
router,
|
|
557
628
|
graph?.id,
|
|
558
629
|
tenantId,
|
|
559
630
|
projectId,
|
|
560
631
|
clearErrors,
|
|
561
632
|
setErrors,
|
|
562
|
-
selectedToolsLookup,
|
|
563
633
|
agentToolConfigLookup,
|
|
564
634
|
toolLookup,
|
|
565
635
|
]);
|
|
@@ -636,6 +706,7 @@ function Flow({
|
|
|
636
706
|
projectId={projectId}
|
|
637
707
|
tenantId={tenantId}
|
|
638
708
|
setShowPlayground={setShowPlayground}
|
|
709
|
+
closeSidePane={closeSidePane}
|
|
639
710
|
/>
|
|
640
711
|
)}
|
|
641
712
|
</div>
|
|
@@ -11,7 +11,8 @@ import { Handle } from './handle';
|
|
|
11
11
|
export function MCPNode(props: NodeProps & { data: MCPNodeData }) {
|
|
12
12
|
const { data, selected } = props;
|
|
13
13
|
const toolLookup = useGraphStore((state) => state.toolLookup);
|
|
14
|
-
const
|
|
14
|
+
const agentToolConfigLookup = useGraphStore((state) => state.agentToolConfigLookup);
|
|
15
|
+
const edges = useGraphStore((state) => state.edges);
|
|
15
16
|
|
|
16
17
|
const name = data.name || `Tool: ${data.toolId}`;
|
|
17
18
|
const imageUrl = data.imageUrl;
|
|
@@ -25,7 +26,7 @@ export function MCPNode(props: NodeProps & { data: MCPNodeData }) {
|
|
|
25
26
|
activeTools: toolData?.config?.mcp?.activeTools,
|
|
26
27
|
});
|
|
27
28
|
|
|
28
|
-
const selectedTools = getCurrentSelectedToolsForNode(props,
|
|
29
|
+
const selectedTools = getCurrentSelectedToolsForNode(props, agentToolConfigLookup, edges);
|
|
29
30
|
|
|
30
31
|
// Format the tool display
|
|
31
32
|
const getToolDisplay = () => {
|
|
@@ -85,7 +85,7 @@ function CustomHeadersDialog({ customHeaders, setCustomHeaders }: CustomHeadersD
|
|
|
85
85
|
return (
|
|
86
86
|
<Dialog open={isOpen} onOpenChange={setIsOpen}>
|
|
87
87
|
<DialogTrigger asChild>
|
|
88
|
-
<Button variant="
|
|
88
|
+
<Button variant="ghost" size="sm" className="h-6">
|
|
89
89
|
{numHeaders > 0 ? <Pencil className="w-4 h-4" /> : <Plus className="w-4 h-4" />}
|
|
90
90
|
Custom Headers
|
|
91
91
|
{numHeaders > 0 && <Badge variant="code">{numHeaders}</Badge>}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Bug, X } from 'lucide-react';
|
|
2
2
|
import { nanoid } from 'nanoid';
|
|
3
3
|
import { useState } from 'react';
|
|
4
4
|
import { TimelineWrapper } from '@/components/traces/timeline/timeline-wrapper';
|
|
@@ -13,16 +13,19 @@ interface PlaygroundProps {
|
|
|
13
13
|
projectId: string;
|
|
14
14
|
tenantId: string;
|
|
15
15
|
setShowPlayground: (show: boolean) => void;
|
|
16
|
+
closeSidePane: () => void;
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
export const Playground = ({
|
|
19
20
|
graphId,
|
|
20
21
|
projectId,
|
|
21
22
|
tenantId,
|
|
23
|
+
closeSidePane,
|
|
22
24
|
setShowPlayground,
|
|
23
25
|
}: PlaygroundProps) => {
|
|
24
26
|
const [conversationId, setConversationId] = useState<string>(nanoid());
|
|
25
27
|
const [customHeaders, setCustomHeaders] = useState<Record<string, string>>({});
|
|
28
|
+
const [showTraces, setShowTraces] = useState<boolean>(false);
|
|
26
29
|
const {
|
|
27
30
|
chatActivities,
|
|
28
31
|
isPolling,
|
|
@@ -36,13 +39,36 @@ export const Playground = ({
|
|
|
36
39
|
});
|
|
37
40
|
|
|
38
41
|
return (
|
|
39
|
-
<div
|
|
42
|
+
<div
|
|
43
|
+
className={`bg-background z-10 flex flex-col border-l ${showTraces ? 'w-full' : 'w-1/3 min-w-96'}`}
|
|
44
|
+
>
|
|
40
45
|
<div className="flex min-h-0 items-center justify-between py-2 px-4 border-b flex-shrink-0">
|
|
41
|
-
<Button variant="ghost" size="sm" className="h-6" onClick={() => setShowPlayground(false)}>
|
|
42
|
-
<ArrowLeft className="h-4 w-4" />
|
|
43
|
-
<span>Back to graph</span>
|
|
44
|
-
</Button>
|
|
45
46
|
<CustomHeadersDialog customHeaders={customHeaders} setCustomHeaders={setCustomHeaders} />
|
|
47
|
+
<div className="flex items-center gap-2">
|
|
48
|
+
<Button
|
|
49
|
+
variant="ghost"
|
|
50
|
+
size="sm"
|
|
51
|
+
className="h-6"
|
|
52
|
+
onClick={() => {
|
|
53
|
+
setShowTraces(!showTraces);
|
|
54
|
+
if (!showTraces) {
|
|
55
|
+
closeSidePane();
|
|
56
|
+
}
|
|
57
|
+
}}
|
|
58
|
+
>
|
|
59
|
+
<Bug className="h-4 w-4" />
|
|
60
|
+
{showTraces ? 'Hide debug' : 'Debug'}
|
|
61
|
+
</Button>
|
|
62
|
+
|
|
63
|
+
<Button
|
|
64
|
+
variant="ghost"
|
|
65
|
+
size="sm"
|
|
66
|
+
className="h-6"
|
|
67
|
+
onClick={() => setShowPlayground(false)}
|
|
68
|
+
>
|
|
69
|
+
<X className="h-4 w-4" />
|
|
70
|
+
</Button>
|
|
71
|
+
</div>
|
|
46
72
|
</div>
|
|
47
73
|
<div className="flex-1 min-h-0 w-full">
|
|
48
74
|
<ResizablePanelGroup direction="horizontal">
|
|
@@ -59,17 +85,22 @@ export const Playground = ({
|
|
|
59
85
|
key={JSON.stringify(customHeaders)}
|
|
60
86
|
/>
|
|
61
87
|
</ResizablePanel>
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
88
|
+
|
|
89
|
+
{showTraces && (
|
|
90
|
+
<>
|
|
91
|
+
<ResizableHandle />
|
|
92
|
+
<TimelineWrapper
|
|
93
|
+
isPolling={isPolling}
|
|
94
|
+
conversation={chatActivities}
|
|
95
|
+
enableAutoScroll={true}
|
|
96
|
+
error={error}
|
|
97
|
+
retryConnection={retryConnection}
|
|
98
|
+
refreshOnce={refreshOnce}
|
|
99
|
+
showConversationTracesLink={true}
|
|
100
|
+
conversationId={conversationId}
|
|
101
|
+
/>
|
|
102
|
+
</>
|
|
103
|
+
)}
|
|
73
104
|
</ResizablePanelGroup>
|
|
74
105
|
</div>
|
|
75
106
|
</div>
|
|
@@ -12,7 +12,10 @@ import { Label } from '@/components/ui/label';
|
|
|
12
12
|
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
|
|
13
13
|
import { useGraphStore } from '@/features/graph/state/use-graph-store';
|
|
14
14
|
import { getToolTypeAndName } from '@/lib/utils/mcp-utils';
|
|
15
|
-
import {
|
|
15
|
+
import {
|
|
16
|
+
getCurrentHeadersForNode,
|
|
17
|
+
getCurrentSelectedToolsForNode,
|
|
18
|
+
} from '@/lib/utils/orphaned-tools-detector';
|
|
16
19
|
import type { MCPNodeData } from '../../configuration/node-types';
|
|
17
20
|
import type { AgentToolConfigLookup } from '../../graph';
|
|
18
21
|
|
|
@@ -32,35 +35,24 @@ export function MCPServerNodeEditor({
|
|
|
32
35
|
}>();
|
|
33
36
|
const markUnsaved = useGraphStore((state) => state.markUnsaved);
|
|
34
37
|
|
|
35
|
-
//
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
if ((selectedNode.data as any).tempHeaders !== undefined) {
|
|
39
|
-
return (selectedNode.data as any).tempHeaders;
|
|
40
|
-
}
|
|
38
|
+
// Only use toolLookup - single source of truth
|
|
39
|
+
const toolLookup = useGraphStore((state) => state.toolLookup);
|
|
40
|
+
const edges = useGraphStore((state) => state.edges);
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
if (toolConfig?.headers) {
|
|
46
|
-
return toolConfig.headers;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
return {};
|
|
50
|
-
}, [agentToolConfigLookup, selectedNode.data]);
|
|
42
|
+
const getCurrentHeaders = useCallback((): Record<string, string> => {
|
|
43
|
+
return getCurrentHeadersForNode(selectedNode, agentToolConfigLookup, edges);
|
|
44
|
+
}, [selectedNode, agentToolConfigLookup, edges]);
|
|
51
45
|
|
|
52
46
|
// Local state for headers input (allows invalid JSON while typing)
|
|
53
47
|
const [headersInputValue, setHeadersInputValue] = useState('{}');
|
|
54
48
|
|
|
55
|
-
// Sync input value when
|
|
49
|
+
// Sync input value when node changes (but not on every data change)
|
|
50
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: intentionally omit getCurrentHeaders to prevent reset loops
|
|
56
51
|
useEffect(() => {
|
|
57
52
|
const newHeaders = getCurrentHeaders();
|
|
58
53
|
setHeadersInputValue(JSON.stringify(newHeaders, null, 2));
|
|
59
|
-
}, [
|
|
54
|
+
}, [selectedNode.id]);
|
|
60
55
|
|
|
61
|
-
// Only use toolLookup - single source of truth
|
|
62
|
-
const toolLookup = useGraphStore((state) => state.toolLookup);
|
|
63
|
-
const selectedToolsLookup = useGraphStore((state) => state.selectedToolsLookup);
|
|
64
56
|
const toolData = toolLookup[selectedNode.data.toolId];
|
|
65
57
|
|
|
66
58
|
const availableTools = toolData?.availableTools;
|
|
@@ -80,7 +72,7 @@ export function MCPServerNodeEditor({
|
|
|
80
72
|
</div>
|
|
81
73
|
);
|
|
82
74
|
}
|
|
83
|
-
const selectedTools = getCurrentSelectedToolsForNode(selectedNode,
|
|
75
|
+
const selectedTools = getCurrentSelectedToolsForNode(selectedNode, agentToolConfigLookup, edges);
|
|
84
76
|
|
|
85
77
|
// Find orphaned tools - tools that are selected but no longer available in activeTools
|
|
86
78
|
const orphanedTools =
|
|
@@ -57,7 +57,7 @@ export function MCPSelector({ selectedNode }: { selectedNode: Node }) {
|
|
|
57
57
|
const handleSelect = (mcp: MCPTool) => {
|
|
58
58
|
updateNode(selectedNode.id, {
|
|
59
59
|
type: NodeType.MCP,
|
|
60
|
-
data: { toolId: mcp.id },
|
|
60
|
+
data: { toolId: mcp.id, agentId: null, relationshipId: null },
|
|
61
61
|
});
|
|
62
62
|
};
|
|
63
63
|
|
|
@@ -4,11 +4,13 @@ import type { ActivityItem } from '@/components/traces/timeline/types';
|
|
|
4
4
|
export function ActivityTimeline({
|
|
5
5
|
activities,
|
|
6
6
|
onSelect,
|
|
7
|
+
selectedActivityId,
|
|
7
8
|
collapsedAiMessages,
|
|
8
9
|
onToggleAiMessageCollapse,
|
|
9
10
|
}: {
|
|
10
11
|
activities: ActivityItem[];
|
|
11
12
|
onSelect: (a: ActivityItem) => void;
|
|
13
|
+
selectedActivityId?: string | null;
|
|
12
14
|
collapsedAiMessages?: Set<string>;
|
|
13
15
|
onToggleAiMessageCollapse?: (activityId: string) => void;
|
|
14
16
|
}) {
|
|
@@ -21,6 +23,7 @@ export function ActivityTimeline({
|
|
|
21
23
|
activity={activity}
|
|
22
24
|
isLast={index === activities.length - 1}
|
|
23
25
|
onSelect={() => onSelect(activity)}
|
|
26
|
+
isSelected={selectedActivityId === activity.id}
|
|
24
27
|
isAiMessageCollapsed={collapsedAiMessages?.has(activity.id) || false}
|
|
25
28
|
onToggleAiMessageCollapse={onToggleAiMessageCollapse}
|
|
26
29
|
/>
|
|
@@ -88,6 +88,13 @@ export function renderPanelContent({
|
|
|
88
88
|
<Info label="Input tokens" value={a.inputTokens?.toLocaleString() || '0'} />
|
|
89
89
|
<Info label="Output tokens" value={a.outputTokens?.toLocaleString() || '0'} />
|
|
90
90
|
<Info label="Agent" value={a.agentName || '-'} />
|
|
91
|
+
{a.aiResponseText && (
|
|
92
|
+
<LabeledBlock label="Response text">
|
|
93
|
+
<Bubble className="whitespace-pre-wrap break-words max-h-96 overflow-y-auto">
|
|
94
|
+
{a.aiResponseText}
|
|
95
|
+
</Bubble>
|
|
96
|
+
</LabeledBlock>
|
|
97
|
+
)}
|
|
91
98
|
<StatusBadge status={a.status} />
|
|
92
99
|
<Info label="Timestamp" value={formatDateTime(a.timestamp)} />
|
|
93
100
|
</Section>
|
|
@@ -221,7 +228,20 @@ export function renderPanelContent({
|
|
|
221
228
|
}
|
|
222
229
|
/>
|
|
223
230
|
<StatusBadge status={a.status} />
|
|
224
|
-
|
|
231
|
+
{a.toolCallArgs && (
|
|
232
|
+
<LabeledBlock label="Tool arguments">
|
|
233
|
+
<CodeBubble className="max-h-60 overflow-y-auto">
|
|
234
|
+
<Streamdown>{`\`\`\`json\n${a.toolCallArgs}\n\`\`\``}</Streamdown>
|
|
235
|
+
</CodeBubble>
|
|
236
|
+
</LabeledBlock>
|
|
237
|
+
)}
|
|
238
|
+
{a.toolCallResult && (
|
|
239
|
+
<LabeledBlock label="Tool result">
|
|
240
|
+
<CodeBubble className="max-h-60 overflow-y-auto">
|
|
241
|
+
<Streamdown>{`\`\`\`json\n${a.toolCallResult}\n\`\`\``}</Streamdown>
|
|
242
|
+
</CodeBubble>
|
|
243
|
+
</LabeledBlock>
|
|
244
|
+
)}
|
|
225
245
|
<Info label="Timestamp" value={formatDateTime(a.timestamp)} />
|
|
226
246
|
</Section>
|
|
227
247
|
<Divider />
|
|
@@ -253,7 +273,20 @@ export function renderPanelContent({
|
|
|
253
273
|
}
|
|
254
274
|
/>
|
|
255
275
|
<StatusBadge status={a.status} />
|
|
256
|
-
|
|
276
|
+
{a.toolCallArgs && (
|
|
277
|
+
<LabeledBlock label="Tool arguments">
|
|
278
|
+
<CodeBubble className="max-h-60 overflow-y-auto">
|
|
279
|
+
<Streamdown>{`\`\`\`json\n${a.toolCallArgs}\n\`\`\``}</Streamdown>
|
|
280
|
+
</CodeBubble>
|
|
281
|
+
</LabeledBlock>
|
|
282
|
+
)}
|
|
283
|
+
{a.toolCallResult && (
|
|
284
|
+
<LabeledBlock label="Tool result">
|
|
285
|
+
<CodeBubble className="max-h-60 overflow-y-auto">
|
|
286
|
+
<Streamdown>{`\`\`\`json\n${a.toolCallResult}\n\`\`\``}</Streamdown>
|
|
287
|
+
</CodeBubble>
|
|
288
|
+
</LabeledBlock>
|
|
289
|
+
)}
|
|
257
290
|
<Info label="Timestamp" value={formatDateTime(a.timestamp)} />
|
|
258
291
|
</Section>
|
|
259
292
|
<Divider />
|
|
@@ -286,7 +319,20 @@ export function renderPanelContent({
|
|
|
286
319
|
</LabeledBlock>
|
|
287
320
|
<Info label="Agent" value={a.agentName || 'Unknown agent'} />
|
|
288
321
|
<StatusBadge status={a.status} />
|
|
289
|
-
|
|
322
|
+
{a.toolCallArgs && (
|
|
323
|
+
<LabeledBlock label="Tool arguments">
|
|
324
|
+
<CodeBubble className="max-h-60 overflow-y-auto">
|
|
325
|
+
<Streamdown>{`\`\`\`json\n${a.toolCallArgs}\n\`\`\``}</Streamdown>
|
|
326
|
+
</CodeBubble>
|
|
327
|
+
</LabeledBlock>
|
|
328
|
+
)}
|
|
329
|
+
{a.toolCallResult && (
|
|
330
|
+
<LabeledBlock label="Tool result">
|
|
331
|
+
<CodeBubble className="max-h-60 overflow-y-auto">
|
|
332
|
+
<Streamdown>{`\`\`\`json\n${a.toolCallResult}\n\`\`\``}</Streamdown>
|
|
333
|
+
</CodeBubble>
|
|
334
|
+
</LabeledBlock>
|
|
335
|
+
)}
|
|
290
336
|
<Info label="Timestamp" value={formatDateTime(a.timestamp)} />
|
|
291
337
|
</Section>
|
|
292
338
|
<Divider />
|
|
@@ -315,7 +361,20 @@ export function renderPanelContent({
|
|
|
315
361
|
</LabeledBlock>
|
|
316
362
|
)}
|
|
317
363
|
<StatusBadge status={a.status} />
|
|
318
|
-
|
|
364
|
+
{a.toolCallArgs && (
|
|
365
|
+
<LabeledBlock label="Tool arguments">
|
|
366
|
+
<CodeBubble className="max-h-60 overflow-y-auto">
|
|
367
|
+
<Streamdown>{`\`\`\`json\n${a.toolCallArgs}\n\`\`\``}</Streamdown>
|
|
368
|
+
</CodeBubble>
|
|
369
|
+
</LabeledBlock>
|
|
370
|
+
)}
|
|
371
|
+
{a.toolCallResult && (
|
|
372
|
+
<LabeledBlock label="Tool result">
|
|
373
|
+
<CodeBubble className="max-h-60 overflow-y-auto">
|
|
374
|
+
<Streamdown>{`\`\`\`json\n${a.toolCallResult}\n\`\`\``}</Streamdown>
|
|
375
|
+
</CodeBubble>
|
|
376
|
+
</LabeledBlock>
|
|
377
|
+
)}
|
|
319
378
|
<Info label="Timestamp" value={formatDateTime(a.timestamp)} />
|
|
320
379
|
</Section>
|
|
321
380
|
<Divider />
|
|
@@ -341,11 +400,6 @@ export function renderPanelContent({
|
|
|
341
400
|
<Info label="Output tokens" value={a.outputTokens?.toLocaleString() || '0'} />
|
|
342
401
|
<StatusBadge status={a.status} />
|
|
343
402
|
<Info label="Timestamp" value={formatDateTime(a.timestamp)} />
|
|
344
|
-
<LabeledBlock label="Streamed text content">
|
|
345
|
-
<Bubble className="whitespace-pre-wrap break-words max-h-96 overflow-y-auto">
|
|
346
|
-
{a.aiStreamTextContent || 'No content available'}
|
|
347
|
-
</Bubble>
|
|
348
|
-
</LabeledBlock>
|
|
349
403
|
</Section>
|
|
350
404
|
<Divider />
|
|
351
405
|
{SignozButton}
|
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
type ActivityKind,
|
|
22
22
|
TOOL_TYPES,
|
|
23
23
|
} from '@/components/traces/timeline/types';
|
|
24
|
+
import { Badge } from '@/components/ui/badge';
|
|
24
25
|
|
|
25
26
|
function truncateWords(s: string, nWords: number) {
|
|
26
27
|
const words = s.split(/\s+/);
|
|
@@ -72,6 +73,7 @@ interface TimelineItemProps {
|
|
|
72
73
|
activity: ActivityItem;
|
|
73
74
|
isLast: boolean;
|
|
74
75
|
onSelect: () => void;
|
|
76
|
+
isSelected?: boolean;
|
|
75
77
|
isAiMessageCollapsed?: boolean;
|
|
76
78
|
onToggleAiMessageCollapse?: (activityId: string) => void;
|
|
77
79
|
}
|
|
@@ -80,6 +82,7 @@ export function TimelineItem({
|
|
|
80
82
|
activity,
|
|
81
83
|
isLast,
|
|
82
84
|
onSelect,
|
|
85
|
+
isSelected = false,
|
|
83
86
|
isAiMessageCollapsed = false,
|
|
84
87
|
onToggleAiMessageCollapse,
|
|
85
88
|
}: TimelineItemProps) {
|
|
@@ -99,7 +102,13 @@ export function TimelineItem({
|
|
|
99
102
|
const isoDateTime = new Date(activity.timestamp).toISOString();
|
|
100
103
|
|
|
101
104
|
return (
|
|
102
|
-
<div
|
|
105
|
+
<div
|
|
106
|
+
className={`flex flex-col text-muted-foreground relative text-xs transition-all duration-200 rounded-lg ${
|
|
107
|
+
isSelected
|
|
108
|
+
? 'bg-primary/5 dark:bg-primary/15 px-3 py-2 ring-2 ring-primary/20 dark:ring-primary/40'
|
|
109
|
+
: 'py-2'
|
|
110
|
+
}`}
|
|
111
|
+
>
|
|
103
112
|
<div className="flex items-start">
|
|
104
113
|
<div className="mr-4 pt-[1px]">
|
|
105
114
|
<Icon className={`w-4 h-4 ${className}`} />
|
|
@@ -368,6 +377,15 @@ export function TimelineItem({
|
|
|
368
377
|
</CodeBubble>
|
|
369
378
|
)}
|
|
370
379
|
|
|
380
|
+
{/* agent name for AI generation */}
|
|
381
|
+
{activity.type === ACTIVITY_TYPES.AI_GENERATION && activity.agentName && (
|
|
382
|
+
<div className="mb-1">
|
|
383
|
+
<Badge variant="code">
|
|
384
|
+
{activity.agentName}
|
|
385
|
+
</Badge>
|
|
386
|
+
</div>
|
|
387
|
+
)}
|
|
388
|
+
|
|
371
389
|
<time
|
|
372
390
|
className="text-xs mb-2 inline-block text-gray-500 dark:text-white/50"
|
|
373
391
|
dateTime={isoDateTime}
|