@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.
- package/.next/standalone/agents-manage-ui/.next/BUILD_ID +1 -1
- package/.next/standalone/agents-manage-ui/.next/app-build-manifest.json +144 -135
- package/.next/standalone/agents-manage-ui/.next/app-path-routes-manifest.json +3 -3
- package/.next/standalone/agents-manage-ui/.next/build-manifest.json +2 -2
- package/.next/standalone/agents-manage-ui/.next/prerender-manifest.json +3 -3
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/[agentId]/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/[agentId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/[agentId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/new/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/new/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/api-keys/page.js +3 -3
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/api-keys/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.rsc +8 -8
- package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/route_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app-paths-manifest.json +3 -3
- package/.next/standalone/agents-manage-ui/.next/server/chunks/1674.js +3 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/1735.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/2263.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/3547.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/{6007.js → 4629.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/{5922.js → 4999.js} +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/chunks/{3274.js → 505.js} +10 -10
- package/.next/standalone/agents-manage-ui/.next/server/chunks/{7165.js → 5395.js} +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/chunks/5450.js +3 -3
- package/.next/standalone/agents-manage-ui/.next/server/chunks/5732.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/{4177.js → 5831.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/{8764.js → 7468.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/7711.js +3 -3
- package/.next/standalone/agents-manage-ui/.next/server/chunks/7714.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/7848.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/7988.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/chunks/{6129.js → 7990.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/8905.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/9063.js +7 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/9795.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/9973.js +3 -0
- package/.next/standalone/agents-manage-ui/.next/server/middleware-manifest.json +5 -5
- package/.next/standalone/agents-manage-ui/.next/server/pages/404.html +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/pages/500.html +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{1175-9259b947ca7c4ea8.js → 1175-aadbf39b68307a3c.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/13328-0f3bd90a602ad30b.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/1499-20f18a3858daee94.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/19317-031cfdbe64ae32fe.js +7 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/20837-4e54773f184c33cd.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/24795-f6ff0a018a869289.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{23624-6eacc9668906f9e7.js → 37775-eeaab573593358e7.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/49717-c3caecdba1246d8f.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{85002-c901436c356dfb2c.js → 50861-a7d1ef782e5eb35e.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/55244-84901b87c4a2322e.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/66030-6542a249844c5b64.js +20 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/69823-6ad72f5c7feb1b6a.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{92948-6687161eef852218.js → 77490-cf6320ff9aced250.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/88211-4e7159211556d4e5.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{64438-2c5f9dad5610028e.js → 92160-0e9ba9d3fc9f7a53.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{94167-1d0eb19e0f384370.js → 94167-f0c70d698c14e444.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/[agentId]/page-9ee5691d81ce475d.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/new/page-83486367e603203b.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/page-0aa111a8d2898709.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-cca7e5cde39d85a4.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/{page-27719e82ceabf41b.js → page-19eaaa175e12cae3.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/new/{page-226f63b2fe6da006.js → page-2bb38182b90cf1fb.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/{page-a67ee5d26220d10b.js → page-090371a01670c6e3.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/{page-30140bc737c7f93d.js → page-6a943663c7dc3ef3.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/new/page-7c1c1371f5eeda7a.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/page-f2bd22786e50bde9.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/{page-b783d7c6df76cba0.js → page-fad27d770cd62d19.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-bef2767b0404d5f1.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-031ef9e1ac584cb9.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/page-07db6760153791ce.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/page-f84f892ea999f9f5.js +1 -0
- 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
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page-cde4e868a722d45e.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/new/page-f53307160ddb6445.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/page-cc4c33bd4ff08151.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/settings/{page-a8aec9fda5c17b5f.js → page-7f433259d499bc2b.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/ai-calls/{page-130484743447356a.js → page-d7f81fb8018ccb8f.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-75f9c6864af20a89.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/page-7c2f02fd040828a7.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/{layout-8a2a8a9230be8bae.js → layout-bcb6ff141051e95f.js} +1 -1
- package/.next/standalone/agents-manage-ui/package.json +3 -3
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/addepar.svg +1 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/adobe-workfront.svg +5 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/adp-run.svg +1 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/autotask.svg +11 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/avoma.svg +1 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/bullhorn.svg +1 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/clerk.svg +5 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/cursor.svg +1 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/datacandy.svg +23 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/datto-rmm.svg +14 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/dayforce.svg +1 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/fairing.svg +1 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/fillout.svg +1 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/float.svg +1 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/folk.svg +1 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/google-workspace-admin.svg +1 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/heap.svg +1 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/hover.svg +1 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/instantly.svg +1 -1
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/itglue.svg +8 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/jazzhr.svg +20 -8
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/jobber.svg +1 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/jobdiva.svg +24 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/jumpcloud.svg +4 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/kintone.svg +1 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/mcp-dynamic.svg +36 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/microsoft-excel.svg +1 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/pax8.svg +16 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/paycor.svg +1 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/pipedream.svg +1 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/private-api-bearer.svg +1 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/recruitee.svg +1 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/roller.svg +10 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/sellsy.svg +1 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/skio.svg +1 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/snapchat.svg +1 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/snipe-it.svg +1 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/tailscale.svg +1 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/webex.svg +1 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/yotpo.svg +1 -0
- package/.next/standalone/agents-manage-ui/public/assets/provider-icons/zoho-calendar.svg +1 -0
- package/.next/standalone/packages/agents-core/package.json +2 -2
- package/package.json +7 -7
- package/public/assets/provider-icons/addepar.svg +1 -0
- package/public/assets/provider-icons/adobe-workfront.svg +5 -0
- package/public/assets/provider-icons/adp-run.svg +1 -0
- package/public/assets/provider-icons/autotask.svg +11 -0
- package/public/assets/provider-icons/avoma.svg +1 -0
- package/public/assets/provider-icons/bullhorn.svg +1 -0
- package/public/assets/provider-icons/clerk.svg +5 -0
- package/public/assets/provider-icons/cursor.svg +1 -0
- package/public/assets/provider-icons/datacandy.svg +23 -0
- package/public/assets/provider-icons/datto-rmm.svg +14 -0
- package/public/assets/provider-icons/dayforce.svg +1 -0
- package/public/assets/provider-icons/fairing.svg +1 -0
- package/public/assets/provider-icons/fillout.svg +1 -0
- package/public/assets/provider-icons/float.svg +1 -0
- package/public/assets/provider-icons/folk.svg +1 -0
- package/public/assets/provider-icons/google-workspace-admin.svg +1 -0
- package/public/assets/provider-icons/heap.svg +1 -0
- package/public/assets/provider-icons/hover.svg +1 -0
- package/public/assets/provider-icons/instantly.svg +1 -1
- package/public/assets/provider-icons/itglue.svg +8 -0
- package/public/assets/provider-icons/jazzhr.svg +20 -8
- package/public/assets/provider-icons/jobber.svg +1 -0
- package/public/assets/provider-icons/jobdiva.svg +24 -0
- package/public/assets/provider-icons/jumpcloud.svg +4 -0
- package/public/assets/provider-icons/kintone.svg +1 -0
- package/public/assets/provider-icons/mcp-dynamic.svg +36 -0
- package/public/assets/provider-icons/microsoft-excel.svg +1 -0
- package/public/assets/provider-icons/pax8.svg +16 -0
- package/public/assets/provider-icons/paycor.svg +1 -0
- package/public/assets/provider-icons/pipedream.svg +1 -0
- package/public/assets/provider-icons/private-api-bearer.svg +1 -0
- package/public/assets/provider-icons/recruitee.svg +1 -0
- package/public/assets/provider-icons/roller.svg +10 -0
- package/public/assets/provider-icons/sellsy.svg +1 -0
- package/public/assets/provider-icons/skio.svg +1 -0
- package/public/assets/provider-icons/snapchat.svg +1 -0
- package/public/assets/provider-icons/snipe-it.svg +1 -0
- package/public/assets/provider-icons/tailscale.svg +1 -0
- package/public/assets/provider-icons/webex.svg +1 -0
- package/public/assets/provider-icons/yotpo.svg +1 -0
- package/public/assets/provider-icons/zoho-calendar.svg +1 -0
- package/src/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.tsx +3 -1
- package/src/app/[tenantId]/projects/[projectId]/credentials/page.tsx +12 -2
- package/src/components/agent/playground/chat-widget.tsx +1 -1
- package/src/components/credentials/credential-item.tsx +4 -4
- package/src/components/icons/provider-icon.tsx +17 -5
- package/src/components/mcp-servers/form/mcp-server-form.tsx +89 -16
- package/src/components/mcp-servers/selection/mcp-server-selection.tsx +1 -4
- package/src/components/mcp-servers/view-mcp-server-details.tsx +60 -32
- package/src/hooks/use-nango-connect.ts +41 -2
- package/src/hooks/use-oauth-login.ts +199 -87
- package/src/lib/__tests__/provider-icons-sync.test.ts +47 -0
- package/src/lib/mcp-tools/nango.ts +7 -3
- package/src/lib/provider-icons.ts +610 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/1040.js +0 -3
- package/.next/standalone/agents-manage-ui/.next/server/chunks/1776.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/272.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/3427.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/5797.js +0 -3
- package/.next/standalone/agents-manage-ui/.next/server/chunks/6212.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/9121.js +0 -7
- package/.next/standalone/agents-manage-ui/.next/static/chunks/19520-0295797f1e0568bb.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/20837-e9fbb01ca4fb2ec1.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/26999-8c9c5e5ec54db482.js +0 -20
- package/.next/standalone/agents-manage-ui/.next/static/chunks/38249-f530c1a1527a3b8f.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/62092-ae9394efd9c69e92.js +0 -7
- package/.next/standalone/agents-manage-ui/.next/static/chunks/68266-1f459b102467a36a.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/68430-1140499bac28d9c1.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/86268-f453965133b1fff9.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/92775-85a0732a5fe07d43.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/[agentId]/page-689abb75c4a6856e.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/new/page-bdaad4e538a82ee7.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/page-e00d85d12b3205d8.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-e890cb0c2667dcce.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/new/page-c69264867a8e001a.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/page-12f453809f0302a4.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-8e0dc8888fc6ca8e.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-b4a535838eab2b4a.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/page-4a9720fe172c379b.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/page-6b00b9ebe2c137fa.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page-138db92933a30700.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/new/page-2743544beb6d3242.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/page-a4af2bd7c3a55f97.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-b4daa51a2cbdbadc.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/page-ea7f605336867f82.js +0 -1
- package/src/components/credentials/credentials-list.tsx +0 -36
- /package/.next/standalone/agents-manage-ui/.next/static/{GVjHhJr1FlU2g81OnXLa3 → vKUX6HvYxsPbIAsRI3Yi9}/_buildManifest.js +0 -0
- /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
|
-
|
|
161
|
-
|
|
162
|
-
<
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
e
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
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' &&
|
|
215
|
+
{tool.config.type === 'mcp' && (
|
|
216
|
+
<CopyableSingleLineCode code={tool.config.mcp.server.url} />
|
|
217
|
+
)}
|
|
195
218
|
</div>
|
|
196
219
|
|
|
197
|
-
{/*
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
-
|
|
47
|
-
|
|
52
|
+
try {
|
|
53
|
+
const oauthUrl = getOAuthLoginUrl({
|
|
54
|
+
PUBLIC_INKEEP_AGENTS_MANAGE_API_URL,
|
|
55
|
+
tenantId,
|
|
56
|
+
projectId,
|
|
57
|
+
id: toolId,
|
|
58
|
+
});
|
|
48
59
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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
|
-
}
|
|
88
|
-
|
|
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
|
-
|
|
107
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
|
378
|
-
displayName
|
|
381
|
+
uniqueKey,
|
|
382
|
+
displayName,
|
|
379
383
|
credentials,
|
|
380
384
|
});
|
|
381
385
|
} catch (error) {
|