@inkeep/agents-manage-ui 0.11.1 → 0.11.3
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 +179 -179
- package/.next/standalone/agents-manage-ui/.next/app-path-routes-manifest.json +8 -8
- package/.next/standalone/agents-manage-ui/.next/build-manifest.json +5 -5
- package/.next/standalone/agents-manage-ui/.next/prerender-manifest.json +3 -3
- package/.next/standalone/agents-manage-ui/.next/react-loadable-manifest.json +3 -3
- 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]/artifacts/[artifactComponentId]/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page_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]/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 +2 -2
- 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 +2 -2
- 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 +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page.js +3 -3
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page.js +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 +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.rsc +9 -9
- package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route.js +2 -2
- 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 +8 -8
- package/.next/standalone/agents-manage-ui/.next/server/chunks/2309.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/2539.js +3 -3
- package/.next/standalone/agents-manage-ui/.next/server/chunks/3547.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/3859.js +23 -19
- package/.next/standalone/agents-manage-ui/.next/server/chunks/3981.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/4702.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/544.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/{6847.js → 5616.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/{5634.js → 7577.js} +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/chunks/8449.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/chunks/{6122.js → 8835.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/2063-3f9e00e568b9fbd9.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{3023-7903e7b102b972eb.js → 2706-8d6852e4f38c2068.js} +8 -8
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{6550.bb60e05a00a6253b.js → 4169.808bb74a234140c9.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{4805.2bcf78beb7261189.js → 4805.deb96c6337ad6922.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{5418-be4d6d44125363e7.js → 6550-51aa7da8be9d90a5.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/7143-b3731044529a566f.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/7167-074e34f38369470a.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/929-cc251a7a8ca04af8.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-342913575ce3d3d4.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page-fef4d7d7fd7b8092.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/new/page-fef4d7d7fd7b8092.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/page-017ada6e50411751.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/{page-9e6887d2897ac9ee.js → page-2d27034d4d63c5b8.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/new/{page-9e6887d2897ac9ee.js → page-2d27034d4d63c5b8.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/page-9cc88cb8c7b1fc20.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-d8adb95f3270c27c.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-bfa2ae8536d8bb5f.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-b89dcddfdd2f1c10.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/{page-38b9ec61d904adae.js → page-58d11ac42f61ecd4.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/graphs/[graphId]/{page-2b3647052f03a92a.js → page-c49abd7e45c6621e.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/graphs/new/{page-5fa87b9255d9faa8.js → page-0343ee5133a2c717.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/graphs/page-b28487f6ca95d30f.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/{page-2993859f442af094.js → page-cfad1fad7222b283.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/new/{page-f69b94c3b9043ad4.js → page-76a29c75d1416a1d.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/{page-78e244f6ea091f12.js → page-e68478e4a7416619.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/settings/{page-b86c05b4baf32cb6.js → page-ab0436aa700f67d5.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/ai-calls/page-6eb122638434c9cf.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page-924004e316c0e468.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-622e36e5b334e5c9.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/page-7e49dc1eb2150661.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-e0349a2e97646204.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{webpack-b20dc8e12f728891.js → webpack-2e00dfb974dac679.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/css/35104f76c2884833.css +1 -0
- package/.next/standalone/agents-manage-ui/package.json +1 -1
- package/.next/standalone/packages/agents-core/package.json +1 -1
- package/package.json +4 -4
- package/src/app/api/signoz/conversations/[conversationId]/route.ts +92 -55
- package/src/components/graph/nodes/mcp-node.tsx +38 -44
- package/src/components/graph/nodes/mcp-placeholder-node.tsx +1 -1
- package/src/components/traces/conversation-detail.tsx +90 -75
- package/src/components/traces/conversation-stats/conversation-list-item.tsx +3 -3
- package/src/components/traces/signoz-link.tsx +2 -2
- package/src/components/traces/timeline/render-panel-content.tsx +116 -8
- package/src/components/traces/timeline/timeline-item.tsx +36 -2
- package/src/components/traces/timeline/timeline-wrapper.tsx +2 -0
- package/src/components/traces/timeline/types.ts +11 -10
- package/src/constants/signoz.ts +6 -0
- package/src/lib/utils/signoz-links.ts +53 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/1405.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/1680.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/4735.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/7955.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/2063-af61e7c864e76f4f.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/3520-2e1a81f03d10dde7.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/7143-de3bf969c411ad87.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/7167-4c04ea99416d3fbe.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-8a95ebae051f85b0.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page-1e72d29f341799b2.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/new/page-1e72d29f341799b2.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/page-8ee82cf7734a0b47.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/page-f8fbf99a80d7c7fe.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-d8a14a1a1e1a7c53.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-01f46406fce1b2b9.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-dc38270e07ab46c3.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/graphs/page-e1932a1ee52dcfa3.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/ai-calls/page-77edde19179afc5b.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page-280212bccc58a9fd.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-89af26371322f8c0.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/page-a863c0cf820ba84c.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-5c6135deb59fcb7b.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/css/65192dc2a70f093d.css +0 -1
- package/src/components/traces/conversation-errors.tsx +0 -320
- /package/.next/standalone/agents-manage-ui/.next/static/{A1Gwp87RoCoeHYIQU5Y4L → KoBJ9LsM4YjnplSYXwd-F}/_buildManifest.js +0 -0
- /package/.next/standalone/agents-manage-ui/.next/static/{A1Gwp87RoCoeHYIQU5Y4L → KoBJ9LsM4YjnplSYXwd-F}/_ssgManifest.js +0 -0
|
@@ -356,9 +356,8 @@ function buildConversationListPayload(
|
|
|
356
356
|
]
|
|
357
357
|
),
|
|
358
358
|
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
QUERY_EXPRESSIONS.CONTEXT_ERRORS,
|
|
359
|
+
agentGenerations: listQuery(
|
|
360
|
+
QUERY_EXPRESSIONS.AGENT_GENERATIONS,
|
|
362
361
|
[
|
|
363
362
|
{
|
|
364
363
|
key: {
|
|
@@ -366,15 +365,7 @@ function buildConversationListPayload(
|
|
|
366
365
|
...QUERY_FIELD_CONFIGS.STRING_TAG_COLUMN,
|
|
367
366
|
},
|
|
368
367
|
op: OPERATORS.EQUALS,
|
|
369
|
-
value: SPAN_NAMES.
|
|
370
|
-
},
|
|
371
|
-
{
|
|
372
|
-
key: {
|
|
373
|
-
key: SPAN_KEYS.HAS_ERROR,
|
|
374
|
-
...QUERY_FIELD_CONFIGS.BOOL_TAG_COLUMN,
|
|
375
|
-
},
|
|
376
|
-
op: OPERATORS.EQUALS,
|
|
377
|
-
value: true,
|
|
368
|
+
value: SPAN_NAMES.AGENT_GENERATION,
|
|
378
369
|
},
|
|
379
370
|
],
|
|
380
371
|
[
|
|
@@ -386,6 +377,10 @@ function buildConversationListPayload(
|
|
|
386
377
|
key: SPAN_KEYS.TIMESTAMP,
|
|
387
378
|
...QUERY_FIELD_CONFIGS.INT64_TAG_COLUMN,
|
|
388
379
|
},
|
|
380
|
+
{
|
|
381
|
+
key: SPAN_KEYS.HAS_ERROR,
|
|
382
|
+
...QUERY_FIELD_CONFIGS.BOOL_TAG_COLUMN,
|
|
383
|
+
},
|
|
389
384
|
{
|
|
390
385
|
key: SPAN_KEYS.STATUS_MESSAGE,
|
|
391
386
|
...QUERY_FIELD_CONFIGS.STRING_TAG,
|
|
@@ -396,17 +391,11 @@ function buildConversationListPayload(
|
|
|
396
391
|
},
|
|
397
392
|
]
|
|
398
393
|
),
|
|
399
|
-
|
|
400
|
-
|
|
394
|
+
|
|
395
|
+
// Count spans with errors
|
|
396
|
+
spansWithErrors: listQuery(
|
|
397
|
+
QUERY_EXPRESSIONS.SPANS_WITH_ERRORS,
|
|
401
398
|
[
|
|
402
|
-
{
|
|
403
|
-
key: {
|
|
404
|
-
key: SPAN_KEYS.NAME,
|
|
405
|
-
...QUERY_FIELD_CONFIGS.STRING_TAG_COLUMN,
|
|
406
|
-
},
|
|
407
|
-
op: OPERATORS.EQUALS,
|
|
408
|
-
value: SPAN_NAMES.AGENT_GENERATION,
|
|
409
|
-
},
|
|
410
399
|
{
|
|
411
400
|
key: {
|
|
412
401
|
key: SPAN_KEYS.HAS_ERROR,
|
|
@@ -422,16 +411,8 @@ function buildConversationListPayload(
|
|
|
422
411
|
...QUERY_FIELD_CONFIGS.STRING_TAG_COLUMN,
|
|
423
412
|
},
|
|
424
413
|
{
|
|
425
|
-
key: SPAN_KEYS.
|
|
426
|
-
...QUERY_FIELD_CONFIGS.
|
|
427
|
-
},
|
|
428
|
-
{
|
|
429
|
-
key: SPAN_KEYS.STATUS_MESSAGE,
|
|
430
|
-
...QUERY_FIELD_CONFIGS.STRING_TAG,
|
|
431
|
-
},
|
|
432
|
-
{
|
|
433
|
-
key: SPAN_KEYS.OTEL_STATUS_DESCRIPTION,
|
|
434
|
-
...QUERY_FIELD_CONFIGS.STRING_TAG,
|
|
414
|
+
key: SPAN_KEYS.NAME,
|
|
415
|
+
...QUERY_FIELD_CONFIGS.STRING_TAG_COLUMN,
|
|
435
416
|
},
|
|
436
417
|
]
|
|
437
418
|
),
|
|
@@ -587,6 +568,14 @@ function buildConversationListPayload(
|
|
|
587
568
|
key: SPAN_KEYS.AI_RESPONSE_TEXT,
|
|
588
569
|
...QUERY_FIELD_CONFIGS.STRING_TAG,
|
|
589
570
|
},
|
|
571
|
+
{
|
|
572
|
+
key: SPAN_KEYS.AI_RESPONSE_TOOL_CALLS,
|
|
573
|
+
...QUERY_FIELD_CONFIGS.STRING_TAG,
|
|
574
|
+
},
|
|
575
|
+
{
|
|
576
|
+
key: SPAN_KEYS.AI_PROMPT_MESSAGES,
|
|
577
|
+
...QUERY_FIELD_CONFIGS.STRING_TAG,
|
|
578
|
+
},
|
|
590
579
|
]
|
|
591
580
|
),
|
|
592
581
|
|
|
@@ -750,8 +739,8 @@ export async function GET(
|
|
|
750
739
|
const toolCallSpans = parseList(resp, QUERY_EXPRESSIONS.TOOL_CALLS);
|
|
751
740
|
const contextResolutionSpans = parseList(resp, QUERY_EXPRESSIONS.CONTEXT_RESOLUTION);
|
|
752
741
|
const contextHandleSpans = parseList(resp, QUERY_EXPRESSIONS.CONTEXT_HANDLE);
|
|
753
|
-
const
|
|
754
|
-
const
|
|
742
|
+
const agentGenerationSpans = parseList(resp, QUERY_EXPRESSIONS.AGENT_GENERATIONS);
|
|
743
|
+
const spansWithErrorsList = parseList(resp, QUERY_EXPRESSIONS.SPANS_WITH_ERRORS);
|
|
755
744
|
const userMessageSpans = parseList(resp, QUERY_EXPRESSIONS.USER_MESSAGES);
|
|
756
745
|
const aiAssistantSpans = parseList(resp, QUERY_EXPRESSIONS.AI_ASSISTANT_MESSAGES);
|
|
757
746
|
const aiGenerationSpans = parseList(resp, QUERY_EXPRESSIONS.AI_GENERATIONS);
|
|
@@ -759,6 +748,33 @@ export async function GET(
|
|
|
759
748
|
const contextFetcherSpans = parseList(resp, QUERY_EXPRESSIONS.CONTEXT_FETCHERS);
|
|
760
749
|
const durationSpans = parseList(resp, QUERY_EXPRESSIONS.DURATION_SPANS);
|
|
761
750
|
|
|
751
|
+
// Categorize spans with errors into critical errors vs warnings
|
|
752
|
+
const CRITICAL_ERROR_SPAN_NAMES = [
|
|
753
|
+
'execution_handler.execute',
|
|
754
|
+
'agent.load_tools',
|
|
755
|
+
'context.handle_context_resolution',
|
|
756
|
+
'context.resolve',
|
|
757
|
+
'agent.generate',
|
|
758
|
+
'context-resolver.resolve_single_fetch_definition',
|
|
759
|
+
'graph_session.generate_structured_update',
|
|
760
|
+
'graph_session.process_artifact',
|
|
761
|
+
'graph_session.generate_artifact_metadata',
|
|
762
|
+
'response.format_object_response',
|
|
763
|
+
'response.format_response',
|
|
764
|
+
];
|
|
765
|
+
|
|
766
|
+
let errorCount = 0;
|
|
767
|
+
let warningCount = 0;
|
|
768
|
+
|
|
769
|
+
for (const span of spansWithErrorsList) {
|
|
770
|
+
const spanName = getString(span, SPAN_KEYS.NAME, '');
|
|
771
|
+
if (CRITICAL_ERROR_SPAN_NAMES.includes(spanName)) {
|
|
772
|
+
errorCount++;
|
|
773
|
+
} else {
|
|
774
|
+
warningCount++;
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
|
|
762
778
|
let graphId: string | null = null;
|
|
763
779
|
let graphName: string | null = null;
|
|
764
780
|
for (const s of userMessageSpans) {
|
|
@@ -772,6 +788,7 @@ export async function GET(
|
|
|
772
788
|
type:
|
|
773
789
|
| 'tool_call'
|
|
774
790
|
| 'ai_generation'
|
|
791
|
+
| 'agent_generation'
|
|
775
792
|
| 'context_fetch'
|
|
776
793
|
| 'context_resolution'
|
|
777
794
|
| 'user_message'
|
|
@@ -815,6 +832,9 @@ export async function GET(
|
|
|
815
832
|
aiStreamTextContent?: string;
|
|
816
833
|
aiStreamTextModel?: string;
|
|
817
834
|
aiStreamTextOperationId?: string;
|
|
835
|
+
// ai generation specifics
|
|
836
|
+
aiResponseToolCalls?: string;
|
|
837
|
+
aiPromptMessages?: string;
|
|
818
838
|
// save_tool_result specifics
|
|
819
839
|
saveResultSaved?: boolean;
|
|
820
840
|
saveArtifactType?: string;
|
|
@@ -828,6 +848,9 @@ export async function GET(
|
|
|
828
848
|
saveFacts?: string;
|
|
829
849
|
saveToolArgs?: Record<string, any>;
|
|
830
850
|
saveFullResult?: Record<string, any>;
|
|
851
|
+
hasError?: boolean;
|
|
852
|
+
otelStatusCode?: string;
|
|
853
|
+
otelStatusDescription?: string;
|
|
831
854
|
};
|
|
832
855
|
|
|
833
856
|
const activities: Activity[] = [];
|
|
@@ -983,24 +1006,6 @@ export async function GET(
|
|
|
983
1006
|
});
|
|
984
1007
|
}
|
|
985
1008
|
|
|
986
|
-
const contextErrors = contextErrorSpans.map((s) => ({
|
|
987
|
-
spanId: getString(s, SPAN_KEYS.SPAN_ID, ''),
|
|
988
|
-
timestamp: s.timestamp,
|
|
989
|
-
statusDescription:
|
|
990
|
-
getString(s, SPAN_KEYS.STATUS_MESSAGE) ||
|
|
991
|
-
getString(s, SPAN_KEYS.OTEL_STATUS_DESCRIPTION, '') ||
|
|
992
|
-
'No description available',
|
|
993
|
-
}));
|
|
994
|
-
const agentGenerationErrors = agentGenErrorSpans.map((s) => ({
|
|
995
|
-
spanId: getString(s, SPAN_KEYS.SPAN_ID, ''),
|
|
996
|
-
timestamp: s.timestamp,
|
|
997
|
-
statusDescription:
|
|
998
|
-
getString(s, SPAN_KEYS.STATUS_MESSAGE) ||
|
|
999
|
-
getString(s, SPAN_KEYS.OTEL_STATUS_DESCRIPTION, '') ||
|
|
1000
|
-
'No description available',
|
|
1001
|
-
}));
|
|
1002
|
-
const errorCount = contextErrors.length + agentGenerationErrors.length;
|
|
1003
|
-
|
|
1004
1009
|
// user messages
|
|
1005
1010
|
for (const span of userMessageSpans) {
|
|
1006
1011
|
const hasError = getField(span, SPAN_KEYS.HAS_ERROR) === true;
|
|
@@ -1046,6 +1051,11 @@ export async function GET(
|
|
|
1046
1051
|
for (const span of aiGenerationSpans) {
|
|
1047
1052
|
const hasError = getField(span, SPAN_KEYS.HAS_ERROR) === true;
|
|
1048
1053
|
const durMs = getNumber(span, SPAN_KEYS.DURATION_NANO) / 1e6;
|
|
1054
|
+
|
|
1055
|
+
// Extract ai.response.toolCalls and ai.prompt.messages for ai.generateText.doGenerate spans
|
|
1056
|
+
const aiResponseToolCalls = getString(span, SPAN_KEYS.AI_RESPONSE_TOOL_CALLS, '');
|
|
1057
|
+
const aiPromptMessages = getString(span, SPAN_KEYS.AI_PROMPT_MESSAGES, '');
|
|
1058
|
+
|
|
1049
1059
|
activities.push({
|
|
1050
1060
|
id: getString(span, SPAN_KEYS.SPAN_ID, ''),
|
|
1051
1061
|
type: ACTIVITY_TYPES.AI_GENERATION,
|
|
@@ -1062,6 +1072,32 @@ export async function GET(
|
|
|
1062
1072
|
inputTokens: getNumber(span, SPAN_KEYS.GEN_AI_USAGE_INPUT_TOKENS, 0),
|
|
1063
1073
|
outputTokens: getNumber(span, SPAN_KEYS.GEN_AI_USAGE_OUTPUT_TOKENS, 0),
|
|
1064
1074
|
aiResponseText: getString(span, SPAN_KEYS.AI_RESPONSE_TEXT, '') || undefined,
|
|
1075
|
+
aiResponseToolCalls: aiResponseToolCalls || undefined,
|
|
1076
|
+
aiPromptMessages: aiPromptMessages || undefined,
|
|
1077
|
+
});
|
|
1078
|
+
}
|
|
1079
|
+
|
|
1080
|
+
for (const span of agentGenerationSpans) {
|
|
1081
|
+
const hasError = getField(span, SPAN_KEYS.HAS_ERROR) === true;
|
|
1082
|
+
const statusMessage =
|
|
1083
|
+
getString(span, SPAN_KEYS.STATUS_MESSAGE) ||
|
|
1084
|
+
getString(span, SPAN_KEYS.OTEL_STATUS_DESCRIPTION, '');
|
|
1085
|
+
const otelStatusCode = getString(span, SPAN_KEYS.OTEL_STATUS_CODE, '');
|
|
1086
|
+
const otelStatusDescription = getString(span, SPAN_KEYS.OTEL_STATUS_DESCRIPTION, '');
|
|
1087
|
+
|
|
1088
|
+
activities.push({
|
|
1089
|
+
id: getString(span, SPAN_KEYS.SPAN_ID, ''),
|
|
1090
|
+
type: ACTIVITY_TYPES.AGENT_GENERATION,
|
|
1091
|
+
name: 'agent.generate',
|
|
1092
|
+
description: hasError ? 'Agent generation failed' : 'Agent generation',
|
|
1093
|
+
timestamp: span.timestamp,
|
|
1094
|
+
status: hasError ? ACTIVITY_STATUS.ERROR : ACTIVITY_STATUS.SUCCESS,
|
|
1095
|
+
result: hasError
|
|
1096
|
+
? statusMessage || 'Agent generation failed'
|
|
1097
|
+
: 'Agent generation completed',
|
|
1098
|
+
hasError,
|
|
1099
|
+
otelStatusCode: hasError ? otelStatusCode : undefined,
|
|
1100
|
+
otelStatusDescription: hasError ? otelStatusDescription || statusMessage : undefined,
|
|
1065
1101
|
});
|
|
1066
1102
|
}
|
|
1067
1103
|
|
|
@@ -1192,7 +1228,7 @@ export async function GET(
|
|
|
1192
1228
|
return count;
|
|
1193
1229
|
})(),
|
|
1194
1230
|
totalToolCalls: activities.filter((a) => a.type === ACTIVITY_TYPES.TOOL_CALL).length,
|
|
1195
|
-
totalErrors:
|
|
1231
|
+
totalErrors: 0,
|
|
1196
1232
|
totalOpenAICalls: openAICallsCount,
|
|
1197
1233
|
};
|
|
1198
1234
|
|
|
@@ -1215,11 +1251,12 @@ export async function GET(
|
|
|
1215
1251
|
totalInputTokens,
|
|
1216
1252
|
totalOutputTokens,
|
|
1217
1253
|
mcpToolErrors: [],
|
|
1218
|
-
contextErrors,
|
|
1219
|
-
agentGenerationErrors,
|
|
1220
1254
|
graphId,
|
|
1221
1255
|
graphName,
|
|
1222
1256
|
allSpanAttributes,
|
|
1257
|
+
spansWithErrorsCount: spansWithErrorsList.length,
|
|
1258
|
+
errorCount,
|
|
1259
|
+
warningCount,
|
|
1223
1260
|
});
|
|
1224
1261
|
} catch (error) {
|
|
1225
1262
|
const logger = getLogger('conversation-details');
|
|
@@ -8,6 +8,8 @@ import { type MCPNodeData, mcpNodeHandleId } from '../configuration/node-types';
|
|
|
8
8
|
import { BaseNode, BaseNodeHeader, BaseNodeHeaderTitle } from './base-node';
|
|
9
9
|
import { Handle } from './handle';
|
|
10
10
|
|
|
11
|
+
const TOOLS_SHOWN_LIMIT = 4;
|
|
12
|
+
|
|
11
13
|
export function MCPNode(props: NodeProps & { data: MCPNodeData }) {
|
|
12
14
|
const { data, selected } = props;
|
|
13
15
|
const toolLookup = useGraphStore((state) => state.toolLookup);
|
|
@@ -32,10 +34,14 @@ export function MCPNode(props: NodeProps & { data: MCPNodeData }) {
|
|
|
32
34
|
const getToolDisplay = () => {
|
|
33
35
|
if (selectedTools === null) {
|
|
34
36
|
// All tools selected
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
const toolsToShow = (activeTools?.slice(0, TOOLS_SHOWN_LIMIT) || []).map((tool) => tool.name);
|
|
38
|
+
const remainingCount = (activeTools?.length ?? 0) - TOOLS_SHOWN_LIMIT;
|
|
39
|
+
const toolBadges = [...toolsToShow];
|
|
40
|
+
if (remainingCount > 0) {
|
|
41
|
+
toolBadges.push(`+${remainingCount} (ALL)`);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return toolBadges;
|
|
39
45
|
}
|
|
40
46
|
|
|
41
47
|
const selectedCount = selectedTools.length;
|
|
@@ -43,41 +49,35 @@ export function MCPNode(props: NodeProps & { data: MCPNodeData }) {
|
|
|
43
49
|
|
|
44
50
|
// If no tools selected, show 0
|
|
45
51
|
if (selectedCount === 0) {
|
|
46
|
-
return
|
|
47
|
-
toolBadges: ['0'],
|
|
48
|
-
additionalBadge: null,
|
|
49
|
-
};
|
|
52
|
+
return ['0'];
|
|
50
53
|
}
|
|
51
54
|
|
|
52
55
|
// If all tools are selected, show total count
|
|
53
56
|
if (selectedCount === totalCount) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
57
|
+
const toolsToShow = selectedTools.slice(0, TOOLS_SHOWN_LIMIT);
|
|
58
|
+
const remainingCount = selectedCount - TOOLS_SHOWN_LIMIT;
|
|
59
|
+
const toolBadges = [...toolsToShow];
|
|
60
|
+
if (remainingCount > 0) {
|
|
61
|
+
toolBadges.push(`+${remainingCount} (ALL)`);
|
|
62
|
+
}
|
|
63
|
+
return toolBadges;
|
|
58
64
|
}
|
|
59
65
|
|
|
60
|
-
// If
|
|
61
|
-
if (selectedCount <=
|
|
62
|
-
return
|
|
63
|
-
toolBadges: selectedTools,
|
|
64
|
-
additionalBadge: null,
|
|
65
|
-
};
|
|
66
|
+
// If TOOLS_SHOWN_LIMIT or fewer tools selected, show each tool name as separate badge
|
|
67
|
+
if (selectedCount <= TOOLS_SHOWN_LIMIT) {
|
|
68
|
+
return selectedTools;
|
|
66
69
|
}
|
|
67
70
|
|
|
68
|
-
// Show first
|
|
69
|
-
const
|
|
70
|
-
const remainingCount = selectedCount -
|
|
71
|
-
return {
|
|
72
|
-
toolBadges: firstTwoTools,
|
|
73
|
-
additionalBadge: `+${remainingCount}`,
|
|
74
|
-
};
|
|
71
|
+
// Show first TOOLS_SHOWN_LIMIT tool names as separate badges, remaining count in additional badge
|
|
72
|
+
const toolsToShow = selectedTools.slice(0, TOOLS_SHOWN_LIMIT);
|
|
73
|
+
const remainingCount = selectedCount - TOOLS_SHOWN_LIMIT;
|
|
74
|
+
return [...toolsToShow, `+${remainingCount}`];
|
|
75
75
|
};
|
|
76
76
|
|
|
77
|
-
const
|
|
77
|
+
const toolBadges = getToolDisplay();
|
|
78
78
|
|
|
79
79
|
return (
|
|
80
|
-
<BaseNode isSelected={selected} className="rounded-
|
|
80
|
+
<BaseNode isSelected={selected} className="rounded-4xl min-w-40 min-h-13 max-w-3xs">
|
|
81
81
|
<BaseNodeHeader className="mb-0 py-3">
|
|
82
82
|
<div className="flex items-center flex-wrap gap-1">
|
|
83
83
|
<div className="flex items-center gap-2 flex-shrink-0 mr-4">
|
|
@@ -90,23 +90,17 @@ export function MCPNode(props: NodeProps & { data: MCPNodeData }) {
|
|
|
90
90
|
/>
|
|
91
91
|
<BaseNodeHeaderTitle className="flex-shrink-0">{name}</BaseNodeHeaderTitle>
|
|
92
92
|
</div>
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
variant="code"
|
|
105
|
-
className="px-2 text-2xs text-gray-700 dark:text-gray-300 flex-shrink-0"
|
|
106
|
-
>
|
|
107
|
-
{toolDisplay.additionalBadge}
|
|
108
|
-
</Badge>
|
|
109
|
-
)}
|
|
93
|
+
<div className="flex items-center flex-wrap gap-1">
|
|
94
|
+
{toolBadges.map((label, index) => (
|
|
95
|
+
<Badge
|
|
96
|
+
key={index}
|
|
97
|
+
variant="code"
|
|
98
|
+
className="px-2 text-2xs text-gray-700 dark:text-gray-300 flex-shrink-0"
|
|
99
|
+
>
|
|
100
|
+
{label}
|
|
101
|
+
</Badge>
|
|
102
|
+
))}
|
|
103
|
+
</div>
|
|
110
104
|
</div>
|
|
111
105
|
</BaseNodeHeader>
|
|
112
106
|
<Handle id={mcpNodeHandleId} type="target" position={Position.Top} isConnectable />
|
|
@@ -12,7 +12,7 @@ export function MCPPlaceholderNode(props: NodeProps & { data: MCPPlaceholderNode
|
|
|
12
12
|
return (
|
|
13
13
|
<BaseNode
|
|
14
14
|
isSelected={selected}
|
|
15
|
-
className={`rounded-
|
|
15
|
+
className={`rounded-4xl border-dashed min-w-40 min-h-13 flex items-center justify-center max-w-3xs ${selected ? 'outline-dashed outline-2 outline-gray-700 hover:outline-gray-700 ring-0 hover:ring-0' : ''}`}
|
|
16
16
|
>
|
|
17
17
|
<BaseNodeHeader className="mb-0 py-3">
|
|
18
18
|
<Hammer className="size-4 text-muted-foreground/65" />
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
Activity,
|
|
5
|
+
ArrowLeft,
|
|
6
|
+
ExternalLink as ExternalLinkIcon,
|
|
7
|
+
MessageSquare,
|
|
8
|
+
TriangleAlert,
|
|
9
|
+
} from 'lucide-react';
|
|
4
10
|
import { useParams } from 'next/navigation';
|
|
5
11
|
import { useEffect, useState } from 'react';
|
|
6
12
|
import { formatDateTime, formatDuration } from '@/app/utils/format-date';
|
|
@@ -13,7 +19,7 @@ import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
|
|
|
13
19
|
import { ExternalLink } from '@/components/ui/external-link';
|
|
14
20
|
import { ResizablePanelGroup } from '@/components/ui/resizable';
|
|
15
21
|
import { Skeleton } from '@/components/ui/skeleton';
|
|
16
|
-
import {
|
|
22
|
+
import { getSignozTracesExplorerUrl } from '@/lib/utils/signoz-links';
|
|
17
23
|
import { SignozLink } from './signoz-link';
|
|
18
24
|
import { InfoRow } from './timeline/blocks';
|
|
19
25
|
import { TimelineWrapper } from './timeline/timeline-wrapper';
|
|
@@ -27,7 +33,6 @@ export function ConversationDetail({ conversationId, onBack }: ConversationDetai
|
|
|
27
33
|
const [conversation, setConversation] = useState<ConversationDetailType | null>(null);
|
|
28
34
|
const [loading, setLoading] = useState(true);
|
|
29
35
|
const [error, setError] = useState<string | null>(null);
|
|
30
|
-
const [showErrorsPage, setShowErrorsPage] = useState(false);
|
|
31
36
|
const { tenantId, projectId } = useParams();
|
|
32
37
|
|
|
33
38
|
useEffect(() => {
|
|
@@ -38,7 +43,6 @@ export function ConversationDetail({ conversationId, onBack }: ConversationDetai
|
|
|
38
43
|
const response = await fetch(`/api/signoz/conversations/${conversationId}`);
|
|
39
44
|
if (!response.ok) throw new Error('Failed to fetch conversation details');
|
|
40
45
|
const data = await response.json();
|
|
41
|
-
if (typeof data.totalErrors === 'undefined') data.totalErrors = 0;
|
|
42
46
|
setConversation(data);
|
|
43
47
|
} catch (err) {
|
|
44
48
|
setError(err instanceof Error ? err.message : 'An error occurred');
|
|
@@ -86,12 +90,6 @@ export function ConversationDetail({ conversationId, onBack }: ConversationDetai
|
|
|
86
90
|
);
|
|
87
91
|
}
|
|
88
92
|
|
|
89
|
-
if (showErrorsPage) {
|
|
90
|
-
return (
|
|
91
|
-
<ConversationErrors conversationId={conversationId} onBack={() => setShowErrorsPage(false)} />
|
|
92
|
-
);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
93
|
return (
|
|
96
94
|
<div className="h-full flex flex-col">
|
|
97
95
|
{/* Header */}
|
|
@@ -121,40 +119,50 @@ export function ConversationDetail({ conversationId, onBack }: ConversationDetai
|
|
|
121
119
|
|
|
122
120
|
{/* Summary Cards */}
|
|
123
121
|
<div className="grid gap-4 md:grid-cols-2 lg:grid-cols-3 mb-4 flex-shrink-0">
|
|
124
|
-
{/*
|
|
122
|
+
{/* Duration */}
|
|
125
123
|
<Card
|
|
126
|
-
className=
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
124
|
+
className="shadow-none bg-background"
|
|
125
|
+
title={
|
|
126
|
+
conversation.conversationStartTime && conversation.conversationEndTime
|
|
127
|
+
? `Start: ${conversation.conversationStartTime}\nEnd: ${conversation.conversationEndTime}`
|
|
128
|
+
: 'Timing data not available'
|
|
129
|
+
}
|
|
130
130
|
>
|
|
131
131
|
<CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
|
|
132
|
-
<CardTitle className="text-sm font-medium text-foreground">
|
|
133
|
-
<
|
|
132
|
+
<CardTitle className="text-sm font-medium text-foreground">Duration</CardTitle>
|
|
133
|
+
<Activity className="h-4 w-4 text-muted-foreground" />
|
|
134
134
|
</CardHeader>
|
|
135
135
|
<CardContent>
|
|
136
|
-
<div
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
136
|
+
<div className="space-y-2">
|
|
137
|
+
{conversation.conversationStartTime && conversation.conversationEndTime ? (
|
|
138
|
+
<>
|
|
139
|
+
<div className="text-sm font-medium text-foreground">
|
|
140
|
+
<div className="flex items-center gap-1">
|
|
141
|
+
<span className="text-xs text-muted-foreground">Start:</span>
|
|
142
|
+
<span className="text-xs font-mono">
|
|
143
|
+
{formatDateTime(conversation.conversationStartTime)}
|
|
144
|
+
</span>
|
|
145
|
+
</div>
|
|
146
|
+
<div className="flex items-center gap-1 mt-1">
|
|
147
|
+
<span className="text-xs text-muted-foreground">End:</span>
|
|
148
|
+
<span className="text-xs font-mono">
|
|
149
|
+
{formatDateTime(conversation.conversationEndTime)}
|
|
150
|
+
</span>
|
|
151
|
+
</div>
|
|
152
|
+
</div>
|
|
153
|
+
<div className="space-y-1 mt-2">
|
|
154
|
+
{conversation.conversationDuration && (
|
|
155
|
+
<div className="text-xs text-muted-foreground">
|
|
156
|
+
<span className="font-medium">Conversation Duration:</span>{' '}
|
|
157
|
+
{formatDuration(conversation.conversationDuration)}
|
|
158
|
+
</div>
|
|
159
|
+
)}
|
|
160
|
+
</div>
|
|
161
|
+
</>
|
|
162
|
+
) : (
|
|
163
|
+
<div className="text-sm text-muted-foreground">Timing data not available</div>
|
|
164
|
+
)}
|
|
140
165
|
</div>
|
|
141
|
-
<p className="text-xs text-muted-foreground">
|
|
142
|
-
{conversation.totalErrors === 0
|
|
143
|
-
? 'No errors detected'
|
|
144
|
-
: (() => {
|
|
145
|
-
const mcp = conversation.mcpToolErrors?.length || 0;
|
|
146
|
-
const ctx = conversation.contextErrors?.length || 0;
|
|
147
|
-
const agent = conversation.agentGenerationErrors?.length || 0;
|
|
148
|
-
if (mcp || ctx || agent) {
|
|
149
|
-
const parts = [];
|
|
150
|
-
if (mcp) parts.push(`${mcp} MCP tool`);
|
|
151
|
-
if (ctx) parts.push(`${ctx} context`);
|
|
152
|
-
if (agent) parts.push(`${agent} agent generation`);
|
|
153
|
-
return `${parts.join(', ')} errors - Click to view details`;
|
|
154
|
-
}
|
|
155
|
-
return 'Errors in conversation';
|
|
156
|
-
})()}
|
|
157
|
-
</p>
|
|
158
166
|
</CardContent>
|
|
159
167
|
</Card>
|
|
160
168
|
|
|
@@ -215,50 +223,57 @@ export function ConversationDetail({ conversationId, onBack }: ConversationDetai
|
|
|
215
223
|
</CardContent>
|
|
216
224
|
</Card>
|
|
217
225
|
|
|
218
|
-
{/*
|
|
219
|
-
<Card
|
|
220
|
-
className="shadow-none bg-background"
|
|
221
|
-
title={
|
|
222
|
-
conversation.conversationStartTime && conversation.conversationEndTime
|
|
223
|
-
? `Start: ${conversation.conversationStartTime}\nEnd: ${conversation.conversationEndTime}`
|
|
224
|
-
: 'Timing data not available'
|
|
225
|
-
}
|
|
226
|
-
>
|
|
226
|
+
{/* Alerts */}
|
|
227
|
+
<Card className="shadow-none bg-background">
|
|
227
228
|
<CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
|
|
228
|
-
<CardTitle className="text-sm font-medium text-foreground">
|
|
229
|
-
<
|
|
229
|
+
<CardTitle className="text-sm font-medium text-foreground">Alerts</CardTitle>
|
|
230
|
+
<TriangleAlert className="h-4 w-4 text-muted-foreground" />
|
|
230
231
|
</CardHeader>
|
|
231
232
|
<CardContent>
|
|
232
|
-
|
|
233
|
-
|
|
233
|
+
{(() => {
|
|
234
|
+
const errors = conversation.errorCount ?? 0;
|
|
235
|
+
const warnings = conversation.warningCount ?? 0;
|
|
236
|
+
const total = errors + warnings;
|
|
237
|
+
|
|
238
|
+
return (
|
|
234
239
|
<>
|
|
235
|
-
|
|
236
|
-
<div className="
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
240
|
+
{total > 0 ? (
|
|
241
|
+
<div className="space-y-1">
|
|
242
|
+
{errors > 0 && (
|
|
243
|
+
<div className="flex items-baseline gap-2">
|
|
244
|
+
<span className="text-2xl font-bold font-mono text-red-600">{errors}</span>
|
|
245
|
+
<span className="text-sm text-muted-foreground">error{errors > 1 ? 's' : ''}</span>
|
|
246
|
+
</div>
|
|
247
|
+
)}
|
|
248
|
+
{warnings > 0 && (
|
|
249
|
+
<div className="flex items-baseline gap-2">
|
|
250
|
+
<span className="text-2xl font-bold font-mono text-yellow-500">{warnings}</span>
|
|
251
|
+
<span className="text-sm text-muted-foreground">warning{warnings > 1 ? 's' : ''}</span>
|
|
252
|
+
</div>
|
|
253
|
+
)}
|
|
241
254
|
</div>
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
<
|
|
245
|
-
|
|
246
|
-
</span>
|
|
255
|
+
) : (
|
|
256
|
+
<div>
|
|
257
|
+
<div className="text-2xl font-bold font-mono text-green-600 mb-1">0</div>
|
|
258
|
+
<p className="text-xs text-muted-foreground">No warnings or errors</p>
|
|
247
259
|
</div>
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
260
|
+
)}
|
|
261
|
+
{total > 0 && (
|
|
262
|
+
<Button
|
|
263
|
+
variant="outline"
|
|
264
|
+
size="sm"
|
|
265
|
+
className="mt-3 w-full flex items-center justify-center gap-1"
|
|
266
|
+
onClick={() => {
|
|
267
|
+
window.open(getSignozTracesExplorerUrl(conversationId as string), '_blank');
|
|
268
|
+
}}
|
|
269
|
+
>
|
|
270
|
+
<ExternalLinkIcon className="h-3 w-3" />
|
|
271
|
+
View in SigNoz
|
|
272
|
+
</Button>
|
|
273
|
+
)}
|
|
257
274
|
</>
|
|
258
|
-
)
|
|
259
|
-
|
|
260
|
-
)}
|
|
261
|
-
</div>
|
|
275
|
+
);
|
|
276
|
+
})()}
|
|
262
277
|
</CardContent>
|
|
263
278
|
</Card>
|
|
264
279
|
</div>
|
|
@@ -86,14 +86,14 @@ export function ConversationListItem({ conversation, projectId }: ConversationLi
|
|
|
86
86
|
</TooltipContent>
|
|
87
87
|
</Tooltip>
|
|
88
88
|
)}
|
|
89
|
-
<Badge variant="code" className="text-xs">
|
|
90
|
-
{graphName ? `${graphName} (${graphId})` : graphId}
|
|
91
|
-
</Badge>
|
|
92
89
|
{hasErrors && (
|
|
93
90
|
<Badge variant="error" className="flex items-center gap-1">
|
|
94
91
|
{totalErrors} Error{totalErrors > 1 ? 's' : ''}
|
|
95
92
|
</Badge>
|
|
96
93
|
)}
|
|
94
|
+
<Badge variant="code" className="text-xs">
|
|
95
|
+
{graphName ? `${graphName} (${graphId})` : graphId}
|
|
96
|
+
</Badge>
|
|
97
97
|
</div>
|
|
98
98
|
</div>
|
|
99
99
|
</div>
|
|
@@ -137,14 +137,14 @@ interface SignozSpanLinkProps {
|
|
|
137
137
|
export function SignozLink({ conversationId }: SignozLinkProps) {
|
|
138
138
|
const { SIGNOZ_URL } = useRuntimeConfig();
|
|
139
139
|
return (
|
|
140
|
-
<ExternalLink href={makeTracesUrl(SIGNOZ_URL, conversationId)}>View in SigNoz</ExternalLink>
|
|
140
|
+
<ExternalLink href={makeTracesUrl(SIGNOZ_URL, conversationId)}>View Conversation in SigNoz</ExternalLink>
|
|
141
141
|
);
|
|
142
142
|
}
|
|
143
143
|
|
|
144
144
|
export function SignozSpanLink({ traceId, spanId }: SignozSpanLinkProps) {
|
|
145
145
|
const { SIGNOZ_URL } = useRuntimeConfig();
|
|
146
146
|
return (
|
|
147
|
-
<ExternalLink href={makeSpanUrl(SIGNOZ_URL, traceId, spanId)}>View in SigNoz</ExternalLink>
|
|
147
|
+
<ExternalLink href={makeSpanUrl(SIGNOZ_URL, traceId, spanId)}>View span in SigNoz</ExternalLink>
|
|
148
148
|
);
|
|
149
149
|
}
|
|
150
150
|
|