@inkeep/agents-manage-ui 0.0.0-dev-20251023175321 → 0.0.0-dev-20251023185028
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 +139 -139
- package/.next/standalone/agents-manage-ui/.next/app-path-routes-manifest.json +9 -9
- 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.js.nft.json +1 -1
- 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 +2 -2
- 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.js.nft.json +1 -1
- 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.js.nft.json +1 -1
- 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_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.js.nft.json +1 -1
- 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]/external-agents/[externalAgentId]/edit/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/edit/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/edit/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/new/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/new/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/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 +2 -2
- 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 +2 -2
- 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 +1 -1
- 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.js.nft.json +1 -1
- 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/data-components/[dataComponentId]/generate-render/route_client-reference-manifest.js +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 +9 -9
- package/.next/standalone/agents-manage-ui/.next/server/chunks/1051.js +3 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/1063.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/2255.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/2454.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/279.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/3493.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/4608.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/chunks/4629.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/493.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/5206.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/chunks/6624.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/6915.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/7494.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/7711.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/7990.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/8210.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/8581.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/{5093.js → 9548.js} +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/chunks/9887.js +6 -6
- 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/13328-3501afe632ea84f5.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{16631-f88bc25a1b9c077c.js → 16631-2a2a541fcfdbe906.js} +2 -2
- package/.next/standalone/agents-manage-ui/.next/static/chunks/31913-8b3db80a8266cb53.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/3678-a873383427adfe64.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{27590-b22ba4119fb3a372.js → 48975-117752577f1fe29b.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/68585-81cc316fc7d3b9df.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{45636-68766d01475395d2.js → 87572-307a88c0e2d8c311.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/90170-000ffe81612f6abe.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/97848-3987b01dc07d453b.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/[agentId]/{page-8c14896777fcff31.js → page-69ce3ad36e33ee93.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/new/{page-366086673127e166.js → page-1ab430f3ab3a301c.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/{page-ea697a0aed34880e.js → page-90951d2f47507120.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-f789b2706bc4e563.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page-9f33cb9e7d9f85be.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/new/page-02222f53390e8643.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/{page-b94c69feab6f676c.js → page-7585636a287b1d27.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/{page-3818faebdc732a5e.js → page-b006699649dfdb8a.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/new/page-636497b04d2bcd1e.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/{page-3be669397420cad9.js → page-2d322c1fe2bd3c86.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-7f1343b64b9172ed.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-0ad70db1c0cf87fe.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-49a301edf34353e8.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/page-8b6fa46b232f5d0c.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/edit/page-dd09aee91f9614ba.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/external-agents/new/page-7e785acbb91d56e0.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/external-agents/page-28f973d65dcbe8cb.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/{page-555d0cbf232b92f6.js → page-62951848b4261955.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page-96179917f0100254.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/new/{page-cf5a463867ba8b74.js → page-f4e08abbd5ac7926.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/{page-a8552ab00201aeeb.js → page-548a18603fc8488d.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/settings/{page-cc321983069a47b3.js → page-3f9dc9732db91c09.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-39f3b0c3e09bdc59.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/page-658fc4f6ea603a29.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-26f38b2ae3c7c5e8.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{d834c995-ed8b4d46f11282af.js → d834c995-e7d29efff67c3fbe.js} +1 -1
- package/.next/standalone/agents-manage-ui/package.json +4 -4
- package/.next/standalone/packages/agents-core/package.json +3 -3
- package/package.json +7 -7
- package/src/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page.tsx +1 -1
- package/src/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.tsx +4 -4
- package/src/app/[tenantId]/projects/[projectId]/credentials/page.tsx +1 -0
- package/src/components/credentials/credential-item.tsx +5 -3
- package/src/components/credentials/views/edit-credential-form.tsx +37 -13
- package/src/components/credentials/views/new-credential-form.tsx +50 -40
- package/src/hooks/use-oauth-login.ts +3 -1
- package/src/lib/api/credentialStores.ts +17 -8
- package/src/lib/mcp-tools/nango.ts +56 -130
- package/.next/standalone/agents-manage-ui/.next/server/chunks/1777.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/2800.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/3536.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/3948.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/4243.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/4558.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/4949.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/5139.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/6724.js +0 -3
- package/.next/standalone/agents-manage-ui/.next/server/chunks/884.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/9353.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/9396.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/9982.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/13328-2c9a501a0fc457e2.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/15544-b52f5562ee57d2bf.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/22560-d3b50b8d2510fd46.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/51521-7a431e25519e151d.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/65087-3ad7978e3789023a.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/67986-5c02826c2aeba418.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-6fdb55cb35480c90.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page-7c2bb61e000a9cb2.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/new/page-5e496f2c3a78eefe.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/new/page-9b2d88f648a95a29.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-7f38e16618a5df20.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-6d40a25486a72447.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-8da89288cd2dcbe1.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/page-9ddb8a9144f1aa05.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/edit/page-275ae37435313d21.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/external-agents/new/page-fa2183f22e737938.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/external-agents/page-1d24bb708c28c33b.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page-62e7990ea455d4ac.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-40fbff25394aa6f7.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/page-3241a2b0986946f9.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-745c4cd1ec6c544b.js +0 -1
- /package/.next/standalone/agents-manage-ui/.next/static/{7u-I9_R9-ZsxfK7bYt8s5 → 6lAIPQGagemWWbW2gAXMm}/_buildManifest.js +0 -0
- /package/.next/standalone/agents-manage-ui/.next/static/{7u-I9_R9-ZsxfK7bYt8s5 → 6lAIPQGagemWWbW2gAXMm}/_ssgManifest.js +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@inkeep/agents-manage-ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.28.0",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
@@ -48,9 +48,9 @@
|
|
|
48
48
|
"@inkeep/agents-run-api": "workspace:^",
|
|
49
49
|
"@inkeep/agents-ui": "^0.14.17",
|
|
50
50
|
"@lezer/highlight": "^1.2.1",
|
|
51
|
-
"@nangohq/frontend": "^0.69.
|
|
52
|
-
"@nangohq/node": "^0.69.
|
|
53
|
-
"@nangohq/types": "^0.69.
|
|
51
|
+
"@nangohq/frontend": "^0.69.5",
|
|
52
|
+
"@nangohq/node": "^0.69.5",
|
|
53
|
+
"@nangohq/types": "^0.69.5",
|
|
54
54
|
"@radix-ui/react-alert-dialog": "^1.1.15",
|
|
55
55
|
"@radix-ui/react-checkbox": "^1.3.2",
|
|
56
56
|
"@radix-ui/react-collapsible": "^1.1.12",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@inkeep/agents-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.28.0",
|
|
4
4
|
"description": "Agents Core contains the database schema, types, and validation schemas for Inkeep Agent Framework, along with core components.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
"@hono/zod-openapi": "^1.0.2",
|
|
47
47
|
"@libsql/client": "^0.15.7",
|
|
48
48
|
"@modelcontextprotocol/sdk": "^1.17.2",
|
|
49
|
-
"@nangohq/node": "^0.69.
|
|
50
|
-
"@nangohq/types": "^0.69.
|
|
49
|
+
"@nangohq/node": "^0.69.5",
|
|
50
|
+
"@nangohq/types": "^0.69.5",
|
|
51
51
|
"@opentelemetry/api": "^1.9.0",
|
|
52
52
|
"@opentelemetry/auto-instrumentations-node": "^0.62.0",
|
|
53
53
|
"@opentelemetry/baggage-span-processor": "^0.4.0",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@inkeep/agents-manage-ui",
|
|
3
|
-
"version": "0.0.0-dev-
|
|
3
|
+
"version": "0.0.0-dev-20251023185028",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
@@ -31,9 +31,9 @@
|
|
|
31
31
|
"@hookform/resolvers": "^5.2.1",
|
|
32
32
|
"@inkeep/agents-ui": "^0.14.17",
|
|
33
33
|
"@lezer/highlight": "^1.2.1",
|
|
34
|
-
"@nangohq/frontend": "^0.69.
|
|
35
|
-
"@nangohq/node": "^0.69.
|
|
36
|
-
"@nangohq/types": "^0.69.
|
|
34
|
+
"@nangohq/frontend": "^0.69.5",
|
|
35
|
+
"@nangohq/node": "^0.69.5",
|
|
36
|
+
"@nangohq/types": "^0.69.5",
|
|
37
37
|
"@radix-ui/react-alert-dialog": "^1.1.15",
|
|
38
38
|
"@radix-ui/react-checkbox": "^1.3.2",
|
|
39
39
|
"@radix-ui/react-collapsible": "^1.1.12",
|
|
@@ -83,9 +83,9 @@
|
|
|
83
83
|
"use-stick-to-bottom": "^1.1.1",
|
|
84
84
|
"zod": "^4.1.11",
|
|
85
85
|
"zustand": "^5.0.7",
|
|
86
|
-
"@inkeep/agents-core": "^0.0.0-dev-
|
|
87
|
-
"@inkeep/agents-manage-api": "^0.0.0-dev-
|
|
88
|
-
"@inkeep/agents-run-api": "^0.0.0-dev-
|
|
86
|
+
"@inkeep/agents-core": "^0.0.0-dev-20251023185028",
|
|
87
|
+
"@inkeep/agents-manage-api": "^0.0.0-dev-20251023185028",
|
|
88
|
+
"@inkeep/agents-run-api": "^0.0.0-dev-20251023185028"
|
|
89
89
|
},
|
|
90
90
|
"devDependencies": {
|
|
91
91
|
"@tailwindcss/postcss": "^4",
|
package/src/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.tsx
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import { CredentialStoreType
|
|
3
|
+
import { CredentialStoreType } from '@inkeep/agents-core/client-exports';
|
|
4
4
|
import type { ApiProvider } from '@nangohq/types';
|
|
5
5
|
import { useRouter } from 'next/navigation';
|
|
6
6
|
import { use, useCallback, useEffect, useState } from 'react';
|
|
@@ -15,6 +15,7 @@ import { useNangoProviders } from '@/hooks/use-nango-providers';
|
|
|
15
15
|
import { createProviderConnectSession } from '@/lib/mcp-tools/nango';
|
|
16
16
|
import { NangoError } from '@/lib/mcp-tools/nango-types';
|
|
17
17
|
import { findOrCreateCredential } from '@/lib/utils/credentials-utils';
|
|
18
|
+
import { generateId } from '@/lib/utils/id-utils';
|
|
18
19
|
|
|
19
20
|
function ProviderSetupPage({
|
|
20
21
|
params,
|
|
@@ -39,11 +40,10 @@ function ProviderSetupPage({
|
|
|
39
40
|
return;
|
|
40
41
|
}
|
|
41
42
|
|
|
42
|
-
const credentialId = generateIdFromName(`${provider.name}-${event.payload.connectionId}`);
|
|
43
|
-
|
|
44
43
|
try {
|
|
45
44
|
await findOrCreateCredential(tenantId, projectId, {
|
|
46
|
-
id:
|
|
45
|
+
id: generateId(),
|
|
46
|
+
name: provider.name,
|
|
47
47
|
type: CredentialStoreType.nango,
|
|
48
48
|
credentialStoreId: 'nango-default',
|
|
49
49
|
retrievalParams: {
|
|
@@ -96,11 +96,13 @@ function CredentialDialogMenu({ credentialId, credentialName }: CredentialDialog
|
|
|
96
96
|
|
|
97
97
|
export function CredentialItem({
|
|
98
98
|
id,
|
|
99
|
+
name,
|
|
99
100
|
createdAt,
|
|
100
101
|
tenantId,
|
|
101
102
|
projectId,
|
|
102
103
|
}: {
|
|
103
104
|
id: Credential['id'];
|
|
105
|
+
name: Credential['name'];
|
|
104
106
|
createdAt: Credential['createdAt'];
|
|
105
107
|
tenantId: string;
|
|
106
108
|
projectId: string;
|
|
@@ -113,12 +115,12 @@ export function CredentialItem({
|
|
|
113
115
|
<ItemCardLink href={linkPath}>
|
|
114
116
|
<ItemCardTitle className="text-md">
|
|
115
117
|
<div className="flex items-center gap-3 min-w-0">
|
|
116
|
-
<ProviderIcon provider={
|
|
117
|
-
<span className="truncate">{
|
|
118
|
+
<ProviderIcon provider={name} size={24} className="flex-shrink-0" />
|
|
119
|
+
<span className="truncate">{name}</span>
|
|
118
120
|
</div>
|
|
119
121
|
</ItemCardTitle>
|
|
120
122
|
</ItemCardLink>
|
|
121
|
-
<CredentialDialogMenu credentialId={id} credentialName={
|
|
123
|
+
<CredentialDialogMenu credentialId={id} credentialName={name} />
|
|
122
124
|
</ItemCardHeader>
|
|
123
125
|
<ItemCardContent>
|
|
124
126
|
{/* <ItemCardDescription hasContent={!!description} className="line-clamp-2">
|
|
@@ -40,16 +40,34 @@ interface EditCredentialFormProps {
|
|
|
40
40
|
initialFormData: EditCredentialFormData;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
function
|
|
44
|
-
if (
|
|
45
|
-
|
|
43
|
+
function getCredentialAuthenticationType(credential: Credential): string | undefined {
|
|
44
|
+
if (
|
|
45
|
+
credential.type === CredentialStoreType.nango &&
|
|
46
|
+
credential.retrievalParams?.provider === 'private-api-bearer'
|
|
47
|
+
) {
|
|
48
|
+
return 'Bearer authentication';
|
|
46
49
|
}
|
|
47
50
|
|
|
48
|
-
if (
|
|
49
|
-
|
|
51
|
+
if (
|
|
52
|
+
credential.type === CredentialStoreType.nango &&
|
|
53
|
+
credential.retrievalParams?.provider === 'mcp-generic'
|
|
54
|
+
) {
|
|
55
|
+
return 'OAuth';
|
|
50
56
|
}
|
|
51
57
|
|
|
52
|
-
|
|
58
|
+
if (
|
|
59
|
+
credential.type === CredentialStoreType.keychain &&
|
|
60
|
+
credential.retrievalParams?.key &&
|
|
61
|
+
typeof credential.retrievalParams?.key === 'string'
|
|
62
|
+
) {
|
|
63
|
+
if (credential.retrievalParams?.key.startsWith('oauth_token_')) {
|
|
64
|
+
return 'OAuth';
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return 'Bearer authentication';
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return undefined;
|
|
53
71
|
}
|
|
54
72
|
|
|
55
73
|
export function EditCredentialForm({
|
|
@@ -72,10 +90,7 @@ export function EditCredentialForm({
|
|
|
72
90
|
const handleUpdateCredential = async (formData: EditCredentialFormData) => {
|
|
73
91
|
try {
|
|
74
92
|
await updateCredential(tenantId, projectId, credential.id, {
|
|
75
|
-
|
|
76
|
-
...credential.retrievalParams,
|
|
77
|
-
...formData.metadata,
|
|
78
|
-
},
|
|
93
|
+
name: formData.name.trim(),
|
|
79
94
|
});
|
|
80
95
|
|
|
81
96
|
if (
|
|
@@ -119,6 +134,8 @@ export function EditCredentialForm({
|
|
|
119
134
|
}
|
|
120
135
|
};
|
|
121
136
|
|
|
137
|
+
const credentialAuthenticationType = getCredentialAuthenticationType(credential);
|
|
138
|
+
|
|
122
139
|
return (
|
|
123
140
|
<Dialog open={isDeleteOpen} onOpenChange={setIsDeleteOpen}>
|
|
124
141
|
<Form {...form}>
|
|
@@ -130,14 +147,21 @@ export function EditCredentialForm({
|
|
|
130
147
|
name="name"
|
|
131
148
|
label="Name"
|
|
132
149
|
placeholder="e.g., production-api-key"
|
|
133
|
-
disabled={true}
|
|
134
150
|
/>
|
|
135
151
|
|
|
136
152
|
{/* Credential Type Display */}
|
|
137
153
|
<div className="space-y-3">
|
|
138
154
|
<Label>Credential type</Label>
|
|
139
|
-
<Input
|
|
140
|
-
|
|
155
|
+
<Input
|
|
156
|
+
type="text"
|
|
157
|
+
disabled={true}
|
|
158
|
+
value={
|
|
159
|
+
credentialAuthenticationType
|
|
160
|
+
? `${credentialAuthenticationType} (${credential.type})`
|
|
161
|
+
: credential.type
|
|
162
|
+
}
|
|
163
|
+
/>
|
|
164
|
+
{credentialAuthenticationType === 'Bearer authentication' && (
|
|
141
165
|
<InfoCard title="How this works">
|
|
142
166
|
<p>
|
|
143
167
|
When your agent connects to the MCP server, this API key will be automatically
|
|
@@ -8,8 +8,8 @@ import type { CredentialFormData } from '@/components/credentials/views/credenti
|
|
|
8
8
|
import { createCredentialInStore } from '@/lib/api/credentialStores';
|
|
9
9
|
import { updateExternalAgent } from '@/lib/api/external-agents';
|
|
10
10
|
import { updateMCPTool } from '@/lib/api/tools';
|
|
11
|
-
import { createNangoApiKeyConnection } from '@/lib/mcp-tools/nango';
|
|
12
11
|
import { findOrCreateCredential } from '@/lib/utils/credentials-utils';
|
|
12
|
+
import { generateId } from '@/lib/utils/id-utils';
|
|
13
13
|
import { CredentialForm } from './credential-form';
|
|
14
14
|
|
|
15
15
|
export function NewCredentialForm() {
|
|
@@ -21,51 +21,61 @@ export function NewCredentialForm() {
|
|
|
21
21
|
|
|
22
22
|
const handleCreateCredential = async (data: CredentialFormData) => {
|
|
23
23
|
try {
|
|
24
|
-
const
|
|
25
|
-
|
|
24
|
+
const newCredentialId = generateId();
|
|
25
|
+
|
|
26
26
|
let newCredential: Credential | undefined;
|
|
27
|
+
let credentialKeyToSet: string;
|
|
28
|
+
let credentialValueToSet: string;
|
|
29
|
+
let retrievalParams: Record<string, string>;
|
|
27
30
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
connectionId: idFromName,
|
|
41
|
-
providerConfigKey: integration.unique_key,
|
|
42
|
-
provider: integration.provider,
|
|
31
|
+
switch (data.credentialStoreType) {
|
|
32
|
+
case CredentialStoreType.nango: {
|
|
33
|
+
credentialKeyToSet = JSON.stringify({
|
|
34
|
+
connectionId: newCredentialId,
|
|
35
|
+
providerConfigKey: newCredentialId,
|
|
36
|
+
integrationDisplayName: data.name.trim(),
|
|
37
|
+
});
|
|
38
|
+
credentialValueToSet = data.apiKeyToSet;
|
|
39
|
+
retrievalParams = {
|
|
40
|
+
connectionId: newCredentialId,
|
|
41
|
+
providerConfigKey: newCredentialId,
|
|
42
|
+
provider: 'private-api-bearer',
|
|
43
43
|
authMode: 'API_KEY',
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
data.credentialStoreId,
|
|
55
|
-
idFromName,
|
|
56
|
-
keychainStoreValueToSet
|
|
57
|
-
);
|
|
58
|
-
|
|
59
|
-
newCredential = await findOrCreateCredential(tenantId, projectId, {
|
|
60
|
-
id: idFromName,
|
|
61
|
-
type: data.credentialStoreType,
|
|
62
|
-
credentialStoreId: data.credentialStoreId,
|
|
63
|
-
retrievalParams: {
|
|
44
|
+
};
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
case CredentialStoreType.keychain: {
|
|
48
|
+
const idFromName = generateIdFromName(data.name.trim());
|
|
49
|
+
credentialKeyToSet = idFromName;
|
|
50
|
+
credentialValueToSet = JSON.stringify({
|
|
51
|
+
access_token: data.apiKeyToSet,
|
|
52
|
+
});
|
|
53
|
+
retrievalParams = {
|
|
64
54
|
key: idFromName,
|
|
65
|
-
}
|
|
66
|
-
|
|
55
|
+
};
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
default:
|
|
59
|
+
throw new Error(`Unsupported credential store type: ${data.credentialStoreType}`);
|
|
67
60
|
}
|
|
68
61
|
|
|
62
|
+
await createCredentialInStore({
|
|
63
|
+
tenantId,
|
|
64
|
+
projectId,
|
|
65
|
+
storeId: data.credentialStoreId,
|
|
66
|
+
key: credentialKeyToSet,
|
|
67
|
+
value: credentialValueToSet,
|
|
68
|
+
metadata: data.metadata as Record<string, string>,
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
newCredential = await findOrCreateCredential(tenantId, projectId, {
|
|
72
|
+
id: newCredentialId,
|
|
73
|
+
name: data.name.trim(),
|
|
74
|
+
type: data.credentialStoreType,
|
|
75
|
+
credentialStoreId: data.credentialStoreId,
|
|
76
|
+
retrievalParams,
|
|
77
|
+
});
|
|
78
|
+
|
|
69
79
|
if (data.selectedTool && newCredential) {
|
|
70
80
|
const updatedTool = {
|
|
71
81
|
credentialReferenceId: newCredential.id,
|
|
@@ -6,6 +6,7 @@ import { useRuntimeConfig } from '@/contexts/runtime-config-context';
|
|
|
6
6
|
import { listCredentialStores } from '@/lib/api/credentialStores';
|
|
7
7
|
import { updateMCPTool } from '@/lib/api/tools';
|
|
8
8
|
import { findOrCreateCredential } from '@/lib/utils/credentials-utils';
|
|
9
|
+
import { generateId } from '@/lib/utils/id-utils';
|
|
9
10
|
import { getOAuthLoginUrl } from '@/lib/utils/mcp-urls';
|
|
10
11
|
import { useNangoConnect } from './use-nango-connect';
|
|
11
12
|
|
|
@@ -155,7 +156,8 @@ export function useOAuthLogin({
|
|
|
155
156
|
});
|
|
156
157
|
|
|
157
158
|
const newCredentialData = {
|
|
158
|
-
id:
|
|
159
|
+
id: generateId(),
|
|
160
|
+
name: `${toolName} OAuth Credential`,
|
|
159
161
|
type: CredentialStoreType.nango,
|
|
160
162
|
credentialStoreId: 'nango-default',
|
|
161
163
|
retrievalParams: {
|
|
@@ -18,6 +18,7 @@ export interface CredentialStoresListResponse {
|
|
|
18
18
|
export interface CreateCredentialInStoreRequest {
|
|
19
19
|
key: string;
|
|
20
20
|
value: string;
|
|
21
|
+
metadata?: Record<string, string>;
|
|
21
22
|
}
|
|
22
23
|
|
|
23
24
|
export interface CreateCredentialInStoreResponse {
|
|
@@ -48,13 +49,21 @@ export async function listCredentialStores(
|
|
|
48
49
|
/**
|
|
49
50
|
* Create a credential in a specific credential store
|
|
50
51
|
*/
|
|
51
|
-
export async function createCredentialInStore(
|
|
52
|
-
tenantId
|
|
53
|
-
projectId
|
|
54
|
-
storeId
|
|
55
|
-
key
|
|
56
|
-
value
|
|
57
|
-
|
|
52
|
+
export async function createCredentialInStore({
|
|
53
|
+
tenantId,
|
|
54
|
+
projectId,
|
|
55
|
+
storeId,
|
|
56
|
+
key,
|
|
57
|
+
value,
|
|
58
|
+
metadata,
|
|
59
|
+
}: {
|
|
60
|
+
tenantId: string;
|
|
61
|
+
projectId: string;
|
|
62
|
+
storeId: string;
|
|
63
|
+
key: string;
|
|
64
|
+
value: string;
|
|
65
|
+
metadata?: Record<string, string>;
|
|
66
|
+
}): Promise<CreateCredentialInStoreResponse['data']> {
|
|
58
67
|
validateTenantId(tenantId);
|
|
59
68
|
validateProjectId(projectId);
|
|
60
69
|
|
|
@@ -62,7 +71,7 @@ export async function createCredentialInStore(
|
|
|
62
71
|
`tenants/${tenantId}/projects/${projectId}/credential-stores/${storeId}/credentials`,
|
|
63
72
|
{
|
|
64
73
|
method: 'POST',
|
|
65
|
-
body: JSON.stringify({ key, value }),
|
|
74
|
+
body: JSON.stringify({ key, value, metadata }),
|
|
66
75
|
}
|
|
67
76
|
);
|
|
68
77
|
|
|
@@ -1,26 +1,17 @@
|
|
|
1
1
|
'use server';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* Nango Integration Utilities
|
|
5
|
-
*
|
|
6
4
|
* This file contains server-side functions for interacting with the Nango API.
|
|
7
|
-
*
|
|
8
|
-
* IMPORTANT: All patterns here involve external API calls to Nango, which has
|
|
9
|
-
* atomic constraints enforced at their database level. Patterns that might look
|
|
10
|
-
* like race conditions (optimistic creation + fallback fetch) are actually safe
|
|
11
|
-
* and recommended for external APIs with uniqueness constraints.
|
|
12
5
|
*/
|
|
13
6
|
|
|
14
|
-
import { generateIdFromName } from '@inkeep/agents-core/client-exports';
|
|
15
7
|
import { Nango } from '@nangohq/node';
|
|
16
8
|
import type {
|
|
17
|
-
ApiKeyCredentials,
|
|
18
9
|
ApiProvider,
|
|
19
10
|
ApiPublicConnection,
|
|
20
11
|
ApiPublicIntegration,
|
|
21
12
|
ApiPublicIntegrationCredentials,
|
|
22
13
|
} from '@nangohq/types';
|
|
23
|
-
import {
|
|
14
|
+
import { DEFAULT_TENANT_ID } from '@/lib/runtime-config/defaults';
|
|
24
15
|
import { NangoError, wrapNangoError } from './nango-types';
|
|
25
16
|
|
|
26
17
|
// Initialize Nango client with environment variables
|
|
@@ -33,10 +24,7 @@ const getNangoClient = () => {
|
|
|
33
24
|
try {
|
|
34
25
|
return new Nango({
|
|
35
26
|
secretKey,
|
|
36
|
-
host:
|
|
37
|
-
process.env.NANGO_SERVER_URL ||
|
|
38
|
-
process.env.PUBLIC_NANGO_SERVER_URL ||
|
|
39
|
-
DEFAULT_NANGO_SERVER_URL,
|
|
27
|
+
host: process.env.NANGO_SERVER_URL || 'https://api.nango.dev',
|
|
40
28
|
});
|
|
41
29
|
} catch (error) {
|
|
42
30
|
throw new NangoError('Failed to initialize Nango client', 'new Nango', error);
|
|
@@ -168,6 +156,50 @@ export async function createNangoIntegration(params: {
|
|
|
168
156
|
}
|
|
169
157
|
}
|
|
170
158
|
|
|
159
|
+
export async function updateMCPGenericIntegration({
|
|
160
|
+
uniqueKey,
|
|
161
|
+
}: {
|
|
162
|
+
uniqueKey: string;
|
|
163
|
+
}): Promise<ApiPublicIntegration> {
|
|
164
|
+
const secretKey = process.env.NANGO_SECRET_KEY;
|
|
165
|
+
if (!secretKey) {
|
|
166
|
+
throw new NangoError('NANGO_SECRET_KEY environment variable is required for Nango integration');
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
const host = process.env.NANGO_SERVER_URL || 'https://api.nango.dev';
|
|
170
|
+
|
|
171
|
+
const clientName = process.env.OAUTH_CLIENT_NAME || 'Inkeep Agent Framework';
|
|
172
|
+
const clientUri = process.env.OAUTH_CLIENT_URI || 'https://inkeep.com';
|
|
173
|
+
const logoUri =
|
|
174
|
+
process.env.OAUTH_CLIENT_LOGO_URI || 'https://inkeep.com/images/logos/inkeep-logo-blue.svg';
|
|
175
|
+
|
|
176
|
+
const response = await fetch(`${host}/integrations/${uniqueKey}`, {
|
|
177
|
+
method: 'PATCH',
|
|
178
|
+
headers: {
|
|
179
|
+
Authorization: `Bearer ${secretKey}`,
|
|
180
|
+
'Content-Type': 'application/json',
|
|
181
|
+
},
|
|
182
|
+
body: JSON.stringify({
|
|
183
|
+
custom: {
|
|
184
|
+
oauth_client_name: clientName,
|
|
185
|
+
oauth_client_uri: clientUri,
|
|
186
|
+
oauth_client_logo_uri: logoUri,
|
|
187
|
+
},
|
|
188
|
+
}),
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
if (!response.ok) {
|
|
192
|
+
const errorData = await response.json().catch(() => ({}));
|
|
193
|
+
throw new NangoError(
|
|
194
|
+
`Failed to update integration: ${response.status} ${response.statusText}`,
|
|
195
|
+
'updateMCPGenericIntegration',
|
|
196
|
+
errorData
|
|
197
|
+
);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
return await response.json();
|
|
201
|
+
}
|
|
202
|
+
|
|
171
203
|
/**
|
|
172
204
|
* Get connections for a specific integration
|
|
173
205
|
*/
|
|
@@ -228,122 +260,6 @@ async function createNangoConnectSession({
|
|
|
228
260
|
}
|
|
229
261
|
}
|
|
230
262
|
|
|
231
|
-
/**
|
|
232
|
-
* Create an API key credential by setting up Nango integration and importing the connection
|
|
233
|
-
*/
|
|
234
|
-
export async function createNangoApiKeyConnection({
|
|
235
|
-
name,
|
|
236
|
-
apiKeyToSet,
|
|
237
|
-
metadata,
|
|
238
|
-
}: {
|
|
239
|
-
name: string;
|
|
240
|
-
apiKeyToSet: string;
|
|
241
|
-
metadata: Record<string, string>;
|
|
242
|
-
}): Promise<{ integration: ApiPublicIntegration }> {
|
|
243
|
-
const provider = 'private-api-bearer';
|
|
244
|
-
const idFromName = generateIdFromName(name);
|
|
245
|
-
|
|
246
|
-
try {
|
|
247
|
-
let integration: ApiPublicIntegration;
|
|
248
|
-
|
|
249
|
-
/*
|
|
250
|
-
* SAFE PATTERN: Optimistic creation for external API with atomic constraints
|
|
251
|
-
*
|
|
252
|
-
* This is NOT a race condition because:
|
|
253
|
-
* 1. Nango API enforces uniqueKey constraints atomically in their database
|
|
254
|
-
* 2. Multiple concurrent requests will get deterministic results:
|
|
255
|
-
* - One request succeeds (creates the integration)
|
|
256
|
-
* - All others get 400 duplicate error (safe to handle)
|
|
257
|
-
* 3. The fetchNangoIntegration fallback is idempotent
|
|
258
|
-
*
|
|
259
|
-
* This pattern is recommended for external APIs vs local database operations
|
|
260
|
-
* where true race conditions could occur.
|
|
261
|
-
*/
|
|
262
|
-
try {
|
|
263
|
-
// Optimistic creation - assume integration doesn't exist
|
|
264
|
-
integration = await createNangoIntegration({
|
|
265
|
-
provider,
|
|
266
|
-
uniqueKey: idFromName,
|
|
267
|
-
displayName: name,
|
|
268
|
-
});
|
|
269
|
-
} catch (error: any) {
|
|
270
|
-
// Handle Nango's atomic duplicate key rejection (400 status)
|
|
271
|
-
if (
|
|
272
|
-
error instanceof NangoError &&
|
|
273
|
-
error.cause &&
|
|
274
|
-
typeof error.cause === 'object' &&
|
|
275
|
-
'status' in error.cause &&
|
|
276
|
-
error.cause.status === 400
|
|
277
|
-
) {
|
|
278
|
-
// Safe fallback: fetch the existing integration (idempotent operation)
|
|
279
|
-
const existingIntegration = await fetchNangoIntegration(idFromName);
|
|
280
|
-
if (existingIntegration) {
|
|
281
|
-
integration = existingIntegration;
|
|
282
|
-
} else {
|
|
283
|
-
// Edge case: 400 error wasn't about duplicate key
|
|
284
|
-
wrapNangoError(error, `Integration creation failed for unexpected reasons`, 'create');
|
|
285
|
-
}
|
|
286
|
-
} else {
|
|
287
|
-
// Non-duplicate error (network, auth, etc.)
|
|
288
|
-
wrapNangoError(error, `Failed to create or retrieve integration '${idFromName}'`, 'create');
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
try {
|
|
293
|
-
const importConnectionUrl = `${process.env.NANGO_SERVER_URL || process.env.PUBLIC_NANGO_SERVER_URL || DEFAULT_NANGO_SERVER_URL}/connections`;
|
|
294
|
-
|
|
295
|
-
const credentials: ApiKeyCredentials = {
|
|
296
|
-
type: 'API_KEY',
|
|
297
|
-
apiKey: apiKeyToSet,
|
|
298
|
-
};
|
|
299
|
-
|
|
300
|
-
const body = {
|
|
301
|
-
provider_config_key: integration.unique_key,
|
|
302
|
-
connection_id: idFromName,
|
|
303
|
-
metadata,
|
|
304
|
-
credentials,
|
|
305
|
-
};
|
|
306
|
-
|
|
307
|
-
const response = await fetch(importConnectionUrl, {
|
|
308
|
-
method: 'POST',
|
|
309
|
-
headers: {
|
|
310
|
-
Authorization: `Bearer ${process.env.NANGO_SECRET_KEY}`,
|
|
311
|
-
'Content-Type': 'application/json',
|
|
312
|
-
},
|
|
313
|
-
body: JSON.stringify(body),
|
|
314
|
-
});
|
|
315
|
-
|
|
316
|
-
if (!response.ok) {
|
|
317
|
-
throw new NangoError(
|
|
318
|
-
`Failed to import connection: HTTP ${response.status} - ${response.statusText}`,
|
|
319
|
-
'importConnection'
|
|
320
|
-
);
|
|
321
|
-
}
|
|
322
|
-
} catch (error) {
|
|
323
|
-
wrapNangoError(error, `Failed to import API key connection to Nango`, 'importConnection');
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
try {
|
|
327
|
-
await setNangoConnectionMetadata({
|
|
328
|
-
providerConfigKey: integration.unique_key,
|
|
329
|
-
connectionId: idFromName,
|
|
330
|
-
metadata,
|
|
331
|
-
});
|
|
332
|
-
} catch (error) {
|
|
333
|
-
// Non-critical error - log but don't fail
|
|
334
|
-
console.warn(`Failed to set metadata for connection ${idFromName}:`, error);
|
|
335
|
-
}
|
|
336
|
-
return { integration };
|
|
337
|
-
} catch (error) {
|
|
338
|
-
console.error('Unexpected error creating API key credential:', error);
|
|
339
|
-
wrapNangoError(
|
|
340
|
-
error,
|
|
341
|
-
`Unexpected error creating API key credential '${name}'`,
|
|
342
|
-
'createNangoApiKeyConnection'
|
|
343
|
-
);
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
|
|
347
263
|
/**
|
|
348
264
|
* Create a connect session for a Nango provider (sets up integration if needed)
|
|
349
265
|
*/
|
|
@@ -391,6 +307,16 @@ export async function createProviderConnectSession({
|
|
|
391
307
|
}
|
|
392
308
|
}
|
|
393
309
|
|
|
310
|
+
if (providerName === 'mcp-generic') {
|
|
311
|
+
try {
|
|
312
|
+
await updateMCPGenericIntegration({
|
|
313
|
+
uniqueKey: integration.unique_key,
|
|
314
|
+
});
|
|
315
|
+
} catch (error) {
|
|
316
|
+
console.warn('Failed to update MCP generic integration:', error);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
|
|
394
320
|
try {
|
|
395
321
|
const connectSession = await createNangoConnectSession({
|
|
396
322
|
integrationId: integration.unique_key,
|