@inkeep/agents-manage-ui 0.22.12 → 0.23.1

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 (312) 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 +202 -193
  3. package/.next/standalone/agents-manage-ui/.next/app-path-routes-manifest.json +3 -3
  4. package/.next/standalone/agents-manage-ui/.next/build-manifest.json +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 +33 -33
  7. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/page.js +1 -1
  8. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/[agentId]/page.js +2 -2
  10. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/[agentId]/page.js.nft.json +1 -1
  11. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/[agentId]/page_client-reference-manifest.js +1 -1
  12. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/new/page.js +2 -2
  13. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/new/page.js.nft.json +1 -1
  14. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/new/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/page.js +2 -2
  16. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/page.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_client-reference-manifest.js +1 -1
  20. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page.js +1 -1
  21. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page.js.nft.json +1 -1
  22. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page_client-reference-manifest.js +1 -1
  23. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page.js +2 -2
  24. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page.js.nft.json +1 -1
  25. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page_client-reference-manifest.js +1 -1
  26. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/page.js +2 -2
  27. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/page_client-reference-manifest.js +1 -1
  28. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page.js +2 -2
  29. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page.js.nft.json +1 -1
  30. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page_client-reference-manifest.js +1 -1
  31. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page.js +2 -2
  32. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page.js.nft.json +1 -1
  33. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page_client-reference-manifest.js +1 -1
  34. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/page.js +2 -2
  35. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/page_client-reference-manifest.js +1 -1
  36. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page.js +1 -1
  37. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page.js.nft.json +1 -1
  38. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page_client-reference-manifest.js +1 -1
  39. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js +2 -2
  40. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js.nft.json +1 -1
  41. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page_client-reference-manifest.js +1 -1
  42. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page.js +1 -1
  43. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page.js.nft.json +1 -1
  44. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page_client-reference-manifest.js +1 -1
  45. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.js +2 -2
  46. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.js.nft.json +1 -1
  47. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page_client-reference-manifest.js +1 -1
  48. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page.js +2 -2
  49. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page.js.nft.json +1 -1
  50. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page_client-reference-manifest.js +1 -1
  51. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page.js +2 -2
  52. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page_client-reference-manifest.js +1 -1
  53. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page.js +2 -2
  54. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page.js.nft.json +1 -1
  55. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page_client-reference-manifest.js +1 -1
  56. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page.js +2 -2
  57. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page.js.nft.json +1 -1
  58. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page_client-reference-manifest.js +1 -1
  59. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page.js +2 -2
  60. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page.js.nft.json +1 -1
  61. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page_client-reference-manifest.js +1 -1
  62. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page.js +2 -2
  63. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page.js.nft.json +1 -1
  64. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page_client-reference-manifest.js +1 -1
  65. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page.js +2 -2
  66. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page_client-reference-manifest.js +1 -1
  67. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page.js +2 -2
  68. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page_client-reference-manifest.js +1 -1
  69. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js +2 -2
  70. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js.nft.json +1 -1
  71. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page_client-reference-manifest.js +1 -1
  72. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page.js +2 -2
  73. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page_client-reference-manifest.js +1 -1
  74. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page.js +2 -2
  75. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page.js.nft.json +1 -1
  76. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page_client-reference-manifest.js +1 -1
  77. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page.js +2 -2
  78. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page_client-reference-manifest.js +1 -1
  79. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page.js +1 -1
  80. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  81. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.html +1 -1
  82. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.rsc +8 -8
  83. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route.js +1 -1
  84. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route.js.nft.json +1 -1
  85. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
  86. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/route_client-reference-manifest.js +1 -1
  87. package/.next/standalone/agents-manage-ui/.next/server/app/page.js +2 -2
  88. package/.next/standalone/agents-manage-ui/.next/server/app/page_client-reference-manifest.js +1 -1
  89. package/.next/standalone/agents-manage-ui/.next/server/app-paths-manifest.json +3 -3
  90. package/.next/standalone/agents-manage-ui/.next/server/chunks/1674.js +3 -0
  91. package/.next/standalone/agents-manage-ui/.next/server/chunks/1735.js +1 -0
  92. package/.next/standalone/agents-manage-ui/.next/server/chunks/{4815.js → 1997.js} +1 -1
  93. package/.next/standalone/agents-manage-ui/.next/server/chunks/2263.js +1 -0
  94. package/.next/standalone/agents-manage-ui/.next/server/chunks/3547.js +1 -1
  95. package/.next/standalone/agents-manage-ui/.next/server/chunks/{6007.js → 4629.js} +1 -1
  96. package/.next/standalone/agents-manage-ui/.next/server/chunks/{1150.js → 498.js} +10 -10
  97. package/.next/standalone/agents-manage-ui/.next/server/chunks/{5922.js → 4999.js} +2 -2
  98. package/.next/standalone/agents-manage-ui/.next/server/chunks/{7165.js → 5395.js} +2 -2
  99. package/.next/standalone/agents-manage-ui/.next/server/chunks/5450.js +3 -3
  100. package/.next/standalone/agents-manage-ui/.next/server/chunks/5732.js +1 -0
  101. package/.next/standalone/agents-manage-ui/.next/server/chunks/{4177.js → 5831.js} +1 -1
  102. package/.next/standalone/agents-manage-ui/.next/server/chunks/6940.js +1 -0
  103. package/.next/standalone/agents-manage-ui/.next/server/chunks/7430.js +1 -0
  104. package/.next/standalone/agents-manage-ui/.next/server/chunks/7714.js +1 -1
  105. package/.next/standalone/agents-manage-ui/.next/server/chunks/7848.js +1 -0
  106. package/.next/standalone/agents-manage-ui/.next/server/chunks/7988.js +2 -2
  107. package/.next/standalone/agents-manage-ui/.next/server/chunks/{6129.js → 7990.js} +1 -1
  108. package/.next/standalone/agents-manage-ui/.next/server/chunks/8236.js +7 -0
  109. package/.next/standalone/agents-manage-ui/.next/server/chunks/9973.js +3 -0
  110. package/.next/standalone/agents-manage-ui/.next/server/middleware-build-manifest.js +1 -1
  111. package/.next/standalone/agents-manage-ui/.next/server/middleware-manifest.json +5 -5
  112. package/.next/standalone/agents-manage-ui/.next/server/middleware-react-loadable-manifest.js +1 -1
  113. package/.next/standalone/agents-manage-ui/.next/server/pages/404.html +1 -1
  114. package/.next/standalone/agents-manage-ui/.next/server/pages/500.html +1 -1
  115. package/.next/standalone/agents-manage-ui/.next/server/server-reference-manifest.js +1 -1
  116. package/.next/standalone/agents-manage-ui/.next/server/server-reference-manifest.json +1 -1
  117. package/.next/standalone/agents-manage-ui/.next/static/chunks/{10947.0e13736992e24338.js → 10947.6a319424ccb13c81.js} +1 -1
  118. package/.next/standalone/agents-manage-ui/.next/static/chunks/1175-aadbf39b68307a3c.js +1 -0
  119. package/.next/standalone/agents-manage-ui/.next/static/chunks/13059.78fd60ea8309cc3e.js +1 -0
  120. package/.next/standalone/agents-manage-ui/.next/static/chunks/13328-0f3bd90a602ad30b.js +1 -0
  121. package/.next/standalone/agents-manage-ui/.next/static/chunks/1499-20f18a3858daee94.js +1 -0
  122. package/.next/standalone/agents-manage-ui/.next/static/chunks/{16998.4dce05d474444f45.js → 16998.40613c3f0a5aacb3.js} +1 -1
  123. package/.next/standalone/agents-manage-ui/.next/static/chunks/18229-4f40b3129fb13a6a.js +1 -0
  124. package/.next/standalone/agents-manage-ui/.next/static/chunks/19317-031cfdbe64ae32fe.js +7 -0
  125. package/.next/standalone/agents-manage-ui/.next/static/chunks/20837-80824768c25e8807.js +1 -0
  126. package/.next/standalone/agents-manage-ui/.next/static/chunks/{22063.2a6e541262a57b29.js → 22063.11feb854e4b4e39a.js} +1 -1
  127. package/.next/standalone/agents-manage-ui/.next/static/chunks/{23113.eab371e0dd48dc4c.js → 23113.57e6c01f97c5cf7e.js} +16 -16
  128. package/.next/standalone/agents-manage-ui/.next/static/chunks/{23624-6eacc9668906f9e7.js → 37775-eeaab573593358e7.js} +1 -1
  129. package/.next/standalone/agents-manage-ui/.next/static/chunks/39912-10e2e2f42a2e25de.js +1 -0
  130. package/.next/standalone/agents-manage-ui/.next/static/chunks/44263.7adc8c4c8f6de91c.js +1 -0
  131. package/.next/standalone/agents-manage-ui/.next/static/chunks/49717-c3caecdba1246d8f.js +1 -0
  132. package/.next/standalone/agents-manage-ui/.next/static/chunks/53627-78b04138dc05aedb.js +1 -0
  133. package/.next/standalone/agents-manage-ui/.next/static/chunks/55244-84901b87c4a2322e.js +1 -0
  134. package/.next/standalone/agents-manage-ui/.next/static/chunks/{68717-c0ebdc6ed2197ba0.js → 63414-5d24060fe99b187c.js} +1 -1
  135. package/.next/standalone/agents-manage-ui/.next/static/chunks/66030-6542a249844c5b64.js +20 -0
  136. package/.next/standalone/agents-manage-ui/.next/static/chunks/{75290.beed80b73a28db47.js → 75290.89b60c553816e328.js} +1 -1
  137. package/.next/standalone/agents-manage-ui/.next/static/chunks/{79423-2fcde3ce6be30fb9.js → 79423-ed95cf583a063427.js} +1 -1
  138. package/.next/standalone/agents-manage-ui/.next/static/chunks/{80258.7b7fab0125073635.js → 80258.31ce0607c4dcaf8e.js} +1 -1
  139. package/.next/standalone/agents-manage-ui/.next/static/chunks/85014-ef922017dc0055bb.js +25 -0
  140. package/.next/standalone/agents-manage-ui/.next/static/chunks/88211-4e7159211556d4e5.js +1 -0
  141. package/.next/standalone/agents-manage-ui/.next/static/chunks/{88531.172cf93066feb734.js → 88531.f58565197512ed8d.js} +1 -1
  142. package/.next/standalone/agents-manage-ui/.next/static/chunks/{89814.c752574c3da1d1c4.js → 89814.bd648f5875e206d6.js} +2 -2
  143. package/.next/standalone/agents-manage-ui/.next/static/chunks/{920632d2.e78476844c160de0.js → 920632d2.585c99e4737f3367.js} +1 -1
  144. package/.next/standalone/agents-manage-ui/.next/static/chunks/{64438-2c5f9dad5610028e.js → 92160-0e9ba9d3fc9f7a53.js} +1 -1
  145. package/.next/standalone/agents-manage-ui/.next/static/chunks/{92626-f00877fb07f4eec3.js → 92626-47f83788787493e1.js} +1 -1
  146. package/.next/standalone/agents-manage-ui/.next/static/chunks/98928-14207f1b9e316de8.js +123 -0
  147. package/.next/standalone/agents-manage-ui/.next/static/chunks/99103.3ef66b745fb33df3.js +1 -0
  148. package/.next/standalone/agents-manage-ui/.next/static/chunks/993.c453fb7e185354c1.js +1 -0
  149. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/[agentId]/{page-ae86d1b5cddae46d.js → page-0d98034c5e81376a.js} +1 -1
  150. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/new/page-2b1b331329da116d.js +1 -0
  151. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/page-5746afb5cd4dae5a.js +1 -0
  152. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-3edd80735e6da58f.js +1 -0
  153. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/{page-523b028cc1af095d.js → page-d05fe859b0fef25a.js} +1 -1
  154. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/new/{page-3953c08df8797081.js → page-b87ec19a9191e55e.js} +1 -1
  155. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/{page-cda49bb05e39258a.js → page-efeb878c31f2a2eb.js} +1 -1
  156. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/{page-14914bea47c3fe50.js → page-25e78ebc40e7fb79.js} +1 -1
  157. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/new/page-4263637660f5fe11.js +1 -0
  158. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/{page-0debbf5986fa3acb.js → page-11053fc1b63c6007.js} +1 -1
  159. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/{page-bdab6475685163ca.js → page-468ef8b0ddd9f271.js} +1 -1
  160. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-a15d6a6b6f956da0.js +1 -0
  161. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-5550b5b52369a508.js +1 -0
  162. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/page-07db6760153791ce.js +1 -0
  163. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/page-1148dfdcf1e5dff4.js +1 -0
  164. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/{page-fa678e7bc12be499.js → page-b52db9884e7955e1.js} +1 -1
  165. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page-c5d5ca3ea5660528.js +1 -0
  166. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/new/page-78e277acbd6380c9.js +1 -0
  167. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/page-697894da877a199e.js +1 -0
  168. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/settings/{page-9e447119c58eadda.js → page-60877bb1259c461b.js} +1 -1
  169. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/ai-calls/{page-130484743447356a.js → page-d7f81fb8018ccb8f.js} +1 -1
  170. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-510226127ab7e6f0.js +1 -0
  171. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/page-9bf7a4cdd3a42ff3.js +1 -0
  172. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/{layout-51aa3a1d565bd4b2.js → layout-aafad05c22d94fb4.js} +1 -1
  173. package/.next/standalone/agents-manage-ui/.next/static/chunks/{d834c995-735e66a3c04aa910.js → d834c995-72666c5916d3b86e.js} +1 -1
  174. package/.next/standalone/agents-manage-ui/.next/static/chunks/{webpack-e7ebad2d15254098.js → webpack-48ec00a8819c1625.js} +1 -1
  175. package/.next/standalone/agents-manage-ui/package.json +4 -4
  176. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/addepar.svg +1 -0
  177. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/adobe-workfront.svg +5 -0
  178. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/adp-run.svg +1 -0
  179. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/autotask.svg +11 -0
  180. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/avoma.svg +1 -0
  181. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/bullhorn.svg +1 -0
  182. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/clerk.svg +5 -0
  183. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/cursor.svg +1 -0
  184. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/datacandy.svg +23 -0
  185. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/datto-rmm.svg +14 -0
  186. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/dayforce.svg +1 -0
  187. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/fairing.svg +1 -0
  188. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/fillout.svg +1 -0
  189. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/float.svg +1 -0
  190. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/folk.svg +1 -0
  191. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/google-workspace-admin.svg +1 -0
  192. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/heap.svg +1 -0
  193. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/hover.svg +1 -0
  194. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/instantly.svg +1 -1
  195. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/itglue.svg +8 -0
  196. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/jazzhr.svg +20 -8
  197. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/jobber.svg +1 -0
  198. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/jobdiva.svg +24 -0
  199. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/jumpcloud.svg +4 -0
  200. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/kintone.svg +1 -0
  201. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/mcp-dynamic.svg +36 -0
  202. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/microsoft-excel.svg +1 -0
  203. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/pax8.svg +16 -0
  204. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/paycor.svg +1 -0
  205. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/pipedream.svg +1 -0
  206. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/private-api-bearer.svg +1 -0
  207. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/recruitee.svg +1 -0
  208. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/roller.svg +10 -0
  209. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/sellsy.svg +1 -0
  210. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/skio.svg +1 -0
  211. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/snapchat.svg +1 -0
  212. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/snipe-it.svg +1 -0
  213. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/tailscale.svg +1 -0
  214. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/webex.svg +1 -0
  215. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/yotpo.svg +1 -0
  216. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/zoho-calendar.svg +1 -0
  217. package/.next/standalone/packages/agents-core/package.json +3 -3
  218. package/package.json +7 -7
  219. package/public/assets/provider-icons/addepar.svg +1 -0
  220. package/public/assets/provider-icons/adobe-workfront.svg +5 -0
  221. package/public/assets/provider-icons/adp-run.svg +1 -0
  222. package/public/assets/provider-icons/autotask.svg +11 -0
  223. package/public/assets/provider-icons/avoma.svg +1 -0
  224. package/public/assets/provider-icons/bullhorn.svg +1 -0
  225. package/public/assets/provider-icons/clerk.svg +5 -0
  226. package/public/assets/provider-icons/cursor.svg +1 -0
  227. package/public/assets/provider-icons/datacandy.svg +23 -0
  228. package/public/assets/provider-icons/datto-rmm.svg +14 -0
  229. package/public/assets/provider-icons/dayforce.svg +1 -0
  230. package/public/assets/provider-icons/fairing.svg +1 -0
  231. package/public/assets/provider-icons/fillout.svg +1 -0
  232. package/public/assets/provider-icons/float.svg +1 -0
  233. package/public/assets/provider-icons/folk.svg +1 -0
  234. package/public/assets/provider-icons/google-workspace-admin.svg +1 -0
  235. package/public/assets/provider-icons/heap.svg +1 -0
  236. package/public/assets/provider-icons/hover.svg +1 -0
  237. package/public/assets/provider-icons/instantly.svg +1 -1
  238. package/public/assets/provider-icons/itglue.svg +8 -0
  239. package/public/assets/provider-icons/jazzhr.svg +20 -8
  240. package/public/assets/provider-icons/jobber.svg +1 -0
  241. package/public/assets/provider-icons/jobdiva.svg +24 -0
  242. package/public/assets/provider-icons/jumpcloud.svg +4 -0
  243. package/public/assets/provider-icons/kintone.svg +1 -0
  244. package/public/assets/provider-icons/mcp-dynamic.svg +36 -0
  245. package/public/assets/provider-icons/microsoft-excel.svg +1 -0
  246. package/public/assets/provider-icons/pax8.svg +16 -0
  247. package/public/assets/provider-icons/paycor.svg +1 -0
  248. package/public/assets/provider-icons/pipedream.svg +1 -0
  249. package/public/assets/provider-icons/private-api-bearer.svg +1 -0
  250. package/public/assets/provider-icons/recruitee.svg +1 -0
  251. package/public/assets/provider-icons/roller.svg +10 -0
  252. package/public/assets/provider-icons/sellsy.svg +1 -0
  253. package/public/assets/provider-icons/skio.svg +1 -0
  254. package/public/assets/provider-icons/snapchat.svg +1 -0
  255. package/public/assets/provider-icons/snipe-it.svg +1 -0
  256. package/public/assets/provider-icons/tailscale.svg +1 -0
  257. package/public/assets/provider-icons/webex.svg +1 -0
  258. package/public/assets/provider-icons/yotpo.svg +1 -0
  259. package/public/assets/provider-icons/zoho-calendar.svg +1 -0
  260. package/src/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.tsx +3 -1
  261. package/src/app/[tenantId]/projects/[projectId]/credentials/page.tsx +12 -2
  262. package/src/components/agent/playground/chat-widget.tsx +1 -2
  263. package/src/components/credentials/credential-item.tsx +4 -4
  264. package/src/components/icons/provider-icon.tsx +17 -5
  265. package/src/components/mcp-servers/form/mcp-server-form.tsx +89 -16
  266. package/src/components/mcp-servers/selection/mcp-server-selection.tsx +1 -4
  267. package/src/components/mcp-servers/view-mcp-server-details.tsx +60 -32
  268. package/src/hooks/use-nango-connect.ts +41 -2
  269. package/src/hooks/use-oauth-login.ts +199 -87
  270. package/src/lib/__tests__/provider-icons-sync.test.ts +47 -0
  271. package/src/lib/mcp-tools/nango.ts +7 -3
  272. package/src/lib/provider-icons.ts +610 -0
  273. package/.next/standalone/agents-manage-ui/.next/server/chunks/1040.js +0 -3
  274. package/.next/standalone/agents-manage-ui/.next/server/chunks/272.js +0 -1
  275. package/.next/standalone/agents-manage-ui/.next/server/chunks/2780.js +0 -1
  276. package/.next/standalone/agents-manage-ui/.next/server/chunks/2964.js +0 -7
  277. package/.next/standalone/agents-manage-ui/.next/server/chunks/5100.js +0 -1
  278. package/.next/standalone/agents-manage-ui/.next/server/chunks/5797.js +0 -3
  279. package/.next/standalone/agents-manage-ui/.next/server/chunks/6212.js +0 -1
  280. package/.next/standalone/agents-manage-ui/.next/static/chunks/1175-987bdb225e7f4219.js +0 -1
  281. package/.next/standalone/agents-manage-ui/.next/static/chunks/13059.986e834e4b0dfe15.js +0 -1
  282. package/.next/standalone/agents-manage-ui/.next/static/chunks/20837-3d3309aca51cd8ab.js +0 -1
  283. package/.next/standalone/agents-manage-ui/.next/static/chunks/26999-8c9c5e5ec54db482.js +0 -20
  284. package/.next/standalone/agents-manage-ui/.next/static/chunks/30896-5ed483238054402b.js +0 -1
  285. package/.next/standalone/agents-manage-ui/.next/static/chunks/32268-b67f25893205c300.js +0 -1
  286. package/.next/standalone/agents-manage-ui/.next/static/chunks/38249-f530c1a1527a3b8f.js +0 -1
  287. package/.next/standalone/agents-manage-ui/.next/static/chunks/44263.2ca72fa2e5ad0b99.js +0 -1
  288. package/.next/standalone/agents-manage-ui/.next/static/chunks/62092-ae9394efd9c69e92.js +0 -7
  289. package/.next/standalone/agents-manage-ui/.next/static/chunks/68266-1f459b102467a36a.js +0 -1
  290. package/.next/standalone/agents-manage-ui/.next/static/chunks/68430-1140499bac28d9c1.js +0 -1
  291. package/.next/standalone/agents-manage-ui/.next/static/chunks/85014-750355653afd732f.js +0 -25
  292. package/.next/standalone/agents-manage-ui/.next/static/chunks/92775-85a0732a5fe07d43.js +0 -1
  293. package/.next/standalone/agents-manage-ui/.next/static/chunks/9692-04e88dce5dd53eb5.js +0 -1
  294. package/.next/standalone/agents-manage-ui/.next/static/chunks/98928-538cadcee2c0946a.js +0 -123
  295. package/.next/standalone/agents-manage-ui/.next/static/chunks/99103.91d81aff14ea1d7e.js +0 -1
  296. package/.next/standalone/agents-manage-ui/.next/static/chunks/993.190288a5b2780074.js +0 -1
  297. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/new/page-bc1fef9468cac84a.js +0 -1
  298. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/page-624ee1f61ef5cea4.js +0 -1
  299. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-2fe4aa192c9871b2.js +0 -1
  300. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/new/page-3b3028fc3eb025a9.js +0 -1
  301. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-a5cf869e6018ec72.js +0 -1
  302. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-00ea2da57e0eb277.js +0 -1
  303. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/page-4a9720fe172c379b.js +0 -1
  304. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/page-e33d8d09187d077f.js +0 -1
  305. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page-138db92933a30700.js +0 -1
  306. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/new/page-83ce745dc8e4f830.js +0 -1
  307. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/page-4b9bcec442bf3022.js +0 -1
  308. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-6c2373e2081b6c91.js +0 -1
  309. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/page-87b16d71cf45de60.js +0 -1
  310. package/src/components/credentials/credentials-list.tsx +0 -36
  311. /package/.next/standalone/agents-manage-ui/.next/static/{PK-fEySTV-nz3CyrAUcTX → yeHoasKbJN96CwqdzWKNW}/_buildManifest.js +0 -0
  312. /package/.next/standalone/agents-manage-ui/.next/static/{PK-fEySTV-nz3CyrAUcTX → yeHoasKbJN96CwqdzWKNW}/_ssgManifest.js +0 -0
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import { zodResolver } from '@hookform/resolvers/zod';
4
- import { MCPTransportType } from '@inkeep/agents-core/client-exports';
4
+ import { detectAuthenticationRequired, MCPTransportType } from '@inkeep/agents-core/client-exports';
5
5
  import { nanoid } from 'nanoid';
6
6
  import { useRouter } from 'next/navigation';
7
7
  import { useForm } from 'react-hook-form';
@@ -10,6 +10,8 @@ import { GenericInput } from '@/components/form/generic-input';
10
10
  import { GenericSelect } from '@/components/form/generic-select';
11
11
  import { Button } from '@/components/ui/button';
12
12
  import { Form } from '@/components/ui/form';
13
+ import { InfoCard } from '@/components/ui/info-card';
14
+ import { useOAuthLogin } from '@/hooks/use-oauth-login';
13
15
  import type { Credential } from '@/lib/api/credentials';
14
16
  import { createMCPTool, updateMCPTool } from '@/lib/api/tools';
15
17
  import type { MCPTool } from '@/lib/types/tools';
@@ -40,7 +42,7 @@ const defaultValues: MCPToolFormData = {
40
42
  },
41
43
  },
42
44
  imageUrl: '', // Initialize as empty string to avoid uncontrolled/controlled warning
43
- credentialReferenceId: 'none',
45
+ credentialReferenceId: 'oauth',
44
46
  };
45
47
 
46
48
  export function MCPServerForm({
@@ -61,6 +63,11 @@ export function MCPServerForm({
61
63
  },
62
64
  });
63
65
 
66
+ const { handleOAuthLogin } = useOAuthLogin({
67
+ tenantId,
68
+ projectId,
69
+ });
70
+
64
71
  const { isSubmitting } = form.formState;
65
72
 
66
73
  // Helper function to filter active tools against available tools
@@ -73,6 +80,51 @@ export function MCPServerForm({
73
80
 
74
81
  const onSubmit = async (data: MCPToolFormData) => {
75
82
  try {
83
+ // handle oauth login
84
+ if (data.credentialReferenceId === 'oauth') {
85
+ const toolId = nanoid();
86
+
87
+ const isAuthenticationRequired = await detectAuthenticationRequired({
88
+ serverUrl: data.config.mcp.server.url,
89
+ toolId,
90
+ });
91
+
92
+ if (!isAuthenticationRequired) {
93
+ toast.error(
94
+ 'This MCP server does not support OAuth authentication. Please select a different credential.'
95
+ );
96
+ return;
97
+ }
98
+
99
+ const mcpToolData = {
100
+ id: toolId,
101
+ name: data.name,
102
+ config: {
103
+ type: 'mcp' as const,
104
+ mcp: {
105
+ server: {
106
+ url: data.config.mcp.server.url,
107
+ },
108
+ transport: {
109
+ type: data.config.mcp.transport.type,
110
+ },
111
+ },
112
+ },
113
+ credentialReferenceId: null,
114
+ imageUrl: data.imageUrl,
115
+ };
116
+
117
+ const newTool = await createMCPTool(tenantId, projectId, mcpToolData);
118
+
119
+ handleOAuthLogin({
120
+ toolId: newTool.id,
121
+ mcpServerUrl: data.config.mcp.server.url,
122
+ toolName: data.name,
123
+ });
124
+
125
+ return;
126
+ }
127
+
76
128
  // Transform form data to API format
77
129
  const transformedData = {
78
130
  ...data,
@@ -142,20 +194,41 @@ export function MCPServerForm({
142
194
  label="Image URL (optional)"
143
195
  placeholder="https://example.com/icon.png or data:image/png;base64,..."
144
196
  />
145
- <GenericSelect
146
- control={form.control}
147
- selectTriggerClassName="w-full"
148
- name="credentialReferenceId"
149
- label="Credential"
150
- placeholder="Select a credential"
151
- options={[
152
- { value: 'none', label: 'No Authentication' },
153
- ...credentials.map((credential) => ({
154
- value: credential.id,
155
- label: credential.id,
156
- })),
157
- ]}
158
- />
197
+
198
+ <div className="space-y-3">
199
+ <GenericSelect
200
+ control={form.control}
201
+ selectTriggerClassName="w-full"
202
+ name="credentialReferenceId"
203
+ label="Credential"
204
+ placeholder="Select a credential"
205
+ options={[
206
+ { value: 'oauth', label: 'OAuth' },
207
+ { value: 'none', label: 'No Authentication' },
208
+ ...credentials.map((credential) => ({
209
+ value: credential.id,
210
+ label: credential.id,
211
+ })),
212
+ ]}
213
+ />
214
+ <InfoCard title="How this works">
215
+ <div className="space-y-2">
216
+ <p>
217
+ Select <code className="bg-background px-1.5 py-0.5 rounded border">OAuth</code> to
218
+ authenticate with the MCP server's OAuth flow, which will start after you click
219
+ "Create".
220
+ </p>
221
+ <p>
222
+ Select{' '}
223
+ <code className="bg-background px-1.5 py-0.5 rounded border">
224
+ No Authentication
225
+ </code>{' '}
226
+ to skip authentication (i.e. none required or add a credential later).
227
+ </p>
228
+ <p>Or select from the existing credentials you have already created.</p>
229
+ </div>
230
+ </InfoCard>
231
+ </div>
159
232
 
160
233
  {mode === 'update' && (
161
234
  <ActiveToolsSelector
@@ -31,9 +31,6 @@ export function MCPServerSelection({ credentials, tenantId, projectId }: MCPServ
31
31
  const { handleOAuthLogin } = useOAuthLogin({
32
32
  tenantId,
33
33
  projectId,
34
- onError: () => {
35
- setLoadingServerId(undefined);
36
- },
37
34
  });
38
35
 
39
36
  const handleSelectPrebuiltServer = async (server: PrebuiltMCPServer) => {
@@ -65,7 +62,7 @@ export function MCPServerSelection({ credentials, tenantId, projectId }: MCPServ
65
62
  toast.success(`${server.name} MCP server created successfully`);
66
63
  router.push(`/${tenantId}/projects/${projectId}/mcp-servers/${newTool.id}`);
67
64
  } else {
68
- handleOAuthLogin(newTool.id);
65
+ handleOAuthLogin({toolId: newTool.id, mcpServerUrl: server.url, toolName: server.name});
69
66
  }
70
67
  } catch (error) {
71
68
  console.error('Failed to create prebuilt MCP server:', error);
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
 
3
- import { Lock, LockOpen, Pencil } from 'lucide-react';
3
+ import { AlertCircle, Lock, LockOpen, Pencil } from 'lucide-react';
4
4
  import Link from 'next/link';
5
5
  import { Badge } from '@/components/ui/badge';
6
6
  import { ExternalLink } from '@/components/ui/external-link';
@@ -69,6 +69,12 @@ export function ViewMCPServerDetails({
69
69
  });
70
70
  };
71
71
 
72
+ const isExpired = (expiresAt: string | Date | null | undefined): boolean => {
73
+ if (!expiresAt) return false;
74
+ const expirationDate = typeof expiresAt === 'string' ? new Date(expiresAt) : expiresAt;
75
+ return expirationDate < new Date();
76
+ };
77
+
72
78
  const getStatusBadgeVariant = (status: string) => {
73
79
  switch (status) {
74
80
  case 'healthy':
@@ -157,27 +163,42 @@ export function ViewMCPServerDetails({
157
163
  </div>
158
164
  </div>
159
165
 
160
- <div className="space-y-2">
161
- <ItemLabel>Status</ItemLabel>
162
- <ItemValue className="items-center">
163
- {tool.status === 'needs_auth' ? (
164
- <Badge
165
- variant="outline"
166
- className="text-xs bg-amber-50 dark:bg-amber-900/20 text-amber-700 dark:text-amber-400 border-amber-200 dark:border-amber-800 cursor-pointer hover:bg-amber-100 dark:hover:bg-amber-900/30 hover:border-amber-300 dark:hover:border-amber-700 transition-colors"
167
- onClick={(e) => {
168
- e.preventDefault();
169
- e.stopPropagation();
170
- handleOAuthLogin(tool.id);
171
- }}
172
- >
173
- Click to Login
174
- </Badge>
175
- ) : (
176
- <Badge className="uppercase" variant={getStatusBadgeVariant(tool.status)}>
177
- {tool.status}
178
- </Badge>
179
- )}
180
- </ItemValue>
166
+ {/* Status and Transport Type */}
167
+ <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
168
+ <div className="space-y-2">
169
+ <ItemLabel>Status</ItemLabel>
170
+ <ItemValue className="items-center">
171
+ {tool.status === 'needs_auth' ? (
172
+ <Badge
173
+ variant="outline"
174
+ className="text-xs bg-amber-50 dark:bg-amber-900/20 text-amber-700 dark:text-amber-400 border-amber-200 dark:border-amber-800 cursor-pointer hover:bg-amber-100 dark:hover:bg-amber-900/30 hover:border-amber-300 dark:hover:border-amber-700 transition-colors"
175
+ onClick={(e) => {
176
+ e.preventDefault();
177
+ e.stopPropagation();
178
+ handleOAuthLogin({
179
+ toolId: tool.id,
180
+ mcpServerUrl: tool.config.mcp.server.url,
181
+ toolName: tool.name,
182
+ });
183
+ }}
184
+ >
185
+ Click to Login
186
+ </Badge>
187
+ ) : (
188
+ <Badge className="uppercase" variant={getStatusBadgeVariant(tool.status)}>
189
+ {tool.status}
190
+ </Badge>
191
+ )}
192
+ </ItemValue>
193
+ </div>
194
+ {(tool.config as any).mcp.transport && (
195
+ <div className="space-y-2">
196
+ <ItemLabel>Transport Type</ItemLabel>
197
+ <ItemValue>
198
+ {<Badge variant="code">{(tool.config as any).mcp.transport.type}</Badge>}
199
+ </ItemValue>
200
+ </div>
201
+ )}
181
202
  </div>
182
203
 
183
204
  {/* Last Error */}
@@ -191,19 +212,13 @@ export function ViewMCPServerDetails({
191
212
  {/* Server URL */}
192
213
  <div className="space-y-2">
193
214
  <ItemLabel>Server URL</ItemLabel>
194
- {tool.config.type === 'mcp' && <CopyableSingleLineCode code={tool.config.mcp.server.url} />}
215
+ {tool.config.type === 'mcp' && (
216
+ <CopyableSingleLineCode code={tool.config.mcp.server.url} />
217
+ )}
195
218
  </div>
196
219
 
197
- {/* Transport and Credential */}
220
+ {/* Credential Name and Expires At */}
198
221
  <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
199
- {(tool.config as any).mcp.transport && (
200
- <div className="space-y-2">
201
- <ItemLabel>Transport Type</ItemLabel>
202
- <ItemValue>
203
- {<Badge variant="code">{(tool.config as any).mcp.transport.type}</Badge>}
204
- </ItemValue>
205
- </div>
206
- )}
207
222
  <div className="space-y-2">
208
223
  <ItemLabel>Credential</ItemLabel>
209
224
  <ItemValue className="items-center">
@@ -228,6 +243,19 @@ export function ViewMCPServerDetails({
228
243
  )}
229
244
  </ItemValue>
230
245
  </div>
246
+ {tool.expiresAt && (
247
+ <div className="space-y-2">
248
+ <div className="flex items-center gap-2">
249
+ <ItemLabel>Credential Expires At</ItemLabel>
250
+ {isExpired(tool.expiresAt) && <AlertCircle className="h-4 w-4 text-amber-500" />}
251
+ </div>
252
+ <ItemValue>
253
+ {formatDate(
254
+ typeof tool.expiresAt === 'string' ? tool.expiresAt : tool.expiresAt.toISOString()
255
+ )}
256
+ </ItemValue>
257
+ </div>
258
+ )}
231
259
  </div>
232
260
 
233
261
  {/* Active Tools */}
@@ -1,8 +1,9 @@
1
1
  'use client';
2
2
 
3
- import Nango, { type OnConnectEvent } from '@nangohq/frontend';
3
+ import Nango, { type AuthOptions, type AuthSuccess, type OnConnectEvent } from '@nangohq/frontend';
4
4
  import { useCallback } from 'react';
5
5
  import { useRuntimeConfig } from '@/contexts/runtime-config-context';
6
+ import { createProviderConnectSession } from '@/lib/mcp-tools/nango';
6
7
 
7
8
  type OpenNangoConnectOptions = {
8
9
  sessionToken: string;
@@ -40,5 +41,43 @@ export function useNangoConnect() {
40
41
  [PUBLIC_NANGO_SERVER_URL, PUBLIC_NANGO_CONNECT_BASE_URL]
41
42
  );
42
43
 
43
- return openNangoConnect;
44
+ const openNangoConnectHeadless = useCallback(
45
+ async ({ mcpServerUrl, providerUniqueKey, providerDisplayName }: { mcpServerUrl: string, providerUniqueKey: string, providerDisplayName: string }): Promise<AuthSuccess> => {
46
+ const providerName = 'mcp-generic';
47
+ const connectSessionToken = await createProviderConnectSession({
48
+ providerName,
49
+ uniqueKey: providerUniqueKey,
50
+ displayName: providerDisplayName,
51
+ });
52
+
53
+ const nango = new Nango({
54
+ host: PUBLIC_NANGO_SERVER_URL || undefined,
55
+ connectSessionToken,
56
+ });
57
+
58
+ try {
59
+ const authOptions: AuthOptions = {
60
+ detectClosedAuthWindow: true,
61
+ params: {
62
+ mcp_server_url: mcpServerUrl,
63
+ },
64
+ };
65
+
66
+ const result = await nango.auth(providerUniqueKey, authOptions);
67
+
68
+ return result;
69
+ } catch (error) {
70
+ if (error instanceof Error) {
71
+ throw new Error(`Nango headless auth failed: ${error.message}`);
72
+ }
73
+ throw error;
74
+ }
75
+ },
76
+ [PUBLIC_NANGO_SERVER_URL]
77
+ );
78
+
79
+ return {
80
+ openNangoConnect,
81
+ openNangoConnectHeadless,
82
+ };
44
83
  }
@@ -1,115 +1,227 @@
1
+ import { CredentialStoreType, generateIdFromName } from '@inkeep/agents-core/client-exports';
1
2
  import { useRouter } from 'next/navigation';
3
+ import { useCallback, useRef } from 'react';
2
4
  import { toast } from 'sonner';
3
5
  import { useRuntimeConfig } from '@/contexts/runtime-config-context';
6
+ import { listCredentialStores } from '@/lib/api/credentialStores';
7
+ import { updateMCPTool } from '@/lib/api/tools';
8
+ import { findOrCreateCredential } from '@/lib/utils/credentials-utils';
4
9
  import { getOAuthLoginUrl } from '@/lib/utils/mcp-urls';
10
+ import { useNangoConnect } from './use-nango-connect';
5
11
 
6
12
  interface UseOAuthLoginProps {
7
13
  tenantId: string;
8
14
  projectId: string;
9
15
  onFinish?: (toolId: string) => void;
10
- onError?: (error: Error) => void;
11
16
  }
12
17
 
13
- export function useOAuthLogin({ tenantId, projectId, onFinish, onError }: UseOAuthLoginProps) {
18
+ interface OAuthLoginResult {
19
+ handleOAuthLogin: ({
20
+ toolId,
21
+ mcpServerUrl,
22
+ toolName,
23
+ }: {
24
+ toolId: string;
25
+ mcpServerUrl: string;
26
+ toolName: string;
27
+ }) => Promise<void>;
28
+ }
29
+
30
+ export function useOAuthLogin({
31
+ tenantId,
32
+ projectId,
33
+ onFinish,
34
+ }: UseOAuthLoginProps): OAuthLoginResult {
14
35
  const router = useRouter();
15
36
  const { PUBLIC_INKEEP_AGENTS_MANAGE_API_URL } = useRuntimeConfig();
37
+ const { openNangoConnectHeadless } = useNangoConnect();
16
38
 
17
39
  // Track active OAuth attempts to prevent conflicts
18
- const activeAttempts = new Map<string, () => void>();
19
-
20
- const handleOAuthLogin = (toolId: string) => {
21
- // Clean up any previous attempt for this toolId
22
- const existingCleanup = activeAttempts.get(toolId);
23
- if (existingCleanup) {
24
- existingCleanup();
25
- activeAttempts.delete(toolId);
26
- }
27
- try {
28
- const oauthUrl = getOAuthLoginUrl({
29
- PUBLIC_INKEEP_AGENTS_MANAGE_API_URL,
30
- tenantId,
31
- projectId,
32
- id: toolId,
33
- });
40
+ const activeAttemptsRef = useRef(new Map<string, () => void>());
34
41
 
35
- const popup = window.open(
36
- oauthUrl,
37
- 'oauth-popup',
38
- 'width=600,height=700,scrollbars=yes,resizable=yes,status=yes,location=yes'
39
- );
40
-
41
- if (!popup) {
42
- console.error(`Failed to open popup for ${toolId} - blocked by browser`);
43
- return;
44
- }
42
+ const handleOAuthLoginManually = useCallback(
43
+ (toolId: string): Promise<void> => {
44
+ return new Promise((resolve, reject) => {
45
+ // Clean up any previous attempt for this toolId
46
+ const existingCleanup = activeAttemptsRef.current.get(toolId);
47
+ if (existingCleanup) {
48
+ existingCleanup();
49
+ activeAttemptsRef.current.delete(toolId);
50
+ }
45
51
 
46
- // Track completion to prevent duplicate calls
47
- let completed = false;
52
+ try {
53
+ const oauthUrl = getOAuthLoginUrl({
54
+ PUBLIC_INKEEP_AGENTS_MANAGE_API_URL,
55
+ tenantId,
56
+ projectId,
57
+ id: toolId,
58
+ });
48
59
 
49
- // Listen for success PostMessage
50
- const handleMessage = (event: MessageEvent) => {
51
- if (event.data.type === 'oauth-success' && !completed) {
52
- completed = true;
53
- window.removeEventListener('message', handleMessage);
60
+ const popup = window.open(
61
+ oauthUrl,
62
+ 'oauth-popup',
63
+ 'width=600,height=700,scrollbars=yes,resizable=yes,status=yes,location=yes'
64
+ );
54
65
 
55
- // Call custom success handler or default behavior
56
- if (onFinish) {
57
- onFinish(toolId);
58
- } else {
59
- router.push(`/${tenantId}/projects/${projectId}/mcp-servers/${toolId}`);
66
+ if (!popup) {
67
+ const error = new Error(`Failed to open popup for ${toolId} - blocked by browser`);
68
+ console.error(error.message);
69
+ reject(error);
70
+ return;
60
71
  }
61
- }
62
- };
63
72
 
64
- if (popup) {
65
- window.addEventListener('message', handleMessage);
66
-
67
- // Backup: Monitor popup closure (for errors or PostMessage failures)
68
- // Delay backup monitoring to give PostMessage priority
69
- let checkPopupClosed: NodeJS.Timeout | null = null;
70
- const backupTimeout = setTimeout(() => {
71
- if (!completed) {
72
- checkPopupClosed = setInterval(() => {
73
- try {
74
- if (popup.closed && !completed) {
75
- completed = true;
76
- if (checkPopupClosed) clearInterval(checkPopupClosed);
77
- window.removeEventListener('message', handleMessage);
78
- activeAttempts.delete(toolId);
79
-
80
- // Call custom success handler or default behavior
81
- if (onFinish) {
82
- onFinish(toolId);
83
- } else {
84
- router.push(`/${tenantId}/projects/${projectId}/mcp-servers/${toolId}`);
73
+ // Track completion to prevent duplicate calls
74
+ let completed = false;
75
+
76
+ const completeFlow = (success: boolean, error?: Error) => {
77
+ if (completed) return;
78
+ completed = true;
79
+
80
+ // Cleanup
81
+ window.removeEventListener('message', handleMessage);
82
+ if (checkPopupClosed) clearInterval(checkPopupClosed);
83
+ clearTimeout(backupTimeout);
84
+ activeAttemptsRef.current.delete(toolId);
85
+
86
+ if (success) {
87
+ // Call custom success handler or default behavior
88
+ if (onFinish) {
89
+ onFinish(toolId);
90
+ } else {
91
+ router.push(`/${tenantId}/projects/${projectId}/mcp-servers/${toolId}`);
92
+ }
93
+ resolve();
94
+ } else {
95
+ reject(error || new Error('OAuth login failed'));
96
+ }
97
+ };
98
+
99
+ // Listen for success PostMessage
100
+ const handleMessage = (event: MessageEvent) => {
101
+ if (event.data.type === 'oauth-success') {
102
+ completeFlow(true);
103
+ } else if (event.data.type === 'oauth-error') {
104
+ completeFlow(false, new Error(event.data.error || 'OAuth login failed'));
105
+ }
106
+ };
107
+
108
+ window.addEventListener('message', handleMessage);
109
+
110
+ // Backup: Monitor popup closure (for errors or PostMessage failures)
111
+ let checkPopupClosed: NodeJS.Timeout | null = null;
112
+ const backupTimeout = setTimeout(() => {
113
+ if (!completed) {
114
+ checkPopupClosed = setInterval(() => {
115
+ try {
116
+ if (popup.closed) {
117
+ // Assume success if popup closed without error message
118
+ completeFlow(true);
85
119
  }
120
+ } catch {
121
+ // Cross-origin errors are expected during OAuth redirects
86
122
  }
87
- } catch {
88
- // Cross-origin errors are expected during OAuth redirects
89
- }
90
- }, 1000); // Check every second
91
- }
92
- }, 3000); // Wait 3 seconds before starting backup monitoring
93
-
94
- // Register cleanup function for this attempt
95
- const cleanup = () => {
96
- clearTimeout(backupTimeout);
97
- if (checkPopupClosed) clearInterval(checkPopupClosed);
98
- window.removeEventListener('message', handleMessage);
99
- completed = true;
100
- };
101
- activeAttempts.set(toolId, cleanup);
102
- }
103
- } catch (error) {
104
- const errorObj = error instanceof Error ? error : new Error('OAuth login failed');
123
+ }, 1000);
124
+ }
125
+ }, 3000);
105
126
 
106
- if (onError) {
107
- onError(errorObj);
127
+ // Register cleanup function for this attempt
128
+ const cleanup = () => {
129
+ completeFlow(false, new Error('OAuth login cancelled'));
130
+ };
131
+ activeAttemptsRef.current.set(toolId, cleanup);
132
+ } catch (error) {
133
+ const errorObj = error instanceof Error ? error : new Error('OAuth login failed');
134
+ reject(errorObj);
135
+ }
136
+ });
137
+ },
138
+ [PUBLIC_INKEEP_AGENTS_MANAGE_API_URL, tenantId, projectId, onFinish, router]
139
+ );
140
+
141
+ const handleOAuthLoginWithNangoMCPGeneric = useCallback(
142
+ async ({
143
+ toolId,
144
+ mcpServerUrl,
145
+ toolName,
146
+ }: {
147
+ toolId: string;
148
+ mcpServerUrl: string;
149
+ toolName: string;
150
+ }): Promise<void> => {
151
+ const authResult = await openNangoConnectHeadless({
152
+ mcpServerUrl,
153
+ providerUniqueKey: `${generateIdFromName(toolName)}_${toolId}`,
154
+ providerDisplayName: toolName,
155
+ });
156
+
157
+ const newCredentialData = {
158
+ id: generateIdFromName(toolName),
159
+ type: CredentialStoreType.nango,
160
+ credentialStoreId: 'nango-default',
161
+ retrievalParams: {
162
+ connectionId: authResult.connectionId,
163
+ providerConfigKey: authResult.providerConfigKey,
164
+ provider: 'mcp-generic',
165
+ authMode: 'OAUTH2',
166
+ },
167
+ };
168
+
169
+ const newCredential = await findOrCreateCredential(tenantId, projectId, newCredentialData);
170
+
171
+ await updateMCPTool(tenantId, projectId, toolId, {
172
+ credentialReferenceId: newCredential.id,
173
+ });
174
+
175
+ // Call custom success handler or default behavior
176
+ if (onFinish) {
177
+ onFinish(toolId);
108
178
  } else {
109
- toast.error('OAuth login failed. Please try again.');
179
+ router.push(`/${tenantId}/projects/${projectId}/mcp-servers/${toolId}`);
110
180
  }
111
- }
112
- };
181
+ },
182
+ [openNangoConnectHeadless, onFinish, router, tenantId, projectId]
183
+ );
184
+
185
+ const handleOAuthLogin = useCallback(
186
+ async ({
187
+ toolId,
188
+ mcpServerUrl,
189
+ toolName,
190
+ }: {
191
+ toolId: string;
192
+ mcpServerUrl: string;
193
+ toolName: string;
194
+ }): Promise<void> => {
195
+ try {
196
+ // Check credential stores availability
197
+ const credentialStoresStatus = await listCredentialStores(tenantId, projectId);
198
+
199
+ const isNangoReady = credentialStoresStatus.some(
200
+ (store) => store.type === CredentialStoreType.nango && store.available
201
+ );
202
+
203
+ const isKeychainReady = credentialStoresStatus.some(
204
+ (store) => store.type === CredentialStoreType.keychain && store.available
205
+ );
113
206
 
114
- return { handleOAuthLogin };
207
+ // Choose authentication method based on availability
208
+ if (isNangoReady) {
209
+ await handleOAuthLoginWithNangoMCPGeneric({ toolId, mcpServerUrl, toolName });
210
+ } else if (isKeychainReady) {
211
+ await handleOAuthLoginManually(toolId);
212
+ } else {
213
+ throw new Error('No credential store available. Please configure Nango or Keychain.');
214
+ }
215
+ } catch (error) {
216
+ const errorObj = error instanceof Error ? error : new Error('OAuth login failed');
217
+ toast.error(errorObj.message);
218
+ throw errorObj;
219
+ }
220
+ },
221
+ [tenantId, projectId, handleOAuthLoginWithNangoMCPGeneric, handleOAuthLoginManually]
222
+ );
223
+
224
+ return {
225
+ handleOAuthLogin,
226
+ };
115
227
  }