@inkeep/agents-manage-ui 0.0.0-dev-20251021180725 → 0.0.0-dev-20251021214723

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 (276) 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 +243 -189
  3. package/.next/standalone/agents-manage-ui/.next/app-path-routes-manifest.json +6 -2
  4. package/.next/standalone/agents-manage-ui/.next/build-manifest.json +5 -5
  5. package/.next/standalone/agents-manage-ui/.next/prerender-manifest.json +3 -3
  6. package/.next/standalone/agents-manage-ui/.next/react-loadable-manifest.json +2 -2
  7. package/.next/standalone/agents-manage-ui/.next/routes-manifest.json +38 -0
  8. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/page.js +2 -2
  9. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/page.js.nft.json +1 -1
  10. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/page_client-reference-manifest.js +1 -1
  11. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/[agentId]/page.js +2 -2
  12. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/[agentId]/page.js.nft.json +1 -1
  13. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/[agentId]/page_client-reference-manifest.js +1 -1
  14. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/new/page.js +2 -2
  15. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/new/page.js.nft.json +1 -1
  16. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/new/page_client-reference-manifest.js +1 -1
  17. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/page.js +2 -2
  18. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/page.js.nft.json +1 -1
  19. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/page_client-reference-manifest.js +1 -1
  20. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/api-keys/page.js +3 -3
  21. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/api-keys/page.js.nft.json +1 -1
  22. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/api-keys/page_client-reference-manifest.js +1 -1
  23. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page.js +1 -1
  24. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page.js.nft.json +1 -1
  25. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page_client-reference-manifest.js +1 -1
  26. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page.js +2 -2
  27. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page.js.nft.json +1 -1
  28. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page_client-reference-manifest.js +1 -1
  29. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/page.js +2 -2
  30. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/page.js.nft.json +1 -1
  31. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/page_client-reference-manifest.js +1 -1
  32. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page.js +2 -2
  33. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page.js.nft.json +1 -1
  34. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page_client-reference-manifest.js +1 -1
  35. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page.js +2 -2
  36. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page.js.nft.json +1 -1
  37. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page_client-reference-manifest.js +1 -1
  38. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/page.js +1 -1
  39. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/page.js.nft.json +1 -1
  40. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/page_client-reference-manifest.js +1 -1
  41. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page.js +2 -2
  42. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page.js.nft.json +1 -1
  43. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page_client-reference-manifest.js +1 -1
  44. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js +2 -2
  45. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js.nft.json +1 -1
  46. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page_client-reference-manifest.js +1 -1
  47. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page.js +1 -1
  48. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page.js.nft.json +1 -1
  49. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page_client-reference-manifest.js +1 -1
  50. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.js +2 -2
  51. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.js.nft.json +1 -1
  52. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page_client-reference-manifest.js +1 -1
  53. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page.js +2 -2
  54. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page.js.nft.json +1 -1
  55. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page_client-reference-manifest.js +1 -1
  56. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page.js +2 -2
  57. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page.js.nft.json +1 -1
  58. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page_client-reference-manifest.js +1 -1
  59. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/edit/page.js +2 -0
  60. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/edit/page.js.nft.json +1 -0
  61. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/edit/page_client-reference-manifest.js +1 -0
  62. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/page.js +2 -0
  63. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/page.js.nft.json +1 -0
  64. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/page_client-reference-manifest.js +1 -0
  65. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/new/page.js +2 -0
  66. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/new/page.js.nft.json +1 -0
  67. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/new/page_client-reference-manifest.js +1 -0
  68. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/page.js +2 -0
  69. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/page.js.nft.json +1 -0
  70. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/page_client-reference-manifest.js +1 -0
  71. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page.js +2 -2
  72. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page.js.nft.json +1 -1
  73. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page_client-reference-manifest.js +1 -1
  74. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page.js +2 -2
  75. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page.js.nft.json +1 -1
  76. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page_client-reference-manifest.js +1 -1
  77. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page.js +2 -2
  78. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page.js.nft.json +1 -1
  79. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page_client-reference-manifest.js +1 -1
  80. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page.js +2 -2
  81. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page.js.nft.json +1 -1
  82. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page_client-reference-manifest.js +1 -1
  83. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page.js +2 -2
  84. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page.js.nft.json +1 -1
  85. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page_client-reference-manifest.js +1 -1
  86. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page.js +2 -2
  87. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page.js.nft.json +1 -1
  88. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page_client-reference-manifest.js +1 -1
  89. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js +2 -2
  90. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js.nft.json +1 -1
  91. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page_client-reference-manifest.js +1 -1
  92. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page.js +3 -3
  93. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page.js.nft.json +1 -1
  94. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page_client-reference-manifest.js +1 -1
  95. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page.js +3 -3
  96. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page.js.nft.json +1 -1
  97. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page_client-reference-manifest.js +1 -1
  98. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page.js +2 -2
  99. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page.js.nft.json +1 -1
  100. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page_client-reference-manifest.js +1 -1
  101. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page.js +2 -2
  102. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page.js.nft.json +1 -1
  103. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  104. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.html +1 -1
  105. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.rsc +10 -10
  106. package/.next/standalone/agents-manage-ui/.next/server/app/api/data-components/[dataComponentId]/generate-preview/route_client-reference-manifest.js +1 -1
  107. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
  108. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/route_client-reference-manifest.js +1 -1
  109. package/.next/standalone/agents-manage-ui/.next/server/app/page.js +2 -2
  110. package/.next/standalone/agents-manage-ui/.next/server/app/page.js.nft.json +1 -1
  111. package/.next/standalone/agents-manage-ui/.next/server/app/page_client-reference-manifest.js +1 -1
  112. package/.next/standalone/agents-manage-ui/.next/server/app-paths-manifest.json +6 -2
  113. package/.next/standalone/agents-manage-ui/.next/server/chunks/{7953.js → 1653.js} +2 -2
  114. package/.next/standalone/agents-manage-ui/.next/server/chunks/1735.js +1 -1
  115. package/.next/standalone/agents-manage-ui/.next/server/chunks/2848.js +123 -0
  116. package/.next/standalone/agents-manage-ui/.next/server/chunks/{4414.js → 2912.js} +1 -1
  117. package/.next/standalone/agents-manage-ui/.next/server/chunks/2949.js +1 -1
  118. package/.next/standalone/agents-manage-ui/.next/server/chunks/3468.js +1 -1
  119. package/.next/standalone/agents-manage-ui/.next/server/chunks/3547.js +1 -1
  120. package/.next/standalone/agents-manage-ui/.next/server/chunks/3948.js +1 -1
  121. package/.next/standalone/agents-manage-ui/.next/server/chunks/3967.js +1 -1
  122. package/.next/standalone/agents-manage-ui/.next/server/chunks/4605.js +1 -1
  123. package/.next/standalone/agents-manage-ui/.next/server/chunks/4629.js +1 -1
  124. package/.next/standalone/agents-manage-ui/.next/server/chunks/4944.js +1 -0
  125. package/.next/standalone/agents-manage-ui/.next/server/chunks/5330.js +1 -0
  126. package/.next/standalone/agents-manage-ui/.next/server/chunks/5343.js +196 -0
  127. package/.next/standalone/agents-manage-ui/.next/server/chunks/{9222.js → 5478.js} +2 -2
  128. package/.next/standalone/agents-manage-ui/.next/server/chunks/5732.js +1 -1
  129. package/.next/standalone/agents-manage-ui/.next/server/chunks/5781.js +1 -14
  130. package/.next/standalone/agents-manage-ui/.next/server/chunks/6035.js +1 -1
  131. package/.next/standalone/agents-manage-ui/.next/server/chunks/6334.js +1 -1
  132. package/.next/standalone/agents-manage-ui/.next/server/chunks/6721.js +4 -4
  133. package/.next/standalone/agents-manage-ui/.next/server/chunks/7539.js +1 -0
  134. package/.next/standalone/agents-manage-ui/.next/server/chunks/7569.js +1 -0
  135. package/.next/standalone/agents-manage-ui/.next/server/chunks/7709.js +1 -1
  136. package/.next/standalone/agents-manage-ui/.next/server/chunks/7711.js +1 -1
  137. package/.next/standalone/agents-manage-ui/.next/server/chunks/7988.js +2 -2
  138. package/.next/standalone/agents-manage-ui/.next/server/chunks/7990.js +1 -1
  139. package/.next/standalone/agents-manage-ui/.next/server/chunks/848.js +14 -0
  140. package/.next/standalone/agents-manage-ui/.next/server/chunks/8541.js +1 -0
  141. package/.next/standalone/agents-manage-ui/.next/server/chunks/8860.js +1 -1
  142. package/.next/standalone/agents-manage-ui/.next/server/middleware-build-manifest.js +1 -1
  143. package/.next/standalone/agents-manage-ui/.next/server/middleware-manifest.json +5 -5
  144. package/.next/standalone/agents-manage-ui/.next/server/middleware-react-loadable-manifest.js +1 -1
  145. package/.next/standalone/agents-manage-ui/.next/server/pages/404.html +1 -1
  146. package/.next/standalone/agents-manage-ui/.next/server/pages/500.html +1 -1
  147. package/.next/standalone/agents-manage-ui/.next/server/server-reference-manifest.js +1 -1
  148. package/.next/standalone/agents-manage-ui/.next/server/server-reference-manifest.json +1 -1
  149. package/.next/standalone/agents-manage-ui/.next/static/chunks/13328-7cdffb43af522e3b.js +1 -0
  150. package/.next/standalone/agents-manage-ui/.next/static/chunks/141-2194354efdb43c90.js +1 -0
  151. package/.next/standalone/agents-manage-ui/.next/static/chunks/16631-3e83016992303b73.js +123 -0
  152. package/.next/standalone/agents-manage-ui/.next/static/chunks/20837-9a62532499d9cbb2.js +1 -0
  153. package/.next/standalone/agents-manage-ui/.next/static/chunks/{21222.e4e7c46ec8877cf5.js → 21222.fe424c5b7428fcea.js} +1 -1
  154. package/.next/standalone/agents-manage-ui/.next/static/chunks/{50285-9138bb26e62daef6.js → 23610-476f03c272ca3950.js} +1 -1
  155. package/.next/standalone/agents-manage-ui/.next/static/chunks/{23650-279b019c0d10672a.js → 23650-2d38d02faab9fd7e.js} +1 -1
  156. package/.next/standalone/agents-manage-ui/.next/static/chunks/25672-93f2aa7eb2408291.js +1 -0
  157. package/.next/standalone/agents-manage-ui/.next/static/chunks/40225-e4654bb3fceab03b.js +1 -0
  158. package/.next/standalone/agents-manage-ui/.next/static/chunks/53120-a72be36d572c45b3.js +1 -0
  159. package/.next/standalone/agents-manage-ui/.next/static/chunks/54244-d5b0e0495a8ba6ff.js +1 -0
  160. package/.next/standalone/agents-manage-ui/.next/static/chunks/{74811-ceebff5ae7c61a66.js → 57812-14885c4aa73b748e.js} +1 -1
  161. package/.next/standalone/agents-manage-ui/.next/static/chunks/6744-1a1e01a442cf2b69.js +1 -0
  162. package/.next/standalone/agents-manage-ui/.next/static/chunks/{87193-3d26f0490b9b0a29.js → 76125-20d7ba477878f956.js} +3 -3
  163. package/.next/standalone/agents-manage-ui/.next/static/chunks/88831-65d25c60ff6a0d1e.js +1 -0
  164. package/.next/standalone/agents-manage-ui/.next/static/chunks/{55744-14f65637fb7140bb.js → 91079-1e455b416cbf2d97.js} +1 -1
  165. package/.next/standalone/agents-manage-ui/.next/static/chunks/99458-561dd09c8e46e93b.js +2 -0
  166. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/[agentId]/{page-559a0e2feb9d1b88.js → page-45c97fa0fc22d717.js} +1 -1
  167. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/new/{page-e4badb90e08fca0e.js → page-69bd6def1fdced3f.js} +1 -1
  168. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/page-fc3cc8358eba1dcf.js +1 -0
  169. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-eb952f1ed869c550.js +1 -0
  170. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page-30078150a76a218a.js +1 -0
  171. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/new/page-90279083dc616fd4.js +1 -0
  172. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/{page-4fd992b333ee8376.js → page-d79677532c8ae190.js} +1 -1
  173. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/{page-d4178e9e1916d13a.js → page-5e407c2230a27710.js} +1 -1
  174. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/new/page-184c20fe54ac13a0.js +1 -0
  175. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/{page-cd615e6939889e58.js → page-1161f1b034a30bec.js} +1 -1
  176. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-abe719d4143fe6d0.js +1 -0
  177. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-4b5c069faaff8bd6.js +1 -0
  178. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-b157591aa308e700.js +1 -0
  179. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/{page-8039ddab76f9faaf.js → page-35dce9d10dc6c3a3.js} +1 -1
  180. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/edit/page-a5d83c3633ab50e7.js +1 -0
  181. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/page-ec2d6dba69b9f4c6.js +1 -0
  182. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/external-agents/new/page-3e00507c258a14b0.js +1 -0
  183. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/external-agents/page-ec5bb6206fffe16f.js +1 -0
  184. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/{page-00d3bd4e0e0283ca.js → page-c990397341b90672.js} +1 -1
  185. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page-434ec2dcf5788eef.js +1 -0
  186. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/new/{page-d174ad393f08c235.js → page-bf7834a30778ca16.js} +1 -1
  187. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/{page-c378465695b7fcbd.js → page-1d6968e16c3dd151.js} +1 -1
  188. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/settings/page-a8f8410720a5818c.js +1 -0
  189. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/ai-calls/page-e1b396ac418b8a24.js +1 -0
  190. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-c89d56219688d058.js +1 -0
  191. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/page-01f63220f21c7cfb.js +1 -0
  192. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-683fe7e0cf3904d3.js +1 -0
  193. package/.next/standalone/agents-manage-ui/.next/static/chunks/{d834c995-72666c5916d3b86e.js → d834c995-fff42da332d4f84d.js} +1 -1
  194. package/.next/standalone/agents-manage-ui/.next/static/chunks/{webpack-d65a3369c23bc1a6.js → webpack-56287459cbc030fa.js} +1 -1
  195. package/.next/standalone/agents-manage-ui/.next/static/css/5e4932a0101d6186.css +1 -0
  196. package/.next/standalone/agents-manage-ui/package.json +1 -1
  197. package/.next/standalone/packages/agents-core/package.json +1 -1
  198. package/package.json +4 -4
  199. package/src/app/[tenantId]/projects/[projectId]/agents/[agentId]/page.tsx +18 -10
  200. package/src/app/[tenantId]/projects/[projectId]/agents/new/page.tsx +13 -7
  201. package/src/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/edit/page.tsx +86 -0
  202. package/src/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/page.tsx +52 -0
  203. package/src/app/[tenantId]/projects/[projectId]/external-agents/new/page.tsx +43 -0
  204. package/src/app/[tenantId]/projects/[projectId]/external-agents/page.tsx +64 -0
  205. package/src/components/agent/agent.tsx +43 -1
  206. package/src/components/agent/configuration/node-types.tsx +18 -5
  207. package/src/components/agent/node-library/node-library.tsx +1 -1
  208. package/src/components/agent/nodes/external-agent-node.tsx +8 -12
  209. package/src/components/agent/nodes/{mcp-placeholder-node.tsx → placeholder-node.tsx} +8 -4
  210. package/src/components/agent/sidepane/edges/edge-editor.tsx +18 -3
  211. package/src/components/agent/sidepane/nodes/external-agent-node-editor.tsx +83 -18
  212. package/src/components/agent/sidepane/nodes/external-agent-selector/external-agent-item.tsx +39 -0
  213. package/src/components/agent/sidepane/nodes/external-agent-selector/external-agent-selector.tsx +114 -0
  214. package/src/components/agent/sidepane/nodes/external-agent-selector/loading.tsx +26 -0
  215. package/src/components/agent/sidepane/nodes/function-tool-node-editor.tsx +11 -1
  216. package/src/components/agent/sidepane/nodes/mcp-node-editor.tsx +15 -1
  217. package/src/components/agent/sidepane/nodes/sub-agent-node-editor.tsx +24 -5
  218. package/src/components/agent/sidepane/sidepane.tsx +9 -1
  219. package/src/components/credentials/credential-resources-list.tsx +146 -0
  220. package/src/components/credentials/views/credential-form-validation.ts +1 -0
  221. package/src/components/credentials/views/credential-form.tsx +96 -5
  222. package/src/components/credentials/views/edit-credential-form.tsx +4 -3
  223. package/src/components/credentials/views/new-credential-form.tsx +13 -0
  224. package/src/components/data-components/preview/component-preview-generator.tsx +1 -1
  225. package/src/components/external-agents/external-agent-item.tsx +169 -0
  226. package/src/components/external-agents/external-agents-list.tsx +29 -0
  227. package/src/components/external-agents/form/external-agent-form.tsx +146 -0
  228. package/src/components/external-agents/form/validation.ts +10 -0
  229. package/src/components/external-agents/view-external-agent-details.tsx +129 -0
  230. package/src/components/sidebar-nav/sidebar-nav.tsx +6 -0
  231. package/src/components/ui/button.tsx +2 -0
  232. package/src/features/agent/domain/deserialize.ts +144 -111
  233. package/src/features/agent/domain/serialize.ts +142 -77
  234. package/src/features/agent/state/use-agent-store.ts +27 -3
  235. package/src/hooks/use-node-editor.ts +6 -1
  236. package/src/lib/actions/agent-full.ts +1 -1
  237. package/src/lib/actions/external-agents.ts +73 -0
  238. package/src/lib/api/credentials.ts +2 -0
  239. package/src/lib/api/external-agents.ts +121 -0
  240. package/src/lib/types/agent-full.ts +4 -2
  241. package/src/lib/types/external-agents.ts +2 -0
  242. package/src/lib/utils/external-agent-utils.ts +33 -0
  243. package/.next/standalone/agents-manage-ui/.next/server/chunks/3717.js +0 -1
  244. package/.next/standalone/agents-manage-ui/.next/server/chunks/4529.js +0 -123
  245. package/.next/standalone/agents-manage-ui/.next/server/chunks/6358.js +0 -1
  246. package/.next/standalone/agents-manage-ui/.next/server/chunks/6818.js +0 -1
  247. package/.next/standalone/agents-manage-ui/.next/server/chunks/6870.js +0 -1
  248. package/.next/standalone/agents-manage-ui/.next/server/chunks/8162.js +0 -1
  249. package/.next/standalone/agents-manage-ui/.next/server/chunks/891.js +0 -196
  250. package/.next/standalone/agents-manage-ui/.next/static/chunks/13328-851660ac17cd9821.js +0 -1
  251. package/.next/standalone/agents-manage-ui/.next/static/chunks/16631-e313c6f18339824b.js +0 -123
  252. package/.next/standalone/agents-manage-ui/.next/static/chunks/20837-5c45452d86333b49.js +0 -1
  253. package/.next/standalone/agents-manage-ui/.next/static/chunks/37191-b9540cf50a41d10d.js +0 -1
  254. package/.next/standalone/agents-manage-ui/.next/static/chunks/50324-6c2b8627fccd09fe.js +0 -1
  255. package/.next/standalone/agents-manage-ui/.next/static/chunks/61089-ddd70e2d283804f5.js +0 -1
  256. package/.next/standalone/agents-manage-ui/.next/static/chunks/63209-c85b701265732b38.js +0 -1
  257. package/.next/standalone/agents-manage-ui/.next/static/chunks/86507-340cc6112e9218de.js +0 -2
  258. package/.next/standalone/agents-manage-ui/.next/static/chunks/87817-86c2e7dd6f1d2a25.js +0 -1
  259. package/.next/standalone/agents-manage-ui/.next/static/chunks/88831-baf97ca962c66e41.js +0 -1
  260. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/page-fd4931a4dce7bbcc.js +0 -1
  261. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-e6a0d040757d714c.js +0 -1
  262. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page-2ef30d1c4a08bf1c.js +0 -1
  263. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/new/page-2dc9232570ef8f79.js +0 -1
  264. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/new/page-8030a774459e9505.js +0 -1
  265. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-e3410fb65d776373.js +0 -1
  266. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-122d64932f58f736.js +0 -1
  267. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-0a2a574c78526792.js +0 -1
  268. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page-626d879ae1110842.js +0 -1
  269. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/settings/page-8333b2227270a61e.js +0 -1
  270. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/ai-calls/page-3b222f3ae3101ba8.js +0 -1
  271. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-dd16edcb356553d6.js +0 -1
  272. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/page-7d8c096775d48dd2.js +0 -1
  273. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-460655c327b24cc4.js +0 -1
  274. package/.next/standalone/agents-manage-ui/.next/static/css/86b7c14b860f21e3.css +0 -1
  275. /package/.next/standalone/agents-manage-ui/.next/static/{XDBVQcoBx1lmqIF-dFkO9 → ZcFW2mSreb3TZKn3GQBio}/_buildManifest.js +0 -0
  276. /package/.next/standalone/agents-manage-ui/.next/static/{XDBVQcoBx1lmqIF-dFkO9 → ZcFW2mSreb3TZKn3GQBio}/_ssgManifest.js +0 -0
@@ -1,29 +1,71 @@
1
- import type { Node } from '@xyflow/react';
2
- import { useCallback } from 'react';
1
+ import { type Node, useReactFlow } from '@xyflow/react';
2
+ import { Trash2 } from 'lucide-react';
3
+ import { useParams } from 'next/navigation';
4
+ import { useCallback, useEffect, useState } from 'react';
3
5
  import { ExpandableJsonEditor } from '@/components/form/expandable-json-editor';
6
+ import { Button } from '@/components/ui/button';
7
+ import { ExternalLink } from '@/components/ui/external-link';
8
+ import { Separator } from '@/components/ui/separator';
9
+ import { useAgentActions, useAgentStore } from '@/features/agent/state/use-agent-store';
4
10
  import type { ErrorHelpers } from '@/hooks/use-agent-errors';
5
11
  import { useAutoPrefillIdZustand } from '@/hooks/use-auto-prefill-id-zustand';
6
12
  import { useNodeEditor } from '@/hooks/use-node-editor';
7
13
  import type { Credential } from '@/lib/api/credentials';
14
+ import { getCurrentHeadersForExternalAgentNode } from '@/lib/utils/external-agent-utils';
15
+ import type { SubAgentExternalAgentConfigLookup } from '../../agent';
8
16
  import type { ExternalAgentNodeData } from '../../configuration/node-types';
9
- import { CredentialSelector } from './credential-selector';
10
17
  import { InputField, TextareaField } from './form-fields';
11
18
 
12
19
  interface ExternalAgentNodeEditorProps {
13
20
  selectedNode: Node<ExternalAgentNodeData>;
14
21
  credentialLookup: Record<string, Credential>;
22
+ subAgentExternalAgentConfigLookup: SubAgentExternalAgentConfigLookup;
15
23
  errorHelpers?: ErrorHelpers;
16
24
  }
17
25
 
18
26
  export function ExternalAgentNodeEditor({
19
27
  selectedNode,
20
- credentialLookup,
28
+ subAgentExternalAgentConfigLookup,
21
29
  errorHelpers,
22
30
  }: ExternalAgentNodeEditorProps) {
23
- const { handleInputChange, getFieldError, setFieldRef, updateField } = useNodeEditor({
31
+ const { updateNodeData } = useReactFlow();
32
+ const { markUnsaved } = useAgentActions();
33
+ const { handleInputChange, getFieldError, setFieldRef, updateField, deleteNode } = useNodeEditor({
24
34
  selectedNodeId: selectedNode.id,
25
35
  errorHelpers,
26
36
  });
37
+ const { tenantId, projectId } = useParams<{
38
+ tenantId: string;
39
+ projectId: string;
40
+ }>();
41
+ const handleHeadersChange = (value: string) => {
42
+ // Always update the input state (allows user to type invalid JSON)
43
+ setHeadersInputValue(value);
44
+
45
+ // Only save to node data if the JSON is valid
46
+ try {
47
+ const parsedHeaders = value.trim() === '' ? {} : JSON.parse(value);
48
+ if (
49
+ typeof parsedHeaders === 'object' &&
50
+ parsedHeaders !== null &&
51
+ !Array.isArray(parsedHeaders)
52
+ ) {
53
+ // Valid format - save to node data
54
+ updateNodeData(selectedNode.id, {
55
+ ...selectedNode.data,
56
+ tempHeaders: parsedHeaders,
57
+ });
58
+ markUnsaved();
59
+ }
60
+ } catch {
61
+ // Invalid JSON - don't save, but allow user to continue typing
62
+ // The ExpandableJsonEditor will show the validation error
63
+ }
64
+ };
65
+
66
+ const { edges } = useAgentStore((state) => ({
67
+ edges: state.edges,
68
+ }));
27
69
 
28
70
  const handleIdChange = useCallback(
29
71
  (generatedId: string) => {
@@ -40,6 +82,24 @@ export function ExternalAgentNodeEditor({
40
82
  isEditing: false,
41
83
  });
42
84
 
85
+ const getCurrentHeaders = useCallback((): Record<string, string> => {
86
+ return getCurrentHeadersForExternalAgentNode(
87
+ selectedNode,
88
+ subAgentExternalAgentConfigLookup,
89
+ edges
90
+ );
91
+ }, [selectedNode, subAgentExternalAgentConfigLookup, edges]);
92
+
93
+ // Local state for headers input (allows invalid JSON while typing)
94
+ const [headersInputValue, setHeadersInputValue] = useState('{}');
95
+
96
+ // Sync input value when node changes (but not on every data change)
97
+ // biome-ignore lint/correctness/useExhaustiveDependencies: intentionally omit getCurrentHeaders to prevent reset loops
98
+ useEffect(() => {
99
+ const newHeaders = getCurrentHeaders();
100
+ setHeadersInputValue(JSON.stringify(newHeaders, null, 2));
101
+ }, [selectedNode.id]);
102
+
43
103
  return (
44
104
  <div className="space-y-8 flex flex-col">
45
105
  <p className="text-sm text-muted-foreground">
@@ -56,6 +116,7 @@ export function ExternalAgentNodeEditor({
56
116
  value={selectedNode.data.name || ''}
57
117
  onChange={handleInputChange}
58
118
  placeholder="Support agent"
119
+ disabled
59
120
  error={getFieldError('name')}
60
121
  />
61
122
 
@@ -68,6 +129,7 @@ export function ExternalAgentNodeEditor({
68
129
  onChange={handleInputChange}
69
130
  placeholder="my-external-agent"
70
131
  error={getFieldError('id')}
132
+ disabled
71
133
  description="Choose a unique identifier for this agent. Using an existing id will replace that agent."
72
134
  isRequired
73
135
  />
@@ -81,6 +143,7 @@ export function ExternalAgentNodeEditor({
81
143
  onChange={handleInputChange}
82
144
  placeholder="This agent is responsible for..."
83
145
  error={getFieldError('description')}
146
+ disabled
84
147
  />
85
148
 
86
149
  <InputField
@@ -93,26 +156,28 @@ export function ExternalAgentNodeEditor({
93
156
  placeholder="https://api.example.com/agent"
94
157
  error={getFieldError('baseUrl')}
95
158
  tooltip="This URL is used to discover the agent's capabilities and communicate with it using the A2A protocol. For locally hosted agent defined with the agent-framework this would be: http://localhost:3002/tenants/:tenantId/projects/:projectId/agents/:agentId"
159
+ disabled
96
160
  />
97
161
  <ExpandableJsonEditor
98
162
  name="headers"
99
163
  label="Headers"
100
- value={selectedNode.data.headers}
101
- onChange={(value) => updateField('headers', value)}
164
+ value={headersInputValue}
165
+ onChange={handleHeadersChange}
102
166
  placeholder="{}"
103
167
  className=""
104
168
  />
105
- <CredentialSelector
106
- label="Credential"
107
- credentialLookup={credentialLookup}
108
- value={
109
- typeof selectedNode.data.credentialReferenceId === 'string'
110
- ? selectedNode.data.credentialReferenceId
111
- : null
112
- }
113
- onValueChange={(value) => updateField('credentialReferenceId', value || '')}
114
- placeholder="Select a credential"
115
- />
169
+ <ExternalLink
170
+ href={`/${tenantId}/projects/${projectId}/external-agents/${selectedNode.data.id}/edit`}
171
+ >
172
+ Edit External Agent
173
+ </ExternalLink>
174
+ <Separator />
175
+ <div className="flex justify-end">
176
+ <Button variant="destructive-outline" size="sm" onClick={deleteNode}>
177
+ <Trash2 className="size-4" />
178
+ Delete
179
+ </Button>
180
+ </div>
116
181
  </div>
117
182
  );
118
183
  }
@@ -0,0 +1,39 @@
1
+ import { Globe } from 'lucide-react';
2
+ import { Button } from '@/components/ui/button';
3
+ import type { ExternalAgent } from '@/lib/types/external-agents';
4
+
5
+ interface ExternalAgentItemProps {
6
+ externalAgent: ExternalAgent;
7
+ onClick: (externalAgent: ExternalAgent) => void;
8
+ }
9
+
10
+ export function ExternalAgentItem({ externalAgent, onClick }: ExternalAgentItemProps) {
11
+ const { id, name, description, baseUrl } = externalAgent;
12
+
13
+ return (
14
+ <Button
15
+ variant="unstyled"
16
+ size="unstyled"
17
+ type="button"
18
+ key={id}
19
+ className="w-full p-3 rounded-lg border cursor-pointer transition-colors border-border hover:bg-muted/50 text-left inline-block"
20
+ id={id}
21
+ onClick={() => onClick(externalAgent)}
22
+ >
23
+ <div className="flex items-start gap-3">
24
+ <div className="flex-shrink-0 mt-0.5 size-8 rounded bg-muted flex items-center justify-center">
25
+ <Globe className="size-4 text-muted-foreground" />
26
+ </div>
27
+ <div className="flex-1 min-w-0">
28
+ <div className="flex items-center justify-between mb-1 gap-2 min-w-0 truncate">
29
+ <span className="font-medium text-sm truncate">{name}</span>
30
+ </div>
31
+ {description && (
32
+ <p className="text-xs text-muted-foreground truncate mb-1">{description}</p>
33
+ )}
34
+ <p className="text-xs text-muted-foreground/70 truncate">{baseUrl}</p>
35
+ </div>
36
+ </div>
37
+ </Button>
38
+ );
39
+ }
@@ -0,0 +1,114 @@
1
+ import { type Node, useReactFlow } from '@xyflow/react';
2
+ import { useParams } from 'next/navigation';
3
+ import { useEffect, useState } from 'react';
4
+ import { toast } from 'sonner';
5
+ import { fetchExternalAgents } from '@/lib/api/external-agents';
6
+ import type { ExternalAgent } from '@/lib/types/external-agents';
7
+ import { NodeType } from '../../../configuration/node-types';
8
+ import { EmptyState } from '../empty-state';
9
+ import { ExternalAgentItem } from './external-agent-item';
10
+ import { ExternalAgentSelectorLoading } from './loading';
11
+
12
+ interface ExternalAgentSelectorState {
13
+ externalAgents: ExternalAgent[];
14
+ isLoading: boolean;
15
+ error: string | null;
16
+ }
17
+
18
+ const useFetchAvailableExternalAgents = (): ExternalAgentSelectorState => {
19
+ const [externalAgents, setExternalAgents] = useState<ExternalAgent[]>([]);
20
+ const [isLoading, setIsLoading] = useState(true);
21
+ const [error, setError] = useState<string | null>(null);
22
+ const { tenantId, projectId } = useParams<{
23
+ tenantId: string;
24
+ projectId: string;
25
+ }>();
26
+
27
+ useEffect(() => {
28
+ const loadExternalAgents = async () => {
29
+ try {
30
+ setIsLoading(true);
31
+ setError(null);
32
+ const agents = await fetchExternalAgents(tenantId, projectId);
33
+ setExternalAgents(agents);
34
+ } catch (err) {
35
+ const errorMessage = err instanceof Error ? err.message : 'Failed to load external agents';
36
+ setError(errorMessage);
37
+ toast.error(errorMessage);
38
+ } finally {
39
+ setIsLoading(false);
40
+ }
41
+ };
42
+
43
+ loadExternalAgents();
44
+ }, [tenantId, projectId]);
45
+
46
+ return { externalAgents, isLoading, error };
47
+ };
48
+
49
+ export function ExternalAgentSelector({ selectedNode }: { selectedNode: Node }) {
50
+ const { updateNode } = useReactFlow();
51
+ const { tenantId, projectId } = useParams<{
52
+ tenantId: string;
53
+ projectId: string;
54
+ }>();
55
+ const { externalAgents, isLoading, error } = useFetchAvailableExternalAgents();
56
+
57
+ const handleSelect = (externalAgent: ExternalAgent) => {
58
+ updateNode(selectedNode.id, {
59
+ type: NodeType.ExternalAgent,
60
+ data: {
61
+ id: externalAgent.id,
62
+ name: externalAgent.name,
63
+ description: externalAgent.description,
64
+ baseUrl: externalAgent.baseUrl,
65
+ createdAt: externalAgent.createdAt,
66
+ updatedAt: externalAgent.updatedAt,
67
+ credentialReferenceId: externalAgent.credentialReferenceId,
68
+ relationshipId: null, // Will be set after saving to database
69
+ tempHeaders: null,
70
+ },
71
+ });
72
+ };
73
+
74
+ if (isLoading) {
75
+ return <ExternalAgentSelectorLoading title="Select external agent" />;
76
+ }
77
+
78
+ if (error) {
79
+ return (
80
+ <EmptyState
81
+ message="Something went wrong."
82
+ actionText="Create external agent"
83
+ actionHref={`/${tenantId}/projects/${projectId}/external-agents/new`}
84
+ />
85
+ );
86
+ }
87
+
88
+ if (!externalAgents?.length) {
89
+ return (
90
+ <EmptyState
91
+ message="No external agents found."
92
+ actionText="Create external agent"
93
+ actionHref={`/${tenantId}/projects/${projectId}/external-agents/new`}
94
+ />
95
+ );
96
+ }
97
+
98
+ return (
99
+ <div>
100
+ <div className="space-y-2">
101
+ <h3 className="text-sm font-medium mb-2">Select external agent</h3>
102
+ <div className="flex flex-col gap-2 min-w-0 min-h-0">
103
+ {externalAgents.map((externalAgent: ExternalAgent) => (
104
+ <ExternalAgentItem
105
+ key={externalAgent.id}
106
+ externalAgent={externalAgent}
107
+ onClick={handleSelect}
108
+ />
109
+ ))}
110
+ </div>
111
+ </div>
112
+ </div>
113
+ );
114
+ }
@@ -0,0 +1,26 @@
1
+ import { Skeleton } from '@/components/ui/skeleton';
2
+
3
+ interface ExternalAgentSelectorLoadingProps {
4
+ title: string;
5
+ }
6
+
7
+ export function ExternalAgentSelectorLoading({ title }: ExternalAgentSelectorLoadingProps) {
8
+ return (
9
+ <div className="space-y-2">
10
+ <h3 className="text-sm font-medium mb-2">{title}</h3>
11
+ <div className="flex flex-col gap-2">
12
+ {[...Array(3)].map((_, index) => (
13
+ <div key={index} className="w-full p-3 rounded-lg border border-border">
14
+ <div className="flex items-start gap-3">
15
+ <Skeleton className="size-8 rounded flex-shrink-0" />
16
+ <div className="flex-1 min-w-0 space-y-2">
17
+ <Skeleton className="h-4 w-3/4" />
18
+ <Skeleton className="h-3 w-1/2" />
19
+ </div>
20
+ </div>
21
+ </div>
22
+ ))}
23
+ </div>
24
+ </div>
25
+ );
26
+ }
@@ -1,6 +1,9 @@
1
1
  import type { Node } from '@xyflow/react';
2
+ import { Trash2 } from 'lucide-react';
2
3
  import { useCallback, useEffect, useState } from 'react';
3
4
  import { StandaloneJsonEditor } from '@/components/form/standalone-json-editor';
5
+ import { Button } from '@/components/ui/button';
6
+ import { Separator } from '@/components/ui/separator';
4
7
  import { useNodeEditor } from '@/hooks/use-node-editor';
5
8
  import type { FunctionToolNodeData } from '../../configuration/node-types';
6
9
  import { ExpandableTextArea } from './expandable-text-area';
@@ -11,7 +14,7 @@ interface FunctionToolNodeEditorProps {
11
14
  }
12
15
 
13
16
  export function FunctionToolNodeEditor({ selectedNode }: FunctionToolNodeEditorProps) {
14
- const { getFieldError, setFieldRef, updatePath } = useNodeEditor({
17
+ const { getFieldError, setFieldRef, updatePath, deleteNode } = useNodeEditor({
15
18
  selectedNodeId: selectedNode.id,
16
19
  });
17
20
 
@@ -198,6 +201,13 @@ export function FunctionToolNodeEditor({ selectedNode }: FunctionToolNodeEditorP
198
201
  <p className="text-sm text-red-600">{getFieldError('dependencies')}</p>
199
202
  )}
200
203
  </div>
204
+ <Separator />
205
+ <div className="flex justify-end">
206
+ <Button variant="destructive-outline" size="sm" onClick={deleteNode}>
207
+ <Trash2 className="size-4" />
208
+ Delete
209
+ </Button>
210
+ </div>
201
211
  </div>
202
212
  );
203
213
  }
@@ -1,16 +1,19 @@
1
1
  import { type Node, useReactFlow } from '@xyflow/react';
2
- import { Check, CircleAlert } from 'lucide-react';
2
+ import { Check, CircleAlert, Trash2 } from 'lucide-react';
3
3
  import { useParams } from 'next/navigation';
4
4
  import { useCallback, useEffect, useState } from 'react';
5
5
  import { getActiveTools } from '@/app/utils/active-tools';
6
6
  import { ExpandableJsonEditor } from '@/components/form/expandable-json-editor';
7
7
  import { MCPToolImage } from '@/components/mcp-servers/mcp-tool-image';
8
8
  import { Badge } from '@/components/ui/badge';
9
+ import { Button } from '@/components/ui/button';
9
10
  import { ExternalLink } from '@/components/ui/external-link';
10
11
  import { Input } from '@/components/ui/input';
11
12
  import { Label } from '@/components/ui/label';
13
+ import { Separator } from '@/components/ui/separator';
12
14
  import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
13
15
  import { useAgentActions, useAgentStore } from '@/features/agent/state/use-agent-store';
16
+ import { useNodeEditor } from '@/hooks/use-node-editor';
14
17
  import { getToolTypeAndName } from '@/lib/utils/mcp-utils';
15
18
  import {
16
19
  getCurrentHeadersForNode,
@@ -28,7 +31,11 @@ export function MCPServerNodeEditor({
28
31
  selectedNode,
29
32
  agentToolConfigLookup,
30
33
  }: MCPServerNodeEditorProps) {
34
+ const { deleteNode } = useNodeEditor({
35
+ selectedNodeId: selectedNode.id,
36
+ });
31
37
  const { updateNodeData } = useReactFlow();
38
+
32
39
  const { tenantId, projectId } = useParams<{
33
40
  tenantId: string;
34
41
  projectId: string;
@@ -309,6 +316,13 @@ export function MCPServerNodeEditor({
309
316
  >
310
317
  Edit MCP Server
311
318
  </ExternalLink>
319
+ <Separator />
320
+ <div className="flex justify-end">
321
+ <Button variant="destructive-outline" size="sm" onClick={deleteNode}>
322
+ <Trash2 className="size-4" />
323
+ Delete
324
+ </Button>
325
+ </div>
312
326
  </div>
313
327
  );
314
328
  }
@@ -1,6 +1,8 @@
1
1
  import type { Node } from '@xyflow/react';
2
+ import { Trash2 } from 'lucide-react';
2
3
  import { useParams } from 'next/navigation';
3
4
  import { useCallback } from 'react';
5
+ import { Button } from '@/components/ui/button';
4
6
  import { Checkbox } from '@/components/ui/checkbox';
5
7
  import {
6
8
  getExecutionLimitInheritanceStatus,
@@ -70,11 +72,17 @@ export function SubAgentNodeEditor({
70
72
  const { project } = useProjectData();
71
73
  const metadata = useAgentStore((state) => state.metadata);
72
74
 
73
- const { updatePath, updateNestedPath, getFieldError, setFieldRef, updateDefaultSubAgent } =
74
- useNodeEditor({
75
- selectedNodeId: selectedNode.id,
76
- errorHelpers,
77
- });
75
+ const {
76
+ updatePath,
77
+ updateNestedPath,
78
+ getFieldError,
79
+ setFieldRef,
80
+ updateDefaultSubAgent,
81
+ deleteNode,
82
+ } = useNodeEditor({
83
+ selectedNodeId: selectedNode.id,
84
+ errorHelpers,
85
+ });
78
86
 
79
87
  const updateModelPath = useCallback(
80
88
  (path: string, value: any) => {
@@ -243,6 +251,17 @@ export function SubAgentNodeEditor({
243
251
  emptyStateActionHref={`/${tenantId}/projects/${projectId}/artifacts/new`}
244
252
  placeholder="Select artifacts..."
245
253
  />
254
+ {!isDefaultSubAgent && (
255
+ <>
256
+ <Separator />
257
+ <div className="flex justify-end">
258
+ <Button variant="destructive-outline" size="sm" onClick={deleteNode}>
259
+ <Trash2 className="size-4" />
260
+ Delete
261
+ </Button>
262
+ </div>
263
+ </>
264
+ )}
246
265
  </div>
247
266
  );
248
267
  }
@@ -7,7 +7,7 @@ import type { ArtifactComponent } from '@/lib/api/artifact-components';
7
7
  import type { Credential } from '@/lib/api/credentials';
8
8
  import type { DataComponent } from '@/lib/api/data-components';
9
9
  import { SidePane as SidePaneLayout } from '../../layout/sidepane';
10
- import type { AgentToolConfigLookup } from '../agent';
10
+ import type { AgentToolConfigLookup, SubAgentExternalAgentConfigLookup } from '../agent';
11
11
  import { edgeTypeMap } from '../configuration/edge-types';
12
12
  import {
13
13
  type AgentNodeData,
@@ -22,6 +22,7 @@ import { EditorLoadingSkeleton } from './editor-loading-skeleton';
22
22
  import { Heading } from './heading';
23
23
  import MetadataEditor from './metadata/metadata-editor';
24
24
  import { ExternalAgentNodeEditor } from './nodes/external-agent-node-editor';
25
+ import { ExternalAgentSelector } from './nodes/external-agent-selector/external-agent-selector';
25
26
  import { FunctionToolNodeEditor } from './nodes/function-tool-node-editor';
26
27
  import { MCPServerNodeEditor } from './nodes/mcp-node-editor';
27
28
  import { MCPSelector } from './nodes/mcp-selector/mcp-selector';
@@ -36,6 +37,7 @@ interface SidePaneProps {
36
37
  dataComponentLookup: Record<string, DataComponent>;
37
38
  artifactComponentLookup: Record<string, ArtifactComponent>;
38
39
  agentToolConfigLookup: AgentToolConfigLookup;
40
+ subAgentExternalAgentConfigLookup: SubAgentExternalAgentConfigLookup;
39
41
  credentialLookup: Record<string, Credential>;
40
42
  }
41
43
 
@@ -48,6 +50,7 @@ export function SidePane({
48
50
  dataComponentLookup,
49
51
  artifactComponentLookup,
50
52
  agentToolConfigLookup,
53
+ subAgentExternalAgentConfigLookup,
51
54
  credentialLookup,
52
55
  }: SidePaneProps) {
53
56
  const selectedNode = useNodesData(selectedNodeId || '');
@@ -114,10 +117,14 @@ export function SidePane({
114
117
  <ExternalAgentNodeEditor
115
118
  selectedNode={selectedNode as Node<ExternalAgentNodeData>}
116
119
  credentialLookup={credentialLookup}
120
+ subAgentExternalAgentConfigLookup={subAgentExternalAgentConfigLookup}
117
121
  errorHelpers={errorHelpers}
118
122
  />
119
123
  );
120
124
  }
125
+ case NodeType.ExternalAgentPlaceholder: {
126
+ return <ExternalAgentSelector selectedNode={selectedNode as Node} />;
127
+ }
121
128
  case NodeType.MCPPlaceholder: {
122
129
  return <MCPSelector selectedNode={selectedNode as Node} />;
123
130
  }
@@ -154,6 +161,7 @@ export function SidePane({
154
161
  getFirstErrorField,
155
162
  agentToolConfigLookup,
156
163
  credentialLookup,
164
+ subAgentExternalAgentConfigLookup,
157
165
  ]);
158
166
 
159
167
  const showBackButton = useMemo(() => {
@@ -0,0 +1,146 @@
1
+ import type { ExternalAgentApiSelect, McpTool } from '@inkeep/agents-core';
2
+ import Link from 'next/link';
3
+ import { Label } from '@/components/ui/label';
4
+
5
+ interface CredentialResourcesListProps {
6
+ tools?: McpTool[];
7
+ externalAgents?: ExternalAgentApiSelect[];
8
+ label?: string;
9
+ tenantId?: string;
10
+ projectId?: string;
11
+ }
12
+
13
+ interface ToolItemProps {
14
+ tool: McpTool;
15
+ tenantId?: string;
16
+ projectId?: string;
17
+ }
18
+
19
+ interface ExternalAgentItemProps {
20
+ externalAgent: ExternalAgentApiSelect;
21
+ tenantId?: string;
22
+ projectId?: string;
23
+ }
24
+
25
+ function ToolItem({ tool, tenantId, projectId }: ToolItemProps) {
26
+ const canNavigate = tenantId && projectId;
27
+ const href = canNavigate
28
+ ? `/${tenantId}/projects/${projectId}/mcp-servers/${tool.id}`
29
+ : undefined;
30
+
31
+ const content = (
32
+ <>
33
+ <div className="flex items-center gap-3">
34
+ <div>
35
+ <p className="font-medium text-sm">{tool.name}</p>
36
+ <p className="text-xs text-muted-foreground">
37
+ {tool.config.type === 'mcp' ? tool.config.mcp.server.url : ''}
38
+ </p>
39
+ </div>
40
+ </div>
41
+ </>
42
+ );
43
+
44
+ if (canNavigate && href) {
45
+ return (
46
+ <Link
47
+ href={href}
48
+ className="flex items-center justify-between p-3 bg-background border rounded-md hover:bg-muted/50 transition-colors cursor-pointer"
49
+ >
50
+ {content}
51
+ </Link>
52
+ );
53
+ }
54
+
55
+ return (
56
+ <div className="flex items-center justify-between p-3 bg-background border rounded-md">
57
+ {content}
58
+ </div>
59
+ );
60
+ }
61
+
62
+ function ExternalAgentItem({ externalAgent, tenantId, projectId }: ExternalAgentItemProps) {
63
+ const canNavigate = tenantId && projectId;
64
+ const href = canNavigate
65
+ ? `/${tenantId}/projects/${projectId}/external-agents/${externalAgent.id}`
66
+ : undefined;
67
+
68
+ const content = (
69
+ <>
70
+ <div className="flex items-center gap-3">
71
+ <div>
72
+ <p className="font-medium text-sm">{externalAgent.name}</p>
73
+ <p className="text-xs text-muted-foreground">{externalAgent.baseUrl}</p>
74
+ </div>
75
+ </div>
76
+ </>
77
+ );
78
+
79
+ if (canNavigate && href) {
80
+ return (
81
+ <Link
82
+ href={href}
83
+ className="flex items-center justify-between p-3 bg-background border rounded-md hover:bg-muted/50 transition-colors cursor-pointer"
84
+ >
85
+ {content}
86
+ </Link>
87
+ );
88
+ }
89
+
90
+ return (
91
+ <div className="flex items-center justify-between p-3 bg-background border rounded-md">
92
+ {content}
93
+ </div>
94
+ );
95
+ }
96
+
97
+ export function CredentialResourcesList({
98
+ tools,
99
+ externalAgents,
100
+ label = 'Resources using this credential',
101
+ tenantId,
102
+ projectId,
103
+ }: CredentialResourcesListProps) {
104
+ const hasTools = tools && tools.length > 0;
105
+ const hasExternalAgents = externalAgents && externalAgents.length > 0;
106
+ const hasAnyResources = hasTools || hasExternalAgents;
107
+
108
+ return (
109
+ <div className="space-y-3">
110
+ <Label>{label}</Label>
111
+ {hasAnyResources ? (
112
+ <div className="space-y-4">
113
+ {hasTools && (
114
+ <div className="space-y-2">
115
+ <p className="text-xs font-medium text-muted-foreground uppercase tracking-wide">
116
+ MCP Servers
117
+ </p>
118
+ {tools.map((tool) => (
119
+ <ToolItem key={tool.id} tool={tool} tenantId={tenantId} projectId={projectId} />
120
+ ))}
121
+ </div>
122
+ )}
123
+ {hasExternalAgents && (
124
+ <div className="space-y-2">
125
+ <p className="text-xs font-medium text-muted-foreground uppercase tracking-wide">
126
+ External Agents
127
+ </p>
128
+ {externalAgents.map((agent) => (
129
+ <ExternalAgentItem
130
+ key={agent.id}
131
+ externalAgent={agent}
132
+ tenantId={tenantId}
133
+ projectId={projectId}
134
+ />
135
+ ))}
136
+ </div>
137
+ )}
138
+ </div>
139
+ ) : (
140
+ <div className="text-sm text-muted-foreground p-3 py-2 bg-gray-100/80 dark:bg-sidebar rounded-md">
141
+ No resources are currently using this credential
142
+ </div>
143
+ )}
144
+ </div>
145
+ );
146
+ }