@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.
Files changed (187) hide show
  1. package/.next/standalone/agents-manage-ui/.next/BUILD_ID +1 -1
  2. package/.next/standalone/agents-manage-ui/.next/app-build-manifest.json +186 -186
  3. package/.next/standalone/agents-manage-ui/.next/app-path-routes-manifest.json +6 -6
  4. package/.next/standalone/agents-manage-ui/.next/build-manifest.json +5 -5
  5. package/.next/standalone/agents-manage-ui/.next/prerender-manifest.json +15 -15
  6. package/.next/standalone/agents-manage-ui/.next/react-loadable-manifest.json +17 -17
  7. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/page.js +1 -1
  8. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/api-keys/page.js +3 -3
  10. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/api-keys/page_client-reference-manifest.js +1 -1
  11. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifact-components/[artifactComponentId]/page.js +1 -1
  12. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifact-components/[artifactComponentId]/page.js.nft.json +1 -1
  13. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifact-components/[artifactComponentId]/page_client-reference-manifest.js +1 -1
  14. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifact-components/new/page.js +2 -2
  15. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifact-components/new/page.js.nft.json +1 -1
  16. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifact-components/new/page_client-reference-manifest.js +1 -1
  17. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifact-components/page.js +2 -2
  18. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifact-components/page_client-reference-manifest.js +1 -1
  19. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page.js +2 -2
  20. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page.js.nft.json +1 -1
  21. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page_client-reference-manifest.js +1 -1
  22. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js +2 -2
  23. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js.nft.json +1 -1
  24. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page_client-reference-manifest.js +1 -1
  25. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page.js +1 -1
  26. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page_client-reference-manifest.js +1 -1
  27. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.js +2 -2
  28. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.js.nft.json +1 -1
  29. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page_client-reference-manifest.js +1 -1
  30. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page.js +2 -2
  31. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page.js.nft.json +1 -1
  32. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page_client-reference-manifest.js +1 -1
  33. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page.js +2 -2
  34. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page_client-reference-manifest.js +1 -1
  35. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/data-components/[dataComponentId]/page.js +2 -2
  36. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/data-components/[dataComponentId]/page.js.nft.json +1 -1
  37. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/data-components/[dataComponentId]/page_client-reference-manifest.js +1 -1
  38. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/data-components/new/page.js +2 -2
  39. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/data-components/new/page.js.nft.json +1 -1
  40. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/data-components/new/page_client-reference-manifest.js +1 -1
  41. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/data-components/page.js +2 -2
  42. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/data-components/page_client-reference-manifest.js +1 -1
  43. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/[graphId]/page.js +2 -2
  44. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/[graphId]/page.js.nft.json +1 -1
  45. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/[graphId]/page_client-reference-manifest.js +1 -1
  46. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/new/page.js +1 -1
  47. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/new/page.js.nft.json +1 -1
  48. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/new/page_client-reference-manifest.js +1 -1
  49. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/page.js +2 -2
  50. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/page_client-reference-manifest.js +1 -1
  51. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page.js +2 -2
  52. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page.js.nft.json +1 -1
  53. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page_client-reference-manifest.js +1 -1
  54. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page.js +1 -1
  55. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page_client-reference-manifest.js +1 -1
  56. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page.js +2 -2
  57. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page.js.nft.json +1 -1
  58. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page_client-reference-manifest.js +1 -1
  59. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page.js +2 -2
  60. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page_client-reference-manifest.js +1 -1
  61. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page.js +2 -2
  62. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page_client-reference-manifest.js +1 -1
  63. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page.js +2 -2
  64. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page_client-reference-manifest.js +1 -1
  65. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js +2 -2
  66. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js.nft.json +1 -1
  67. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page_client-reference-manifest.js +1 -1
  68. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page.js +2 -2
  69. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page_client-reference-manifest.js +1 -1
  70. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page.js +3 -3
  71. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page.js.nft.json +1 -1
  72. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page_client-reference-manifest.js +1 -1
  73. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page.js +3 -3
  74. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page_client-reference-manifest.js +1 -1
  75. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page.js +1 -1
  76. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  77. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.html +1 -1
  78. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.rsc +9 -9
  79. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route.js +1 -1
  80. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
  81. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/route_client-reference-manifest.js +1 -1
  82. package/.next/standalone/agents-manage-ui/.next/server/app/page.js +2 -2
  83. package/.next/standalone/agents-manage-ui/.next/server/app/page_client-reference-manifest.js +1 -1
  84. package/.next/standalone/agents-manage-ui/.next/server/app-paths-manifest.json +6 -6
  85. package/.next/standalone/agents-manage-ui/.next/server/chunks/2539.js +8 -8
  86. package/.next/standalone/agents-manage-ui/.next/server/chunks/{7929.js → 3251.js} +1 -1
  87. package/.next/standalone/agents-manage-ui/.next/server/chunks/3424.js +1 -0
  88. package/.next/standalone/agents-manage-ui/.next/server/chunks/3547.js +1 -1
  89. package/.next/standalone/agents-manage-ui/.next/server/chunks/3859.js +19 -3
  90. package/.next/standalone/agents-manage-ui/.next/server/chunks/425.js +1 -1
  91. package/.next/standalone/agents-manage-ui/.next/server/chunks/5232.js +1 -1
  92. package/.next/standalone/agents-manage-ui/.next/server/chunks/5294.js +1 -1
  93. package/.next/standalone/agents-manage-ui/.next/server/chunks/6116.js +1 -1
  94. package/.next/standalone/agents-manage-ui/.next/server/chunks/6777.js +1 -0
  95. package/.next/standalone/agents-manage-ui/.next/server/chunks/679.js +1 -1
  96. package/.next/standalone/agents-manage-ui/.next/server/chunks/6957.js +2 -2
  97. package/.next/standalone/agents-manage-ui/.next/server/chunks/720.js +1 -1
  98. package/.next/standalone/agents-manage-ui/.next/server/chunks/726.js +1 -1
  99. package/.next/standalone/agents-manage-ui/.next/server/chunks/{3404.js → 7965.js} +1 -1
  100. package/.next/standalone/agents-manage-ui/.next/server/chunks/8284.js +1 -0
  101. package/.next/standalone/agents-manage-ui/.next/server/chunks/8444.js +1 -0
  102. package/.next/standalone/agents-manage-ui/.next/server/chunks/8449.js +2 -2
  103. package/.next/standalone/agents-manage-ui/.next/server/chunks/{9772.js → 9093.js} +2 -2
  104. package/.next/standalone/agents-manage-ui/.next/server/chunks/9235.js +1 -1
  105. package/.next/standalone/agents-manage-ui/.next/server/middleware-build-manifest.js +1 -1
  106. package/.next/standalone/agents-manage-ui/.next/server/middleware-react-loadable-manifest.js +1 -1
  107. package/.next/standalone/agents-manage-ui/.next/server/pages/404.html +1 -1
  108. package/.next/standalone/agents-manage-ui/.next/server/pages/500.html +1 -1
  109. package/.next/standalone/agents-manage-ui/.next/server/server-reference-manifest.js +1 -1
  110. package/.next/standalone/agents-manage-ui/.next/server/server-reference-manifest.json +1 -1
  111. package/.next/standalone/agents-manage-ui/.next/static/chunks/{1016-065c7c4004850849.js → 1231-4cd082da6edbfe60.js} +2 -2
  112. package/.next/standalone/agents-manage-ui/.next/static/chunks/1348-d5a92ab92bcff5e2.js +1 -0
  113. package/.next/standalone/agents-manage-ui/.next/static/chunks/2063-51504d0b4f82277e.js +1 -0
  114. package/.next/standalone/agents-manage-ui/.next/static/chunks/2823-d5aa2a7ec93a8174.js +1 -0
  115. package/.next/standalone/agents-manage-ui/.next/static/chunks/{4090-041bb034eaa7be6c.js → 4160-58edceff96697674.js} +1 -1
  116. package/.next/standalone/agents-manage-ui/.next/static/chunks/{4229.a3af860481552dea.js → 4229.8460547691a15bed.js} +1 -1
  117. package/.next/standalone/agents-manage-ui/.next/static/chunks/{6497-d25dae53e4f0b68a.js → 6497-95887fafcaf35d31.js} +1 -1
  118. package/.next/standalone/agents-manage-ui/.next/static/chunks/7167-5ae757a48267eecd.js +1 -0
  119. package/.next/standalone/agents-manage-ui/.next/static/chunks/{8531.15d8d4ac923abbfd.js → 8531.1dafd6b1ecb8f349.js} +1 -1
  120. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-4293910b444cc135.js +1 -0
  121. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifact-components/[artifactComponentId]/{page-49ed1a294d705e2b.js → page-c3ed0ba99186d0d6.js} +1 -1
  122. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifact-components/new/{page-49ed1a294d705e2b.js → page-c3ed0ba99186d0d6.js} +1 -1
  123. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifact-components/{page-620d86f21e1681e4.js → page-874c135f55b0ca0f.js} +1 -1
  124. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-ba0f0ba1b92291e8.js +1 -0
  125. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-8dbbb7c3696c4b18.js +1 -0
  126. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-62a5f6c00f915faf.js +1 -0
  127. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/page-71df4b4a01fc0dd1.js +1 -0
  128. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/data-components/[dataComponentId]/{page-2a339c25cf52f458.js → page-0f4fd1d8b7db8265.js} +1 -1
  129. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/data-components/new/{page-2a339c25cf52f458.js → page-0f4fd1d8b7db8265.js} +1 -1
  130. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/data-components/page-318381630d4f6030.js +1 -0
  131. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/graphs/[graphId]/{page-83f03615dc11014b.js → page-09211eb5d072f78c.js} +1 -1
  132. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/graphs/new/{page-da8ddb54272917ab.js → page-dedc24c2a11b92e3.js} +1 -1
  133. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/graphs/page-0302c606381a745f.js +1 -0
  134. 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
  135. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/{page-aa753859a6cd98f8.js → page-d4d01b9c19e6a359.js} +1 -1
  136. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/new/{page-b1024549b5350223.js → page-6c3986967816a7e7.js} +1 -1
  137. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/page-3eb5183a82b07c23.js +1 -0
  138. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/settings/{page-d9b96584b3200c5d.js → page-3e56a25e59c5c30e.js} +1 -1
  139. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-250e186f12cac2f8.js +1 -0
  140. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/page-3e96b2df7be28113.js +1 -0
  141. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-238b7db4cb9e8101.js +1 -0
  142. package/.next/standalone/agents-manage-ui/.next/static/chunks/{webpack-4a10374a948c9803.js → webpack-211ed257f0444458.js} +1 -1
  143. package/.next/standalone/agents-manage-ui/.next/static/css/2f1b486594d6d68b.css +1 -0
  144. package/.next/standalone/agents-manage-ui/package.json +1 -1
  145. package/.next/standalone/package.json +1 -6
  146. package/.next/standalone/packages/agents-core/package.json +5 -3
  147. package/package.json +4 -4
  148. package/src/app/api/signoz/conversations/[conversationId]/route.ts +20 -4
  149. package/src/components/graph/configuration/node-types.tsx +6 -0
  150. package/src/components/graph/graph.tsx +109 -38
  151. package/src/components/graph/nodes/mcp-node.tsx +3 -2
  152. package/src/components/graph/playground/custom-headers-dialog.tsx +1 -1
  153. package/src/components/graph/playground/playground.tsx +48 -17
  154. package/src/components/graph/sidepane/nodes/mcp-node-editor.tsx +14 -22
  155. package/src/components/graph/sidepane/nodes/mcp-selector/mcp-selector.tsx +1 -1
  156. package/src/components/traces/timeline/activity-timeline.tsx +3 -0
  157. package/src/components/traces/timeline/render-panel-content.tsx +63 -9
  158. package/src/components/traces/timeline/timeline-item.tsx +19 -1
  159. package/src/components/traces/timeline/timeline-wrapper.tsx +12 -7
  160. package/src/components/traces/timeline/types.ts +4 -0
  161. package/src/features/graph/domain/deserialize.ts +22 -53
  162. package/src/features/graph/domain/serialize.ts +15 -6
  163. package/src/features/graph/state/use-graph-store.ts +37 -13
  164. package/src/lib/utils/mcp-urls.ts +1 -2
  165. package/src/lib/utils/orphaned-tools-detector.ts +76 -50
  166. package/.next/standalone/agents-manage-ui/.next/server/chunks/3086.js +0 -1
  167. package/.next/standalone/agents-manage-ui/.next/server/chunks/581.js +0 -1
  168. package/.next/standalone/agents-manage-ui/.next/server/chunks/5956.js +0 -1
  169. package/.next/standalone/agents-manage-ui/.next/server/chunks/6314.js +0 -1
  170. package/.next/standalone/agents-manage-ui/.next/static/chunks/1038-54d48d86de704a66.js +0 -1
  171. package/.next/standalone/agents-manage-ui/.next/static/chunks/2063-fdc0702cbb1a1a89.js +0 -1
  172. package/.next/standalone/agents-manage-ui/.next/static/chunks/7167-62fb01db4bf7c93f.js +0 -1
  173. package/.next/standalone/agents-manage-ui/.next/static/chunks/9015-a88871b0493fa6a4.js +0 -1
  174. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-d4772fb2fe52d502.js +0 -1
  175. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-1adc6c6811c5224b.js +0 -1
  176. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-3a6d23feb7e81c60.js +0 -1
  177. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-943ca6e800bfb42e.js +0 -1
  178. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/page-d98ce43ab8686e03.js +0 -1
  179. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/data-components/page-2b56d1bb8facba92.js +0 -1
  180. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/graphs/page-e43da749deafb4dd.js +0 -1
  181. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/page-15d74bf9095a3a5f.js +0 -1
  182. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-989cf7b49617d609.js +0 -1
  183. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/page-3610d41580ae65f5.js +0 -1
  184. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-62da969ed126dce3.js +0 -1
  185. package/.next/standalone/agents-manage-ui/.next/static/css/98c416ff19152db0.css +0 -1
  186. /package/.next/standalone/agents-manage-ui/.next/static/{2w7Mtrd1QqrH5dFKfhc0T → b4zppSKvfyEEhDL6m73WI}/_buildManifest.js +0 -0
  187. /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
- const config: AgentToolConfig = {};
158
+ if (tool.agentToolRelationId) {
159
+ const config: AgentToolConfig = {
160
+ toolId: tool.toolId,
161
+ };
179
162
 
180
- if (tool.toolSelection) {
181
- config.toolSelection = tool.toolSelection;
182
- }
163
+ if (tool.toolSelection) {
164
+ config.toolSelection = tool.toolSelection;
165
+ }
183
166
 
184
- if (tool.headers) {
185
- config.headers = tool.headers;
186
- }
167
+ if (tool.headers) {
168
+ config.headers = tool.headers;
169
+ }
187
170
 
188
- // Only add to map if we have either toolSelection or headers
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
- getSelectedToolsLookup(agentToolConfigLookup)
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(nodes, selectedToolsLookup, toolLookup);
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 selectedToolsLookup = useGraphStore((state) => state.selectedToolsLookup);
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, selectedToolsLookup);
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="outline">
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 { ArrowLeft } from 'lucide-react';
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 className="bg-background h-full w-full z-10 flex flex-col">
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
- <ResizableHandle />
63
- <TimelineWrapper
64
- isPolling={isPolling}
65
- conversation={chatActivities}
66
- enableAutoScroll={true}
67
- error={error}
68
- retryConnection={retryConnection}
69
- refreshOnce={refreshOnce}
70
- showConversationTracesLink={true}
71
- conversationId={conversationId}
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 { getCurrentSelectedToolsForNode } from '@/lib/utils/orphaned-tools-detector';
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
- // Get current headers for this tool from all agents
36
- const getCurrentHeaders = useCallback((): Record<string, string> => {
37
- // First check if we have temporary headers stored on the node
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
- // Otherwise, get from the database/initial state - find any agent that has headers for this tool
43
- for (const agentId in agentToolConfigLookup) {
44
- const toolConfig = agentToolConfigLookup[agentId]?.[selectedNode.data.toolId];
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 external headers change
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
- }, [getCurrentHeaders]);
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, selectedToolsLookup);
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
- <Info label="Result" value={a.toolResult || 'No result available'} />
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
- <Info label="Result" value={a.toolResult || 'No result available'} />
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
- <Info label="Result" value={a.toolResult || 'No result available'} />
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
- <Info label="Result" value={a.toolResult || 'No result available'} />
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 className="flex flex-col text-muted-foreground relative text-xs">
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}