@inkeep/agents-manage-ui 0.29.3 → 0.29.4

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 (212) 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 +134 -134
  3. package/.next/standalone/agents-manage-ui/.next/app-path-routes-manifest.json +8 -8
  4. package/.next/standalone/agents-manage-ui/.next/build-manifest.json +2 -2
  5. package/.next/standalone/agents-manage-ui/.next/prerender-manifest.json +3 -3
  6. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/page.js +2 -2
  7. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/page.js.nft.json +1 -1
  8. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/[agentId]/page.js +2 -2
  10. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/[agentId]/page.js.nft.json +1 -1
  11. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/[agentId]/page_client-reference-manifest.js +1 -1
  12. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/new/page.js +2 -2
  13. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/new/page.js.nft.json +1 -1
  14. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/new/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/page.js +2 -2
  16. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/page.js.nft.json +1 -1
  17. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/page_client-reference-manifest.js +1 -1
  18. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/api-keys/page.js +3 -3
  19. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/api-keys/page.js.nft.json +1 -1
  20. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/api-keys/page_client-reference-manifest.js +1 -1
  21. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page.js +1 -1
  22. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page.js.nft.json +1 -1
  23. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page_client-reference-manifest.js +1 -1
  24. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page.js +2 -2
  25. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page.js.nft.json +1 -1
  26. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page_client-reference-manifest.js +1 -1
  27. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/page.js +2 -2
  28. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/page.js.nft.json +1 -1
  29. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/page_client-reference-manifest.js +1 -1
  30. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page.js +2 -2
  31. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page.js.nft.json +1 -1
  32. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page_client-reference-manifest.js +1 -1
  33. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page.js +2 -2
  34. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page.js.nft.json +1 -1
  35. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page_client-reference-manifest.js +1 -1
  36. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/page.js +2 -2
  37. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/page.js.nft.json +1 -1
  38. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/page_client-reference-manifest.js +1 -1
  39. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page.js +1 -1
  40. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page.js.nft.json +1 -1
  41. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page_client-reference-manifest.js +1 -1
  42. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js +2 -2
  43. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js.nft.json +1 -1
  44. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page_client-reference-manifest.js +1 -1
  45. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page.js +1 -1
  46. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page.js.nft.json +1 -1
  47. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page_client-reference-manifest.js +1 -1
  48. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.js +2 -2
  49. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.js.nft.json +1 -1
  50. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page_client-reference-manifest.js +1 -1
  51. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page.js +2 -2
  52. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page.js.nft.json +1 -1
  53. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page_client-reference-manifest.js +1 -1
  54. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page.js +2 -2
  55. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page.js.nft.json +1 -1
  56. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page_client-reference-manifest.js +1 -1
  57. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/edit/page.js +2 -2
  58. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/edit/page.js.nft.json +1 -1
  59. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/edit/page_client-reference-manifest.js +1 -1
  60. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/page.js +2 -2
  61. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/page.js.nft.json +1 -1
  62. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/page_client-reference-manifest.js +1 -1
  63. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/new/page.js +2 -2
  64. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/new/page.js.nft.json +1 -1
  65. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/new/page_client-reference-manifest.js +1 -1
  66. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/page.js +2 -2
  67. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/page.js.nft.json +1 -1
  68. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/page_client-reference-manifest.js +1 -1
  69. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page.js +2 -2
  70. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page.js.nft.json +1 -1
  71. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page_client-reference-manifest.js +1 -1
  72. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page.js +2 -2
  73. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page.js.nft.json +1 -1
  74. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page_client-reference-manifest.js +1 -1
  75. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page.js +2 -2
  76. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page.js.nft.json +1 -1
  77. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page_client-reference-manifest.js +1 -1
  78. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page.js +2 -2
  79. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page.js.nft.json +1 -1
  80. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page_client-reference-manifest.js +1 -1
  81. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page.js +2 -2
  82. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page.js.nft.json +1 -1
  83. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page_client-reference-manifest.js +1 -1
  84. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page.js +2 -2
  85. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page.js.nft.json +1 -1
  86. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page_client-reference-manifest.js +1 -1
  87. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js +2 -2
  88. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js.nft.json +1 -1
  89. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page_client-reference-manifest.js +1 -1
  90. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page.js +2 -2
  91. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page.js.nft.json +1 -1
  92. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page_client-reference-manifest.js +1 -1
  93. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page.js +2 -2
  94. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page.js.nft.json +1 -1
  95. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page_client-reference-manifest.js +1 -1
  96. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page.js +2 -2
  97. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page.js.nft.json +1 -1
  98. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page_client-reference-manifest.js +1 -1
  99. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page.js +2 -2
  100. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page.js.nft.json +1 -1
  101. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  102. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.html +1 -1
  103. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.rsc +9 -9
  104. package/.next/standalone/agents-manage-ui/.next/server/app/api/data-components/[dataComponentId]/generate-render/route.js +190 -1
  105. package/.next/standalone/agents-manage-ui/.next/server/app/api/data-components/[dataComponentId]/generate-render/route.js.nft.json +1 -1
  106. package/.next/standalone/agents-manage-ui/.next/server/app/api/data-components/[dataComponentId]/generate-render/route_client-reference-manifest.js +1 -1
  107. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route.js +1 -1
  108. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route.js.nft.json +1 -1
  109. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
  110. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/route_client-reference-manifest.js +1 -1
  111. package/.next/standalone/agents-manage-ui/.next/server/app/page.js +3 -3
  112. package/.next/standalone/agents-manage-ui/.next/server/app/page.js.nft.json +1 -1
  113. package/.next/standalone/agents-manage-ui/.next/server/app/page_client-reference-manifest.js +1 -1
  114. package/.next/standalone/agents-manage-ui/.next/server/app-paths-manifest.json +8 -8
  115. package/.next/standalone/agents-manage-ui/.next/server/chunks/1063.js +1 -1
  116. package/.next/standalone/agents-manage-ui/.next/server/chunks/1344.js +1 -0
  117. package/.next/standalone/agents-manage-ui/.next/server/chunks/1401.js +1 -0
  118. package/.next/standalone/agents-manage-ui/.next/server/chunks/1989.js +1 -1
  119. package/.next/standalone/agents-manage-ui/.next/server/chunks/2420.js +7 -0
  120. package/.next/standalone/agents-manage-ui/.next/server/chunks/279.js +1 -1
  121. package/.next/standalone/agents-manage-ui/.next/server/chunks/3003.js +1 -0
  122. package/.next/standalone/agents-manage-ui/.next/server/chunks/3069.js +60 -0
  123. package/.next/standalone/agents-manage-ui/.next/server/chunks/{3196.js → 3813.js} +7 -7
  124. package/.next/standalone/agents-manage-ui/.next/server/chunks/{6215.js → 4477.js} +1 -1
  125. package/.next/standalone/agents-manage-ui/.next/server/chunks/4608.js +2 -2
  126. package/.next/standalone/agents-manage-ui/.next/server/chunks/4629.js +1 -1
  127. package/.next/standalone/agents-manage-ui/.next/server/chunks/4745.js +1 -0
  128. package/.next/standalone/agents-manage-ui/.next/server/chunks/493.js +1 -1
  129. package/.next/standalone/agents-manage-ui/.next/server/chunks/5206.js +3 -3
  130. package/.next/standalone/agents-manage-ui/.next/server/chunks/5450.js +1 -60
  131. package/.next/standalone/agents-manage-ui/.next/server/chunks/6641.js +4 -4
  132. package/.next/standalone/agents-manage-ui/.next/server/chunks/6915.js +1 -1
  133. package/.next/standalone/agents-manage-ui/.next/server/chunks/7494.js +1 -1
  134. package/.next/standalone/agents-manage-ui/.next/server/chunks/7512.js +1 -0
  135. package/.next/standalone/agents-manage-ui/.next/server/chunks/7711.js +8 -8
  136. package/.next/standalone/agents-manage-ui/.next/server/chunks/9122.js +1 -1
  137. package/.next/standalone/agents-manage-ui/.next/server/chunks/9887.js +6 -6
  138. package/.next/standalone/agents-manage-ui/.next/server/chunks/9896.js +1 -0
  139. package/.next/standalone/agents-manage-ui/.next/server/middleware-manifest.json +5 -5
  140. package/.next/standalone/agents-manage-ui/.next/server/pages/404.html +1 -1
  141. package/.next/standalone/agents-manage-ui/.next/server/pages/500.html +1 -1
  142. package/.next/standalone/agents-manage-ui/.next/server/server-reference-manifest.js +1 -1
  143. package/.next/standalone/agents-manage-ui/.next/server/server-reference-manifest.json +1 -1
  144. package/.next/standalone/agents-manage-ui/.next/static/chunks/33813-c4eb369c53f8ac93.js +1 -0
  145. package/.next/standalone/agents-manage-ui/.next/static/chunks/{55102-3a3cf3019003b803.js → 35364-ef0ff982651f0f59.js} +1 -1
  146. package/.next/standalone/agents-manage-ui/.next/static/chunks/42205-456df2e3b5029fb0.js +1 -0
  147. package/.next/standalone/agents-manage-ui/.next/static/chunks/{71707-ca20f365f10e3d9b.js → 71707-9fe239f258988d67.js} +1 -1
  148. package/.next/standalone/agents-manage-ui/.next/static/chunks/73281-8420f80fb480f4c5.js +1 -0
  149. package/.next/standalone/agents-manage-ui/.next/static/chunks/88709-8f9f337b7374646b.js +1 -0
  150. package/.next/standalone/agents-manage-ui/.next/static/chunks/98756-724c7ad2165d13c7.js +1 -0
  151. package/.next/standalone/agents-manage-ui/.next/static/chunks/98867-9e6e0df444d8e790.js +1 -0
  152. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/[agentId]/{page-81d891f2ebad99f6.js → page-21c812688bef2281.js} +1 -1
  153. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/new/{page-e7b745b3bdefe901.js → page-2cc39a02cb7422a8.js} +1 -1
  154. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/page-e78af893793f27d6.js +1 -0
  155. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/{page-fe5ef51bd669cfa2.js → page-3aa77027467ce62b.js} +1 -1
  156. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page-1b309134485310b2.js +1 -0
  157. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/new/page-8d8915a02178ca58.js +1 -0
  158. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/page-592137ee13bed19e.js +1 -0
  159. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/{page-387db12bf402479e.js → page-a3deb1a50fdc51f2.js} +1 -1
  160. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/new/{page-fc515342b1da4f4d.js → page-886a40f7e90fc534.js} +1 -1
  161. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/{page-1e0a9e5f846dbbd2.js → page-0d7c0bbd220a9474.js} +1 -1
  162. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-339ddc7426cb291a.js +1 -0
  163. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-9d9fb520d5f9dfec.js +1 -0
  164. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-73d3f6bea3deaa4e.js +1 -0
  165. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/{page-67769ed96aece3d2.js → page-8ece2de2bac001cd.js} +1 -1
  166. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/edit/page-eb3921a5a9051e63.js +1 -0
  167. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/page-4af233894f263f3e.js +1 -0
  168. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/external-agents/new/page-cc5d7222724559ca.js +1 -0
  169. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/external-agents/{page-12ba94f27f479503.js → page-2e5a79009984cfcd.js} +1 -1
  170. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/{page-871855c42cc1570a.js → page-aee94a9ea8cb78a6.js} +1 -1
  171. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page-6ab968db910f8dc8.js +1 -0
  172. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/new/{page-a716f264d06da9f6.js → page-cd81666db623b5a2.js} +1 -1
  173. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/{page-57952d7b41a8ea5f.js → page-6b79bf0fe215ecd2.js} +1 -1
  174. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/settings/{page-df08752575e4dde5.js → page-44da2cae57ef5a8a.js} +1 -1
  175. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-a9c15e6fcd929fac.js +1 -0
  176. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/{page-c385d57ce8d0d9a3.js → page-38d15dbaf6bb6e4f.js} +1 -1
  177. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-1a3b4af9569548d1.js +1 -0
  178. package/.next/standalone/agents-manage-ui/.next/static/css/71874d21f6b73070.css +1 -0
  179. package/.next/standalone/agents-manage-ui/package.json +9 -3
  180. package/.next/standalone/packages/agents-core/package.json +1 -1
  181. package/package.json +12 -6
  182. package/src/app/api/data-components/[dataComponentId]/generate-render/route.ts +250 -34
  183. package/src/components/ui/external-link.tsx +1 -1
  184. package/src/components/ui/item-card.tsx +1 -1
  185. package/src/lib/ai/model-factory.ts +204 -0
  186. package/.next/standalone/agents-manage-ui/.next/server/chunks/3283.js +0 -1
  187. package/.next/standalone/agents-manage-ui/.next/server/chunks/3723.js +0 -1
  188. package/.next/standalone/agents-manage-ui/.next/server/chunks/6295.js +0 -7
  189. package/.next/standalone/agents-manage-ui/.next/server/chunks/9282.js +0 -1
  190. package/.next/standalone/agents-manage-ui/.next/server/chunks/9392.js +0 -1
  191. package/.next/standalone/agents-manage-ui/.next/static/chunks/27549-0999635c700455a7.js +0 -1
  192. package/.next/standalone/agents-manage-ui/.next/static/chunks/35989-ab35d1b983e41b8b.js +0 -1
  193. package/.next/standalone/agents-manage-ui/.next/static/chunks/43687-9960b73019faa081.js +0 -1
  194. package/.next/standalone/agents-manage-ui/.next/static/chunks/73281-643b9a02ca117c7b.js +0 -1
  195. package/.next/standalone/agents-manage-ui/.next/static/chunks/92986-4b612a2548ee8fcc.js +0 -1
  196. package/.next/standalone/agents-manage-ui/.next/static/chunks/98322-7f89d1c46d5719f1.js +0 -1
  197. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/page-306e17f29475e5a3.js +0 -1
  198. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page-2638393b668c8b66.js +0 -1
  199. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/new/page-246e1999e69b78d2.js +0 -1
  200. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/page-d2019a39a82db50d.js +0 -1
  201. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-92963ed7188c0474.js +0 -1
  202. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-503467a74891265f.js +0 -1
  203. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-419227fb7429c8f0.js +0 -1
  204. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/edit/page-1214db18147c5236.js +0 -1
  205. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/page-d2a380ee0bc84d15.js +0 -1
  206. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/external-agents/new/page-02453d0611e080bf.js +0 -1
  207. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page-6d24716f7d1b40f1.js +0 -1
  208. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-b7391b719ca30eda.js +0 -1
  209. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-53b5678fc38cba4e.js +0 -1
  210. package/.next/standalone/agents-manage-ui/.next/static/css/b83d1d0ee3fbce7c.css +0 -1
  211. /package/.next/standalone/agents-manage-ui/.next/static/{KS4kZjlZlfQwUlc7wRBHr → Oghx7DYFsZcQA9XMVroQX}/_buildManifest.js +0 -0
  212. /package/.next/standalone/agents-manage-ui/.next/static/{KS4kZjlZlfQwUlc7wRBHr → Oghx7DYFsZcQA9XMVroQX}/_ssgManifest.js +0 -0
@@ -1,9 +1,28 @@
1
+ /**
2
+ * API Route: Generate Component Render
3
+ *
4
+ * Generates a React/Tailwind component using AI based on a data component's schema.
5
+ * This route:
6
+ * 1. Fetches the data component from manage-api
7
+ * 2. Fetches the project to get base model configuration
8
+ * 3. Uses AI SDK streamObject to generate component code and sample data
9
+ * 4. Streams NDJSON response back to client
10
+ */
11
+
12
+ import { streamObject } from 'ai';
1
13
  import type { NextRequest } from 'next/server';
14
+ import { z } from 'zod';
15
+ import { ModelFactory } from '@/lib/ai/model-factory';
16
+ import { fetchDataComponent } from '@/lib/api/data-components';
17
+ import { fetchProject } from '@/lib/api/projects';
18
+
19
+ interface RouteContext {
20
+ params: Promise<{
21
+ dataComponentId: string;
22
+ }>;
23
+ }
2
24
 
3
- export async function POST(
4
- request: NextRequest,
5
- context: RouteContext<'/api/data-components/[dataComponentId]/generate-render'>
6
- ) {
25
+ export async function POST(request: NextRequest, context: RouteContext) {
7
26
  try {
8
27
  const { dataComponentId } = await context.params;
9
28
  const body = await request.json();
@@ -13,45 +32,242 @@ export async function POST(
13
32
  return new Response('Missing tenantId or projectId', { status: 400 });
14
33
  }
15
34
 
16
- const runApiUrl = process.env.PUBLIC_INKEEP_AGENTS_RUN_API_URL || 'http://localhost:3003';
17
- const url = `${runApiUrl}/v1/${tenantId}/projects/${projectId}/data-components/${dataComponentId}/generate-render`;
18
-
19
- const response = await fetch(url, {
20
- method: 'POST',
21
- headers: {
22
- 'Content-Type': 'application/json',
23
- ...(process.env.PUBLIC_INKEEP_AGENTS_RUN_API_BYPASS_SECRET && {
24
- Authorization: `Bearer ${process.env.PUBLIC_INKEEP_AGENTS_RUN_API_BYPASS_SECRET}`,
25
- 'x-inkeep-tenant-id': tenantId,
26
- 'x-inkeep-project-id': projectId,
27
- }),
28
- },
29
- body: JSON.stringify({
30
- instructions: instructions || undefined,
31
- existingCode: existingCode || undefined,
32
- }),
35
+ console.log('Generating component render', {
36
+ tenantId,
37
+ projectId,
38
+ dataComponentId,
39
+ hasInstructions: !!instructions,
40
+ hasExistingCode: !!existingCode,
33
41
  });
34
42
 
35
- if (!response.ok) {
36
- const errorText = await response.text().catch(() => 'Unable to read error');
37
- console.error('Run API returned error:', {
38
- status: response.status,
39
- statusText: response.statusText,
40
- body: errorText,
41
- url,
42
- });
43
- return new Response('Failed to generate preview', { status: response.status });
43
+ // Fetch data component from manage-api
44
+ const dataComponent = await fetchDataComponent(tenantId, projectId, dataComponentId);
45
+
46
+ if (!dataComponent) {
47
+ return new Response('Data component not found', { status: 404 });
48
+ }
49
+
50
+ // Fetch project to get model configuration
51
+ const projectResponse = await fetchProject(tenantId, projectId);
52
+
53
+ if (!projectResponse.data) {
54
+ return new Response('Project not found', { status: 404 });
55
+ }
56
+
57
+ const project = projectResponse.data;
58
+
59
+ if (!project.models?.base) {
60
+ return new Response('Project base model configuration is required', { status: 400 });
44
61
  }
45
62
 
46
- // Stream the response directly to the client
47
- return new Response(response.body, {
63
+ // Build prompt for AI generation
64
+ const prompt = buildGenerationPrompt(dataComponent, instructions, existingCode);
65
+
66
+ // Prepare model configuration
67
+ const modelConfig = ModelFactory.prepareGenerationConfig(project.models?.base as any);
68
+
69
+ // Define schema for generated output
70
+ const renderSchema = z.object({
71
+ component: z.string().describe('The React component code'),
72
+ mockData: z.any().describe('Sample data matching the props schema'),
73
+ });
74
+
75
+ // Generate using AI SDK streamObject
76
+ const result = streamObject({
77
+ ...modelConfig,
78
+ prompt,
79
+ schema: renderSchema,
80
+ temperature: 0.7,
81
+ });
82
+
83
+ // Get existing data if we're modifying (to preserve sample data)
84
+ const existingData =
85
+ existingCode &&
86
+ dataComponent.render &&
87
+ typeof dataComponent.render === 'object' &&
88
+ 'mockData' in dataComponent.render
89
+ ? (dataComponent.render as any).mockData
90
+ : null;
91
+
92
+ // Create a ReadableStream for NDJSON streaming
93
+ const stream = new ReadableStream({
94
+ async start(controller) {
95
+ try {
96
+ for await (const partialObject of result.partialObjectStream) {
97
+ // If modifying with instructions, preserve existing data
98
+ const outputObject =
99
+ instructions && existingData
100
+ ? { ...(partialObject as any), mockData: existingData }
101
+ : partialObject;
102
+
103
+ // Write NDJSON (newline-delimited JSON)
104
+ const line = `${JSON.stringify(outputObject)}\n`;
105
+ controller.enqueue(new TextEncoder().encode(line));
106
+ }
107
+ controller.close();
108
+ } catch (error) {
109
+ console.error('Error streaming preview generation:', error);
110
+ // Send error as final line
111
+ const errorLine = `${JSON.stringify({ component: '// Error generating component', mockData: {} })}\n`;
112
+ controller.enqueue(new TextEncoder().encode(errorLine));
113
+ controller.close();
114
+ }
115
+ },
116
+ });
117
+
118
+ return new Response(stream, {
48
119
  headers: {
49
120
  'Content-Type': 'application/x-ndjson',
50
121
  'Transfer-Encoding': 'chunked',
122
+ 'Cache-Control': 'no-cache',
51
123
  },
52
124
  });
53
125
  } catch (error) {
54
- console.error('Error generating preview:', error);
55
- return new Response('Internal server error', { status: 500 });
126
+ console.error('Error generating component render:', error);
127
+ return new Response(error instanceof Error ? error.message : 'Internal server error', {
128
+ status: 500,
129
+ });
56
130
  }
57
131
  }
132
+
133
+ /**
134
+ * Build the prompt for AI generation
135
+ */
136
+ function buildGenerationPrompt(
137
+ dataComponent: {
138
+ name: string;
139
+ description: string;
140
+ props: Record<string, unknown> | null;
141
+ },
142
+ instructions?: string,
143
+ existingCode?: string
144
+ ): string {
145
+ const propsSchema = dataComponent.props || {};
146
+ const propsJson = JSON.stringify(propsSchema, null, 2);
147
+ const componentName = sanitizeComponentName(dataComponent.name);
148
+
149
+ // If we have custom instructions and existing code, modify the prompt
150
+ if (instructions && existingCode) {
151
+ return `You are an expert React and Tailwind CSS developer. You need to modify an existing React component based on specific instructions.
152
+
153
+ COMPONENT DETAILS:
154
+ - Original Name: ${dataComponent.name}
155
+ - Component Function Name: ${componentName}
156
+ - Description: ${dataComponent.description}
157
+ - Props Schema (JSON Schema): ${propsJson}
158
+
159
+ EXISTING COMPONENT CODE:
160
+ \`\`\`jsx
161
+ ${existingCode}
162
+ \`\`\`
163
+
164
+ MODIFICATION INSTRUCTIONS:
165
+ ${instructions}
166
+
167
+ REQUIREMENTS:
168
+ 1. Modify the existing component code according to the instructions
169
+ 2. Keep using Tailwind CSS SEMANTIC COLOR CLASSES (bg-background, text-foreground, etc.)
170
+ 3. Maintain the balanced spacing and design principles from the original
171
+ 4. Keep using lucide-react icons where appropriate
172
+ 5. DO NOT include export statements - just the imports and function
173
+ 6. DO NOT include TypeScript type annotations
174
+ 7. Component name should remain: ${componentName}
175
+ 8. DO NOT regenerate sample data - keep the same data structure
176
+
177
+ OUTPUT FORMAT:
178
+ You need to generate only one thing:
179
+ 1. "component": The modified React component code as a string
180
+
181
+ Return ONLY the component field, the mockData field will be reused from the existing render.
182
+
183
+ EXAMPLE OUTPUT:
184
+ {
185
+ "component": "import { Mail, User } from 'lucide-react';\\n\\nfunction ${componentName}(props) {\\n // Modified component code here\\n}"
186
+ }
187
+
188
+ Focus on making the requested changes while maintaining the component's quality and design principles.`;
189
+ }
190
+
191
+ return `You are an expert React and Tailwind CSS developer. Generate a beautiful, modern React component for displaying data and sample data to preview it.
192
+
193
+ COMPONENT DETAILS:
194
+ - Original Name: ${dataComponent.name}
195
+ - Component Function Name: ${componentName}
196
+ - Description: ${dataComponent.description}
197
+ - Props Schema (JSON Schema): ${propsJson}
198
+
199
+ REQUIREMENTS:
200
+ 1. Create a React functional component (JSX, not TypeScript)
201
+ 2. Use Tailwind CSS SEMANTIC COLOR CLASSES (these automatically adapt to light/dark mode):
202
+ - Background: bg-background, bg-card, bg-muted, bg-muted/40, bg-accent, bg-primary
203
+ - Text: text-foreground, text-muted-foreground, text-card-foreground, text-primary-foreground
204
+ - Borders: border-border, border-input, border-muted
205
+ - DO NOT use direct colors like bg-white, bg-gray-800, text-gray-900, etc.
206
+ - DO NOT use dark: prefix - semantic classes handle dark mode automatically
207
+ 3. Make it balanced - comfortable but efficient:
208
+ - Use moderate padding: p-4, px-4 py-3 (balanced, not cramped or excessive)
209
+ - Use appropriate text sizes: text-sm for body, text-base for headings, text-xs for captions
210
+ - Use balanced spacing: gap-2.5, gap-3, space-y-2, mt-2, mb-3
211
+ - Aim for a clean, professional look with good readability
212
+ 4. Design for embedding - this component blends into existing content:
213
+ - DO NOT add redundant titles or headers unless they're part of the actual data schema
214
+ - Focus on displaying the data directly and elegantly
215
+ - Assume the component is part of a larger conversation or content flow
216
+ - If the schema has a "title" or "name" property, display it as data, not as a wrapper heading
217
+ 5. Use LUCIDE-REACT ICONS to enhance UI aesthetics:
218
+ - Import icons from lucide-react: import { User, Mail, Clock } from 'lucide-react'
219
+ - Use icons with size-4 or size-5 classes for balanced visibility
220
+ - Place icons inline with text or as visual indicators
221
+ - Example: <User className="size-4" /> or <Mail className="size-4 text-muted-foreground" />
222
+ - Common useful icons: User, Mail, Calendar, Clock, Check, X, Star, Heart, Settings, Search, etc.
223
+ 6. The component should accept props that match the JSON Schema properties
224
+ 7. Make it visually appealing and professional - clean with good whitespace
225
+ 8. Use semantic HTML elements
226
+ 9. Make it responsive and accessible
227
+ 10. You can import icons from 'lucide-react' at the top
228
+ 11. DO NOT include export statements - just the imports and function
229
+ 12. DO NOT include TypeScript type annotations
230
+ 13. Component name should be exactly: ${componentName}
231
+
232
+ AVAILABLE SEMANTIC COLOR CLASSES:
233
+ - Backgrounds: bg-background, bg-foreground, bg-card, bg-popover, bg-primary, bg-secondary, bg-muted, bg-accent, bg-destructive
234
+ - Text: text-foreground, text-background, text-card-foreground, text-popover-foreground, text-primary-foreground, text-secondary-foreground, text-muted-foreground, text-accent-foreground, text-destructive
235
+ - Borders: border-border, border-input, border-ring
236
+ - You can use opacity modifiers: bg-muted/40, bg-accent/10, etc.
237
+
238
+ OUTPUT FORMAT:
239
+ You need to generate two things:
240
+ 1. "component": The complete React component code as a string
241
+ 2. "mockData": Realistic sample data that matches the props schema (as a JSON object)
242
+
243
+ EXAMPLE OUTPUT (for a user profile schema with name, email, role):
244
+ {
245
+ "component": "import { Mail, User } from 'lucide-react';\\n\\nfunction ${componentName}(props) {\\n return (\\n <div className=\\"p-4 rounded-lg border border-border bg-card\\">\\n <div className=\\"flex items-center gap-2.5 mb-2\\">\\n <User className=\\"size-4 text-muted-foreground\\" />\\n <span className=\\"text-base font-medium text-foreground\\">{props.name}</span>\\n </div>\\n <div className=\\"flex items-center gap-2 text-sm text-muted-foreground\\">\\n <Mail className=\\"size-4\\" />\\n <span>{props.email}</span>\\n </div>\\n <div className=\\"text-xs text-muted-foreground mt-2\\">Role: {props.role}</div>\\n </div>\\n );\\n}",
246
+ "mockData": {
247
+ "name": "Sarah Chen",
248
+ "email": "sarah.chen@example.com",
249
+ "role": "Product Manager"
250
+ }
251
+ }
252
+
253
+ REMEMBER:
254
+ - ONLY use semantic color classes (bg-card, text-foreground, etc.)
255
+ - NO direct colors (bg-white, text-gray-900, etc.)
256
+ - NO dark: prefix needed - semantic classes adapt automatically
257
+ - Use balanced spacing (p-4, gap-2.5/gap-3, text-sm for body, text-base for headings)
258
+ - Use lucide-react icons where appropriate for better UI
259
+ - NO redundant titles - just display the actual data from props
260
+ - Design for embedding - this blends into existing content, not a standalone card
261
+ - Make the sample data realistic and useful for previewing the component`;
262
+ }
263
+
264
+ /**
265
+ * Sanitize component name to be a valid React component name
266
+ */
267
+ function sanitizeComponentName(name: string): string {
268
+ return name
269
+ .split(/\s+/)
270
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
271
+ .join('')
272
+ .replace(/[^a-zA-Z0-9]/g, '');
273
+ }
@@ -24,7 +24,7 @@ export function ExternalLink({
24
24
  {children}
25
25
  <ArrowUpRight
26
26
  className={cn(
27
- 'size-3.5 text-muted-foreground/60 group-hover/link:text-primary',
27
+ 'size-3.5 text-muted-foreground opacity-60 group-hover/link:text-primary',
28
28
  iconClassName
29
29
  )}
30
30
  />
@@ -91,7 +91,7 @@ export function ItemCardFooter({ footerText }: { footerText: string }) {
91
91
  <div className="relative flex items-center justify-between">
92
92
  <div className="flex items-center text-xs text-muted-foreground">{footerText}</div>
93
93
  <div className="opacity-0 group-hover:opacity-60 transform translate-x-1 group-hover:translate-x-0 transition-all duration-300">
94
- <ArrowRight className="w-4 h-4 text-muted-foreground/60" />
94
+ <ArrowRight className="w-4 h-4 text-muted-foreground opacity-60" />
95
95
  </div>
96
96
  </div>
97
97
  );
@@ -0,0 +1,204 @@
1
+ /**
2
+ * ModelFactory for creating AI SDK language models from configuration
3
+ * Copied from agents-run-api for use in manage-ui API routes
4
+ */
5
+
6
+ import { anthropic, createAnthropic } from '@ai-sdk/anthropic';
7
+ import { createGateway, gateway } from '@ai-sdk/gateway';
8
+ import { createGoogleGenerativeAI, google } from '@ai-sdk/google';
9
+ import { createOpenAI, openai } from '@ai-sdk/openai';
10
+ import { createOpenRouter, openrouter } from '@openrouter/ai-sdk-provider';
11
+ import type { LanguageModel } from 'ai';
12
+
13
+ export interface ModelSettings {
14
+ model?: string;
15
+ providerOptions?: Record<string, unknown>;
16
+ }
17
+
18
+ /**
19
+ * Factory for creating AI SDK language models from configuration
20
+ * Supports multiple providers and AI Gateway integration
21
+ */
22
+ export class ModelFactory {
23
+ /**
24
+ * Create a provider instance with custom configuration
25
+ */
26
+ private static createProvider(provider: string, config: Record<string, unknown>): any {
27
+ switch (provider) {
28
+ case 'anthropic':
29
+ return createAnthropic(config);
30
+ case 'openai':
31
+ return createOpenAI(config);
32
+ case 'google':
33
+ return createGoogleGenerativeAI(config);
34
+ case 'openrouter':
35
+ return createOpenRouter(config);
36
+ case 'gateway':
37
+ return createGateway(config);
38
+ default:
39
+ throw new Error(`Unsupported provider: ${provider}`);
40
+ }
41
+ }
42
+
43
+ /**
44
+ * Extract provider configuration from providerOptions
45
+ * Only includes settings that go to the provider constructor (baseURL, apiKey, etc.)
46
+ */
47
+ private static extractProviderConfig(
48
+ providerOptions?: Record<string, unknown>
49
+ ): Record<string, unknown> {
50
+ if (!providerOptions) {
51
+ return {};
52
+ }
53
+
54
+ const providerConfig: Record<string, unknown> = {};
55
+
56
+ if (providerOptions.baseUrl || providerOptions.baseURL) {
57
+ providerConfig.baseURL = providerOptions.baseUrl || providerOptions.baseURL;
58
+ }
59
+
60
+ if (providerOptions.gateway) {
61
+ Object.assign(providerConfig, providerOptions.gateway);
62
+ }
63
+
64
+ return providerConfig;
65
+ }
66
+
67
+ /**
68
+ * Create a language model instance from configuration
69
+ * Throws error if no config provided - models must be configured at project level
70
+ */
71
+ static createModel(config: ModelSettings): any {
72
+ if (!config?.model?.trim()) {
73
+ throw new Error(
74
+ 'Model configuration is required. Please configure models at the project level.'
75
+ );
76
+ }
77
+
78
+ const modelSettings = config;
79
+ if (!modelSettings.model) {
80
+ throw new Error('Model configuration is required');
81
+ }
82
+ const modelString = modelSettings.model.trim();
83
+ const { provider, modelName } = ModelFactory.parseModelString(modelString);
84
+
85
+ console.log('Creating language model', {
86
+ provider,
87
+ model: modelName,
88
+ hasProviderOptions: !!modelSettings.providerOptions,
89
+ });
90
+
91
+ const providerConfig = ModelFactory.extractProviderConfig(modelSettings.providerOptions);
92
+
93
+ if (Object.keys(providerConfig).length > 0) {
94
+ console.log(`Applying custom ${provider} provider configuration`, providerConfig);
95
+ const customProvider = ModelFactory.createProvider(provider, providerConfig);
96
+ return customProvider.languageModel(modelName);
97
+ }
98
+
99
+ switch (provider) {
100
+ case 'anthropic':
101
+ return anthropic(modelName);
102
+ case 'openai':
103
+ return openai(modelName);
104
+ case 'google':
105
+ return google(modelName);
106
+ case 'openrouter':
107
+ return openrouter(modelName);
108
+ case 'gateway':
109
+ return gateway(modelName);
110
+ default:
111
+ throw new Error(
112
+ `Unsupported provider: ${provider}. ` +
113
+ `Supported providers are: ${ModelFactory.BUILT_IN_PROVIDERS.join(', ')}. ` +
114
+ `To access other models, use OpenRouter (openrouter/model-id) or Vercel AI Gateway (gateway/model-id).`
115
+ );
116
+ }
117
+ }
118
+
119
+ /**
120
+ * Built-in providers that have special handling
121
+ */
122
+ private static readonly BUILT_IN_PROVIDERS = [
123
+ 'anthropic',
124
+ 'openai',
125
+ 'google',
126
+ 'openrouter',
127
+ 'gateway',
128
+ ] as const;
129
+
130
+ /**
131
+ * Parse model string to extract provider and model name
132
+ * Examples: "anthropic/claude-sonnet-4" -> { provider: "anthropic", modelName: "claude-sonnet-4" }
133
+ * "openrouter/anthropic/claude-sonnet-4" -> { provider: "openrouter", modelName: "anthropic/claude-sonnet-4" }
134
+ */
135
+ static parseModelString(modelString: string): { provider: string; modelName: string } {
136
+ if (modelString.includes('/')) {
137
+ const [provider, ...modelParts] = modelString.split('/');
138
+ const normalizedProvider = provider.toLowerCase();
139
+
140
+ if (!ModelFactory.BUILT_IN_PROVIDERS.includes(normalizedProvider as any)) {
141
+ throw new Error(
142
+ `Unsupported provider: ${normalizedProvider}. ` +
143
+ `Supported providers are: ${ModelFactory.BUILT_IN_PROVIDERS.join(', ')}. ` +
144
+ `To access other models, use OpenRouter (openrouter/model-id) or Vercel AI Gateway (gateway/model-id).`
145
+ );
146
+ }
147
+
148
+ return {
149
+ provider: normalizedProvider,
150
+ modelName: modelParts.join('/'),
151
+ };
152
+ }
153
+
154
+ throw new Error(`No provider specified in model string: ${modelString}`);
155
+ }
156
+
157
+ /**
158
+ * Get generation parameters from provider options
159
+ * These are parameters that get passed to generateText/streamText calls
160
+ */
161
+ static getGenerationParams(providerOptions?: Record<string, unknown>): Record<string, unknown> {
162
+ if (!providerOptions) {
163
+ return {};
164
+ }
165
+
166
+ const excludedKeys = ['apiKey', 'baseURL', 'baseUrl', 'maxDuration'];
167
+
168
+ const params: Record<string, unknown> = {};
169
+ for (const [key, value] of Object.entries(providerOptions)) {
170
+ if (!excludedKeys.includes(key) && value !== undefined) {
171
+ params[key] = value;
172
+ }
173
+ }
174
+
175
+ return params;
176
+ }
177
+
178
+ /**
179
+ * Prepare complete generation configuration from model settings
180
+ * Returns model instance and generation parameters ready to spread into generateText/streamText
181
+ * Includes maxDuration if specified in provider options (in seconds, following Vercel standard)
182
+ */
183
+ static prepareGenerationConfig(modelSettings?: ModelSettings): {
184
+ model: LanguageModel;
185
+ maxDuration?: number;
186
+ } & Record<string, unknown> {
187
+ const modelString = modelSettings?.model?.trim();
188
+
189
+ const model = ModelFactory.createModel({
190
+ model: modelString,
191
+ providerOptions: modelSettings?.providerOptions,
192
+ });
193
+
194
+ const generationParams = ModelFactory.getGenerationParams(modelSettings?.providerOptions);
195
+
196
+ const maxDuration = modelSettings?.providerOptions?.maxDuration as number | undefined;
197
+
198
+ return {
199
+ model,
200
+ ...generationParams,
201
+ ...(maxDuration !== undefined && { maxDuration }),
202
+ };
203
+ }
204
+ }
@@ -1 +0,0 @@
1
- exports.id=3283,exports.ids=[3283],exports.modules={3687:(a,b,c)=>{"use strict";c.d(b,{E:()=>f});var d=c(72669),e=c(64585);function f({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"skeleton",className:(0,e.cn)("bg-accent animate-pulse rounded-md",a),...b})}},8003:(a,b,c)=>{"use strict";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,{children:(0,d.jsxs)(f.D,{children:[(0,d.jsx)(g.zY,{title:"Projects",description:i.od}),(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-skeleton-${b}`))})]})})}},13907:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>f});var d=c(59111),e=c(43433);function f({error:a,reset:b}){return(0,d.jsx)(e.default,{error:a,title:"Something went wrong.",description:"An unexpected error occurred. Please try again.",reset:b})}},17932:(a,b,c)=>{"use strict";c.d(b,{H:()=>j});var d=c(72669);function e({children:a}){return(0,d.jsx)("div",{className:"flex flex-1 flex-col overflow-y-auto scrollbar-thin scrollbar-thumb-muted-foreground/30 dark:scrollbar-thumb-muted-foreground/50 scrollbar-track-transparent h-full w-full min-h-0 bg-muted/20 dark:bg-background",children:(0,d.jsx)("div",{className:"@container/main min-h-0 flex flex-1 flex-col",children:a})})}var f=c(88746),g=c(97633),h=c(80248);function i({breadcrumbs:a}){return(0,d.jsx)("header",{className:"flex h-(--header-height) shrink-0 items-center gap-2 border-b transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-(--header-height) bg-muted/20 dark:bg-background rounded-t-[14px]",children:(0,d.jsxs)("div",{className:"flex w-full items-center gap-1 px-4 lg:gap-2 lg:px-6",children:[(0,d.jsx)(h.SidebarTrigger,{className:"-ml-1 text-muted-foreground hover:text-foreground hover:bg-accent dark:text-muted-foreground dark:hover:text-foreground dark:hover:bg-accent/50"}),(0,d.jsx)(g.Separator,{orientation:"vertical",className:"mx-2 data-[orientation=vertical]:h-4"}),(0,d.jsx)(f.Breadcrumbs,{items:a})]})})}function j({children:a,breadcrumbs:b}){return(0,d.jsxs)("div",{className:"h-[calc(100vh-16px)] flex flex-col overflow-hidden",children:[(0,d.jsx)(i,{breadcrumbs:b}),(0,d.jsx)(e,{children:a})]})}},20828:(a,b,c)=>{Promise.resolve().then(c.bind(c,75125))},27159:(a,b,c)=>{"use strict";c.d(b,{bq:()=>l,eb:()=>n,gC:()=>m,l6:()=>j,yv:()=>k});var d=c(59111),e=c(29477),f=c(67048),g=c(39108),h=c(25773),i=c(42723);function j({...a}){return(0,d.jsx)(e.bL,{"data-slot":"select",...a})}function k({...a}){return(0,d.jsx)(e.WT,{"data-slot":"select-value",...a})}function l({className:a,size:b="default",children:c,...g}){return(0,d.jsxs)(e.l9,{"data-slot":"select-trigger","data-size":b,className:(0,i.cn)("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 font-normal normal-case",a),...g,children:[c,(0,d.jsx)(e.In,{asChild:!0,children:(0,d.jsx)(f.A,{className:"size-4 opacity-50"})})]})}function m({className:a,children:b,position:c="popper",...f}){return(0,d.jsx)(e.ZL,{children:(0,d.jsxs)(e.UC,{"data-slot":"select-content",className:(0,i.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto scrollbar-thin scrollbar-thumb-muted-foreground/30 dark:scrollbar-thumb-muted-foreground/50 scrollbar-track-transparent rounded-md border shadow-md","popper"===c&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",a),position:c,...f,children:[(0,d.jsx)(o,{}),(0,d.jsx)(e.LM,{className:(0,i.cn)("p-1","popper"===c&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:b}),(0,d.jsx)(p,{})]})})}function n({className:a,children:b,...c}){return(0,d.jsxs)(e.q7,{"data-slot":"select-item",className:(0,i.cn)("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",a),...c,children:[(0,d.jsx)("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:(0,d.jsx)(e.VF,{children:(0,d.jsx)(g.A,{className:"size-4"})})}),(0,d.jsx)(e.p4,{children:b})]})}function o({className:a,...b}){return(0,d.jsx)(e.PP,{"data-slot":"select-scroll-up-button",className:(0,i.cn)("flex cursor-default items-center justify-center py-1",a),...b,children:(0,d.jsx)(h.A,{className:"size-4"})})}function p({className:a,...b}){return(0,d.jsx)(e.wn,{"data-slot":"select-scroll-down-button",className:(0,i.cn)("flex cursor-default items-center justify-center py-1",a),...b,children:(0,d.jsx)(f.A,{className:"size-4"})})}},29160:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>i,dynamic:()=>h});var d=c(72669),e=c(45907),f=c(54637),g=c(81438);let h="force-dynamic";async function i({children:a,params:b}){let{tenantId:c,projectId:h}=await b;try{let b=await (0,f.Sw)(c,h);return(0,d.jsx)(g.ProjectProvider,{value:b.data,children:a})}catch(a){return(0,d.jsx)(e.default,{error:a,context:"project"})}}},39885:(a,b,c)=>{"use strict";c.d(b,{DE:()=>f,RR:()=>h,gp:()=>g,zY:()=>j});var d=c(72669),e=c(64585);function f({className:a,children:b,...c}){return(0,d.jsx)("div",{className:(0,e.cn)("flex flex-row gap-0 p-0 flex-nowrap items-center justify-between mb-8",a),...c,children:b})}function g({className:a,children:b,...c}){return(0,d.jsx)("div",{className:(0,e.cn)("flex flex-col gap-2 p-0 flex-nowrap items-stretch justify-start",a),...c,children:b})}function h({className:a,children:b,...c}){return(0,d.jsx)("h3",{className:(0,e.cn)("text-xl font-light",a),...c,children:b})}function i({className:a,children:b,...c}){return(0,d.jsx)("p",{className:(0,e.cn)("text-muted-foreground text-sm font-normal",a),...c,children:b})}function j({title:a,description:b,action:c,className:e}){return(0,d.jsxs)(f,{className:e,children:[(0,d.jsxs)(g,{children:[(0,d.jsx)(h,{children:a}),b&&(0,d.jsx)(i,{children:b})]}),c]})}},43461:(a,b,c)=>{"use strict";c.d(b,{CU:()=>j,M0:()=>l,_g:()=>i,iO:()=>f,lh:()=>g,od:()=>k,yr:()=>h});var d=c(72669),e=c(64422);let f="https://docs.inkeep.com",g=(0,d.jsxs)(d.Fragment,{children:["Artifacts automatically capture and store source information from tool and agent interactions, providing a record of where data originates.","\n",(0,d.jsx)(e.G,{href:`${f}/visual-builder/artifact-components`,children:"Learn more"})]}),h=(0,d.jsxs)(d.Fragment,{children:["Components are structured components that agents can use to display rich data.","\n",(0,d.jsx)(e.G,{href:`${f}/visual-builder/data-components`,children:"Learn more"})]}),i=(0,d.jsxs)(d.Fragment,{children:["Agents are visual representations of the data flow between sub agents and tools.","\n",(0,d.jsx)(e.G,{href:`${f}/visual-builder/agent`,children:"Learn more"})]}),j=(0,d.jsxs)(d.Fragment,{children:["API keys are use to authenticate against the Inkeep Agents Run API. They are associated with an agent and can be used to chat with the agent programmatically.","\n"]}),k=(0,d.jsx)(d.Fragment,{children:"Projects help you organize your agents, tools, and configurations."}),l=(0,d.jsxs)(d.Fragment,{children:[k," Create your first project to get started.","\n",(0,d.jsx)(e.G,{href:`${f}/`,children:"Check out the docs"})]})},55124:(a,b,c)=>{"use strict";c.d(b,{U:()=>g});var d=c(59111),e=c(27159),f=c(71771);function g({control:a,name:b,label:c,placeholder:g,options:h,disabled:i=!1,selectTriggerClassName:j,description:k,isRequired:l=!1}){return(0,d.jsx)(f.u,{control:a,name:b,label:c,description:k,isRequired:l,children:a=>(0,d.jsxs)(e.l6,{onValueChange:a.onChange,defaultValue:a.value,disabled:i,children:[(0,d.jsx)(e.bq,{disabled:i,className:j,children:(0,d.jsx)(e.yv,{placeholder:g})}),(0,d.jsx)(e.gC,{children:h.map(a=>(0,d.jsx)(e.eb,{value:a.value,disabled:a.disabled,children:a.label},a.value))})]})})}},60115:(a,b,c)=>{"use strict";c.d(b,{ExternalAgentForm:()=>d});let d=(0,c(60241).registerClientReference)(function(){throw Error("Attempted to call ExternalAgentForm() from the server but ExternalAgentForm 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/external-agents/form/external-agent-form.tsx","ExternalAgentForm")},61552:(a,b,c)=>{Promise.resolve().then(c.bind(c,45907)),Promise.resolve().then(c.bind(c,81438))},61927:(a,b,c)=>{Promise.resolve().then(c.bind(c,88746)),Promise.resolve().then(c.bind(c,97633)),Promise.resolve().then(c.bind(c,80248)),Promise.resolve().then(c.t.bind(c,93520,23))},63460:(a,b,c)=>{"use strict";c.d(b,{e:()=>e});var d=c(90147);let e=(0,d.createServerReference)("78ae20651ce6364767bdcd7c4778dca131ae1ffca8",d.callServer,void 0,d.findSourceMapURL,"updateExternalAgent")},64422:(a,b,c)=>{"use strict";c.d(b,{G:()=>i});var d=c(72669),e=c(24598),f=c(93520),g=c.n(f),h=c(64585);function i({href:a,children:b,className:c,iconClassName:f,...i}){return(0,d.jsxs)(g(),{href:a,target:"_blank",rel:"noreferrer noopener",className:(0,h.cn)("text-sm text-muted-foreground underline underline-offset-2 inline-flex items-center gap-1 hover:text-primary ml-1 group/link font-mono uppercase transition-colors",c),...i,children:[b,(0,d.jsx)(e.A,{className:(0,h.cn)("size-3.5 text-muted-foreground/60 group-hover/link:text-primary",f)})]})}},64585:(a,b,c)=>{"use strict";c.d(b,{BL:()=>g,cn:()=>f});var d=c(99613),e=c(81533);function f(...a){return(0,e.QP)((0,d.$)(a))}function g(a){return a?a.reduce((a,b)=>(a[b.id]=b,a),{}):{}}},75125:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(60241).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/runner/work/agents/agents/agents-manage-ui/src/app/[tenantId]/projects/error.tsx\" from the server, but it's 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/app/[tenantId]/projects/error.tsx","default")},78972:(a,b,c)=>{Promise.resolve().then(c.bind(c,13907))},81097:(a,b,c)=>{"use strict";c.d(b,{$Y:()=>g,GO:()=>i,K3:()=>h,h9:()=>k,nZ:()=>j});var d=c(1274);c(2082);var e=c(53842),f=c(41979);async function g(a,b,c=1,d=50){(0,f.M2)(a),(0,f.nt)(b);let h=new URLSearchParams({page:c.toString(),limit:d.toString()});return(await (0,e.J)(`tenants/${a}/projects/${b}/credentials?${h}`)).data}async function h(a,b,c){return(0,f.M2)(a),(0,f.nt)(b),(await (0,e.J)(`tenants/${a}/projects/${b}/credentials/${c}`)).data}async function i(a,b,c){return(0,f.M2)(a),(0,f.nt)(b),(await (0,e.J)(`tenants/${a}/projects/${b}/credentials`,{method:"POST",body:JSON.stringify(c)})).data}async function j(a,b,c,d){return(0,f.M2)(a),(0,f.nt)(b),(await (0,e.J)(`tenants/${a}/projects/${b}/credentials/${c}`,{method:"PUT",body:JSON.stringify(d)})).data}async function k(a,b,c){(0,f.M2)(a),(0,f.nt)(b),await (0,e.J)(`tenants/${a}/projects/${b}/credentials/${c}`,{method:"DELETE"})}(0,c(95454).D)([g,h,i,j,k]),(0,d.A)(g,"78b12c86b92332b3f68955234d6871fa109bc3d07f",null),(0,d.A)(h,"7076c53b2912629edfa3429c296a69d72af3f47687",null),(0,d.A)(i,"70f3480546f2b9d556f15540566223d0bab94dc3fd",null),(0,d.A)(j,"7814dec5bb9b037ab2dbb1729b039fb681f294d1d5",null),(0,d.A)(k,"7006925e493d403d4101c7085596a1f4dad5d4d696",null)},81438:(a,b,c)=>{"use strict";c.d(b,{ProjectProvider:()=>e});var d=c(60241);(0,d.registerClientReference)(function(){throw Error("Attempted to call ProjectContext() from the server but ProjectContext 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/contexts/project-context.tsx","ProjectContext");let e=(0,d.registerClientReference)(function(){throw Error("Attempted to call ProjectProvider() from the server but ProjectProvider 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/contexts/project-context.tsx","ProjectProvider");(0,d.registerClientReference)(function(){throw Error("Attempted to call useProject() from the server but useProject 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/contexts/project-context.tsx","useProject")},88746:(a,b,c)=>{"use strict";c.d(b,{Breadcrumbs:()=>d});let d=(0,c(60241).registerClientReference)(function(){throw Error("Attempted to call Breadcrumbs() from the server but Breadcrumbs 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/ui/breadcrumbs.tsx","Breadcrumbs")},92191:(a,b,c)=>{Promise.resolve().then(c.bind(c,23348)),Promise.resolve().then(c.bind(c,24003)),Promise.resolve().then(c.bind(c,19603)),Promise.resolve().then(c.t.bind(c,61678,23))},96400:(a,b,c)=>{Promise.resolve().then(c.bind(c,43433)),Promise.resolve().then(c.bind(c,58860))},96737:(a,b,c)=>{"use strict";c.d(b,{D:()=>g});var d=c(72669),e=c(89864),f=c(64585);let g=(0,e.forwardRef)(({children:a,className:b,...c},e)=>(0,d.jsx)("div",{ref:e,className:(0,f.cn)("p-6",b),...c,children:a}));g.displayName="MainContent"},97092:(a,b,c)=>{"use strict";c.d(b,{ExternalAgentForm:()=>v});var d=c(59111),e=c(35197),f=c(6461),g=c(485),h=c(51820),i=c(68156),j=c(17130),k=c(55124),l=c(16426),m=c(2856),n=c(93622),o=c(35229),p=c(63460),q=c(90147);let r=(0,q.createServerReference)("7017037a57e7b83140a8b248775706c233379b9f71",q.callServer,void 0,q.findSourceMapURL,"createExternalAgent");var s=c(34576);let t=s.object({name:s.string().min(1,"Name is required."),description:s.string().optional(),baseUrl:s.string().url("Must be a valid URL."),credentialReferenceId:s.string().nullish()}),u={name:"",description:"",baseUrl:"",credentialReferenceId:"none"};function v({initialData:a,mode:b="create",externalAgent:c,credentials:q,tenantId:s,projectId:v}){let w=(0,g.useRouter)(),x=(0,h.mN)({resolver:(0,e.u)(t),defaultValues:{...u,...a}}),{isSubmitting:y}=x.formState,z=async a=>{try{let d={...a,description:a.description||"",credentialReferenceId:"none"===a.credentialReferenceId?null:a.credentialReferenceId};if("update"===b&&c)await (0,p.e)(s,v,c.id,d),i.oR.success("External agent updated successfully"),w.push(`/${s}/projects/${v}/external-agents/${c.id}`);else{let a=await r(s,v,{...d,id:(0,f.Ak)()});i.oR.success("External agent created successfully"),w.push(`/${s}/projects/${v}/external-agents/${a.id}`)}}catch(a){console.error(`Failed to ${b} external agent:`,a),i.oR.error(`Failed to ${b} external agent. Please try again.`)}};return(0,d.jsx)(n.lV,{...x,children:(0,d.jsxs)("form",{onSubmit:x.handleSubmit(z),className:"space-y-8",children:[(0,d.jsx)(j.a,{control:x.control,name:"name",label:"Name",placeholder:"My External Agent",isRequired:!0}),(0,d.jsx)(l.K,{control:x.control,name:"description",label:"Description (optional)",placeholder:"A brief description of what this external agent does..."}),(0,d.jsx)(j.a,{control:x.control,name:"baseUrl",label:"Base URL",placeholder:"https://api.example.com",isRequired:!0}),(0,d.jsxs)("div",{className:"space-y-3",children:[(0,d.jsx)(k.U,{control:x.control,selectTriggerClassName:"w-full",name:"credentialReferenceId",label:"Credential",placeholder:"Select a credential",options:[{value:"none",label:"No Authentication"},...q.map(a=>({value:a.id,label:a.id}))]}),(0,d.jsx)(o.n,{title:"How this works",children:(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsxs)("p",{children:["Select"," ",(0,d.jsx)("code",{className:"bg-background px-1.5 py-0.5 rounded border",children:"No Authentication"})," ","if the external agent does not require authentication, or if you want to add a credential later."]}),(0,d.jsx)("p",{children:"Otherwise, select from the existing credentials you have already created. The credential will be used when communicating with this external agent."})]})})]}),(0,d.jsx)(m.$,{type:"submit",disabled:y,children:"update"===b?"Save":"Create"})]})})}},97633:(a,b,c)=>{"use strict";c.d(b,{Separator:()=>d});let d=(0,c(60241).registerClientReference)(function(){throw Error("Attempted to call Separator() from the server but Separator 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/ui/separator.tsx","Separator")}};
@@ -1 +0,0 @@
1
- "use strict";exports.id=3723,exports.ids=[3723],exports.modules={5294:(a,b,c)=>{c.d(b,{$Y:()=>g,GO:()=>i,K3:()=>h,h9:()=>k});var d=c(29991);c(58415);var e=c(8703),f=c(45796);async function g(a,b,c=1,d=50){(0,f.M2)(a),(0,f.nt)(b);let h=new URLSearchParams({page:c.toString(),limit:d.toString()});return(await (0,e.J)(`tenants/${a}/projects/${b}/credentials?${h}`)).data}async function h(a,b,c){return(0,f.M2)(a),(0,f.nt)(b),(await (0,e.J)(`tenants/${a}/projects/${b}/credentials/${c}`)).data}async function i(a,b,c){return(0,f.M2)(a),(0,f.nt)(b),(await (0,e.J)(`tenants/${a}/projects/${b}/credentials`,{method:"POST",body:JSON.stringify(c)})).data}async function j(a,b,c,d){return(0,f.M2)(a),(0,f.nt)(b),(await (0,e.J)(`tenants/${a}/projects/${b}/credentials/${c}`,{method:"PUT",body:JSON.stringify(d)})).data}async function k(a,b,c){(0,f.M2)(a),(0,f.nt)(b),await (0,e.J)(`tenants/${a}/projects/${b}/credentials/${c}`,{method:"DELETE"})}(0,c(33451).D)([g,h,i,j,k]),(0,d.A)(g,"78b12c86b92332b3f68955234d6871fa109bc3d07f",null),(0,d.A)(h,"7076c53b2912629edfa3429c296a69d72af3f47687",null),(0,d.A)(i,"70f3480546f2b9d556f15540566223d0bab94dc3fd",null),(0,d.A)(j,"7814dec5bb9b037ab2dbb1729b039fb681f294d1d5",null),(0,d.A)(k,"7006925e493d403d4101c7085596a1f4dad5d4d696",null)},21395:(a,b,c)=>{c.d(b,{Ak:()=>p,uP:()=>t,tN:()=>r,Mj:()=>o,tQ:()=>n,pv:()=>m,Mb:()=>l,H6:()=>u,EN:()=>k,P:()=>v,Jg:()=>q});var d=c(29991);c(58415);var e=c(47084),f=c(67417);class g extends Error{constructor(a,b,c){super(a),this.operation=b,this.cause=c,this.name="NangoError"}}function h(a,b,c){if(a instanceof g)throw a;throw new g(b,c,a)}var i=c(33451);let j=()=>{let a=process.env.NANGO_SECRET_KEY;if(!a)throw new g("NANGO_SECRET_KEY environment variable is required for Nango integration");try{return new e.CA({secretKey:a,host:process.env.NANGO_SERVER_URL||"https://api.nango.dev"})}catch(a){throw new g("Failed to initialize Nango client","new Nango",a)}};async function k(){let a=process.env.NANGO_SECRET_KEY;return!!(a&&""!==a.trim())}async function l(){try{let a=j();return(await a.listProviders({})).data}catch(a){console.error("Failed to fetch providers:",a),h(a,"Unable to retrieve available providers from Nango","listProviders")}}async function m(a){try{let b=j();return(await b.getProvider({provider:a})).data}catch(b){console.error(`Failed to fetch provider ${a}:`,b),h(b,`Provider '${a}' not found or inaccessible`,"getProvider")}}async function n(){try{let a=j();return(await a.listIntegrations()).configs}catch(a){console.error("Failed to fetch integrations:",a),h(a,"Unable to retrieve existing integrations","listIntegrations")}}async function o(a){try{let b=j(),c=(await b.getIntegration({uniqueKey:a},{include:["credentials"]})).data,d=!1;d=c.credentials?.type==="OAUTH2"||c.credentials?.type==="OAUTH1"||c.credentials?.type==="TBA"?!!(c.credentials?.client_id&&c.credentials?.client_secret):c.credentials?.type!=="APP"||!!(c.credentials?.app_id&&c.credentials?.app_link);let{credentials:e,...f}=c;return{...f,areCredentialsSet:d}}catch(b){if(b&&"object"==typeof b&&"status"in b&&404===b.status)return null;console.error(`Failed to fetch integration ${a}:`,b),h(b,`Unable to fetch integration with key '${a}'`,"getIntegration")}}async function p(a){try{let b=j();return(await b.createIntegration({provider:a.provider,unique_key:a.uniqueKey,display_name:a.displayName,credentials:a.credentials})).data}catch(b){console.error("Failed to create integration:",b),h(b,`Failed to create integration '${a.uniqueKey}' for provider '${a.provider}'`,"createIntegration")}}async function q({uniqueKey:a}){let b=process.env.NANGO_SECRET_KEY;if(!b)throw new g("NANGO_SECRET_KEY environment variable is required for Nango integration");let c=process.env.NANGO_SERVER_URL||"https://api.nango.dev",d=process.env.OAUTH_CLIENT_NAME||"Inkeep Agent Framework",e=process.env.OAUTH_CLIENT_URI||"https://inkeep.com",f=process.env.OAUTH_CLIENT_LOGO_URI||"https://inkeep.com/images/logos/inkeep-logo-blue.svg",h=await fetch(`${c}/integrations/${a}`,{method:"PATCH",headers:{Authorization:`Bearer ${b}`,"Content-Type":"application/json"},body:JSON.stringify({custom:{oauth_client_name:d,oauth_client_uri:e,oauth_client_logo_uri:f}})});if(!h.ok){let a=await h.json().catch(()=>({}));throw new g(`Failed to update integration: ${h.status} ${h.statusText}`,"updateMCPGenericIntegration",a)}return await h.json()}async function r(a){try{let a=j();return(await a.listConnections()).connections}catch(c){let b=a?` for integration '${a}'`:"";console.error(`Failed to fetch connections${b}:`,c),h(c,`Unable to retrieve connections${b}`,"listConnections")}}async function s({endUserId:a="test-tenant",endUserEmail:b="test@test-tenant.com",endUserDisplayName:c="Test User",organizationId:d=process.env.TENANT_ID||f.P3,organizationDisplayName:e="Test Organization",integrationId:g}){try{let f=j(),{data:h}=await f.createConnectSession({end_user:{id:a,email:b,display_name:c},organization:{id:d,display_name:e},allowed_integrations:[g]});return h}catch(a){console.error("Failed to create connect session:",a),h(a,`Unable to create connect session for integration '${g}'`,"createConnectSession")}}async function t({providerName:a,uniqueKey:b,displayName:c,credentials:d}){try{let e,f=null;try{f=await o(b)}catch(b){if(b instanceof g)throw b;console.debug(`Integration '${a}' not found, will create new one`)}if(f?.areCredentialsSet)e=f;else try{e=await p({provider:a,uniqueKey:b,displayName:c,credentials:d})}catch(b){h(b,`Failed to create integration for provider '${a}'`,"create")}if("mcp-generic"===a)try{await q({uniqueKey:e.unique_key})}catch(a){console.warn("Failed to update MCP generic integration:",a)}try{return(await s({integrationId:e.unique_key})).token}catch(a){h(a,`Failed to create connect session for integration '${e.unique_key}'`,"createConnectSession")}}catch(b){console.error("Unexpected error creating provider connect session:",b),h(b,`Unexpected error creating connect session for provider '${a}'`,"createProviderConnectSession")}}async function u({providerConfigKey:a,connectionId:b}){try{let c=j();return await c.getMetadata(a,b)}catch(a){if(a&&"object"==typeof a&&"status"in a&&404===a.status)return null;console.error("Failed to get connection metadata:",a),h(a,`Unable to retrieve metadata for connection '${b}'`,"getMetadata")}}async function v({providerConfigKey:a,connectionId:b,metadata:c}){try{let d=j();await d.setMetadata(a,b,c)}catch(a){console.error("Failed to set connection metadata:",a),h(a,`Unable to update metadata for connection '${b}'`,"setMetadata")}}(0,i.D)([k,l,m,n,o,p,q,r,t,u,v]),(0,d.A)(k,"009c5334f9e28e88f64c85b5801854b77a4d5fbc7a",null),(0,d.A)(l,"00a107d28b2a7f04856c045dacab4421db9bb5131d",null),(0,d.A)(m,"4075b5f134a571d0153d9a73c307b572ec6c2a4ad2",null),(0,d.A)(n,"001f2394b8495ab74c61a8e36bbdfccb80d2326ea4",null),(0,d.A)(o,"40d13de02cfb2ff0af5add49b3a2342c1192edaaab",null),(0,d.A)(p,"40c43b69e273c1496dbf4c45b7b5dc62db06857b23",null),(0,d.A)(q,"408c113364ecad8ca393749374f42511d440158e24",null),(0,d.A)(r,"40d5adff5175701dec3d69ea00ccebacb6f146e66f",null),(0,d.A)(t,"40d17118ecd0e59a66a2cbad37e33940b707687fa3",null),(0,d.A)(u,"4004c6cdf0c71ea289f32bb72e8041ee162bb0a584",null),(0,d.A)(v,"406de57618cd01d44a8139e713e86df113ba18c094",null)},25623:(a,b,c)=>{c.d(b,{$:()=>h});var d=c(11253),e=c(14450),f=c(59072),g=c(87301);function h(){let{PUBLIC_NANGO_SERVER_URL:a,PUBLIC_NANGO_CONNECT_BASE_URL:b}=(0,f.y)();return{openNangoConnect:(0,e.useCallback)(({sessionToken:c,onEvent:e,connectOptions:f})=>{let g=new d.Ay({host:a||void 0}).openConnectUI({baseURL:f?.baseURL||b||void 0,apiURL:f?.apiURL||a||void 0,onEvent:e,detectClosedAuthWindow:!0});return g.setSessionToken(c),g},[a,b]),openNangoConnectHeadless:(0,e.useCallback)(async({mcpServerUrl:b,providerUniqueKey:c,providerDisplayName:e})=>{let f=await (0,g.u)({providerName:"mcp-generic",uniqueKey:c,displayName:e}),h=new d.Ay({host:a||void 0,connectSessionToken:f});try{return await h.auth(c,{detectClosedAuthWindow:!0,params:{mcp_server_url:b}})}catch(a){if(a instanceof Error)throw Error(`Authentication failed: ${a.message}`);throw a}},[a])}}},41710:(a,b,c)=>{c.d(b,{U:()=>f});var d=c(29991);c(58415);var e=c(5294);async function f(a,b,c){try{let d=await (0,e.K3)(a,b,c.id);if(d)return d}catch{}try{return await (0,e.GO)(a,b,c)}catch(a){throw console.error("Failed to save credential to database:",a),Error(`Failed to save credential '${c.id}' to database`)}}(0,c(33451).D)([f]),(0,d.A)(f,"70534eb04fd5fe46960f0b99302d5d91fa55e7fc34",null)},87301:(a,b,c)=>{c.d(b,{u:()=>e});var d=c(90147);let e=(0,d.createServerReference)("40d17118ecd0e59a66a2cbad37e33940b707687fa3",d.callServer,void 0,d.findSourceMapURL,"createProviderConnectSession")},96375:(a,b,c)=>{c.d(b,{U:()=>e});var d=c(90147);let e=(0,d.createServerReference)("70534eb04fd5fe46960f0b99302d5d91fa55e7fc34",d.callServer,void 0,d.findSourceMapURL,"findOrCreateCredential")}};