@inkeep/agents-manage-ui 0.0.0-dev-20251018033935 → 0.0.0-dev-20251020213442

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 (172) 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 +141 -141
  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 +15 -15
  6. package/.next/standalone/agents-manage-ui/.next/react-loadable-manifest.json +4 -4
  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 +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_client-reference-manifest.js +1 -1
  17. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/api-keys/page.js +3 -3
  18. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/api-keys/page_client-reference-manifest.js +1 -1
  19. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page.js +1 -1
  20. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page.js.nft.json +1 -1
  21. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page_client-reference-manifest.js +1 -1
  22. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page.js +2 -2
  23. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page.js.nft.json +1 -1
  24. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page_client-reference-manifest.js +1 -1
  25. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/page.js +2 -2
  26. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/page_client-reference-manifest.js +1 -1
  27. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page.js +2 -2
  28. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page.js.nft.json +1 -1
  29. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page_client-reference-manifest.js +1 -1
  30. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page.js +2 -2
  31. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page.js.nft.json +1 -1
  32. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page_client-reference-manifest.js +1 -1
  33. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/page.js +1 -1
  34. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/page_client-reference-manifest.js +1 -1
  35. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page.js +1 -1
  36. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page_client-reference-manifest.js +1 -1
  37. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js +2 -2
  38. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js.nft.json +1 -1
  39. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page_client-reference-manifest.js +1 -1
  40. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page.js +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_client-reference-manifest.js +1 -1
  47. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page.js +2 -2
  48. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page_client-reference-manifest.js +1 -1
  49. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page.js +2 -2
  50. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page.js.nft.json +1 -1
  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 +2 -2
  53. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page.js.nft.json +1 -1
  54. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page_client-reference-manifest.js +1 -1
  55. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page.js +2 -2
  56. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page.js.nft.json +1 -1
  57. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page_client-reference-manifest.js +1 -1
  58. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page.js +2 -2
  59. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page_client-reference-manifest.js +1 -1
  60. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page.js +2 -2
  61. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page_client-reference-manifest.js +1 -1
  62. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page.js +2 -2
  63. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page_client-reference-manifest.js +1 -1
  64. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js +1 -1
  65. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js.nft.json +1 -1
  66. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page_client-reference-manifest.js +1 -1
  67. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page.js +3 -3
  68. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page_client-reference-manifest.js +1 -1
  69. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page.js +2 -2
  70. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page.js.nft.json +1 -1
  71. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page_client-reference-manifest.js +1 -1
  72. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page.js +1 -1
  73. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page_client-reference-manifest.js +1 -1
  74. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page.js +1 -1
  75. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  76. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.html +1 -1
  77. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.rsc +9 -9
  78. package/.next/standalone/agents-manage-ui/.next/server/app/api/data-components/[dataComponentId]/generate-preview/route_client-reference-manifest.js +1 -1
  79. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
  80. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/route_client-reference-manifest.js +1 -1
  81. package/.next/standalone/agents-manage-ui/.next/server/app/page.js +2 -2
  82. package/.next/standalone/agents-manage-ui/.next/server/app/page_client-reference-manifest.js +1 -1
  83. package/.next/standalone/agents-manage-ui/.next/server/app-paths-manifest.json +7 -7
  84. package/.next/standalone/agents-manage-ui/.next/server/chunks/260.js +1 -0
  85. package/.next/standalone/agents-manage-ui/.next/server/chunks/3159.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/3802.js +1 -0
  88. package/.next/standalone/agents-manage-ui/.next/server/chunks/{6999.js → 4439.js} +3 -3
  89. package/.next/standalone/agents-manage-ui/.next/server/chunks/5450.js +7 -7
  90. package/.next/standalone/agents-manage-ui/.next/server/chunks/5478.js +4080 -0
  91. package/.next/standalone/agents-manage-ui/.next/server/chunks/5732.js +1 -1
  92. package/.next/standalone/agents-manage-ui/.next/server/chunks/5868.js +196 -0
  93. package/.next/standalone/agents-manage-ui/.next/server/chunks/7711.js +5 -5
  94. package/.next/standalone/agents-manage-ui/.next/server/chunks/7848.js +1 -1
  95. package/.next/standalone/agents-manage-ui/.next/server/chunks/7988.js +2 -2
  96. package/.next/standalone/agents-manage-ui/.next/server/chunks/8586.js +1 -1
  97. package/.next/standalone/agents-manage-ui/.next/server/middleware-build-manifest.js +1 -1
  98. package/.next/standalone/agents-manage-ui/.next/server/middleware-manifest.json +5 -5
  99. package/.next/standalone/agents-manage-ui/.next/server/middleware-react-loadable-manifest.js +1 -1
  100. package/.next/standalone/agents-manage-ui/.next/server/pages/404.html +1 -1
  101. package/.next/standalone/agents-manage-ui/.next/server/pages/500.html +1 -1
  102. package/.next/standalone/agents-manage-ui/.next/server/server-reference-manifest.js +1 -1
  103. package/.next/standalone/agents-manage-ui/.next/server/server-reference-manifest.json +1 -1
  104. package/.next/standalone/agents-manage-ui/.next/static/chunks/20837-ad6977f338f3bfdc.js +1 -0
  105. package/.next/standalone/agents-manage-ui/.next/static/chunks/{23113.536c8c9bea4a8c7b.js → 23113.d8f116e888ce6fa1.js} +3 -3
  106. package/.next/standalone/agents-manage-ui/.next/static/chunks/{82382-2ec1fba08e0e167a.js → 46271-5ae8979ebc6a9456.js} +1 -1
  107. package/.next/standalone/agents-manage-ui/.next/static/chunks/{4875-306209ac5547e001.js → 4875-6cc31870e1b4f78e.js} +1 -1
  108. package/.next/standalone/agents-manage-ui/.next/static/chunks/56269-b55108bb9998d5b1.js +1 -0
  109. package/.next/standalone/agents-manage-ui/.next/static/chunks/{59352-1073f56d4177807e.js → 60485-90364540677bd651.js} +1 -1
  110. package/.next/standalone/agents-manage-ui/.next/static/chunks/76125-82ebb14b304cfe0b.js +25 -0
  111. package/.next/standalone/agents-manage-ui/.next/static/chunks/{58857-25ea4e47782800c3.js → 77890-9a7f3c68888bc677.js} +1 -1
  112. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/[agentId]/{page-efe560225036a9f6.js → page-e82a3e69e183168e.js} +1 -1
  113. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/new/{page-ce87806ea0a2fb9f.js → page-551d6f2c589d8fef.js} +1 -1
  114. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/{page-9f2da832ec1b94cd.js → page-ae102486d58be60f.js} +1 -1
  115. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-0e6c6926536796bc.js +1 -0
  116. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/{page-32b6c7e2635bea05.js → page-93c054b2609cc052.js} +1 -1
  117. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/new/{page-fdc1ce5478c3f0cb.js → page-fdbe8e8f73b6a56d.js} +1 -1
  118. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/page-00820ff152e18e00.js +1 -0
  119. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/{page-00743b00bc2a3efc.js → page-e3fa0fbf28ca583c.js} +1 -1
  120. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/new/{page-97e1941742c88f0e.js → page-19b01a165f5ceb34.js} +1 -1
  121. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/page-25c4815e2f310734.js +1 -0
  122. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-c0609218dd908ac2.js +1 -0
  123. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-36b323f459eee78f.js +1 -0
  124. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-d2a83f2b10c42075.js +1 -0
  125. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/{page-4a371cd2cc6618ad.js → page-c1d8f8215da1b003.js} +1 -1
  126. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page-d0a18e8cb6fde134.js +1 -0
  127. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/new/{page-bca1259638485a50.js → page-f591ed9d997e096c.js} +1 -1
  128. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/page-3bea2e4a9c911df4.js +1 -0
  129. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/settings/{page-35cbbe7f8218c59e.js → page-e0587efb0b5b911d.js} +1 -1
  130. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/{page-4cf0ddb5140d1a72.js → page-63642f9482685f55.js} +1 -1
  131. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/{page-a8d0dc9a08662376.js → page-1ae7a8b2a98d7eb2.js} +1 -1
  132. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-12db322c07fbd4a9.js +1 -0
  133. package/.next/standalone/agents-manage-ui/.next/static/chunks/{webpack-d65a3369c23bc1a6.js → webpack-1c52079c94af4342.js} +1 -1
  134. package/.next/standalone/agents-manage-ui/.next/static/css/86b7c14b860f21e3.css +1 -0
  135. package/.next/standalone/agents-manage-ui/package.json +2 -2
  136. package/.next/standalone/packages/agents-core/package.json +1 -1
  137. package/package.json +5 -5
  138. package/src/app/globals.css +21 -0
  139. package/src/components/agent/agent.tsx +173 -2
  140. package/src/components/agent/configuration/edge-types.tsx +7 -1
  141. package/src/components/agent/configuration/node-types.tsx +7 -0
  142. package/src/components/agent/edges/agent-to-agent-edge.tsx +11 -5
  143. package/src/components/agent/edges/default-edge.tsx +54 -11
  144. package/src/components/agent/node-library/node-item.tsx +1 -1
  145. package/src/components/agent/nodes/base-node.tsx +15 -20
  146. package/src/components/agent/nodes/external-agent-node.tsx +9 -4
  147. package/src/components/agent/nodes/function-tool-node.tsx +7 -2
  148. package/src/components/agent/nodes/mcp-node.tsx +29 -26
  149. package/src/components/agent/nodes/node-tab.tsx +7 -6
  150. package/src/components/agent/nodes/sub-agent-node.tsx +8 -3
  151. package/src/components/agent/toolbar/toolbar.tsx +18 -7
  152. package/src/features/agent/domain/serialize.ts +2 -2
  153. package/.next/standalone/agents-manage-ui/.next/server/chunks/1213.js +0 -1
  154. package/.next/standalone/agents-manage-ui/.next/server/chunks/2373.js +0 -196
  155. package/.next/standalone/agents-manage-ui/.next/server/chunks/4206.js +0 -1
  156. package/.next/standalone/agents-manage-ui/.next/server/chunks/7283.js +0 -4080
  157. package/.next/standalone/agents-manage-ui/.next/server/chunks/882.js +0 -1
  158. package/.next/standalone/agents-manage-ui/.next/static/chunks/20837-65cb634be65713b6.js +0 -1
  159. package/.next/standalone/agents-manage-ui/.next/static/chunks/85014-410be6cfd6c0b753.js +0 -25
  160. package/.next/standalone/agents-manage-ui/.next/static/chunks/89101-92130409b1415c97.js +0 -1
  161. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-c82db08e9344f68c.js +0 -1
  162. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/page-990d882d78a195fd.js +0 -1
  163. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/page-64813d371a05bde6.js +0 -1
  164. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-7446ee2644d0185a.js +0 -1
  165. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-7b7a3ec55ec162a3.js +0 -1
  166. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-5b6aff4d987c89a4.js +0 -1
  167. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page-2f7f46580a298486.js +0 -1
  168. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/page-9a035796f985a386.js +0 -1
  169. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-08983ed4e0a95a94.js +0 -1
  170. package/.next/standalone/agents-manage-ui/.next/static/css/5dfa86d258326297.css +0 -1
  171. /package/.next/standalone/agents-manage-ui/.next/static/{R4a26_eEJuwEWgW_zHsHJ → wpI-jqWSJp3whbjsuH69t}/_buildManifest.js +0 -0
  172. /package/.next/standalone/agents-manage-ui/.next/static/{R4a26_eEJuwEWgW_zHsHJ → wpI-jqWSJp3whbjsuH69t}/_ssgManifest.js +0 -0
@@ -12,7 +12,9 @@ export enum A2AEdgeType {
12
12
  export enum EdgeType {
13
13
  A2A = 'a2a',
14
14
  A2AExternal = 'a2a-external',
15
- Default = 'default',
15
+ // Built-in 'default' edges ignore the `data` prop.
16
+ // Use a custom edge type instead to access `data` in rendering.
17
+ Default = 'custom',
16
18
  SelfLoop = 'self-loop',
17
19
  }
18
20
 
@@ -23,6 +25,10 @@ export type A2AEdgeData = {
23
25
  delegateTargetToSource: boolean;
24
26
  delegateSourceToTarget: boolean;
25
27
  };
28
+ /**
29
+ * Indicates whether this node delegates its task to another node.
30
+ */
31
+ delegating: boolean | 'inverted';
26
32
  };
27
33
 
28
34
  export const edgeTypes = {
@@ -22,6 +22,8 @@ export interface MCPNodeData extends Record<string, unknown> {
22
22
  name?: string;
23
23
  imageUrl?: string;
24
24
  provider?: string;
25
+ isExecuting?: boolean;
26
+ isDelegating?: boolean;
25
27
  }
26
28
 
27
29
  // Re-export the shared type for consistency
@@ -36,6 +38,9 @@ export interface AgentNodeData extends Record<string, unknown> {
36
38
  artifactComponents?: string[];
37
39
  models?: AgentModels; // Use same structure as agent
38
40
  stopWhen?: SubAgentStopWhen;
41
+ isDefault?: boolean;
42
+ isExecuting?: boolean;
43
+ isDelegating?: boolean;
39
44
  }
40
45
 
41
46
  export interface ExternalAgentNodeData extends Record<string, unknown> {
@@ -57,6 +62,8 @@ export interface FunctionToolNodeData extends Record<string, unknown> {
57
62
  code?: string;
58
63
  inputSchema?: Record<string, unknown>;
59
64
  dependencies?: Record<string, unknown>;
65
+ isExecuting?: boolean;
66
+ isDelegating?: boolean;
60
67
  }
61
68
 
62
69
  export enum NodeType {
@@ -1,5 +1,6 @@
1
1
  import { BaseEdge, EdgeLabelRenderer, type EdgeProps, getBezierPath } from '@xyflow/react';
2
2
  import { ArrowRight, ArrowRightLeft } from 'lucide-react';
3
+ import { AnimatedCircle } from '@/components/agent/edges/default-edge';
3
4
  import type { A2AEdgeData } from '../configuration/edge-types';
4
5
 
5
6
  interface AgentToAgentEdgeProps extends EdgeProps {
@@ -22,6 +23,7 @@ export function AgentToAgentEdge({
22
23
  delegateTargetToSource: false,
23
24
  delegateSourceToTarget: false,
24
25
  };
26
+ const delegating = data?.delegating;
25
27
 
26
28
  const hasDelegate = relationships.delegateTargetToSource || relationships.delegateSourceToTarget;
27
29
  const hasTransfer = relationships.transferTargetToSource || relationships.transferSourceToTarget;
@@ -86,16 +88,20 @@ export function AgentToAgentEdge({
86
88
  const delegateMarkerEnd =
87
89
  hasDelegate && relationships.delegateSourceToTarget ? getMarker(!!selected) : undefined;
88
90
 
91
+ const className =
92
+ selected || delegating ? '!stroke-primary' : '!stroke-border dark:!stroke-muted-foreground';
93
+
89
94
  return (
90
95
  <>
96
+ {/* Animated circles based on delegating direction */}
97
+ {delegating && <AnimatedCircle edgePath={edgePath} inverted={delegating === 'inverted'} />}
98
+
91
99
  {/* Render transfer path (solid line) */}
92
100
  {hasTransfer && (
93
101
  <BaseEdge
94
- className={`${selected ? '!stroke-primary' : '!stroke-border dark:!stroke-muted-foreground'}`}
102
+ className={className}
95
103
  path={hasDelegate ? calculateOffsetPath(-3)[0] : edgePath}
96
- style={{
97
- strokeWidth: 2,
98
- }}
104
+ style={{ strokeWidth: 2 }}
99
105
  markerEnd={transferMarkerEnd}
100
106
  markerStart={transferMarkerStart}
101
107
  />
@@ -104,7 +110,7 @@ export function AgentToAgentEdge({
104
110
  {/* Render delegate path (dashed line) */}
105
111
  {hasDelegate && (
106
112
  <BaseEdge
107
- className={`${selected ? '!stroke-primary' : '!stroke-border dark:!stroke-muted-foreground'}`}
113
+ className={className}
108
114
  path={hasTransfer ? calculateOffsetPath(3)[0] : edgePath}
109
115
  style={{
110
116
  strokeDasharray: '5,5',
@@ -1,6 +1,39 @@
1
1
  import { BaseEdge, type EdgeProps, getBezierPath } from '@xyflow/react';
2
+ import { type FC, useRef, useEffect } from 'react';
2
3
 
3
- type DefaultEdgeProps = EdgeProps;
4
+ type DefaultEdgeProps = EdgeProps & {
5
+ data?: {
6
+ delegating: boolean | 'inverted';
7
+ };
8
+ };
9
+
10
+ export const AnimatedCircle: FC<{ edgePath: string; inverted: boolean }> = ({
11
+ edgePath,
12
+ inverted,
13
+ }) => {
14
+ const ref = useRef<SVGAnimateElement>(null);
15
+
16
+ // Without this useEffect, the animation won't start when this component is rendered dynamically.
17
+ // biome-ignore lint/correctness/useExhaustiveDependencies: We need restart animation when invert is changed
18
+ useEffect(() => {
19
+ ref.current?.beginElement();
20
+ }, [inverted]);
21
+
22
+ return (
23
+ <circle fill="var(--primary)" r="6">
24
+ <animateMotion
25
+ ref={ref}
26
+ dur="2s"
27
+ path={edgePath}
28
+ {...(inverted && {
29
+ pathLength: '1',
30
+ keyPoints: '1;0',
31
+ keyTimes: '0;1',
32
+ })}
33
+ />
34
+ </circle>
35
+ );
36
+ };
4
37
 
5
38
  export function DefaultEdge({
6
39
  id,
@@ -13,6 +46,7 @@ export function DefaultEdge({
13
46
  label,
14
47
  selected,
15
48
  markerEnd,
49
+ data,
16
50
  }: DefaultEdgeProps) {
17
51
  const [edgePath] = getBezierPath({
18
52
  sourceX,
@@ -23,16 +57,25 @@ export function DefaultEdge({
23
57
  targetPosition,
24
58
  });
25
59
 
60
+ const className =
61
+ selected || data?.delegating
62
+ ? '!stroke-primary'
63
+ : '!stroke-border dark:!stroke-muted-foreground';
64
+
26
65
  return (
27
- <BaseEdge
28
- id={id}
29
- path={edgePath}
30
- label={label}
31
- markerEnd={markerEnd}
32
- style={{
33
- strokeWidth: 2,
34
- }}
35
- className={`${selected ? '!stroke-primary' : '!stroke-border dark:!stroke-muted-foreground'}`}
36
- />
66
+ <>
67
+ {/* Animated circles based on delegating direction */}
68
+ {data?.delegating && (
69
+ <AnimatedCircle edgePath={edgePath} inverted={data.delegating === 'inverted'} />
70
+ )}
71
+ <BaseEdge
72
+ id={id}
73
+ path={edgePath}
74
+ label={label}
75
+ markerEnd={markerEnd}
76
+ style={{ strokeWidth: 2 }}
77
+ className={className}
78
+ />
79
+ </>
37
80
  );
38
81
  }
@@ -23,7 +23,7 @@ export function NodeItem({ node }: NodeItemProps) {
23
23
  role="button"
24
24
  tabIndex={disabled ? -1 : 0}
25
25
  aria-label={`Drag ${name} node`}
26
- className="border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 flex font-medium items-center text-sm rounded-md p-2 justify-between gap-2 text-left h-auto w-full group group-hover:bg-muted/50 transition-all ease-in-out duration-200 cursor-grab active:cursor-grabbing"
26
+ className="backdrop-blur-3xl border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 flex font-medium items-center text-sm rounded-md p-2 justify-between gap-2 text-left h-auto w-full group group-hover:bg-muted/50 transition-all ease-in-out duration-200 cursor-grab active:cursor-grabbing"
27
27
  draggable={!disabled}
28
28
  onDragStart={(e) => onDragStart(e, node)}
29
29
  >
@@ -1,30 +1,25 @@
1
- import { forwardRef, type HTMLAttributes } from 'react';
1
+ import { type FC, forwardRef, type HTMLAttributes } from 'react';
2
2
  import { cn } from '@/lib/utils';
3
3
 
4
4
  interface BaseNodeProps extends HTMLAttributes<HTMLDivElement> {
5
5
  isSelected?: boolean;
6
6
  }
7
7
 
8
- export const BaseNode = forwardRef<HTMLDivElement, BaseNodeProps>(
9
- ({ className, isSelected, ...props }, ref) => (
10
- <div
11
- ref={ref}
12
- className={cn(
13
- 'relative rounded-lg border bg-card text-card-foreground',
14
- 'hover:ring-2 hover:ring-gray-700/5',
15
- // React Flow displays node elements inside of a `NodeWrapper` component,
16
- // which compiles down to a div with a the class `react-flow__node`.
17
- // When a node is selected, the class `selected` is added to the
18
- // `react-flow__node` element. This allows us to style the node when it
19
- isSelected && 'ring-2 ring-primary hover:ring-primary',
20
- className
21
- )}
22
- // tabIndex={0}
23
- {...props}
24
- />
25
- )
8
+ export const BaseNode: FC<BaseNodeProps> = ({ className, isSelected, ...props }) => (
9
+ <div
10
+ className={cn(
11
+ 'relative rounded-lg border bg-card text-card-foreground',
12
+ // React Flow displays node elements inside of a `NodeWrapper` component,
13
+ // which compiles down to a div with a the class `react-flow__node`.
14
+ // When a node is selected, the class `selected` is added to the
15
+ // `react-flow__node` element. This allows us to style the node when it
16
+ isSelected ? 'ring-2 ring-primary' : 'hover:ring-2 hover:ring-gray-700/5',
17
+ className
18
+ )}
19
+ // tabIndex={0}
20
+ {...props}
21
+ />
26
22
  );
27
- BaseNode.displayName = 'BaseNode';
28
23
 
29
24
  /**
30
25
  * A container for a consistent header layout intended to be used inside the
@@ -9,10 +9,11 @@ import { ErrorIndicator } from '../error-display/error-indicator';
9
9
  import { BaseNode, BaseNodeContent, BaseNodeHeader, BaseNodeHeaderTitle } from './base-node';
10
10
  import { Handle } from './handle';
11
11
  import { NodeTab } from './node-tab';
12
+ import { cn } from '@/lib/utils';
12
13
 
13
14
  export function ExternalAgentNode(props: NodeProps & { data: AgentNodeData }) {
14
15
  const { data, selected, id } = props;
15
- const { name, description } = data;
16
+ const { name, description, isExecuting } = data;
16
17
  const { getNodeErrors, hasNodeErrors } = useAgentErrors();
17
18
 
18
19
  // Use the agent ID from node data if available, otherwise fall back to React Flow node ID
@@ -22,10 +23,14 @@ export function ExternalAgentNode(props: NodeProps & { data: AgentNodeData }) {
22
23
 
23
24
  return (
24
25
  <div className="relative">
25
- <NodeTab selected={selected}>External</NodeTab>
26
+ <NodeTab isSelected={selected}>External</NodeTab>
26
27
  <BaseNode
27
- isSelected={selected}
28
- className={`rounded-tl-none ${hasErrors ? 'ring-2 ring-red-300 border-red-300' : ''}`}
28
+ isSelected={selected || data.isDelegating}
29
+ className={cn(
30
+ 'rounded-tl-none',
31
+ hasErrors && 'ring-2 ring-red-300 border-red-300',
32
+ isExecuting && 'node-executing'
33
+ )}
29
34
  style={{ width: NODE_WIDTH }}
30
35
  >
31
36
  <BaseNodeHeader className="flex items-center justify-between gap-2">
@@ -5,6 +5,7 @@ import { type FunctionToolNodeData, functionToolNodeHandleId } from '../configur
5
5
  import { ErrorIndicator } from '../error-display/error-indicator';
6
6
  import { BaseNode, BaseNodeHeader, BaseNodeHeaderTitle } from './base-node';
7
7
  import { Handle } from './handle';
8
+ import { cn } from '@/lib/utils';
8
9
 
9
10
  export function FunctionToolNode(props: NodeProps & { data: FunctionToolNodeData }) {
10
11
  const { data, selected, id } = props;
@@ -21,8 +22,12 @@ export function FunctionToolNode(props: NodeProps & { data: FunctionToolNodeData
21
22
  return (
22
23
  <div className="relative">
23
24
  <BaseNode
24
- isSelected={selected}
25
- className={`rounded-4xl min-w-40 max-w-xs ${hasErrors ? 'ring-2 ring-red-300 border-red-300' : ''}`}
25
+ isSelected={selected || data.isDelegating}
26
+ className={cn(
27
+ 'rounded-4xl min-w-40 max-w-xs',
28
+ hasErrors && 'ring-2 ring-red-300 border-red-300',
29
+ data.isExecuting && 'node-executing'
30
+ )}
26
31
  >
27
32
  <BaseNodeHeader className="mb-0 py-3">
28
33
  <div className="flex flex-col gap-1.5">
@@ -5,8 +5,9 @@ import { Badge } from '@/components/ui/badge';
5
5
  import { useAgentStore } from '@/features/agent/state/use-agent-store';
6
6
  import { getCurrentSelectedToolsForNode } from '@/lib/utils/orphaned-tools-detector';
7
7
  import { type MCPNodeData, mcpNodeHandleId } from '../configuration/node-types';
8
- import { BaseNode, BaseNodeHeader, BaseNodeHeaderTitle } from './base-node';
8
+ import { BaseNode, BaseNodeContent, BaseNodeHeader, BaseNodeHeaderTitle } from './base-node';
9
9
  import { Handle } from './handle';
10
+ import { cn } from '@/lib/utils';
10
11
 
11
12
  const TOOLS_SHOWN_LIMIT = 4;
12
13
 
@@ -78,32 +79,34 @@ export function MCPNode(props: NodeProps & { data: MCPNodeData }) {
78
79
  const toolBadges = getToolDisplay();
79
80
 
80
81
  return (
81
- <BaseNode isSelected={selected} className="rounded-4xl min-w-40 min-h-13 max-w-3xs">
82
- <BaseNodeHeader className="mb-0 py-3">
83
- <div className="flex items-center flex-wrap gap-1">
84
- <div className="flex items-center gap-2 flex-shrink-0 mr-4">
85
- <MCPToolImage
86
- imageUrl={imageUrl}
87
- name={name}
88
- provider={provider || undefined}
89
- size={24}
90
- className="mt-[1px] flex-shrink-0"
91
- />
92
- <BaseNodeHeaderTitle className="flex-shrink-0">{name}</BaseNodeHeaderTitle>
93
- </div>
94
- <div className="flex items-center flex-wrap gap-1">
95
- {toolBadges.map((label, index) => (
96
- <Badge
97
- key={index}
98
- variant="code"
99
- className="px-2 text-2xs text-gray-700 dark:text-gray-300 flex-shrink-0"
100
- >
101
- {label}
102
- </Badge>
103
- ))}
104
- </div>
105
- </div>
82
+ <BaseNode
83
+ isSelected={selected || data.isDelegating}
84
+ className={cn(
85
+ 'rounded-4xl min-w-40 min-h-13 max-w-3xs',
86
+ data.isExecuting && 'node-executing'
87
+ )}
88
+ >
89
+ <BaseNodeHeader className="flex items-center justify-between gap-2">
90
+ <MCPToolImage
91
+ imageUrl={imageUrl}
92
+ name={name}
93
+ provider={provider || undefined}
94
+ size={24}
95
+ className="flex-shrink-0"
96
+ />
97
+ <BaseNodeHeaderTitle>{name}</BaseNodeHeaderTitle>
106
98
  </BaseNodeHeader>
99
+ <BaseNodeContent>
100
+ {toolBadges.map((label, index) => (
101
+ <Badge
102
+ key={index}
103
+ variant="code"
104
+ className="px-2 text-2xs text-gray-700 dark:text-gray-300 flex-shrink-0"
105
+ >
106
+ {label}
107
+ </Badge>
108
+ ))}
109
+ </BaseNodeContent>
107
110
  <Handle id={mcpNodeHandleId} type="target" position={Position.Top} isConnectable />
108
111
  </BaseNode>
109
112
  );
@@ -1,16 +1,17 @@
1
+ import type { FC, ReactNode } from 'react';
1
2
  import { cn } from '@/lib/utils';
2
3
 
3
4
  interface NodeTabProps {
4
- selected: boolean;
5
- children: React.ReactNode;
5
+ isSelected?: boolean;
6
+ children: ReactNode;
6
7
  }
7
8
 
8
- export function NodeTab({ selected, children }: NodeTabProps) {
9
+ export const NodeTab: FC<NodeTabProps> = ({ isSelected, children }) => {
9
10
  return (
10
11
  <div
11
12
  className={cn(
12
- ' px-2 py-0.5 rounded-t-md flex items-center gap-2 w-fit border border-b-0 font-medium font-mono text-xs uppercase',
13
- selected
13
+ 'px-2 py-0.5 rounded-t-md flex items-center gap-2 w-fit border border-b-0 font-medium font-mono text-xs uppercase',
14
+ isSelected
14
15
  ? 'bg-primary border-primary text-white ring-2 ring-primary'
15
16
  : 'bg-muted text-muted-foreground border-border'
16
17
  )}
@@ -18,4 +19,4 @@ export function NodeTab({ selected, children }: NodeTabProps) {
18
19
  {children}
19
20
  </div>
20
21
  );
21
- }
22
+ };
@@ -14,6 +14,7 @@ import { ErrorIndicator } from '../error-display/error-indicator';
14
14
  import { BaseNode, BaseNodeContent, BaseNodeHeader, BaseNodeHeaderTitle } from './base-node';
15
15
  import { Handle } from './handle';
16
16
  import { NodeTab } from './node-tab';
17
+ import { cn } from '@/lib/utils';
17
18
 
18
19
  const ListSection = ({
19
20
  title,
@@ -73,10 +74,14 @@ export function SubAgentNode(props: NodeProps & { data: AgentNodeData }) {
73
74
 
74
75
  return (
75
76
  <div className="relative">
76
- {isDefault ? <NodeTab selected={selected}>Default</NodeTab> : null}
77
+ {isDefault && <NodeTab isSelected={selected || data.isDelegating}>Default</NodeTab>}
77
78
  <BaseNode
78
- isSelected={selected}
79
- className={`${isDefault ? 'rounded-tl-none' : ''} ${hasErrors ? 'ring-2 ring-red-300 border-red-300' : ''}`}
79
+ isSelected={selected || data.isDelegating}
80
+ className={cn(
81
+ isDefault && 'rounded-tl-none',
82
+ hasErrors && 'ring-2 ring-red-300 border-red-300',
83
+ data.isExecuting && 'node-executing'
84
+ )}
80
85
  style={{ width: NODE_WIDTH }}
81
86
  >
82
87
  <BaseNodeHeader className="flex items-center justify-between gap-2">
@@ -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>
@@ -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
 
@@ -1 +0,0 @@
1
- "use strict";exports.id=1213,exports.ids=[1213],exports.modules={25498:(a,b,c)=>{c.r(b),c.d(b,{"40dcefeb381a5213090206da357ef95ff10446057d":()=>d.bW,"6075560ff8b706329b9472cd9ba11dfcbfd45223b6":()=>d.qf,"609d043dec93e6bdcdea2e716cd9ae1e482e2366da":()=>d.gL,"60bd5203c8bca4853e6eeb937b011d9c1e4e9d63fb":()=>d.Dv,"60d8914a16ea8e574f99e1c01192972ad4b5709393":()=>p,"7035be8f2ca98959c6f8d0cb8a2aa3281d4763fbef":()=>q,"7071f7f69d35912805a385ac5a910f6ab45e66cc96":()=>d.Tg,"70ce184243b59224f4a8c4d6da522a40c570f046c6":()=>r,"70f59614abb2d675176ed45033918b0efc090d4a1c":()=>s});var d=c(72025),e=c(29991);c(58415);var f=c(83248),g=c(8703),h=c(45796),i=c(33451);async function j(a,b){return(0,h.M2)(a),(0,h.nt)(b),await (0,g.J)(`tenants/${a}/projects/${b}/artifact-components`)}async function k(a,b,c){return(0,h.M2)(a),(0,h.nt)(b),(await (0,g.J)(`tenants/${a}/projects/${b}/artifact-components/${c}`)).data}async function l(a,b,c){return(0,h.M2)(a),(0,h.nt)(b),(await (0,g.J)(`tenants/${a}/projects/${b}/artifact-components`,{method:"POST",body:JSON.stringify(c)})).data}async function m(a,b,c){return(0,h.M2)(a),(0,h.nt)(b),(await (0,g.J)(`tenants/${a}/projects/${b}/artifact-components/${c.id}`,{method:"PUT",body:JSON.stringify(c)})).data}async function n(a,b,c){(0,h.M2)(a),(0,h.nt)(b),await (0,g.J)(`tenants/${a}/projects/${b}/artifact-components/${c}`,{method:"DELETE"})}(0,i.D)([j,k,l,m,n]),(0,e.A)(j,"60a9ea07cb0b745ddfbe5900068e3f1ff21d912a4b",null),(0,e.A)(k,"708a7dc847fe4b3e77e18aabc4ee3f54f911c04cc9",null),(0,e.A)(l,"709a0d0d4c5be6e15c53cf1340f939f2d904294c65",null),(0,e.A)(m,"704be9598808f9944c78b0730bf6e78de7f5084803",null),(0,e.A)(n,"70ea5711c7d43ac6daf61568dcfd27e195f30f20da",null);var o=c(36608);async function p(a,b){try{let c=await j(a,b);return{success:!0,data:c.data}}catch(a){if(a instanceof o.h)return{success:!1,error:a.message,code:a.error.code};return{success:!1,error:a instanceof Error?a.message:"Unknown error occurred",code:"unknown_error"}}}async function q(a,b,c){try{let d=await l(a,b,c);return(0,f.revalidatePath)(`/${a}/projects/${b}/artifacts`),{success:!0,data:d}}catch(a){if(a instanceof o.h)return{success:!1,error:a.message,code:a.error.code};return{success:!1,error:a instanceof Error?a.message:"Unknown error occurred",code:"unknown_error"}}}async function r(a,b,c){try{let d=await m(a,b,c);return(0,f.revalidatePath)(`/${a}/projects/${b}/artifacts`),(0,f.revalidatePath)(`/${a}/projects/${b}/artifacts/${c.id}`),{success:!0,data:d}}catch(a){if(a instanceof o.h)return{success:!1,error:a.message,code:a.error.code};return{success:!1,error:a instanceof Error?a.message:"Unknown error occurred",code:"unknown_error"}}}async function s(a,b,c){try{return await n(a,b,c),(0,f.revalidatePath)(`/${a}/projects/${b}/artifacts`),(0,f.revalidatePath)(`/${a}/projects/${b}/artifacts/${c}`),{success:!0}}catch(a){if(a instanceof o.h)return{success:!1,error:a.message,code:a.error.code};return{success:!1,error:a instanceof Error?a.message:"Unknown error occurred",code:"unknown_error"}}}(0,i.D)([p,q,r,s]),(0,e.A)(p,"60d8914a16ea8e574f99e1c01192972ad4b5709393",null),(0,e.A)(q,"7035be8f2ca98959c6f8d0cb8a2aa3281d4763fbef",null),(0,e.A)(r,"70ce184243b59224f4a8c4d6da522a40c570f046c6",null),(0,e.A)(s,"70f59614abb2d675176ed45033918b0efc090d4a1c",null)},29160:(a,b,c)=>{c.r(b),c.d(b,{default:()=>h,dynamic:()=>g});var d=c(72669),e=c(45907),f=c(54637);let g="force-dynamic";async function h({children:a,params:b}){let{tenantId:c,projectId:g}=await b;try{await (0,f.Sw)(c,g)}catch(a){return(0,d.jsx)(e.default,{error:a,context:"project"})}return(0,d.jsx)(d.Fragment,{children:a})}},32582:(a,b,c)=>{c.d(b,{ArtifactComponentForm:()=>x});var d=c(59111),e=c(6614),f=c(485),g=c(75823),h=c(68156),i=c(17130),j=c(16426),k=c(56019),l=c(2856),m=c(93622),n=c(35283),o=c(90147);let p=(0,o.createServerReference)("70ce184243b59224f4a8c4d6da522a40c570f046c6",o.callServer,void 0,o.findSourceMapURL,"updateArtifactComponentAction"),q=(0,o.createServerReference)("7035be8f2ca98959c6f8d0cb8a2aa3281d4763fbef",o.callServer,void 0,o.findSourceMapURL,"createArtifactComponentAction");var r=c(42723);let s={id:"",name:"",description:"",props:void 0};var t=c(34576),u=c(80974),v=c(62503);let w=t.object({id:v.f,name:t.string().min(1,"Name is required."),description:t.string().min(1,"Description is required."),props:t.union([t.string(),t.null(),t.undefined()]).transform((a,b)=>{if(a&&""!==a&&null!==a)try{let c=JSON.parse(a),d=(0,u._O)(a);if(!d.isValid){let a=d.errors[0]?.message||"Invalid JSON schema";return b.addIssue({code:t.ZodIssueCode.custom,message:a}),t.NEVER}return c}catch(a){return b.addIssue({code:t.ZodIssueCode.custom,message:(0,u.SR)(a)}),t.NEVER}}).optional()});function x({id:a,tenantId:b,projectId:c,initialData:o}){let t=(0,g.mN)({resolver:(0,e.u)(w),defaultValues:(a=>{if(!a)return s;let b={...a};return b.props&&(b.props=(0,r.S_)(b.props)),b})(o)}),{isSubmitting:u}=t.formState,v=(0,f.useRouter)();(0,n.S)({form:t,nameField:"name",idField:"id",isEditing:!!a});let x=async d=>{try{let e={...d};if(void 0===e.props&&(e.props=null),a){let a=await p(b,c,e);if(!a.success)return void h.oR.error(a.error||"Failed to update artifact.");h.oR.success("Artifact updated.")}else{let a=await q(b,c,e);if(!a.success)return void h.oR.error(a.error||"Failed to create artifact");h.oR.success("Artifact created."),v.push(`/${b}/projects/${c}/artifacts`)}}catch(b){console.error("Error submitting artifact:",b);let a=b instanceof Error?b.message:"An unexpected error occurred.";h.oR.error(a)}};return(0,d.jsx)(m.lV,{...t,children:(0,d.jsxs)("form",{onSubmit:t.handleSubmit(x),className:"space-y-8",children:[(0,d.jsx)(i.a,{control:t.control,name:"name",label:"Name",placeholder:"Document Artifact",isRequired:!0}),(0,d.jsx)(i.a,{control:t.control,name:"id",label:"Id",placeholder:"my-artifact",disabled:!!a,isRequired:!0,description:a?"":"Choose a unique identifier for this artifact. Using an existing id will replace that artifact."}),(0,d.jsx)(j.K,{control:t.control,name:"description",label:"Description",placeholder:"Structured factual information extracted from search results",className:"min-h-[80px]",isRequired:!0}),(0,d.jsx)(k.S,{control:t.control,name:"props",label:"Props (JSON schema with inPreview indicators)",placeholder:"Enter a valid JSON Schema with inPreview flags, or leave empty to save entire tool result...",description:"Optional: Define specific fields with inPreview flags, or leave empty to capture the complete tool response."}),(0,d.jsx)(l.$,{type:"submit",disabled:u,children:"Save"})]})})}},39878:(a,b,c)=>{c.d(b,{$:()=>i});var d=c(59111),e=c(2856),f=c(80974),g=c(42723),h=c(67466);function i(a){return(0,d.jsxs)("div",{"data-slot":"json-editor",className:`space-y-3 relative overflow-hidden p-1 ${a.className||""}`,children:[(0,d.jsxs)("div",{className:"flex items-center gap-2 absolute top-3 right-3 z-10",children:[!a.value?.trim()&&(0,d.jsx)(e.$,{type:"button",onClick:()=>{let b=(0,f.Qj)();a.onChange(b)},variant:"outline",size:"sm",className:"h-6 px-2 text-xs rounded-sm",children:"Template"}),(0,d.jsx)(e.$,{type:"button",onClick:()=>{let b=a.value;if(b?.trim()){let c=(0,g.IB)(b);a.onChange(c)}},variant:"outline",size:"sm",className:"h-6 px-2 text-xs rounded-sm",disabled:!a.value?.trim(),children:"Format"})]}),(0,d.jsx)(h.i,{value:a.value||"",onChange:a.onChange,placeholder:a.placeholder,disabled:a.disabled,readOnly:a.readOnly})]})}},44733:(a,b,c)=>{c.d(b,{ArtifactComponentForm:()=>d});let d=(0,c(60241).registerClientReference)(function(){throw Error("Attempted to call ArtifactComponentForm() from the server but ArtifactComponentForm is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/agents/agents/agents-manage-ui/src/components/artifact-components/form/artifact-component-form.tsx","ArtifactComponentForm")},56019:(a,b,c)=>{c.d(b,{S:()=>g});var d=c(59111),e=c(71771),f=c(39878);function g({control:a,name:b,label:c="JSON Schema",placeholder:g,disabled:h,description:i,readOnly:j,isRequired:k=!1}){return(0,d.jsx)(e.u,{control:a,name:b,label:c,description:i,isRequired:k,children:a=>(0,d.jsx)(f.$,{placeholder:g,...a,onChange:a.onChange,readOnly:j,disabled:h})})}},62503:(a,b,c)=>{c.d(b,{f:()=>d});let d=c(34576).string().min(1,"Id is required.").max(64,"Id must be less than 64 characters.").regex(/^[a-zA-Z0-9_-]+$/,"Id must contain only alphanumeric characters, underscores, and dashes. No spaces allowed.")},80974:(a,b,c)=>{c.d(b,{Qj:()=>k,SR:()=>l,_O:()=>j});var d=c(7352),e=c(43381);let f=d.ZU.Object({type:d.ZU.Union([d.ZU.Literal("string"),d.ZU.Literal("number"),d.ZU.Literal("integer"),d.ZU.Literal("boolean"),d.ZU.Literal("array"),d.ZU.Literal("object"),d.ZU.Literal("null")]),description:d.ZU.String({minLength:1}),format:d.ZU.Optional(d.ZU.String()),pattern:d.ZU.Optional(d.ZU.String()),minimum:d.ZU.Optional(d.ZU.Number()),maximum:d.ZU.Optional(d.ZU.Number()),minLength:d.ZU.Optional(d.ZU.Number()),maxLength:d.ZU.Optional(d.ZU.Number()),items:d.ZU.Optional(d.ZU.Any()),properties:d.ZU.Optional(d.ZU.Any()),enum:d.ZU.Optional(d.ZU.Array(d.ZU.Any())),const:d.ZU.Optional(d.ZU.Any()),default:d.ZU.Optional(d.ZU.Any())}),g=d.ZU.Object({type:d.ZU.Literal("object"),properties:d.ZU.Record(d.ZU.String(),f),required:d.ZU.Array(d.ZU.String(),{minItems:1}),additionalProperties:d.ZU.Optional(d.ZU.Boolean()),description:d.ZU.Optional(d.ZU.String())}),h=e.gv.Compile(f),i=e.gv.Compile(g);function j(a){let b=[],{parsed:c,errors:d}=function(a){let b=[],c=null;if(!a?.trim())return{parsed:null,errors:b};try{c=JSON.parse(a)}catch(a){b.push({path:"root",message:a instanceof Error?a.message:"Invalid JSON syntax",type:"syntax"})}return{parsed:c,errors:b}}(a);if(d.length>0)return{isValid:!1,errors:d,warnings:b};if(!c)return{isValid:!0,errors:[],warnings:["Empty schema provided"]};let e=[...function(a){let b=[];return a&&"object"==typeof a?!i.Check(a)&&(a.type&&"object"===a.type||b.push({path:"type",message:'Schema must have type: "object" for LLM compatibility',type:"llm_requirement"}),a.properties&&"object"==typeof a.properties||b.push({path:"properties",message:'Schema must have a "properties" object',type:"schema"}),a.required&&Array.isArray(a.required)||b.push({path:"required",message:'Schema must have a "required" array (can be empty)',type:"llm_requirement"}),a.properties&&"object"==typeof a.properties&&Object.entries(a.properties).forEach(([a,c])=>{h.Check(c)||[...h.Errors(c)].forEach(c=>{let d=c.message;"/description"===c.path?d='Each property must have a "description" for LLM compatibility':"/type"===c.path&&(d='Each property must have a valid "type"'),b.push({path:`properties.${a}${c.path}`,message:d,type:"/description"===c.path?"llm_requirement":"schema"})})})):b.push({path:"root",message:"Schema must be an object",type:"schema"}),b}(c),...function(a){let b=[];return a&&"object"==typeof a&&(a.required&&Array.isArray(a.required)&&a.properties&&a.required.forEach(c=>{a.properties[c]||b.push({path:"required",message:`Required property "${c}" must exist in properties`,type:"schema"})}),a.properties&&"object"==typeof a.properties&&Object.entries(a.properties).forEach(([a,c])=>{c.description&&"string"==typeof c.description&&0!==c.description.trim().length||b.push({path:`properties.${a}.description`,message:"Each property must have a non-empty description for LLM compatibility",type:"llm_requirement"})})),b}(c)];return{isValid:0===e.length,errors:e,warnings:b}}function k(){return JSON.stringify({type:"object",properties:{example_property:{type:"string",description:"Description of what this property represents"}},required:["example_property"]},null,2)}function l(a){if(a instanceof SyntaxError){let b=a.message.toLowerCase();return b.includes("unexpected end of json input")?"Incomplete JSON - missing closing brackets or quotes":b.includes("unexpected token")?"Invalid character in JSON - check for missing commas, quotes, or brackets":b.includes("expected property name")||b.includes("expected ':' after property name")?"Property names must be in double quotes":b.includes("duplicate keys")?"Duplicate property names are not allowed":"Invalid JSON syntax - check structure and formatting"}return"Unable to parse JSON"}},93056:(a,b,c)=>{c.r(b),c.d(b,{default:()=>j});var d=c(72669),e=c(17932),f=c(96737),g=c(39885),h=c(3687),i=c(43461);function j(){return(0,d.jsx)(e.H,{breadcrumbs:[{label:"Artifacts"}],children:(0,d.jsxs)(f.D,{children:[(0,d.jsx)(g.zY,{title:"Artifacts",description:i.lh}),(0,d.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-3 md:gap-4",children:Array.from({length:6}).map((a,b)=>(0,d.jsx)(h.E,{className:"h-36 w-full rounded-lg"},`loading-artifact-${b}`))})]})})}}};