@inkeep/agents-manage-ui 0.23.4 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) 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 +104 -104
  3. package/.next/standalone/agents-manage-ui/.next/app-path-routes-manifest.json +3 -3
  4. package/.next/standalone/agents-manage-ui/.next/build-manifest.json +2 -2
  5. package/.next/standalone/agents-manage-ui/.next/prerender-manifest.json +3 -3
  6. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/page.js +2 -2
  7. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/page.js.nft.json +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 +2 -2
  10. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/[agentId]/page.js.nft.json +1 -1
  11. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/[agentId]/page_client-reference-manifest.js +1 -1
  12. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/new/page.js +2 -2
  13. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/new/page.js.nft.json +1 -1
  14. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/new/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/page.js +2 -2
  16. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/page.js.nft.json +1 -1
  17. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/page_client-reference-manifest.js +1 -1
  18. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/api-keys/page.js +3 -3
  19. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/api-keys/page.js.nft.json +1 -1
  20. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/api-keys/page_client-reference-manifest.js +1 -1
  21. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page.js +2 -2
  22. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page.js.nft.json +1 -1
  23. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page_client-reference-manifest.js +1 -1
  24. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page.js +1 -1
  25. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page.js.nft.json +1 -1
  26. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page_client-reference-manifest.js +1 -1
  27. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/page.js +2 -2
  28. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/page.js.nft.json +1 -1
  29. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/page_client-reference-manifest.js +1 -1
  30. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page.js +2 -2
  31. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page.js.nft.json +1 -1
  32. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page_client-reference-manifest.js +1 -1
  33. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page.js +2 -2
  34. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page.js.nft.json +1 -1
  35. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page_client-reference-manifest.js +1 -1
  36. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/page.js +2 -2
  37. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/page.js.nft.json +1 -1
  38. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/page_client-reference-manifest.js +1 -1
  39. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page.js +1 -1
  40. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page.js.nft.json +1 -1
  41. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page_client-reference-manifest.js +1 -1
  42. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js +2 -2
  43. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js.nft.json +1 -1
  44. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page_client-reference-manifest.js +1 -1
  45. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page.js +1 -1
  46. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page.js.nft.json +1 -1
  47. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page_client-reference-manifest.js +1 -1
  48. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.js +2 -2
  49. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.js.nft.json +1 -1
  50. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page_client-reference-manifest.js +1 -1
  51. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page.js +2 -2
  52. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page.js.nft.json +1 -1
  53. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page_client-reference-manifest.js +1 -1
  54. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page.js +2 -2
  55. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page.js.nft.json +1 -1
  56. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page_client-reference-manifest.js +1 -1
  57. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page.js +2 -2
  58. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page.js.nft.json +1 -1
  59. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page_client-reference-manifest.js +1 -1
  60. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page.js +2 -2
  61. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page.js.nft.json +1 -1
  62. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page_client-reference-manifest.js +1 -1
  63. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page.js +2 -2
  64. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page.js.nft.json +1 -1
  65. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page_client-reference-manifest.js +1 -1
  66. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page.js +2 -2
  67. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page.js.nft.json +1 -1
  68. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page_client-reference-manifest.js +1 -1
  69. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page.js +1 -1
  70. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page.js.nft.json +1 -1
  71. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page_client-reference-manifest.js +1 -1
  72. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page.js +1 -1
  73. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page.js.nft.json +1 -1
  74. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page_client-reference-manifest.js +1 -1
  75. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js +1 -1
  76. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js.nft.json +1 -1
  77. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page_client-reference-manifest.js +1 -1
  78. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page.js +2 -2
  79. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page.js.nft.json +1 -1
  80. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page_client-reference-manifest.js +1 -1
  81. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page.js +2 -2
  82. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page.js.nft.json +1 -1
  83. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page_client-reference-manifest.js +1 -1
  84. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page.js +2 -2
  85. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page.js.nft.json +1 -1
  86. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page_client-reference-manifest.js +1 -1
  87. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page.js +1 -1
  88. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page.js.nft.json +1 -1
  89. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  90. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.html +1 -1
  91. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.rsc +9 -9
  92. package/.next/standalone/agents-manage-ui/.next/server/app/api/data-components/[dataComponentId]/generate-preview/route.js +1 -1
  93. package/.next/standalone/agents-manage-ui/.next/server/app/api/data-components/[dataComponentId]/generate-preview/route_client-reference-manifest.js +1 -1
  94. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route.js +1 -1
  95. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
  96. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/route_client-reference-manifest.js +1 -1
  97. package/.next/standalone/agents-manage-ui/.next/server/app/page.js +2 -2
  98. package/.next/standalone/agents-manage-ui/.next/server/app/page.js.nft.json +1 -1
  99. package/.next/standalone/agents-manage-ui/.next/server/app/page_client-reference-manifest.js +1 -1
  100. package/.next/standalone/agents-manage-ui/.next/server/app-paths-manifest.json +3 -3
  101. package/.next/standalone/agents-manage-ui/.next/server/chunks/{9853.js → 1525.js} +1 -1
  102. package/.next/standalone/agents-manage-ui/.next/server/chunks/2005.js +1 -1
  103. package/.next/standalone/agents-manage-ui/.next/server/chunks/244.js +14 -0
  104. package/.next/standalone/agents-manage-ui/.next/server/chunks/2851.js +196 -0
  105. package/.next/standalone/agents-manage-ui/.next/server/chunks/3041.js +1 -0
  106. package/.next/standalone/agents-manage-ui/.next/server/chunks/3547.js +1 -1
  107. package/.next/standalone/agents-manage-ui/.next/server/chunks/5109.js +1 -1
  108. package/.next/standalone/agents-manage-ui/.next/server/chunks/5450.js +3 -3
  109. package/.next/standalone/agents-manage-ui/.next/server/chunks/5642.js +4080 -0
  110. package/.next/standalone/agents-manage-ui/.next/server/chunks/5732.js +1 -1
  111. package/.next/standalone/agents-manage-ui/.next/server/chunks/6741.js +1 -1
  112. package/.next/standalone/agents-manage-ui/.next/server/chunks/728.js +1 -0
  113. package/.next/standalone/agents-manage-ui/.next/server/chunks/7711.js +1 -1
  114. package/.next/standalone/agents-manage-ui/.next/server/chunks/7848.js +1 -1
  115. package/.next/standalone/agents-manage-ui/.next/server/chunks/{7953.js → 7977.js} +2 -2
  116. package/.next/standalone/agents-manage-ui/.next/server/chunks/7988.js +2 -2
  117. package/.next/standalone/agents-manage-ui/.next/server/chunks/9003.js +1 -0
  118. package/.next/standalone/agents-manage-ui/.next/server/middleware-manifest.json +5 -5
  119. package/.next/standalone/agents-manage-ui/.next/server/pages/404.html +1 -1
  120. package/.next/standalone/agents-manage-ui/.next/server/pages/500.html +1 -1
  121. package/.next/standalone/agents-manage-ui/.next/server/server-reference-manifest.js +1 -1
  122. package/.next/standalone/agents-manage-ui/.next/server/server-reference-manifest.json +1 -1
  123. package/.next/standalone/agents-manage-ui/.next/static/chunks/20837-041beb6a2f540583.js +1 -0
  124. package/.next/standalone/agents-manage-ui/.next/static/chunks/27396-d1c1a1a24f7b06ca.js +1 -0
  125. package/.next/standalone/agents-manage-ui/.next/static/chunks/28186-1f8894e8a9f58785.js +1 -0
  126. package/.next/standalone/agents-manage-ui/.next/static/chunks/39523-c0cadec114d31336.js +25 -0
  127. package/.next/standalone/agents-manage-ui/.next/static/chunks/47216-52f3cc04486d36c9.js +1 -0
  128. package/.next/standalone/agents-manage-ui/.next/static/chunks/{4875-6cc31870e1b4f78e.js → 4875-306209ac5547e001.js} +1 -1
  129. package/.next/standalone/agents-manage-ui/.next/static/chunks/{30721-9fe13c117a9408a9.js → 55851-6ebca09d3e107386.js} +1 -1
  130. package/.next/standalone/agents-manage-ui/.next/static/chunks/57786-36b73daa228df68d.js +1 -0
  131. package/.next/standalone/agents-manage-ui/.next/static/chunks/83858-2bfa9973ce3ce326.js +1 -0
  132. package/.next/standalone/agents-manage-ui/.next/static/chunks/87367-c73fa08200830a15.js +1 -0
  133. package/.next/standalone/agents-manage-ui/.next/static/chunks/{78225-17ad3e82fb563fc9.js → 93231-f6a13c3278793654.js} +1 -1
  134. package/.next/standalone/agents-manage-ui/.next/static/chunks/94167-3fd33f8ffc652db2.js +1 -0
  135. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/[agentId]/{page-06ad671ecebdb051.js → page-f68f3c960e8db83f.js} +1 -1
  136. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/new/{page-432441460d16cfca.js → page-2a7d8de41c87958d.js} +1 -1
  137. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/page-62cab20aa4353d45.js +1 -0
  138. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-81d720721aab1586.js +1 -0
  139. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/{page-45aa3756e3432ab6.js → page-9d7e4ff201cf3345.js} +1 -1
  140. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/new/{page-819342f697b73b23.js → page-8f72a85f26135a46.js} +1 -1
  141. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/{page-9163d82f18c05859.js → page-9f13fb47f54d0757.js} +1 -1
  142. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/{page-cabbbb12300d69e2.js → page-59df08cb46c7e592.js} +1 -1
  143. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/new/{page-15e5f802e35f9b2d.js → page-a4738db9057ca109.js} +1 -1
  144. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/{page-ed01a0be181bc578.js → page-87415ca1bf6d1477.js} +1 -1
  145. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-91ba0f87b3d09f30.js +1 -0
  146. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-bdf1d5105b7e878a.js +1 -0
  147. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-8d2ec09f9385c4a6.js +1 -0
  148. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/page-609abc0d3feeef77.js +1 -0
  149. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/{page-b52db9884e7955e1.js → page-cbf0830dece4f6c4.js} +1 -1
  150. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page-d5ff2cbd01568451.js +1 -0
  151. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/new/page-e410d10ef6ae24de.js +1 -0
  152. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/page-14b54cd8fc861b32.js +1 -0
  153. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/settings/{page-dbf18aaaa9aaf047.js → page-f64f1dc069a6d95b.js} +1 -1
  154. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page-73c7ac508b857ff8.js +1 -0
  155. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-39b4c79dd6ee832e.js +1 -0
  156. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/{page-e142f8be4dd06553.js → page-d48f9593e232f3e1.js} +1 -1
  157. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-25a2e915d1b1d0ba.js +1 -0
  158. package/.next/standalone/agents-manage-ui/.next/static/css/86b7c14b860f21e3.css +1 -0
  159. package/.next/standalone/agents-manage-ui/package.json +2 -2
  160. package/.next/standalone/packages/agents-core/package.json +1 -1
  161. package/package.json +5 -5
  162. package/src/app/api/data-components/[dataComponentId]/generate-preview/route.ts +17 -2
  163. package/src/app/api/signoz/conversations/[conversationId]/route.ts +15 -0
  164. package/src/app/globals.css +21 -0
  165. package/src/components/agent/agent.tsx +176 -5
  166. package/src/components/agent/configuration/edge-types.tsx +7 -1
  167. package/src/components/agent/configuration/node-types.tsx +7 -0
  168. package/src/components/agent/edges/agent-to-agent-edge.tsx +11 -5
  169. package/src/components/agent/edges/default-edge.tsx +54 -11
  170. package/src/components/agent/node-library/node-item.tsx +1 -1
  171. package/src/components/agent/nodes/base-node.tsx +15 -20
  172. package/src/components/agent/nodes/external-agent-node.tsx +9 -4
  173. package/src/components/agent/nodes/function-tool-node.tsx +7 -2
  174. package/src/components/agent/nodes/mcp-node.tsx +29 -26
  175. package/src/components/agent/nodes/node-tab.tsx +7 -6
  176. package/src/components/agent/nodes/sub-agent-node.tsx +8 -3
  177. package/src/components/agent/playground/chat-widget.tsx +2 -2
  178. package/src/components/agent/playground/playground.tsx +32 -2
  179. package/src/components/agent/toolbar/toolbar.tsx +18 -7
  180. package/src/components/mcp-servers/form/mcp-server-form.tsx +3 -3
  181. package/src/components/mcp-servers/selection/mcp-server-selection.tsx +3 -3
  182. package/src/components/traces/timeline/render-panel-content.tsx +55 -9
  183. package/src/components/traces/timeline/timeline-item.tsx +32 -0
  184. package/src/features/agent/domain/deserialize.ts +2 -2
  185. package/src/features/agent/domain/serialize.ts +5 -5
  186. package/src/hooks/use-auto-prefill-id-zustand.ts +2 -2
  187. package/src/hooks/use-auto-prefill-id.ts +1 -1
  188. package/src/lib/actions/data-components.ts +2 -1
  189. package/src/lib/utils/generate-id.ts +1 -1
  190. package/src/lib/utils/id-utils.ts +4 -0
  191. package/.next/standalone/agents-manage-ui/.next/server/chunks/3884.js +0 -1
  192. package/.next/standalone/agents-manage-ui/.next/server/chunks/7283.js +0 -4080
  193. package/.next/standalone/agents-manage-ui/.next/server/chunks/7613.js +0 -1
  194. package/.next/standalone/agents-manage-ui/.next/server/chunks/7714.js +0 -1
  195. package/.next/standalone/agents-manage-ui/.next/server/chunks/8664.js +0 -196
  196. package/.next/standalone/agents-manage-ui/.next/server/chunks/9525.js +0 -14
  197. package/.next/standalone/agents-manage-ui/.next/static/chunks/20837-57e1345903eae942.js +0 -1
  198. package/.next/standalone/agents-manage-ui/.next/static/chunks/2646-5e494997093f8a20.js +0 -1
  199. package/.next/standalone/agents-manage-ui/.next/static/chunks/27604-8d9cf308292ec547.js +0 -1
  200. package/.next/standalone/agents-manage-ui/.next/static/chunks/39438-3324f04d95405812.js +0 -1
  201. package/.next/standalone/agents-manage-ui/.next/static/chunks/40343-c601d93c1e721f8e.js +0 -1
  202. package/.next/standalone/agents-manage-ui/.next/static/chunks/49858-7e18c65ea9efae5d.js +0 -1
  203. package/.next/standalone/agents-manage-ui/.next/static/chunks/53821-8e97ecfda24c69bb.js +0 -1
  204. package/.next/standalone/agents-manage-ui/.next/static/chunks/85014-410be6cfd6c0b753.js +0 -25
  205. package/.next/standalone/agents-manage-ui/.next/static/chunks/94167-1d0eb19e0f384370.js +0 -1
  206. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/page-3865a57b0e18e871.js +0 -1
  207. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-356ac0d696aa5be8.js +0 -1
  208. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-15c26f9aa3b849e1.js +0 -1
  209. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-ad9c88bc8654631b.js +0 -1
  210. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-fca9f040a66152f9.js +0 -1
  211. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/page-c1364202b7b6e78e.js +0 -1
  212. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page-1d0fdaea2ee9fb94.js +0 -1
  213. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/new/page-99a3f138e54fa2a3.js +0 -1
  214. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/page-f2a8df9cb8983d75.js +0 -1
  215. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page-ca177c1cd0f1f45a.js +0 -1
  216. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-5de5d73ac6b2641e.js +0 -1
  217. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-37eaa5406f98632b.js +0 -1
  218. package/.next/standalone/agents-manage-ui/.next/static/css/6966eea3739e6598.css +0 -1
  219. /package/.next/standalone/agents-manage-ui/.next/static/{GEgg7iTyqia87yUa_7Nha → pSmoxTjEZijMAqPrIfiP9}/_buildManifest.js +0 -0
  220. /package/.next/standalone/agents-manage-ui/.next/static/{GEgg7iTyqia87yUa_7Nha → pSmoxTjEZijMAqPrIfiP9}/_ssgManifest.js +0 -0
@@ -1,11 +1,13 @@
1
1
  import { Bug, X } from 'lucide-react';
2
- import { nanoid } from 'nanoid';
3
2
  import { useState } from 'react';
3
+ import { toast } from 'sonner';
4
4
  import { TimelineWrapper } from '@/components/traces/timeline/timeline-wrapper';
5
5
  import { Button } from '@/components/ui/button';
6
6
  import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from '@/components/ui/resizable';
7
7
  import { useChatActivitiesPolling } from '@/hooks/use-chat-activities-polling';
8
8
  import type { DataComponent } from '@/lib/api/data-components';
9
+ import { generateId } from '@/lib/utils/id-utils';
10
+ import { copyTraceToClipboard } from '@/lib/utils/trace-formatter';
9
11
  import { ChatWidget } from './chat-widget';
10
12
  import CustomHeadersDialog from './custom-headers-dialog';
11
13
 
@@ -26,9 +28,10 @@ export const Playground = ({
26
28
  setShowPlayground,
27
29
  dataComponentLookup = {},
28
30
  }: PlaygroundProps) => {
29
- const [conversationId, setConversationId] = useState<string>(nanoid());
31
+ const [conversationId, setConversationId] = useState<string>(generateId());
30
32
  const [customHeaders, setCustomHeaders] = useState<Record<string, string>>({});
31
33
  const [showTraces, setShowTraces] = useState<boolean>(false);
34
+ const [isCopying, setIsCopying] = useState(false);
32
35
  const {
33
36
  chatActivities,
34
37
  isPolling,
@@ -41,6 +44,31 @@ export const Playground = ({
41
44
  conversationId,
42
45
  });
43
46
 
47
+ const handleCopyTrace = async () => {
48
+ if (!chatActivities) return;
49
+
50
+ setIsCopying(true);
51
+ try {
52
+ const result = await copyTraceToClipboard(chatActivities);
53
+ if (result.success) {
54
+ toast.success('Trace copied to clipboard', {
55
+ description: 'The OTEL trace has been copied successfully.',
56
+ });
57
+ } else {
58
+ toast.error('Failed to copy trace', {
59
+ description: result.error || 'An unknown error occurred',
60
+ });
61
+ }
62
+ } catch (err) {
63
+ toast.error('Failed to copy trace', {
64
+ description: err instanceof Error ? err.message : 'An unknown error occurred',
65
+ });
66
+ } finally {
67
+ await new Promise((resolve) => setTimeout(resolve, 200));
68
+ setIsCopying(false);
69
+ }
70
+ };
71
+
44
72
  return (
45
73
  <div
46
74
  className={`bg-background z-10 flex flex-col border-l ${showTraces ? 'w-full' : 'w-1/3 min-w-96'}`}
@@ -103,6 +131,8 @@ export const Playground = ({
103
131
  refreshOnce={refreshOnce}
104
132
  showConversationTracesLink={true}
105
133
  conversationId={conversationId}
134
+ onCopyTrace={handleCopyTrace}
135
+ isCopying={isCopying}
106
136
  />
107
137
  </>
108
138
  )}
@@ -1,5 +1,5 @@
1
1
  import { Play, Settings } from 'lucide-react';
2
- import { useEffect, useRef } from 'react';
2
+ import { useEffect, useRef, type ComponentProps } from 'react';
3
3
  import { Button } from '@/components/ui/button';
4
4
  import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
5
5
  import { useAgentStore } from '@/features/agent/state/use-agent-store';
@@ -20,14 +20,20 @@ export function Toolbar({
20
20
  }: ToolbarProps) {
21
21
  const dirty = useAgentStore((state) => state.dirty);
22
22
  const saveButtonRef = useRef<HTMLButtonElement>(null);
23
+
24
+ const commonProps: ComponentProps<typeof Button> = {
25
+ className: 'backdrop-blur-3xl',
26
+ type: 'button',
27
+ variant: 'outline',
28
+ };
29
+
23
30
  const PreviewButton = (
24
31
  <Button
32
+ {...commonProps}
25
33
  disabled={dirty || inPreviewDisabled}
26
- variant="outline"
27
- type="button"
28
34
  onClick={() => setShowPlayground(true)}
29
35
  >
30
- <Play className="w-4 h-4 text-muted-foreground" />
36
+ <Play className="size-4 text-muted-foreground" />
31
37
  Try it
32
38
  </Button>
33
39
  );
@@ -48,10 +54,14 @@ export function Toolbar({
48
54
  }, []);
49
55
 
50
56
  return (
51
- <div className="flex gap-2">
57
+ <div className="flex gap-2 flex-wrap justify-end content-start">
52
58
  {dirty || inPreviewDisabled ? (
53
59
  <Tooltip>
54
60
  <TooltipTrigger asChild>
61
+ {/**
62
+ * Wrap the disabled button in a <div> that can receive hover events since disabled <button> elements
63
+ * don’t trigger pointer events in the browser
64
+ **/}
55
65
  <div>{PreviewButton}</div>
56
66
  </TooltipTrigger>
57
67
  <TooltipContent>
@@ -64,6 +74,7 @@ export function Toolbar({
64
74
  PreviewButton
65
75
  )}
66
76
  <Button
77
+ {...commonProps}
67
78
  onClick={onSubmit}
68
79
  variant={dirty ? 'default' : 'outline'}
69
80
  disabled={!dirty && !inPreviewDisabled}
@@ -71,8 +82,8 @@ export function Toolbar({
71
82
  >
72
83
  {inPreviewDisabled ? 'Save' : 'Save changes'}
73
84
  </Button>
74
- <Button type="button" variant="outline" onClick={toggleSidePane}>
75
- <Settings className="w-4 h-4" />
85
+ <Button {...commonProps} onClick={toggleSidePane}>
86
+ <Settings className="size-4" />
76
87
  Agent Settings
77
88
  </Button>
78
89
  </div>
@@ -1,8 +1,8 @@
1
1
  'use client';
2
2
 
3
3
  import { zodResolver } from '@hookform/resolvers/zod';
4
+ import { generateId } from '@/lib/utils/id-utils';
4
5
  import { detectAuthenticationRequired, MCPTransportType } from '@inkeep/agents-core/client-exports';
5
- import { nanoid } from 'nanoid';
6
6
  import { useRouter } from 'next/navigation';
7
7
  import { useForm } from 'react-hook-form';
8
8
  import { toast } from 'sonner';
@@ -82,7 +82,7 @@ export function MCPServerForm({
82
82
  try {
83
83
  // handle oauth login
84
84
  if (data.credentialReferenceId === 'oauth') {
85
- const toolId = nanoid();
85
+ const toolId = generateId();
86
86
 
87
87
  const isAuthenticationRequired = await detectAuthenticationRequired({
88
88
  serverUrl: data.config.mcp.server.url,
@@ -146,7 +146,7 @@ export function MCPServerForm({
146
146
  } else {
147
147
  const newTool = await createMCPTool(tenantId, projectId, {
148
148
  ...transformedData,
149
- id: nanoid(),
149
+ id: generateId(),
150
150
  });
151
151
  toast.success('MCP server created successfully');
152
152
  router.push(`/${tenantId}/projects/${projectId}/mcp-servers/${newTool.id}`);
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
 
3
- import { nanoid } from 'nanoid';
3
+ import { generateId } from '@/lib/utils/id-utils';
4
4
  import { useRouter } from 'next/navigation';
5
5
  import { useState } from 'react';
6
6
  import { toast } from 'sonner';
@@ -39,7 +39,7 @@ export function MCPServerSelection({ credentials, tenantId, projectId }: MCPServ
39
39
  try {
40
40
  // Transform prebuilt server data to MCPToolFormData format
41
41
  const mcpToolData = {
42
- id: nanoid(),
42
+ id: generateId(),
43
43
  name: server.name,
44
44
  config: {
45
45
  type: 'mcp' as const,
@@ -62,7 +62,7 @@ export function MCPServerSelection({ credentials, tenantId, projectId }: MCPServ
62
62
  toast.success(`${server.name} MCP server created successfully`);
63
63
  router.push(`/${tenantId}/projects/${projectId}/mcp-servers/${newTool.id}`);
64
64
  } else {
65
- handleOAuthLogin({toolId: newTool.id, mcpServerUrl: server.url, toolName: server.name});
65
+ handleOAuthLogin({ toolId: newTool.id, mcpServerUrl: server.url, toolName: server.name });
66
66
  }
67
67
  } catch (error) {
68
68
  console.error('Failed to create prebuilt MCP server:', error);
@@ -1,4 +1,6 @@
1
1
  import dynamic from 'next/dynamic';
2
+ import { useState } from 'react';
3
+ import { Streamdown } from 'streamdown';
2
4
  import { formatDateTime } from '@/app/utils/format-date';
3
5
  import { SignozSpanLink } from '@/components/traces/signoz-link';
4
6
  import {
@@ -13,6 +15,7 @@ import { Bubble, CodeBubble } from '@/components/traces/timeline/bubble';
13
15
  import { SpanAttributes } from '@/components/traces/timeline/span-attributes';
14
16
  import type { ConversationDetail, SelectedPanel } from '@/components/traces/timeline/types';
15
17
  import { Badge } from '@/components/ui/badge';
18
+ import { Button } from '@/components/ui/button';
16
19
 
17
20
  const JsonEditorWithCopy = dynamic(
18
21
  () =>
@@ -30,6 +33,33 @@ function formatJsonSafely(content: string): string {
30
33
  }
31
34
  }
32
35
 
36
+ function AssistantMessageContent({ content }: { content: string }) {
37
+ const [isExpanded, setIsExpanded] = useState(false);
38
+
39
+ return (
40
+ <LabeledBlock label="AI response content">
41
+ <div className="relative">
42
+ <Bubble className={`break-words ${isExpanded ? '' : 'max-h-48 overflow-hidden'}`}>
43
+ <Streamdown>
44
+ {content}
45
+ </Streamdown>
46
+ </Bubble>
47
+ {!isExpanded && (
48
+ <div className="absolute bottom-0 left-0 right-0 h-12 bg-gradient-to-t from-white dark:from-gray-900 to-transparent pointer-events-none" />
49
+ )}
50
+ </div>
51
+ <Button
52
+ variant="ghost"
53
+ size="sm"
54
+ onClick={() => setIsExpanded(!isExpanded)}
55
+ className="mt-2 w-full text-xs"
56
+ >
57
+ {isExpanded ? 'Show less' : 'Show more'}
58
+ </Button>
59
+ </LabeledBlock>
60
+ );
61
+ }
62
+
33
63
  export function renderPanelContent({
34
64
  selected,
35
65
  findSpanById,
@@ -131,6 +161,16 @@ export function renderPanelContent({
131
161
  return (
132
162
  <>
133
163
  <Section>
164
+ <Info
165
+ label="Sub agent"
166
+ value={
167
+ a.subAgentId ? (
168
+ <Badge variant="code">{a.subAgentId}</Badge>
169
+ ) : (
170
+ 'Unknown'
171
+ )
172
+ }
173
+ />
134
174
  {a.hasError && a.otelStatusDescription && (
135
175
  <LabeledBlock label="Error">
136
176
  <Bubble className="bg-red-50 border-red-200 text-red-800 dark:bg-red-900/20 dark:border-red-800 dark:text-red-300">
@@ -171,12 +211,9 @@ export function renderPanelContent({
171
211
  return (
172
212
  <>
173
213
  <Section>
174
- <LabeledBlock label="AI response content">
175
- <Bubble className=" whitespace-pre-wrap break-words">
176
- {a.aiResponseContent || 'Response content not available'}
177
- </Bubble>
178
- </LabeledBlock>
179
214
  <Info label="Sub agent" value={a.subAgentName || 'Unknown'} />
215
+ <AssistantMessageContent content={a.aiResponseContent || 'Response content not available'} />
216
+
180
217
  <StatusBadge status={a.status} />
181
218
  <Info label="Activity timestamp" value={formatDateTime(a.timestamp)} />
182
219
  </Section>
@@ -404,10 +441,13 @@ export function renderPanelContent({
404
441
  <>
405
442
  <Section>
406
443
  <Info label="Model" value={<ModelBadge model={a.aiStreamTextModel || 'Unknown'} />} />
407
- <Info
408
- label="Operation id"
409
- value={<Badge variant="code">{a.aiStreamTextOperationId || 'Unknown'}</Badge>}
410
- />
444
+
445
+ {a.aiTelemetryFunctionId && (
446
+ <Info
447
+ label="Sub agent"
448
+ value={<Badge variant="code">{a.aiTelemetryFunctionId}</Badge>}
449
+ />
450
+ )}
411
451
  <Info label="Input tokens" value={a.inputTokens?.toLocaleString() || '0'} />
412
452
  <Info label="Output tokens" value={a.outputTokens?.toLocaleString() || '0'} />
413
453
  <StatusBadge status={a.status} />
@@ -424,6 +464,12 @@ export function renderPanelContent({
424
464
  <>
425
465
  <Section>
426
466
  <Info label="Model" value={<ModelBadge model={a.aiStreamObjectModel || 'Unknown'} />} />
467
+ {a.aiTelemetryFunctionId && (
468
+ <Info
469
+ label="Sub agent"
470
+ value={<Badge variant="code">{a.aiTelemetryFunctionId}</Badge>}
471
+ />
472
+ )}
427
473
  <Info label="Input tokens" value={a.inputTokens?.toLocaleString() || '0'} />
428
474
  <Info label="Output tokens" value={a.outputTokens?.toLocaleString() || '0'} />
429
475
  {a.aiStreamObjectContent && (
@@ -182,6 +182,13 @@ export function TimelineItem({
182
182
  </div>
183
183
  )}
184
184
 
185
+ {/* subagent badge for AI assistant message */}
186
+ {activity.type === ACTIVITY_TYPES.AI_ASSISTANT_MESSAGE && activity.subAgentName && (
187
+ <div className="mb-1">
188
+ <Badge variant="code">{activity.subAgentName}</Badge>
189
+ </div>
190
+ )}
191
+
185
192
  {/* streamed text bubble */}
186
193
  {activity.type === 'ai_model_streamed_text' && activity.aiStreamTextContent && (
187
194
  <div className="space-y-2">
@@ -210,6 +217,15 @@ export function TimelineItem({
210
217
  </div>
211
218
  )}
212
219
 
220
+ {/* ai.telemetry.functionId badge for streamed text */}
221
+ {activity.type === 'ai_model_streamed_text' && activity.aiTelemetryFunctionId && (
222
+ <div className="mb-1">
223
+ <Badge variant="code" className="text-xs">
224
+ {activity.aiTelemetryFunctionId}
225
+ </Badge>
226
+ </div>
227
+ )}
228
+
213
229
  {/* streamed object bubble */}
214
230
  {activity.type === 'ai_model_streamed_object' && activity.aiStreamObjectContent && (
215
231
  <div className="space-y-2">
@@ -244,6 +260,15 @@ export function TimelineItem({
244
260
  </div>
245
261
  )}
246
262
 
263
+ {/* ai.telemetry.functionId badge for streamed object */}
264
+ {activity.type === 'ai_model_streamed_object' && activity.aiTelemetryFunctionId && (
265
+ <div className="mb-1">
266
+ <Badge variant="code" className="text-xs">
267
+ {activity.aiTelemetryFunctionId}
268
+ </Badge>
269
+ </div>
270
+ )}
271
+
247
272
  {/* context fetch url */}
248
273
  {activity.type === 'context_fetch' && activity.toolResult && (
249
274
  <div className="mb-1">
@@ -335,6 +360,13 @@ export function TimelineItem({
335
360
  </div>
336
361
  )}
337
362
 
363
+ {/* agent ID for agent generation */}
364
+ {activity.type === ACTIVITY_TYPES.AGENT_GENERATION && activity.subAgentId && (
365
+ <div className="mb-1">
366
+ <Badge variant="code">{activity.subAgentId}</Badge>
367
+ </div>
368
+ )}
369
+
338
370
  {/* ai.telemetry.functionId badge for ai.toolCall spans that aren't delegate or transfers */}
339
371
  {activity.type === ACTIVITY_TYPES.TOOL_CALL &&
340
372
  activity.aiTelemetryFunctionId &&
@@ -1,6 +1,6 @@
1
+ import { generateId } from '@/lib/utils/id-utils';
1
2
  import type { Edge, Node } from '@xyflow/react';
2
3
  import * as dagre from 'dagre';
3
- import { nanoid } from 'nanoid';
4
4
  import { EdgeType } from '@/components/agent/configuration/edge-types';
5
5
  import {
6
6
  agentNodeSourceHandleId,
@@ -205,7 +205,7 @@ export function deserializeAgentData(data: FullAgentDefinition): TransformResult
205
205
  if ('canUse' in agent && agent.canUse && agent.canUse.length > 0) {
206
206
  for (const canUseItem of agent.canUse) {
207
207
  const toolId = canUseItem.toolId;
208
- const toolNodeId = nanoid();
208
+ const toolNodeId = generateId();
209
209
  const relationshipId = canUseItem.agentToolRelationId;
210
210
 
211
211
  const tool = data.tools?.[toolId] || data.functionTools?.[toolId];
@@ -1,5 +1,5 @@
1
+ import { generateId } from '@/lib/utils/id-utils';
1
2
  import type { Edge, Node } from '@xyflow/react';
2
- import { nanoid } from 'nanoid';
3
3
  import type { AgentToolConfigLookup } from '@/components/agent/agent';
4
4
  import type { AgentMetadata } from '@/components/agent/configuration/agent-types';
5
5
  import type { A2AEdgeData } from '@/components/agent/configuration/edge-types';
@@ -259,7 +259,7 @@ export function serializeAgentData(
259
259
  ...(stopWhen && { stopWhen }),
260
260
  };
261
261
 
262
- if ((node.data as any).isDefault) {
262
+ if (node.data.isDefault) {
263
263
  defaultSubAgentId = subAgentId;
264
264
  }
265
265
 
@@ -280,7 +280,7 @@ export function serializeAgentData(
280
280
  credentialReferenceId: (node.data.credentialReferenceId as string) || null,
281
281
  };
282
282
 
283
- if ((node.data as any).isDefault) {
283
+ if (node.data.isDefault) {
284
284
  defaultSubAgentId = subAgentId;
285
285
  }
286
286
 
@@ -378,7 +378,7 @@ export function serializeAgentData(
378
378
  }
379
379
 
380
380
  const result: FullAgentDefinition = {
381
- id: metadata?.id || nanoid(),
381
+ id: metadata?.id || generateId(),
382
382
  name: metadata?.name || 'Untitled Agent',
383
383
  description: metadata?.description || undefined,
384
384
  defaultSubAgentId,
@@ -432,7 +432,7 @@ export function serializeAgentData(
432
432
 
433
433
  // Add contextConfig if there's meaningful data
434
434
  if (hasContextConfig && metadata?.contextConfig) {
435
- const contextConfigId = metadata.contextConfig.id || nanoid();
435
+ const contextConfigId = metadata.contextConfig.id || generateId();
436
436
  (result as any).contextConfigId = contextConfigId;
437
437
  (result as any).contextConfig = {
438
438
  id: contextConfigId,
@@ -1,5 +1,5 @@
1
1
  import { useEffect, useRef } from 'react';
2
- import { generateId } from '@/lib/utils/generate-id';
2
+ import { generateIdFromName } from '@/lib/utils/generate-id';
3
3
 
4
4
  interface UseAutoPrefillIdZustandOptions {
5
5
  nameValue: string | undefined;
@@ -56,7 +56,7 @@ export function useAutoPrefillIdZustand({
56
56
  // Auto-prefill ID based on name field
57
57
  useEffect(() => {
58
58
  if (!isEditing && nameValue && !hasManuallyEditedId.current) {
59
- const generatedId = generateId(nameValue);
59
+ const generatedId = generateIdFromName(nameValue);
60
60
 
61
61
  // Only update if the generated ID is different from current ID
62
62
  if (generatedId !== currentIdValue.current) {
@@ -1,6 +1,6 @@
1
1
  import { useEffect } from 'react';
2
2
  import { type FieldValues, type UseFormReturn, useWatch } from 'react-hook-form';
3
- import { generateId } from '@/lib/utils/generate-id';
3
+ import { generateId } from '@/lib/utils/id-utils';
4
4
 
5
5
  interface UseAutoPrefillIdOptions<T extends FieldValues> {
6
6
  form: UseFormReturn<T>;
@@ -95,9 +95,10 @@ export async function updateDataComponentAction(
95
95
  };
96
96
  } catch (error) {
97
97
  if (error instanceof ApiError) {
98
+ const errorMessage = error.error.message ?? error.message;
98
99
  return {
99
100
  success: false,
100
- error: error.message,
101
+ error: errorMessage,
101
102
  code: error.error.code,
102
103
  };
103
104
  }
@@ -3,7 +3,7 @@
3
3
  * @param name - The name to generate an ID from
4
4
  * @returns The generated ID
5
5
  */
6
- export const generateId = (name: string) => {
6
+ export const generateIdFromName = (name: string) => {
7
7
  return name
8
8
  .toLowerCase()
9
9
  .trim()
@@ -0,0 +1,4 @@
1
+ import { customAlphabet } from 'nanoid';
2
+
3
+ // This ensures IDs are always lowercase and never start with a hyphen
4
+ export const generateId = customAlphabet('abcdefghijklmnopqrstuvwxyz0123456789', 21);
@@ -1 +0,0 @@
1
- "use strict";exports.id=3884,exports.ids=[3884],exports.modules={29122:(a,b,c)=>{c.r(b),c.d(b,{conf:()=>d,language:()=>e});var d={comments:{lineComment:"REM"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}],surroundingPairs:[{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}],folding:{markers:{start:RegExp("^\\s*(::\\s*|REM\\s+)#region"),end:RegExp("^\\s*(::\\s*|REM\\s+)#endregion")}}},e={defaultToken:"",ignoreCase:!0,tokenPostfix:".bat",brackets:[{token:"delimiter.bracket",open:"{",close:"}"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"delimiter.square",open:"[",close:"]"}],keywords:/call|defined|echo|errorlevel|exist|for|goto|if|pause|set|shift|start|title|not|pushd|popd/,symbols:/[=><!~?&|+\-*\/\^;\.,]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[[/^(\s*)(rem(?:\s.*|))$/,["","comment"]],[/(\@?)(@keywords)(?!\w)/,[{token:"keyword"},{token:"keyword.$2"}]],[/[ \t\r\n]+/,""],[/setlocal(?!\w)/,"keyword.tag-setlocal"],[/endlocal(?!\w)/,"keyword.tag-setlocal"],[/[a-zA-Z_]\w*/,""],[/:\w*/,"metatag"],[/%[^%]+%/,"variable"],[/%%[\w]+(?!\w)/,"variable"],[/[{}()\[\]]/,"@brackets"],[/@symbols/,"delimiter"],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float"],[/0[xX][0-9a-fA-F_]*[0-9a-fA-F]/,"number.hex"],[/\d+/,"number"],[/[;,.]/,"delimiter"],[/"/,"string",'@string."'],[/'/,"string","@string.'"]],string:[[/[^\\"'%]+/,{cases:{"@eos":{token:"string",next:"@popall"},"@default":"string"}}],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/%[\w ]+%/,"variable"],[/%%[\w]+(?!\w)/,"variable"],[/["']/,{cases:{"$#==$S2":{token:"string",next:"@pop"},"@default":"string"}}],[/$/,"string","@popall"]]}}}};