@inkeep/agents-manage-ui 0.19.8 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) 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 +166 -166
  3. package/.next/standalone/agents-manage-ui/.next/app-path-routes-manifest.json +7 -7
  4. package/.next/standalone/agents-manage-ui/.next/build-manifest.json +5 -5
  5. package/.next/standalone/agents-manage-ui/.next/prerender-manifest.json +20 -20
  6. package/.next/standalone/agents-manage-ui/.next/react-loadable-manifest.json +5 -5
  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]/agents/[agentId]/page.js +1 -1
  10. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/[agentId]/page_client-reference-manifest.js +1 -1
  11. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/new/page.js +2 -2
  12. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/new/page_client-reference-manifest.js +1 -1
  13. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/page.js +2 -2
  14. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/api-keys/page.js +3 -3
  16. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/api-keys/page_client-reference-manifest.js +1 -1
  17. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page.js +1 -1
  18. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page.js.nft.json +1 -1
  19. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page_client-reference-manifest.js +1 -1
  20. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page.js +1 -1
  21. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page.js.nft.json +1 -1
  22. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page_client-reference-manifest.js +1 -1
  23. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/page.js +2 -2
  24. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/page_client-reference-manifest.js +1 -1
  25. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page.js +2 -2
  26. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page.js.nft.json +1 -1
  27. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page_client-reference-manifest.js +1 -1
  28. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page.js +2 -2
  29. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page.js.nft.json +1 -1
  30. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page_client-reference-manifest.js +1 -1
  31. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/page.js +1 -1
  32. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/page_client-reference-manifest.js +1 -1
  33. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page.js +1 -1
  34. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page.js.nft.json +1 -1
  35. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page_client-reference-manifest.js +1 -1
  36. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js +2 -2
  37. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js.nft.json +1 -1
  38. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page_client-reference-manifest.js +1 -1
  39. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page.js +1 -1
  40. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page.js.nft.json +1 -1
  41. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page_client-reference-manifest.js +1 -1
  42. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.js +2 -2
  43. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.js.nft.json +1 -1
  44. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page_client-reference-manifest.js +1 -1
  45. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page.js +2 -2
  46. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page.js.nft.json +1 -1
  47. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page_client-reference-manifest.js +1 -1
  48. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page.js +2 -2
  49. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page_client-reference-manifest.js +1 -1
  50. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page.js +2 -2
  51. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page_client-reference-manifest.js +1 -1
  52. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page.js +1 -1
  53. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page_client-reference-manifest.js +1 -1
  54. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page.js +2 -2
  55. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page_client-reference-manifest.js +1 -1
  56. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page.js +1 -1
  57. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page_client-reference-manifest.js +1 -1
  58. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page.js +1 -1
  59. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page_client-reference-manifest.js +1 -1
  60. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page.js +1 -1
  61. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page_client-reference-manifest.js +1 -1
  62. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js +1 -1
  63. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js.nft.json +1 -1
  64. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page_client-reference-manifest.js +1 -1
  65. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page.js +2 -2
  66. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page_client-reference-manifest.js +1 -1
  67. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page.js +3 -3
  68. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page.js.nft.json +1 -1
  69. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page_client-reference-manifest.js +1 -1
  70. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page.js +1 -1
  71. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page_client-reference-manifest.js +1 -1
  72. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page.js +1 -1
  73. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  74. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.html +1 -1
  75. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.rsc +8 -8
  76. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route.js +1 -1
  77. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
  78. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/route_client-reference-manifest.js +1 -1
  79. package/.next/standalone/agents-manage-ui/.next/server/app/page.js +2 -2
  80. package/.next/standalone/agents-manage-ui/.next/server/app/page_client-reference-manifest.js +1 -1
  81. package/.next/standalone/agents-manage-ui/.next/server/app-paths-manifest.json +7 -7
  82. package/.next/standalone/agents-manage-ui/.next/server/chunks/1186.js +1 -0
  83. package/.next/standalone/agents-manage-ui/.next/server/chunks/2067.js +1 -1
  84. package/.next/standalone/agents-manage-ui/.next/server/chunks/2083.js +1 -1
  85. package/.next/standalone/agents-manage-ui/.next/server/chunks/3002.js +1 -0
  86. package/.next/standalone/agents-manage-ui/.next/server/chunks/3547.js +1 -1
  87. package/.next/standalone/agents-manage-ui/.next/server/chunks/5660.js +1 -0
  88. package/.next/standalone/agents-manage-ui/.next/server/chunks/6641.js +1 -1
  89. package/.next/standalone/agents-manage-ui/.next/server/chunks/7457.js +2 -2
  90. package/.next/standalone/agents-manage-ui/.next/server/chunks/7504.js +7 -7
  91. package/.next/standalone/agents-manage-ui/.next/server/chunks/8498.js +1 -1
  92. package/.next/standalone/agents-manage-ui/.next/server/chunks/{6451.js → 9796.js} +1 -1
  93. package/.next/standalone/agents-manage-ui/.next/server/chunks/9849.js +1 -0
  94. package/.next/standalone/agents-manage-ui/.next/server/middleware-build-manifest.js +1 -1
  95. package/.next/standalone/agents-manage-ui/.next/server/middleware-react-loadable-manifest.js +1 -1
  96. package/.next/standalone/agents-manage-ui/.next/server/pages/404.html +1 -1
  97. package/.next/standalone/agents-manage-ui/.next/server/pages/500.html +1 -1
  98. package/.next/standalone/agents-manage-ui/.next/server/server-reference-manifest.js +1 -1
  99. package/.next/standalone/agents-manage-ui/.next/server/server-reference-manifest.json +1 -1
  100. package/.next/standalone/agents-manage-ui/.next/static/chunks/29440.44fedd2ec0823a02.js +1 -0
  101. package/.next/standalone/agents-manage-ui/.next/static/chunks/35090-089113748c66be03.js +1 -0
  102. package/.next/standalone/agents-manage-ui/.next/static/chunks/{37213-a3d5fa67db657652.js → 37213-cef21d9a27515b0d.js} +1 -1
  103. package/.next/standalone/agents-manage-ui/.next/static/chunks/49858-80fbae619dcf597d.js +1 -0
  104. package/.next/standalone/agents-manage-ui/.next/static/chunks/71558-45b211b48f93150b.js +1 -0
  105. package/.next/standalone/agents-manage-ui/.next/static/chunks/7190-099f08f4db4a3d86.js +1 -0
  106. package/.next/standalone/agents-manage-ui/.next/static/chunks/{92775-6154f3e2dbf25027.js → 92775-ab130c0d2917cb5e.js} +1 -1
  107. package/.next/standalone/agents-manage-ui/.next/static/chunks/{93054.b9b99fcc99a5d40c.js → 93054.332d53645001bbec.js} +1 -1
  108. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/page-c5cd32206a24b578.js +1 -0
  109. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-2b6657e31c305523.js +1 -0
  110. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page-92119462bbc8ce7e.js +1 -0
  111. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/new/page-92119462bbc8ce7e.js +1 -0
  112. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/{page-e1712be9ee333bd7.js → page-af5e6fec44f77780.js} +1 -1
  113. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page-5057d375b3c7ee89.js +1 -0
  114. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/new/page-5057d375b3c7ee89.js +1 -0
  115. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/page-58f22d551d15ea6c.js +1 -0
  116. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-cd4e7e283d6b263d.js +1 -0
  117. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-aef43e3257735bc5.js +1 -0
  118. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-0ced82b6fa5a916e.js +1 -0
  119. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/page-374d72a68e8a4b15.js +1 -0
  120. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/new/{page-50bb2f6d74e4b76a.js → page-4cb3fc58c4f78dad.js} +1 -1
  121. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/{page-0e6edfe2c3f181a7.js → page-a58ccecc11b79c94.js} +1 -1
  122. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/settings/{page-ca36fd27027464aa.js → page-ef3c856a0e4a0d4d.js} +1 -1
  123. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/ai-calls/{page-00cee6f3d629b552.js → page-580fa90a20317d9b.js} +1 -1
  124. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page-e860de4595d782bf.js +1 -0
  125. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-eadbd47e2c2e368d.js +1 -0
  126. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/{page-87eb618883b4e3f5.js → page-8da3548f82d66b62.js} +1 -1
  127. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-35b2dd4ad49880cf.js +1 -0
  128. package/.next/standalone/agents-manage-ui/.next/static/chunks/{webpack-bae1a6a598e24abf.js → webpack-54e97cb161a7dfd3.js} +1 -1
  129. package/.next/standalone/agents-manage-ui/package.json +1 -1
  130. package/.next/standalone/packages/agents-core/package.json +1 -1
  131. package/package.json +4 -4
  132. package/src/app/[tenantId]/projects/[projectId]/agents/page.tsx +1 -1
  133. package/src/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.tsx +1 -1
  134. package/src/app/api/signoz/conversations/[conversationId]/route.ts +3 -11
  135. package/src/components/agent/agent.tsx +1 -1
  136. package/src/components/agent/configuration/agent-types.tsx +1 -1
  137. package/src/components/agent/nodes/sub-agent-node.tsx +2 -2
  138. package/src/components/agent/playground/chat-widget.tsx +1 -0
  139. package/src/components/agent/sidepane/edges/edge-editor.tsx +14 -9
  140. package/src/components/agent/sidepane/metadata/metadata-editor.tsx +8 -8
  141. package/src/components/agent/sidepane/nodes/external-agent-node-editor.tsx +1 -1
  142. package/src/components/agent/sidepane/nodes/mcp-node-editor.tsx +9 -4
  143. package/src/components/agent/sidepane/nodes/model-section.tsx +5 -3
  144. package/src/components/agent/sidepane/nodes/sub-agent-node-editor.tsx +7 -7
  145. package/src/components/artifact-components/form/artifact-component-form.tsx +1 -1
  146. package/src/components/data-components/form/data-component-form.tsx +10 -1
  147. package/src/components/form/form-field-wrapper.tsx +1 -1
  148. package/src/components/form/generic-input.tsx +1 -1
  149. package/src/components/projects/form/project-models-section.tsx +1 -1
  150. package/src/components/projects/form/project-sandbox-section.tsx +1 -1
  151. package/src/components/projects/form/project-stopwhen-section.tsx +2 -1
  152. package/src/components/sidebar-nav/project-selector.tsx +1 -1
  153. package/src/components/traces/ai-calls-breakdown.tsx +6 -6
  154. package/src/components/traces/conversation-detail.tsx +57 -13
  155. package/src/components/traces/conversation-stats/conversation-stats-card.tsx +2 -2
  156. package/src/components/traces/filters/agent-filter.tsx +1 -1
  157. package/src/components/traces/timeline/render-panel-content.tsx +3 -7
  158. package/src/components/traces/timeline/timeline-wrapper.tsx +35 -15
  159. package/src/components/ui/combobox.tsx +1 -1
  160. package/src/constants/page-descriptions.tsx +2 -2
  161. package/src/features/agent/domain/agent-initializer-helpers.ts +3 -2
  162. package/src/features/agent/domain/serialize.ts +6 -6
  163. package/src/features/agent/state/use-agent-store.ts +2 -2
  164. package/src/lib/README.md +15 -15
  165. package/src/lib/utils/agent-error-parser.ts +18 -18
  166. package/src/lib/utils/trace-formatter.ts +79 -0
  167. package/.next/standalone/agents-manage-ui/.next/server/chunks/2786.js +0 -1
  168. package/.next/standalone/agents-manage-ui/.next/server/chunks/448.js +0 -1
  169. package/.next/standalone/agents-manage-ui/.next/server/chunks/7181.js +0 -1
  170. package/.next/standalone/agents-manage-ui/.next/server/chunks/901.js +0 -1
  171. package/.next/standalone/agents-manage-ui/.next/static/chunks/29440.b89b85e734301ee2.js +0 -1
  172. package/.next/standalone/agents-manage-ui/.next/static/chunks/49858-9d58688d4acdd420.js +0 -1
  173. package/.next/standalone/agents-manage-ui/.next/static/chunks/71558-ca56cb02e8dc8775.js +0 -1
  174. package/.next/standalone/agents-manage-ui/.next/static/chunks/7190-20b3b477467e2207.js +0 -1
  175. package/.next/standalone/agents-manage-ui/.next/static/chunks/80876-f0b57615fde13548.js +0 -1
  176. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/page-1443c84d0ae5c822.js +0 -1
  177. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-8f50ad0d7de69701.js +0 -1
  178. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page-9b9ccc14599cbd20.js +0 -1
  179. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/new/page-9b9ccc14599cbd20.js +0 -1
  180. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page-18ae6491190c6805.js +0 -1
  181. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/new/page-18ae6491190c6805.js +0 -1
  182. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/page-4028a78cd422088d.js +0 -1
  183. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-d1e68d82991d5e5d.js +0 -1
  184. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-81023398e97ff7a4.js +0 -1
  185. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-d2f31f40b1c0e8cb.js +0 -1
  186. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/page-fe9376891c8931ec.js +0 -1
  187. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page-48512f59a08d0878.js +0 -1
  188. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-1a5884ccb79f23d6.js +0 -1
  189. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-e037ed1265e8779d.js +0 -1
  190. /package/.next/standalone/agents-manage-ui/.next/static/{cEO8EC1LXYvvdtL1arXWQ → Z3JEU8ftGipmcCmA1QiXN}/_buildManifest.js +0 -0
  191. /package/.next/standalone/agents-manage-ui/.next/static/{cEO8EC1LXYvvdtL1arXWQ → Z3JEU8ftGipmcCmA1QiXN}/_ssgManifest.js +0 -0
@@ -35,7 +35,7 @@ async function AgentsPage({ params }: AgentsPageProps) {
35
35
  </>
36
36
  ) : (
37
37
  <EmptyState
38
- title="No agent yet."
38
+ title="No agents yet."
39
39
  description={agentDescription}
40
40
  link={`/${tenantId}/projects/${projectId}/agents/new`}
41
41
  linkText="Create agent"
@@ -136,7 +136,7 @@ function ProviderSetupPage({ params }: ProviderSetupPageProps) {
136
136
  if (!provider) {
137
137
  return (
138
138
  <div className="flex flex-col items-center justify-center h-64 space-y-4">
139
- <h2 className="text-xl font-semibold">Provider not found</h2>
139
+ <h2 className="text-xl font-semibold">Provider not found.</h2>
140
140
  <p className="text-muted-foreground">
141
141
  The provider "{decodeURIComponent(providerId)}" was not found.
142
142
  </p>
@@ -942,6 +942,7 @@ export async function GET(
942
942
  contextStatusDescription?: string;
943
943
  contextUrl?: string;
944
944
  // tool specifics
945
+ toolName?: string;
945
946
  toolType?: string;
946
947
  toolPurpose?: string;
947
948
  toolCallArgs?: string;
@@ -1010,6 +1011,7 @@ export async function GET(
1010
1011
  id: getString(span, SPAN_KEYS.SPAN_ID, ''),
1011
1012
  type: ACTIVITY_TYPES.TOOL_CALL,
1012
1013
  name,
1014
+ toolName: name,
1013
1015
  description: hasError && statusMessage ? statusMessage : `Called ${name}`,
1014
1016
  timestamp: span.timestamp,
1015
1017
  status: hasError ? ACTIVITY_STATUS.ERROR : ACTIVITY_STATUS.SUCCESS,
@@ -1368,19 +1370,9 @@ export async function GET(
1368
1370
  totalOpenAICalls: openAICallsCount,
1369
1371
  };
1370
1372
 
1371
- const timelineActivities = [];
1372
- for (const a of activities) {
1373
- timelineActivities.push({
1374
- ...a,
1375
- toolName: a.type === ACTIVITY_TYPES.TOOL_CALL ? a.name : undefined,
1376
- toolResult: a.result,
1377
- toolDescription: a.description,
1378
- });
1379
- }
1380
-
1381
1373
  return NextResponse.json({
1382
1374
  ...conversation,
1383
- activities: timelineActivities,
1375
+ activities,
1384
1376
  conversationStartTime: conversationStartTime ? conversationStartTime : null,
1385
1377
  conversationEndTime: conversationEndTime ? conversationEndTime : null,
1386
1378
  conversationDuration: conversationDurationMs,
@@ -683,7 +683,7 @@ function Flow({
683
683
  setErrors(errorSummary);
684
684
 
685
685
  const summaryMessage = getErrorSummaryMessage(errorSummary);
686
- toast.error(summaryMessage || 'Failed to save agent - validation errors found');
686
+ toast.error(summaryMessage || 'Failed to save agent - validation errors found.');
687
687
  } catch (parseError) {
688
688
  // Fallback for unparseable errors
689
689
  console.error('Failed to parse validation errors:', parseError);
@@ -29,7 +29,7 @@ export type AgentMetadata = {
29
29
  contextConfig: ContextConfig;
30
30
  models?: AgentModels;
31
31
  stopWhen?: AgentStopWhen;
32
- agentPrompt?: string;
32
+ prompt?: string;
33
33
  statusUpdates?: StatusUpdateSettings;
34
34
  };
35
35
 
@@ -82,10 +82,10 @@ export function SubAgentNode(props: NodeProps & { data: AgentNodeData }) {
82
82
  <BaseNodeHeader className="flex items-center justify-between gap-2">
83
83
  <div className="flex items-center gap-2 min-w-0">
84
84
  <Bot className="size-4 text-muted-foreground" />
85
- <BaseNodeHeaderTitle>{name || 'SubAgent'}</BaseNodeHeaderTitle>
85
+ <BaseNodeHeaderTitle>{name || 'Sub Agent'}</BaseNodeHeaderTitle>
86
86
  </div>
87
87
  <Badge variant="primary" className="text-xs uppercase">
88
- SubAgent
88
+ Sub Agent
89
89
  </Badge>
90
90
  {hasErrors && (
91
91
  <ErrorIndicator errors={nodeErrors} className="absolute -top-2 -right-2 w-6 h-6" />
@@ -252,6 +252,7 @@ export function ChatWidget({
252
252
  'x-inkeep-tenant-id': tenantId,
253
253
  'x-inkeep-project-id': projectId,
254
254
  'x-inkeep-agent-id': agentId,
255
+ 'x-emit-operations': 'true',
255
256
  Authorization: `Bearer ${INKEEP_AGENTS_RUN_API_BYPASS_SECRET}`,
256
257
  ...customHeaders,
257
258
  },
@@ -131,6 +131,11 @@ function EdgeEditor({ selectedEdge }: EdgeEditorProps) {
131
131
  }
132
132
  };
133
133
 
134
+ const sourceName =
135
+ (sourceNode?.data.name as string) || (sourceNode?.data.id as string) || 'Sub Agent';
136
+ const targetName =
137
+ (targetNode?.data.name as string) || (targetNode?.data.id as string) || 'Sub Agent';
138
+
134
139
  const transferOptions = isSelfLoop
135
140
  ? [
136
141
  {
@@ -138,7 +143,7 @@ function EdgeEditor({ selectedEdge }: EdgeEditorProps) {
138
143
  label: (
139
144
  <div>
140
145
  <Badge variant="code" className="my-0.5">
141
- {sourceNode?.data.name as string}
146
+ {sourceName}
142
147
  </Badge>{' '}
143
148
  can transfer to itself
144
149
  </div>
@@ -151,11 +156,11 @@ function EdgeEditor({ selectedEdge }: EdgeEditorProps) {
151
156
  label: (
152
157
  <div>
153
158
  <Badge variant="code" className="my-0.5">
154
- {sourceNode?.data.name as string}
159
+ {sourceName}
155
160
  </Badge>{' '}
156
161
  can transfer to{' '}
157
162
  <Badge variant="code" className="my-0.5">
158
- {targetNode?.data.name as string}
163
+ {targetName}
159
164
  </Badge>
160
165
  </div>
161
166
  ),
@@ -165,11 +170,11 @@ function EdgeEditor({ selectedEdge }: EdgeEditorProps) {
165
170
  label: (
166
171
  <div>
167
172
  <Badge variant="code" className="my-0.5">
168
- {targetNode?.data.name as string}
173
+ {targetName}
169
174
  </Badge>{' '}
170
175
  can transfer to{' '}
171
176
  <Badge variant="code" className="my-0.5">
172
- {sourceNode?.data.name as string}
177
+ {sourceName}
173
178
  </Badge>
174
179
  </div>
175
180
  ),
@@ -183,7 +188,7 @@ function EdgeEditor({ selectedEdge }: EdgeEditorProps) {
183
188
  label: (
184
189
  <div>
185
190
  <Badge variant="code" className="my-0.5">
186
- {sourceNode?.data.name as string}
191
+ {sourceName}
187
192
  </Badge>{' '}
188
193
  can delegate to itself
189
194
  </div>
@@ -196,11 +201,11 @@ function EdgeEditor({ selectedEdge }: EdgeEditorProps) {
196
201
  label: (
197
202
  <div>
198
203
  <Badge variant="code" className="my-0.5">
199
- {sourceNode?.data.name as string}
204
+ {sourceName}
200
205
  </Badge>{' '}
201
206
  can delegate to{' '}
202
207
  <Badge variant="code" className="my-0.5">
203
- {targetNode?.data.name as string}
208
+ {targetName}
204
209
  </Badge>
205
210
  </div>
206
211
  ),
@@ -210,7 +215,7 @@ function EdgeEditor({ selectedEdge }: EdgeEditorProps) {
210
215
  label: (
211
216
  <div>
212
217
  <Badge variant="code" className="my-0.5">
213
- {targetNode?.data.name as string}
218
+ {targetName}
214
219
  </Badge>{' '}
215
220
  can delegate to{' '}
216
221
  <Badge variant="code" className="my-0.5">
@@ -34,7 +34,7 @@ const ExecutionLimitInheritanceInfo = () => {
34
34
  <ul className="space-y-1.5 list-disc list-outside pl-4">
35
35
  <li>
36
36
  <span className="font-medium">transferCountIs</span>: Project → Agent only (controls
37
- transfers between agents)
37
+ transfers between sub agents)
38
38
  </li>
39
39
  <li>
40
40
  <span className="font-medium">Explicit settings</span> always take precedence over inherited
@@ -45,8 +45,8 @@ const ExecutionLimitInheritanceInfo = () => {
45
45
  set anywhere
46
46
  </li>
47
47
  <li>
48
- <span className="font-medium">Agent scope</span>: This limit applies to all agents within
49
- this agent
48
+ <span className="font-medium">Agent scope</span>: This limit applies to all sub agents
49
+ within this agent
50
50
  </li>
51
51
  </ul>
52
52
  );
@@ -56,7 +56,7 @@ function MetadataEditor() {
56
56
  const params = useParams();
57
57
  const metadata = useAgentStore((state) => state.metadata);
58
58
  const { agentId, tenantId, projectId } = params;
59
- const { id, name, description, contextConfig, models, stopWhen, agentPrompt, statusUpdates } =
59
+ const { id, name, description, contextConfig, models, stopWhen, prompt, statusUpdates } =
60
60
  metadata;
61
61
  const { INKEEP_AGENTS_RUN_API_URL } = useRuntimeConfig();
62
62
  const agentUrl = `${INKEEP_AGENTS_RUN_API_URL}/api/chat`;
@@ -149,14 +149,14 @@ function MetadataEditor() {
149
149
  <ExpandableTextArea
150
150
  id="agent-prompt"
151
151
  label="Agent prompt"
152
- value={agentPrompt || ''}
153
- onChange={(value) => updateMetadata('agentPrompt', value)}
152
+ value={prompt || ''}
153
+ onChange={(value) => updateMetadata('prompt', value)}
154
154
  placeholder="System-level instructions for this agent..."
155
155
  className="max-h-96"
156
156
  />
157
157
  <p className="text-xs text-muted-foreground">
158
158
  System-level prompt that defines the intended audience and overall goal of this agent.
159
- Applied to all agents.
159
+ Applied to all sub agents.
160
160
  </p>
161
161
  </div>
162
162
  <Separator />
@@ -165,7 +165,7 @@ function MetadataEditor() {
165
165
  <div className="space-y-8">
166
166
  <SectionHeader
167
167
  title="Default models"
168
- description="Set default models that will be inherited by agents that don't have their own models configured."
168
+ description="Set default models that will be inherited by sub agents that don't have their own models configured."
169
169
  titleTooltip={
170
170
  <div>
171
171
  <p>How model inheritance works:</p>
@@ -44,7 +44,7 @@ export function ExternalAgentNodeEditor({
44
44
  <div className="space-y-8 flex flex-col">
45
45
  <p className="text-sm text-muted-foreground">
46
46
  External agents are agents that live outside of your project that can communicate using the
47
- A2A (Agent-to-Agent) protocol. External agents enable you to delegate tasks between agent
47
+ A2A (Agent-to-Agent) protocol. External agents enable you to delegate tasks between agents
48
48
  within the agent framework or to third-party services.
49
49
  </p>
50
50
 
@@ -16,8 +16,8 @@ import {
16
16
  getCurrentHeadersForNode,
17
17
  getCurrentSelectedToolsForNode,
18
18
  } from '@/lib/utils/orphaned-tools-detector';
19
- import type { MCPNodeData } from '../../configuration/node-types';
20
19
  import type { AgentToolConfigLookup } from '../../agent';
20
+ import type { MCPNodeData } from '../../configuration/node-types';
21
21
 
22
22
  interface MCPServerNodeEditorProps {
23
23
  selectedNode: Node<MCPNodeData>;
@@ -61,7 +61,10 @@ export function MCPServerNodeEditor({
61
61
 
62
62
  const activeTools = getActiveTools({
63
63
  availableTools: availableTools,
64
- activeTools: toolData?.config && toolData.config.type === 'mcp' ? toolData.config.mcp.activeTools : undefined,
64
+ activeTools:
65
+ toolData?.config && toolData.config.type === 'mcp'
66
+ ? toolData.config.mcp.activeTools
67
+ : undefined,
65
68
  });
66
69
 
67
70
  // Handle missing tool data
@@ -69,7 +72,7 @@ export function MCPServerNodeEditor({
69
72
  return (
70
73
  <div className="flex items-center justify-center p-4">
71
74
  <div className="text-sm text-muted-foreground">
72
- Tool data not found for {selectedNode.data.toolId}
75
+ Tool data not found for {selectedNode.data.toolId}.
73
76
  </div>
74
77
  </div>
75
78
  );
@@ -191,7 +194,9 @@ export function MCPServerNodeEditor({
191
194
  <Input
192
195
  id="url"
193
196
  name="url"
194
- value={toolData?.config && toolData.config.type === 'mcp' ? toolData.config.mcp.server.url : ''}
197
+ value={
198
+ toolData?.config && toolData.config.type === 'mcp' ? toolData.config.mcp.server.url : ''
199
+ }
195
200
  onChange={handleInputChange}
196
201
  placeholder="https://mcp.inkeep.com"
197
202
  disabled
@@ -1,5 +1,5 @@
1
- import { ExpandableJsonEditor } from '@/components/form/expandable-json-editor';
2
1
  import type { AgentNodeData } from '@/components/agent/configuration/node-types';
2
+ import { ExpandableJsonEditor } from '@/components/form/expandable-json-editor';
3
3
  import { ModelInheritanceInfo } from '@/components/projects/form/model-inheritance-info';
4
4
  import {
5
5
  getModelInheritanceStatus,
@@ -29,7 +29,7 @@ export function ModelSection({
29
29
  <div className="space-y-8">
30
30
  <SectionHeader
31
31
  title="Models"
32
- description="Configure agent-level models."
32
+ description="Configure sub agent-level models."
33
33
  titleTooltip={
34
34
  <div>
35
35
  <p>How model inheritance works:</p>
@@ -59,7 +59,9 @@ export function ModelSection({
59
59
  </div>
60
60
  }
61
61
  />
62
- <p className="text-xs text-muted-foreground">Primary model for general agent responses</p>
62
+ <p className="text-xs text-muted-foreground">
63
+ Primary model for general sub agent responses
64
+ </p>
63
65
  </div>
64
66
 
65
67
  <CollapsibleSettings defaultOpen={!!hasAdvancedOptions} title="Advanced Model Options">
@@ -26,7 +26,7 @@ const ExecutionLimitInheritanceInfo = () => {
26
26
  return (
27
27
  <ul className="space-y-1.5 list-disc list-outside pl-4">
28
28
  <li>
29
- <span className="font-medium">stepCountIs</span>: Project → Agent only (agent-level
29
+ <span className="font-medium">stepCountIs</span>: Project → Agent only (sub agent-level
30
30
  execution limit)
31
31
  </li>
32
32
  <li>
@@ -35,10 +35,10 @@ const ExecutionLimitInheritanceInfo = () => {
35
35
  </li>
36
36
  <li>
37
37
  <span className="font-medium">Agent scope</span>: This limit applies only to this specific
38
- agent's execution steps
38
+ sub agent's execution steps
39
39
  </li>
40
40
  <li>
41
- <span className="font-medium">Independent from transfers</span>: Steps are counted per
41
+ <span className="font-medium">Independent from transfers</span>: Steps are counted per sub
42
42
  agent, transfers are counted per conversation
43
43
  </li>
44
44
  </ul>
@@ -119,7 +119,7 @@ export function SubAgentNodeEditor({
119
119
  onChange={(e) => updatePath('id', e.target.value)}
120
120
  placeholder="my-agent"
121
121
  error={getFieldError('id')}
122
- description="Choose a unique identifier for this sub-agent. Using an existing id will replace that sub-agent."
122
+ description="Choose a unique identifier for this sub agent. Using an existing id will replace that sub agent."
123
123
  isRequired
124
124
  />
125
125
  <TextareaField
@@ -129,7 +129,7 @@ export function SubAgentNodeEditor({
129
129
  label="Description"
130
130
  value={selectedNode.data.description || ''}
131
131
  onChange={(e) => updatePath('description', e.target.value)}
132
- placeholder="This agent is responsible for..."
132
+ placeholder="This sub agent is responsible for..."
133
133
  error={getFieldError('description')}
134
134
  />
135
135
 
@@ -160,7 +160,7 @@ export function SubAgentNodeEditor({
160
160
  <div className="space-y-8">
161
161
  <SectionHeader
162
162
  title="Execution limits"
163
- description="Configure agent-level execution limits for steps within this agent."
163
+ description="Configure sub agent-level execution limits for steps within this sub agent."
164
164
  titleTooltip={
165
165
  <div>
166
166
  <p>How execution limit inheritance works:</p>
@@ -197,7 +197,7 @@ export function SubAgentNodeEditor({
197
197
  placeholder="50"
198
198
  />
199
199
  <p className="text-xs text-muted-foreground">
200
- Maximum number of execution steps for this agent (defaults to 50 if not set)
200
+ Maximum number of execution steps for this sub agent (defaults to 50 if not set)
201
201
  </p>
202
202
  </div>
203
203
  </div>
@@ -127,7 +127,7 @@ export function ArtifactComponentForm({
127
127
  name="props"
128
128
  label="Props (JSON schema with inPreview indicators)"
129
129
  placeholder="Enter a valid JSON Schema with inPreview flags, or leave empty to save entire tool result..."
130
- description="Optional: Define specific fields with inPreview flags, or leave empty to capture the complete tool response"
130
+ description="Optional: Define specific fields with inPreview flags, or leave empty to capture the complete tool response."
131
131
  />
132
132
  <Button type="submit" disabled={isSubmitting}>
133
133
  Save
@@ -8,6 +8,7 @@ import { GenericInput } from '@/components/form/generic-input';
8
8
  import { GenericTextarea } from '@/components/form/generic-textarea';
9
9
  import { JsonSchemaInput } from '@/components/form/json-schema-input';
10
10
  import { Button } from '@/components/ui/button';
11
+ import { ExternalLink } from '@/components/ui/external-link';
11
12
  import { Form } from '@/components/ui/form';
12
13
  import { useAutoPrefillId } from '@/hooks/use-auto-prefill-id';
13
14
  import {
@@ -93,7 +94,15 @@ export function DataComponentForm({
93
94
  label="Name"
94
95
  placeholder="ListOrders"
95
96
  description={
96
- 'This name is used to identify the component in chat widget integration. Example: components: { ListOrders: MyListOrdersComponent }'
97
+ <>
98
+ This name is used to identify the component in chat widget integration.{' '}
99
+ <ExternalLink
100
+ href="https://docs.inkeep.com/typescript-sdk/structured-outputs/data-components#frontend-integration"
101
+ target="_blank"
102
+ >
103
+ Learn more
104
+ </ExternalLink>
105
+ </>
97
106
  }
98
107
  isRequired
99
108
  />
@@ -17,7 +17,7 @@ interface FormFieldWrapperProps<T extends FieldValues> {
17
17
  name: FieldPath<T>;
18
18
  label: string;
19
19
  children: (field: FieldValues) => React.ReactNode;
20
- description?: string;
20
+ description?: string | React.ReactNode;
21
21
  rules?: RegisterOptions<T, FieldPath<T>>;
22
22
  isRequired?: boolean;
23
23
  }
@@ -13,7 +13,7 @@ interface GenericInputProps<T extends FieldValues> {
13
13
  min?: string;
14
14
  max?: string;
15
15
  disabled?: boolean;
16
- description?: string;
16
+ description?: string | React.ReactNode;
17
17
  isRequired?: boolean;
18
18
  }
19
19
 
@@ -204,7 +204,7 @@ export function ProjectModelsSection({ control }: ProjectModelsSectionProps) {
204
204
  <div>
205
205
  <Label className="text-sm font-medium">Default models</Label>
206
206
  <p className="text-sm text-muted-foreground mt-1">
207
- Set default models that will be inherited by Agents and Sub Agents in this project
207
+ Set default models that will be inherited by agents and sub agents in this project.
208
208
  </p>
209
209
  </div>
210
210
 
@@ -48,7 +48,7 @@ export function ProjectSandboxSection({ control }: ProjectSandboxSectionProps) {
48
48
  <div>
49
49
  <Label className="text-sm font-medium">Sandbox configuration</Label>
50
50
  <p className="text-sm text-muted-foreground mt-1">
51
- Configure the execution environment for functions in this project
51
+ Configure the execution environment for functions in this project.
52
52
  </p>
53
53
  </div>
54
54
 
@@ -36,7 +36,8 @@ export function ProjectStopWhenSection({ control }: ProjectStopWhenSectionProps)
36
36
  <div>
37
37
  <Label className="text-sm font-medium">Execution limits</Label>
38
38
  <p className="text-sm text-muted-foreground mt-1">
39
- Set default execution limits that will be inherited by Agents and Sub Agents in this project
39
+ Set default execution limits that will be inherited by agents and sub agents in this
40
+ project.
40
41
  </p>
41
42
  </div>
42
43
 
@@ -52,7 +52,7 @@ export function ProjectSelector({ projects, selectedProjectId, tenantId }: Proje
52
52
  </PopoverTrigger>
53
53
  <PopoverContent className="w-[var(--radix-popover-trigger-width)] p-0">
54
54
  <Command>
55
- <CommandEmpty>No projects found</CommandEmpty>
55
+ <CommandEmpty>No projects found.</CommandEmpty>
56
56
  <CommandList className="max-h-64">
57
57
  <CommandGroup>
58
58
  {projects.map((project) => (
@@ -394,11 +394,11 @@ export function AICallsBreakdown({ onBack }: AICallsBreakdownProps) {
394
394
  ) : (
395
395
  <div className="text-center py-8">
396
396
  <Brain className="h-8 w-8 text-muted-foreground mx-auto mb-2" />
397
- <p className="text-sm text-muted-foreground">No AI calls found</p>
397
+ <p className="text-sm text-muted-foreground">No AI calls found.</p>
398
398
  <p className="text-xs text-muted-foreground/70 mt-1">
399
399
  {selectedAgent === 'all'
400
- ? 'No AI calls detected in the selected time range'
401
- : 'No AI calls found for the selected agent'}
400
+ ? 'No AI calls detected in the selected time range.'
401
+ : 'No AI calls found for the selected agent.'}
402
402
  </p>
403
403
  </div>
404
404
  )}
@@ -452,11 +452,11 @@ export function AICallsBreakdown({ onBack }: AICallsBreakdownProps) {
452
452
  ) : (
453
453
  <div className="text-center py-8">
454
454
  <Cpu className="h-8 w-8 text-muted-foreground mx-auto mb-2" />
455
- <p className="text-sm text-muted-foreground">No model data found</p>
455
+ <p className="text-sm text-muted-foreground">No model data found.</p>
456
456
  <p className="text-xs text-muted-foreground/70 mt-1">
457
457
  {selectedAgent === 'all'
458
- ? 'No model data detected in the selected time range'
459
- : 'No model data found for the selected agent'}
458
+ ? 'No model data detected in the selected time range.'
459
+ : 'No model data found for the selected agent.'}
460
460
  </p>
461
461
  </div>
462
462
  )}
@@ -19,11 +19,13 @@ import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
19
19
  import { ExternalLink } from '@/components/ui/external-link';
20
20
  import { ResizablePanelGroup } from '@/components/ui/resizable';
21
21
  import { Skeleton } from '@/components/ui/skeleton';
22
+ import { useRuntimeConfig } from '@/contexts/runtime-config-context';
22
23
  import { getSignozTracesExplorerUrl } from '@/lib/utils/signoz-links';
24
+ import { copyTraceToClipboard } from '@/lib/utils/trace-formatter';
23
25
  import { SignozLink } from './signoz-link';
24
26
  import { InfoRow } from './timeline/blocks';
25
27
  import { TimelineWrapper } from './timeline/timeline-wrapper';
26
- import { useRuntimeConfig } from '@/contexts/runtime-config-context';
28
+ import { toast } from 'sonner';
27
29
 
28
30
  interface ConversationDetailProps {
29
31
  conversationId: string;
@@ -34,9 +36,35 @@ export function ConversationDetail({ conversationId, onBack }: ConversationDetai
34
36
  const [conversation, setConversation] = useState<ConversationDetailType | null>(null);
35
37
  const [loading, setLoading] = useState(true);
36
38
  const [error, setError] = useState<string | null>(null);
39
+ const [isCopying, setIsCopying] = useState(false);
37
40
  const { tenantId, projectId } = useParams();
38
41
  const { SIGNOZ_URL } = useRuntimeConfig();
39
42
 
43
+ const handleCopyTrace = async () => {
44
+ if (!conversation) return;
45
+
46
+ setIsCopying(true);
47
+ try {
48
+ const result = await copyTraceToClipboard(conversation);
49
+ if (result.success) {
50
+ toast.success('Trace copied to clipboard', {
51
+ description: 'The OTEL trace has been copied successfully.',
52
+ });
53
+ } else {
54
+ toast.error('Failed to copy trace', {
55
+ description: result.error || 'An unknown error occurred',
56
+ });
57
+ }
58
+ } catch (err) {
59
+ toast.error('Failed to copy trace', {
60
+ description: err instanceof Error ? err.message : 'An unknown error occurred',
61
+ });
62
+ } finally {
63
+ await new Promise((resolve) => setTimeout(resolve, 200));
64
+ setIsCopying(false);
65
+ }
66
+ };
67
+
40
68
  useEffect(() => {
41
69
  const fetchConversationDetail = async () => {
42
70
  try {
@@ -80,7 +108,7 @@ export function ConversationDetail({ conversationId, onBack }: ConversationDetai
80
108
  <CardTitle className="text-destructive">Error Loading Conversation</CardTitle>
81
109
  </CardHeader>
82
110
  <CardContent>
83
- <p className="text-sm text-muted-foreground">{error || 'Conversation not found'}</p>
111
+ <p className="text-sm text-muted-foreground">{error || 'Conversation not found.'}</p>
84
112
  {onBack && (
85
113
  <Button onClick={onBack} variant="outline" className="mt-4">
86
114
  <ArrowLeft className="h-4 w-4 mr-2" />
@@ -216,7 +244,7 @@ export function ConversationDetail({ conversationId, onBack }: ConversationDetai
216
244
  ) : (
217
245
  <div className="text-center">
218
246
  <div className="text-2xl font-bold text-muted-foreground mb-1">0</div>
219
- <p className="text-xs text-muted-foreground">No AI calls found</p>
247
+ <p className="text-xs text-muted-foreground">No AI calls found.</p>
220
248
  </div>
221
249
  )}
222
250
  </div>
@@ -243,16 +271,24 @@ export function ConversationDetail({ conversationId, onBack }: ConversationDetai
243
271
  <div className="space-y-1">
244
272
  {errors > 0 && (
245
273
  <div className="flex items-baseline gap-2">
246
- <span className="text-2xl font-bold font-mono text-red-600">{errors}</span>
247
- <span className="text-sm text-muted-foreground">error{errors > 1 ? 's' : ''}</span>
274
+ <span className="text-2xl font-bold font-mono text-red-600">
275
+ {errors}
276
+ </span>
277
+ <span className="text-sm text-muted-foreground">
278
+ error{errors > 1 ? 's' : ''}
279
+ </span>
280
+ </div>
281
+ )}
282
+ {warnings > 0 && (
283
+ <div className="flex items-baseline gap-2">
284
+ <span className="text-2xl font-bold font-mono text-yellow-500">
285
+ {warnings}
286
+ </span>
287
+ <span className="text-sm text-muted-foreground">
288
+ warning{warnings > 1 ? 's' : ''}
289
+ </span>
248
290
  </div>
249
291
  )}
250
- {warnings > 0 && (
251
- <div className="flex items-baseline gap-2">
252
- <span className="text-2xl font-bold font-mono text-yellow-500">{warnings}</span>
253
- <span className="text-sm text-muted-foreground">warning{warnings > 1 ? 's' : ''}</span>
254
- </div>
255
- )}
256
292
  </div>
257
293
  ) : (
258
294
  <div>
@@ -266,7 +302,10 @@ export function ConversationDetail({ conversationId, onBack }: ConversationDetai
266
302
  size="sm"
267
303
  className="mt-3 w-full flex items-center justify-center gap-1"
268
304
  onClick={() => {
269
- window.open(getSignozTracesExplorerUrl(conversationId as string, SIGNOZ_URL), '_blank');
305
+ window.open(
306
+ getSignozTracesExplorerUrl(conversationId as string, SIGNOZ_URL),
307
+ '_blank'
308
+ );
270
309
  }}
271
310
  >
272
311
  <ExternalLinkIcon className="h-3 w-3" />
@@ -286,7 +325,12 @@ export function ConversationDetail({ conversationId, onBack }: ConversationDetai
286
325
  direction="horizontal"
287
326
  className="h-full border rounded-xl bg-background"
288
327
  >
289
- <TimelineWrapper conversation={conversation} conversationId={conversationId} />
328
+ <TimelineWrapper
329
+ conversation={conversation}
330
+ conversationId={conversationId}
331
+ onCopyTrace={handleCopyTrace}
332
+ isCopying={isCopying}
333
+ />
290
334
  </ResizablePanelGroup>
291
335
  </div>
292
336
  </div>
@@ -162,10 +162,10 @@ export function ConversationStatsCard({
162
162
  <EmptyState
163
163
  title={
164
164
  localQuery
165
- ? 'No conversations found'
165
+ ? 'No conversations found.'
166
166
  : selectedTimeRange === '24h'
167
167
  ? 'No conversation statistics found.'
168
- : `No data for ${selectedTimeRange === '7d' ? '7 days' : selectedTimeRange === '15d' ? '15 days' : 'this time range'}`
168
+ : `No data for ${selectedTimeRange === '7d' ? '7 days' : selectedTimeRange === '15d' ? '15 days' : 'this time range'}.`
169
169
  }
170
170
  description={
171
171
  localQuery