@inkeep/agents-manage-ui 0.0.0-dev-20251016161232 → 0.0.0-dev-20251016203440

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 (286) 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 +144 -135
  3. package/.next/standalone/agents-manage-ui/.next/app-path-routes-manifest.json +3 -3
  4. package/.next/standalone/agents-manage-ui/.next/build-manifest.json +2 -2
  5. package/.next/standalone/agents-manage-ui/.next/prerender-manifest.json +3 -3
  6. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/page.js +1 -1
  7. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/page_client-reference-manifest.js +1 -1
  8. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/[agentId]/page.js +2 -2
  9. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/[agentId]/page.js.nft.json +1 -1
  10. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/[agentId]/page_client-reference-manifest.js +1 -1
  11. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/new/page.js +2 -2
  12. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/new/page.js.nft.json +1 -1
  13. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/new/page_client-reference-manifest.js +1 -1
  14. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/page.js +2 -2
  15. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/page.js.nft.json +1 -1
  16. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/page_client-reference-manifest.js +1 -1
  17. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/api-keys/page.js +3 -3
  18. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/api-keys/page_client-reference-manifest.js +1 -1
  19. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page.js +1 -1
  20. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page.js.nft.json +1 -1
  21. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page_client-reference-manifest.js +1 -1
  22. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page.js +1 -1
  23. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page.js.nft.json +1 -1
  24. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page_client-reference-manifest.js +1 -1
  25. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/page.js +2 -2
  26. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/page_client-reference-manifest.js +1 -1
  27. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page.js +2 -2
  28. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page.js.nft.json +1 -1
  29. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page_client-reference-manifest.js +1 -1
  30. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page.js +2 -2
  31. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page.js.nft.json +1 -1
  32. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page_client-reference-manifest.js +1 -1
  33. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/page.js +2 -2
  34. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/page_client-reference-manifest.js +1 -1
  35. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page.js +1 -1
  36. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page.js.nft.json +1 -1
  37. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page_client-reference-manifest.js +1 -1
  38. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js +2 -2
  39. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js.nft.json +1 -1
  40. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page_client-reference-manifest.js +1 -1
  41. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page.js +1 -1
  42. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page.js.nft.json +1 -1
  43. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page_client-reference-manifest.js +1 -1
  44. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.js +2 -2
  45. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.js.nft.json +1 -1
  46. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page_client-reference-manifest.js +1 -1
  47. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page.js +2 -2
  48. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page.js.nft.json +1 -1
  49. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page_client-reference-manifest.js +1 -1
  50. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page.js +2 -2
  51. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page_client-reference-manifest.js +1 -1
  52. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page.js +2 -2
  53. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page.js.nft.json +1 -1
  54. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page_client-reference-manifest.js +1 -1
  55. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page.js +2 -2
  56. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page.js.nft.json +1 -1
  57. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page_client-reference-manifest.js +1 -1
  58. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page.js +2 -2
  59. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page.js.nft.json +1 -1
  60. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page_client-reference-manifest.js +1 -1
  61. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page.js +2 -2
  62. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page.js.nft.json +1 -1
  63. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page_client-reference-manifest.js +1 -1
  64. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page.js +1 -1
  65. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page_client-reference-manifest.js +1 -1
  66. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page.js +2 -2
  67. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page_client-reference-manifest.js +1 -1
  68. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js +1 -1
  69. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js.nft.json +1 -1
  70. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page_client-reference-manifest.js +1 -1
  71. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page.js +2 -2
  72. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page_client-reference-manifest.js +1 -1
  73. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page.js +2 -2
  74. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page.js.nft.json +1 -1
  75. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page_client-reference-manifest.js +1 -1
  76. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page.js +2 -2
  77. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page_client-reference-manifest.js +1 -1
  78. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page.js +1 -1
  79. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  80. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.html +1 -1
  81. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.rsc +8 -8
  82. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route.js +1 -1
  83. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route.js.nft.json +1 -1
  84. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
  85. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/route_client-reference-manifest.js +1 -1
  86. package/.next/standalone/agents-manage-ui/.next/server/app/page.js +2 -2
  87. package/.next/standalone/agents-manage-ui/.next/server/app/page_client-reference-manifest.js +1 -1
  88. package/.next/standalone/agents-manage-ui/.next/server/app-paths-manifest.json +3 -3
  89. package/.next/standalone/agents-manage-ui/.next/server/chunks/1674.js +3 -0
  90. package/.next/standalone/agents-manage-ui/.next/server/chunks/1735.js +1 -0
  91. package/.next/standalone/agents-manage-ui/.next/server/chunks/2263.js +1 -0
  92. package/.next/standalone/agents-manage-ui/.next/server/chunks/3547.js +1 -1
  93. package/.next/standalone/agents-manage-ui/.next/server/chunks/{6007.js → 4629.js} +1 -1
  94. package/.next/standalone/agents-manage-ui/.next/server/chunks/{5922.js → 4999.js} +2 -2
  95. package/.next/standalone/agents-manage-ui/.next/server/chunks/{3274.js → 505.js} +10 -10
  96. package/.next/standalone/agents-manage-ui/.next/server/chunks/{7165.js → 5395.js} +2 -2
  97. package/.next/standalone/agents-manage-ui/.next/server/chunks/5450.js +3 -3
  98. package/.next/standalone/agents-manage-ui/.next/server/chunks/5732.js +1 -0
  99. package/.next/standalone/agents-manage-ui/.next/server/chunks/{4177.js → 5831.js} +1 -1
  100. package/.next/standalone/agents-manage-ui/.next/server/chunks/{8764.js → 7468.js} +1 -1
  101. package/.next/standalone/agents-manage-ui/.next/server/chunks/7711.js +3 -3
  102. package/.next/standalone/agents-manage-ui/.next/server/chunks/7714.js +1 -1
  103. package/.next/standalone/agents-manage-ui/.next/server/chunks/7848.js +1 -0
  104. package/.next/standalone/agents-manage-ui/.next/server/chunks/7988.js +2 -2
  105. package/.next/standalone/agents-manage-ui/.next/server/chunks/{6129.js → 7990.js} +1 -1
  106. package/.next/standalone/agents-manage-ui/.next/server/chunks/8905.js +1 -0
  107. package/.next/standalone/agents-manage-ui/.next/server/chunks/9063.js +7 -0
  108. package/.next/standalone/agents-manage-ui/.next/server/chunks/9795.js +1 -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-manifest.json +5 -5
  111. package/.next/standalone/agents-manage-ui/.next/server/pages/404.html +1 -1
  112. package/.next/standalone/agents-manage-ui/.next/server/pages/500.html +1 -1
  113. package/.next/standalone/agents-manage-ui/.next/server/server-reference-manifest.js +1 -1
  114. package/.next/standalone/agents-manage-ui/.next/server/server-reference-manifest.json +1 -1
  115. package/.next/standalone/agents-manage-ui/.next/static/chunks/{1175-9259b947ca7c4ea8.js → 1175-aadbf39b68307a3c.js} +1 -1
  116. package/.next/standalone/agents-manage-ui/.next/static/chunks/13328-0f3bd90a602ad30b.js +1 -0
  117. package/.next/standalone/agents-manage-ui/.next/static/chunks/1499-20f18a3858daee94.js +1 -0
  118. package/.next/standalone/agents-manage-ui/.next/static/chunks/19317-031cfdbe64ae32fe.js +7 -0
  119. package/.next/standalone/agents-manage-ui/.next/static/chunks/20837-4e54773f184c33cd.js +1 -0
  120. package/.next/standalone/agents-manage-ui/.next/static/chunks/24795-f6ff0a018a869289.js +1 -0
  121. package/.next/standalone/agents-manage-ui/.next/static/chunks/{23624-6eacc9668906f9e7.js → 37775-eeaab573593358e7.js} +1 -1
  122. package/.next/standalone/agents-manage-ui/.next/static/chunks/49717-c3caecdba1246d8f.js +1 -0
  123. package/.next/standalone/agents-manage-ui/.next/static/chunks/{85002-c901436c356dfb2c.js → 50861-a7d1ef782e5eb35e.js} +1 -1
  124. package/.next/standalone/agents-manage-ui/.next/static/chunks/55244-84901b87c4a2322e.js +1 -0
  125. package/.next/standalone/agents-manage-ui/.next/static/chunks/66030-6542a249844c5b64.js +20 -0
  126. package/.next/standalone/agents-manage-ui/.next/static/chunks/69823-6ad72f5c7feb1b6a.js +1 -0
  127. package/.next/standalone/agents-manage-ui/.next/static/chunks/{92948-6687161eef852218.js → 77490-cf6320ff9aced250.js} +1 -1
  128. package/.next/standalone/agents-manage-ui/.next/static/chunks/88211-4e7159211556d4e5.js +1 -0
  129. package/.next/standalone/agents-manage-ui/.next/static/chunks/{64438-2c5f9dad5610028e.js → 92160-0e9ba9d3fc9f7a53.js} +1 -1
  130. package/.next/standalone/agents-manage-ui/.next/static/chunks/{94167-1d0eb19e0f384370.js → 94167-f0c70d698c14e444.js} +1 -1
  131. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/[agentId]/page-9ee5691d81ce475d.js +1 -0
  132. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/new/page-83486367e603203b.js +1 -0
  133. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/page-0aa111a8d2898709.js +1 -0
  134. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-cca7e5cde39d85a4.js +1 -0
  135. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/{page-27719e82ceabf41b.js → page-19eaaa175e12cae3.js} +1 -1
  136. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/new/{page-226f63b2fe6da006.js → page-2bb38182b90cf1fb.js} +1 -1
  137. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/{page-a67ee5d26220d10b.js → page-090371a01670c6e3.js} +1 -1
  138. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/{page-30140bc737c7f93d.js → page-6a943663c7dc3ef3.js} +1 -1
  139. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/new/page-7c1c1371f5eeda7a.js +1 -0
  140. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/page-f2bd22786e50bde9.js +1 -0
  141. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/{page-b783d7c6df76cba0.js → page-fad27d770cd62d19.js} +1 -1
  142. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-bef2767b0404d5f1.js +1 -0
  143. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-031ef9e1ac584cb9.js +1 -0
  144. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/page-07db6760153791ce.js +1 -0
  145. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/page-f84f892ea999f9f5.js +1 -0
  146. 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
  147. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page-cde4e868a722d45e.js +1 -0
  148. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/new/page-f53307160ddb6445.js +1 -0
  149. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/page-cc4c33bd4ff08151.js +1 -0
  150. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/settings/{page-a8aec9fda5c17b5f.js → page-7f433259d499bc2b.js} +1 -1
  151. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/ai-calls/{page-130484743447356a.js → page-d7f81fb8018ccb8f.js} +1 -1
  152. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-75f9c6864af20a89.js +1 -0
  153. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/page-7c2f02fd040828a7.js +1 -0
  154. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/{layout-8a2a8a9230be8bae.js → layout-bcb6ff141051e95f.js} +1 -1
  155. package/.next/standalone/agents-manage-ui/package.json +3 -3
  156. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/addepar.svg +1 -0
  157. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/adobe-workfront.svg +5 -0
  158. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/adp-run.svg +1 -0
  159. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/autotask.svg +11 -0
  160. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/avoma.svg +1 -0
  161. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/bullhorn.svg +1 -0
  162. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/clerk.svg +5 -0
  163. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/cursor.svg +1 -0
  164. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/datacandy.svg +23 -0
  165. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/datto-rmm.svg +14 -0
  166. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/dayforce.svg +1 -0
  167. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/fairing.svg +1 -0
  168. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/fillout.svg +1 -0
  169. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/float.svg +1 -0
  170. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/folk.svg +1 -0
  171. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/google-workspace-admin.svg +1 -0
  172. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/heap.svg +1 -0
  173. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/hover.svg +1 -0
  174. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/instantly.svg +1 -1
  175. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/itglue.svg +8 -0
  176. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/jazzhr.svg +20 -8
  177. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/jobber.svg +1 -0
  178. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/jobdiva.svg +24 -0
  179. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/jumpcloud.svg +4 -0
  180. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/kintone.svg +1 -0
  181. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/mcp-dynamic.svg +36 -0
  182. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/microsoft-excel.svg +1 -0
  183. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/pax8.svg +16 -0
  184. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/paycor.svg +1 -0
  185. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/pipedream.svg +1 -0
  186. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/private-api-bearer.svg +1 -0
  187. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/recruitee.svg +1 -0
  188. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/roller.svg +10 -0
  189. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/sellsy.svg +1 -0
  190. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/skio.svg +1 -0
  191. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/snapchat.svg +1 -0
  192. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/snipe-it.svg +1 -0
  193. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/tailscale.svg +1 -0
  194. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/webex.svg +1 -0
  195. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/yotpo.svg +1 -0
  196. package/.next/standalone/agents-manage-ui/public/assets/provider-icons/zoho-calendar.svg +1 -0
  197. package/.next/standalone/packages/agents-core/package.json +2 -2
  198. package/package.json +7 -7
  199. package/public/assets/provider-icons/addepar.svg +1 -0
  200. package/public/assets/provider-icons/adobe-workfront.svg +5 -0
  201. package/public/assets/provider-icons/adp-run.svg +1 -0
  202. package/public/assets/provider-icons/autotask.svg +11 -0
  203. package/public/assets/provider-icons/avoma.svg +1 -0
  204. package/public/assets/provider-icons/bullhorn.svg +1 -0
  205. package/public/assets/provider-icons/clerk.svg +5 -0
  206. package/public/assets/provider-icons/cursor.svg +1 -0
  207. package/public/assets/provider-icons/datacandy.svg +23 -0
  208. package/public/assets/provider-icons/datto-rmm.svg +14 -0
  209. package/public/assets/provider-icons/dayforce.svg +1 -0
  210. package/public/assets/provider-icons/fairing.svg +1 -0
  211. package/public/assets/provider-icons/fillout.svg +1 -0
  212. package/public/assets/provider-icons/float.svg +1 -0
  213. package/public/assets/provider-icons/folk.svg +1 -0
  214. package/public/assets/provider-icons/google-workspace-admin.svg +1 -0
  215. package/public/assets/provider-icons/heap.svg +1 -0
  216. package/public/assets/provider-icons/hover.svg +1 -0
  217. package/public/assets/provider-icons/instantly.svg +1 -1
  218. package/public/assets/provider-icons/itglue.svg +8 -0
  219. package/public/assets/provider-icons/jazzhr.svg +20 -8
  220. package/public/assets/provider-icons/jobber.svg +1 -0
  221. package/public/assets/provider-icons/jobdiva.svg +24 -0
  222. package/public/assets/provider-icons/jumpcloud.svg +4 -0
  223. package/public/assets/provider-icons/kintone.svg +1 -0
  224. package/public/assets/provider-icons/mcp-dynamic.svg +36 -0
  225. package/public/assets/provider-icons/microsoft-excel.svg +1 -0
  226. package/public/assets/provider-icons/pax8.svg +16 -0
  227. package/public/assets/provider-icons/paycor.svg +1 -0
  228. package/public/assets/provider-icons/pipedream.svg +1 -0
  229. package/public/assets/provider-icons/private-api-bearer.svg +1 -0
  230. package/public/assets/provider-icons/recruitee.svg +1 -0
  231. package/public/assets/provider-icons/roller.svg +10 -0
  232. package/public/assets/provider-icons/sellsy.svg +1 -0
  233. package/public/assets/provider-icons/skio.svg +1 -0
  234. package/public/assets/provider-icons/snapchat.svg +1 -0
  235. package/public/assets/provider-icons/snipe-it.svg +1 -0
  236. package/public/assets/provider-icons/tailscale.svg +1 -0
  237. package/public/assets/provider-icons/webex.svg +1 -0
  238. package/public/assets/provider-icons/yotpo.svg +1 -0
  239. package/public/assets/provider-icons/zoho-calendar.svg +1 -0
  240. package/src/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.tsx +3 -1
  241. package/src/app/[tenantId]/projects/[projectId]/credentials/page.tsx +12 -2
  242. package/src/components/agent/playground/chat-widget.tsx +1 -1
  243. package/src/components/credentials/credential-item.tsx +4 -4
  244. package/src/components/icons/provider-icon.tsx +17 -5
  245. package/src/components/mcp-servers/form/mcp-server-form.tsx +89 -16
  246. package/src/components/mcp-servers/selection/mcp-server-selection.tsx +1 -4
  247. package/src/components/mcp-servers/view-mcp-server-details.tsx +60 -32
  248. package/src/hooks/use-nango-connect.ts +41 -2
  249. package/src/hooks/use-oauth-login.ts +199 -87
  250. package/src/lib/__tests__/provider-icons-sync.test.ts +47 -0
  251. package/src/lib/mcp-tools/nango.ts +7 -3
  252. package/src/lib/provider-icons.ts +610 -0
  253. package/.next/standalone/agents-manage-ui/.next/server/chunks/1040.js +0 -3
  254. package/.next/standalone/agents-manage-ui/.next/server/chunks/1776.js +0 -1
  255. package/.next/standalone/agents-manage-ui/.next/server/chunks/272.js +0 -1
  256. package/.next/standalone/agents-manage-ui/.next/server/chunks/3427.js +0 -1
  257. package/.next/standalone/agents-manage-ui/.next/server/chunks/5797.js +0 -3
  258. package/.next/standalone/agents-manage-ui/.next/server/chunks/6212.js +0 -1
  259. package/.next/standalone/agents-manage-ui/.next/server/chunks/9121.js +0 -7
  260. package/.next/standalone/agents-manage-ui/.next/static/chunks/19520-0295797f1e0568bb.js +0 -1
  261. package/.next/standalone/agents-manage-ui/.next/static/chunks/20837-e9fbb01ca4fb2ec1.js +0 -1
  262. package/.next/standalone/agents-manage-ui/.next/static/chunks/26999-8c9c5e5ec54db482.js +0 -20
  263. package/.next/standalone/agents-manage-ui/.next/static/chunks/38249-f530c1a1527a3b8f.js +0 -1
  264. package/.next/standalone/agents-manage-ui/.next/static/chunks/62092-ae9394efd9c69e92.js +0 -7
  265. package/.next/standalone/agents-manage-ui/.next/static/chunks/68266-1f459b102467a36a.js +0 -1
  266. package/.next/standalone/agents-manage-ui/.next/static/chunks/68430-1140499bac28d9c1.js +0 -1
  267. package/.next/standalone/agents-manage-ui/.next/static/chunks/86268-f453965133b1fff9.js +0 -1
  268. package/.next/standalone/agents-manage-ui/.next/static/chunks/92775-85a0732a5fe07d43.js +0 -1
  269. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/[agentId]/page-689abb75c4a6856e.js +0 -1
  270. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/new/page-bdaad4e538a82ee7.js +0 -1
  271. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/page-e00d85d12b3205d8.js +0 -1
  272. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-e890cb0c2667dcce.js +0 -1
  273. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/new/page-c69264867a8e001a.js +0 -1
  274. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/page-12f453809f0302a4.js +0 -1
  275. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-8e0dc8888fc6ca8e.js +0 -1
  276. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-b4a535838eab2b4a.js +0 -1
  277. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/page-4a9720fe172c379b.js +0 -1
  278. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/page-6b00b9ebe2c137fa.js +0 -1
  279. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page-138db92933a30700.js +0 -1
  280. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/new/page-2743544beb6d3242.js +0 -1
  281. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/page-a4af2bd7c3a55f97.js +0 -1
  282. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-b4daa51a2cbdbadc.js +0 -1
  283. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/page-ea7f605336867f82.js +0 -1
  284. package/src/components/credentials/credentials-list.tsx +0 -36
  285. /package/.next/standalone/agents-manage-ui/.next/static/{GVjHhJr1FlU2g81OnXLa3 → vKUX6HvYxsPbIAsRI3Yi9}/_buildManifest.js +0 -0
  286. /package/.next/standalone/agents-manage-ui/.next/static/{GVjHhJr1FlU2g81OnXLa3 → vKUX6HvYxsPbIAsRI3Yi9}/_ssgManifest.js +0 -0
@@ -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
  }
@@ -0,0 +1,47 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { describe, expect, it } from 'vitest';
4
+ import { getAllProviderIcons } from '../provider-icons';
5
+
6
+ describe('provider-icons-sync', () => {
7
+ it('should have COMMON_PROVIDER_ICONS in sync with actual files in public/assets/provider-icons', () => {
8
+ // Read actual files from the filesystem
9
+ const iconsDir = path.join(process.cwd(), 'public/assets/provider-icons');
10
+ const actualFiles = fs.readdirSync(iconsDir);
11
+ const actualIcons = actualFiles
12
+ .filter(file => file.endsWith('.svg'))
13
+ .map(file => file.replace('.svg', ''))
14
+ .sort();
15
+
16
+ // Get the icons from our COMMON_PROVIDER_ICONS
17
+ const commonIcons = getAllProviderIcons();
18
+
19
+ // Compare the two lists
20
+ const missingInCommon = actualIcons.filter(icon => !commonIcons.includes(icon));
21
+ const extraInCommon = commonIcons.filter(icon => !actualIcons.includes(icon));
22
+
23
+ // Create helpful error messages
24
+ let errorMessage = '';
25
+
26
+ if (missingInCommon.length > 0) {
27
+ errorMessage += `\nMissing in COMMON_PROVIDER_ICONS (found in filesystem but not in code):\n`;
28
+ errorMessage += missingInCommon.map(icon => ` - '${icon}',`).join('\n');
29
+ }
30
+
31
+ if (extraInCommon.length > 0) {
32
+ errorMessage += `\nExtra in COMMON_PROVIDER_ICONS (found in code but not in filesystem):\n`;
33
+ errorMessage += extraInCommon.map(icon => ` - '${icon}' (should be removed)`).join('\n');
34
+ }
35
+
36
+ if (errorMessage) {
37
+ errorMessage = `COMMON_PROVIDER_ICONS is out of sync with public/assets/provider-icons/\n${errorMessage}\n\nPlease update the COMMON_PROVIDER_ICONS set in src/lib/provider-icons.ts`;
38
+ }
39
+
40
+ // The test passes only if both lists are identical
41
+ expect(missingInCommon).toEqual([]);
42
+ expect(extraInCommon).toEqual([]);
43
+
44
+ // Also verify the counts match
45
+ expect(commonIcons.length).toBe(actualIcons.length);
46
+ });
47
+ });
@@ -349,9 +349,13 @@ export async function createNangoApiKeyConnection({
349
349
  */
350
350
  export async function createProviderConnectSession({
351
351
  providerName,
352
+ uniqueKey,
353
+ displayName,
352
354
  credentials,
353
355
  }: {
354
356
  providerName: string;
357
+ uniqueKey: string;
358
+ displayName: string;
355
359
  credentials?: ApiPublicIntegrationCredentials;
356
360
  }): Promise<string> {
357
361
  try {
@@ -359,7 +363,7 @@ export async function createProviderConnectSession({
359
363
  let existingIntegration: (ApiPublicIntegration & { areCredentialsSet: boolean }) | null = null;
360
364
 
361
365
  try {
362
- existingIntegration = await fetchNangoIntegration(providerName);
366
+ existingIntegration = await fetchNangoIntegration(uniqueKey);
363
367
  } catch (error) {
364
368
  if (error instanceof NangoError) {
365
369
  throw error;
@@ -374,8 +378,8 @@ export async function createProviderConnectSession({
374
378
  try {
375
379
  integration = await createNangoIntegration({
376
380
  provider: providerName,
377
- uniqueKey: providerName,
378
- displayName: providerName,
381
+ uniqueKey,
382
+ displayName,
379
383
  credentials,
380
384
  });
381
385
  } catch (error) {