@inkeep/agents-manage-ui 0.8.3 → 0.8.5
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 +105 -105
- package/.next/standalone/agents-manage-ui/.next/app-path-routes-manifest.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/build-manifest.json +5 -5
- package/.next/standalone/agents-manage-ui/.next/prerender-manifest.json +3 -3
- package/.next/standalone/agents-manage-ui/.next/react-loadable-manifest.json +12 -12
- 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]/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]/artifact-components/[artifactComponentId]/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifact-components/[artifactComponentId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifact-components/[artifactComponentId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifact-components/new/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifact-components/new/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifact-components/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifact-components/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifact-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_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/data-components/[dataComponentId]/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/data-components/[dataComponentId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/data-components/[dataComponentId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/data-components/new/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/data-components/new/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/data-components/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/data-components/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/data-components/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/[graphId]/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/[graphId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/[graphId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/new/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/new/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/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 +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 +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 +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 +3 -3
- 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_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 +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/1040.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/2411.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/chunks/{2124.js → 2539.js} +3 -3
- package/.next/standalone/agents-manage-ui/.next/server/chunks/256.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/3508.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/3547.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/3785.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/3859.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/5166.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/5232.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/7547.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/8304.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/8449.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/chunks/8473.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/9815.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/middleware-build-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/middleware-react-loadable-manifest.js +1 -1
- 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/{1078.be426e992f97b112.js → 1078.f44e05234b17a838.js} +2 -2
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{7767-02066bb80b94f34a.js → 1205-bc451a63db41a08d.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/1315-947e2cda9b1614e9.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/2063-fdc0702cbb1a1a89.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{2206-9ff3c0c8319b8686.js → 2836-3bf138285ea276e1.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{3162.20c8be7282977fc3.js → 3162.eb0fe441ea725082.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{331.4164e5bbbf2109c5.js → 331.dd96a3bcd60e4373.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{3453.c5924c5185e5e796.js → 3453.464bee7e9449cfb6.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{3677.6c0c43a6899d39a0.js → 3677.13450954b9805540.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{3779.4ba8b9826843e8b2.js → 3779.17320499ac8f98f8.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{3974.f8b5e1821a54d6e7.js → 3974.48089ea5d84cd279.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{4855.0458ee26dcbd0579.js → 4855.45303f638e19dccd.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{6497-4e922cb6838db594.js → 6497-d25dae53e4f0b68a.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/7065.7788113d68e70567.js +55 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/7167-aa7cbc1a170ed9f3.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{871.067c303d1e319df5.js → 871.5ae83e71515ddfcc.js} +2 -2
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-b5ec791f7cf4524d.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifact-components/[artifactComponentId]/{page-e6339bd5c52abe5c.js → page-510f60a1b4c5bd5c.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifact-components/new/{page-e6339bd5c52abe5c.js → page-510f60a1b4c5bd5c.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifact-components/page-f681a97c1571bbab.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-0d705788029fb830.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/{page-86f2bdd15f326447.js → page-2bb22b9f71b41225.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-3e25b96a77c86de8.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/page-d53a8c3c6cc04080.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/data-components/[dataComponentId]/{page-2b552c02b2f25275.js → page-7882368cf26a5794.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/data-components/new/{page-2b552c02b2f25275.js → page-7882368cf26a5794.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/data-components/page-e8eea5135581b57e.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/graphs/page-65d8178e10d0c7b1.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/{page-fb9458614e107dea.js → page-caf7b1ff751072ca.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/new/{page-8a0480ac85e4062a.js → page-ac09974d15068c01.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/{page-2f95ce875ceb5abc.js → page-b7c8b09b22d645e6.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/settings/{page-ae696cda7c8b55c2.js → page-a9a5114b9141f44a.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page-a1b86ad79a9cd6d6.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-aefa8d6de4972e76.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/page-30602b3e03b27fc3.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-b7185deba311ccaa.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{webpack-211ed257f0444458.js → webpack-bd432a1550687523.js} +1 -1
- package/.next/standalone/agents-manage-ui/package.json +1 -1
- package/.next/standalone/packages/agents-core/package.json +1 -1
- package/package.json +4 -4
- package/src/app/[tenantId]/projects/[projectId]/graphs/[graphId]/page.tsx +12 -3
- package/src/app/[tenantId]/projects/[projectId]/graphs/new/page.tsx +6 -1
- package/src/components/graph/configuration/node-types.tsx +2 -0
- package/src/components/graph/graph.tsx +6 -0
- package/src/components/graph/sidepane/nodes/credential-selector.tsx +173 -0
- package/src/components/graph/sidepane/nodes/external-agent-node-editor.tsx +27 -5
- package/src/components/graph/sidepane/sidepane.tsx +4 -0
- package/src/components/traces/conversation-errors.tsx +8 -0
- package/src/components/traces/timeline/timeline-wrapper.tsx +6 -1
- package/src/features/graph/domain/deserialize.ts +2 -1
- package/src/features/graph/domain/serialize.ts +8 -0
- package/src/lib/actions/credentials.ts +31 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/3518.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/36.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/442.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/6028.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/782.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/8196.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/2063-b8d2ea4d0cd6f3ef.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/7065.16acd7a427b07a6d.js +0 -55
- package/.next/standalone/agents-manage-ui/.next/static/chunks/7167-0fa67567fae3fade.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/8356-d72db466159ee410.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-49bddefea3fe5403.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifact-components/page-5dfdded2864cf26f.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-5a352e5bb0f0d362.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-6a0d941539881746.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/page-160b2773bf3ada68.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/data-components/page-1da2122637de9964.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/graphs/page-45c9b732f07151fe.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page-8ce5730a68b5109b.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-5284982e6a917cc7.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/page-47c9f4e642b70015.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-54d17d92420d4b7d.js +0 -1
- /package/.next/standalone/agents-manage-ui/.next/static/{YDKeLLeMD2zT8EUlv1AJ9 → H1g3mqIkLKZfNLLx0N0Zi}/_buildManifest.js +0 -0
- /package/.next/standalone/agents-manage-ui/.next/static/{YDKeLLeMD2zT8EUlv1AJ9 → H1g3mqIkLKZfNLLx0N0Zi}/_ssgManifest.js +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Graph } from '@/components/graph/graph';
|
|
2
2
|
import { BodyTemplate } from '@/components/layout/body-template';
|
|
3
3
|
import { fetchArtifactComponentsAction } from '@/lib/actions/artifact-components';
|
|
4
|
+
import { fetchCredentialsAction } from '@/lib/actions/credentials';
|
|
4
5
|
import { fetchDataComponentsAction } from '@/lib/actions/data-components';
|
|
5
6
|
import { getFullGraphAction } from '@/lib/actions/graph-full';
|
|
6
7
|
import { fetchToolsAction } from '@/lib/actions/tools';
|
|
7
8
|
import { createLookup } from '@/lib/utils';
|
|
8
|
-
|
|
9
9
|
export const dynamic = 'force-dynamic';
|
|
10
10
|
|
|
11
11
|
interface GraphPageProps {
|
|
@@ -15,19 +15,26 @@ interface GraphPageProps {
|
|
|
15
15
|
async function GraphPage({ params }: GraphPageProps) {
|
|
16
16
|
const { graphId, tenantId, projectId } = await params;
|
|
17
17
|
|
|
18
|
-
const [graph, dataComponents, artifactComponents, tools] = await Promise.all([
|
|
18
|
+
const [graph, dataComponents, artifactComponents, credentials, tools] = await Promise.all([
|
|
19
19
|
getFullGraphAction(tenantId, projectId, graphId),
|
|
20
20
|
fetchDataComponentsAction(tenantId, projectId),
|
|
21
21
|
fetchArtifactComponentsAction(tenantId, projectId),
|
|
22
|
+
fetchCredentialsAction(tenantId, projectId),
|
|
22
23
|
fetchToolsAction(tenantId, projectId),
|
|
23
24
|
]);
|
|
24
25
|
|
|
25
26
|
if (!graph.success) throw new Error(graph.error);
|
|
26
|
-
if (
|
|
27
|
+
if (
|
|
28
|
+
!dataComponents.success ||
|
|
29
|
+
!artifactComponents.success ||
|
|
30
|
+
!credentials.success ||
|
|
31
|
+
!tools.success
|
|
32
|
+
) {
|
|
27
33
|
console.error(
|
|
28
34
|
'Failed to fetch components:',
|
|
29
35
|
dataComponents.error,
|
|
30
36
|
artifactComponents.error,
|
|
37
|
+
credentials.error,
|
|
31
38
|
tools.error
|
|
32
39
|
);
|
|
33
40
|
}
|
|
@@ -41,6 +48,7 @@ async function GraphPage({ params }: GraphPageProps) {
|
|
|
41
48
|
);
|
|
42
49
|
|
|
43
50
|
const toolLookup = createLookup(tools.success ? tools.data : undefined);
|
|
51
|
+
const credentialLookup = createLookup(credentials.success ? credentials.data : undefined);
|
|
44
52
|
|
|
45
53
|
return (
|
|
46
54
|
<BodyTemplate
|
|
@@ -54,6 +62,7 @@ async function GraphPage({ params }: GraphPageProps) {
|
|
|
54
62
|
dataComponentLookup={dataComponentLookup}
|
|
55
63
|
artifactComponentLookup={artifactComponentLookup}
|
|
56
64
|
toolLookup={toolLookup}
|
|
65
|
+
credentialLookup={credentialLookup}
|
|
57
66
|
/>
|
|
58
67
|
</BodyTemplate>
|
|
59
68
|
);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Graph } from '@/components/graph/graph';
|
|
2
2
|
import { BodyTemplate } from '@/components/layout/body-template';
|
|
3
3
|
import { fetchArtifactComponentsAction } from '@/lib/actions/artifact-components';
|
|
4
|
+
import { fetchCredentialsAction } from '@/lib/actions/credentials';
|
|
4
5
|
import { fetchDataComponentsAction } from '@/lib/actions/data-components';
|
|
5
6
|
import { fetchToolsAction } from '@/lib/actions/tools';
|
|
6
7
|
import { createLookup } from '@/lib/utils';
|
|
@@ -11,10 +12,11 @@ async function NewGraphPage({
|
|
|
11
12
|
params: Promise<{ tenantId: string; projectId: string }>;
|
|
12
13
|
}) {
|
|
13
14
|
const { tenantId, projectId } = await params;
|
|
14
|
-
const [dataComponents, artifactComponents, tools] = await Promise.all([
|
|
15
|
+
const [dataComponents, artifactComponents, tools, credentials] = await Promise.all([
|
|
15
16
|
fetchDataComponentsAction(tenantId, projectId),
|
|
16
17
|
fetchArtifactComponentsAction(tenantId, projectId),
|
|
17
18
|
fetchToolsAction(tenantId, projectId),
|
|
19
|
+
fetchCredentialsAction(tenantId, projectId),
|
|
18
20
|
]);
|
|
19
21
|
|
|
20
22
|
if (!dataComponents.success || !artifactComponents.success || !tools.success) {
|
|
@@ -35,6 +37,8 @@ async function NewGraphPage({
|
|
|
35
37
|
);
|
|
36
38
|
const toolLookup = createLookup(tools.success ? tools.data : undefined);
|
|
37
39
|
|
|
40
|
+
const credentialLookup = createLookup(credentials.success ? credentials.data : undefined);
|
|
41
|
+
|
|
38
42
|
return (
|
|
39
43
|
<BodyTemplate
|
|
40
44
|
breadcrumbs={[
|
|
@@ -46,6 +50,7 @@ async function NewGraphPage({
|
|
|
46
50
|
dataComponentLookup={dataComponentLookup}
|
|
47
51
|
artifactComponentLookup={artifactComponentLookup}
|
|
48
52
|
toolLookup={toolLookup}
|
|
53
|
+
credentialLookup={credentialLookup}
|
|
49
54
|
/>
|
|
50
55
|
</BodyTemplate>
|
|
51
56
|
);
|
|
@@ -31,6 +31,7 @@ import { useGraphShortcuts } from '@/features/graph/ui/use-graph-shortcuts';
|
|
|
31
31
|
import { useGraphErrors } from '@/hooks/use-graph-errors';
|
|
32
32
|
import { useSidePane } from '@/hooks/use-side-pane';
|
|
33
33
|
import type { ArtifactComponent } from '@/lib/api/artifact-components';
|
|
34
|
+
import type { Credential } from '@/lib/api/credentials';
|
|
34
35
|
import type { DataComponent } from '@/lib/api/data-components';
|
|
35
36
|
import { saveGraph } from '@/lib/services/save-graph';
|
|
36
37
|
import type { MCPTool } from '@/lib/types/tools';
|
|
@@ -97,6 +98,7 @@ interface GraphProps {
|
|
|
97
98
|
dataComponentLookup?: Record<string, DataComponent>;
|
|
98
99
|
artifactComponentLookup?: Record<string, ArtifactComponent>;
|
|
99
100
|
toolLookup?: Record<string, MCPTool>;
|
|
101
|
+
credentialLookup?: Record<string, Credential>;
|
|
100
102
|
}
|
|
101
103
|
|
|
102
104
|
function Flow({
|
|
@@ -104,6 +106,7 @@ function Flow({
|
|
|
104
106
|
dataComponentLookup = {},
|
|
105
107
|
artifactComponentLookup = {},
|
|
106
108
|
toolLookup = {},
|
|
109
|
+
credentialLookup = {},
|
|
107
110
|
}: GraphProps) {
|
|
108
111
|
const [showPlayground, setShowPlayground] = useState(false);
|
|
109
112
|
const router = useRouter();
|
|
@@ -625,6 +628,7 @@ function Flow({
|
|
|
625
628
|
dataComponentLookup={dataComponentLookup}
|
|
626
629
|
artifactComponentLookup={artifactComponentLookup}
|
|
627
630
|
agentToolConfigLookup={agentToolConfigLookup}
|
|
631
|
+
credentialLookup={credentialLookup}
|
|
628
632
|
/>
|
|
629
633
|
{showPlayground && graph?.id && (
|
|
630
634
|
<Playground
|
|
@@ -643,6 +647,7 @@ export function Graph({
|
|
|
643
647
|
dataComponentLookup,
|
|
644
648
|
artifactComponentLookup,
|
|
645
649
|
toolLookup,
|
|
650
|
+
credentialLookup,
|
|
646
651
|
}: GraphProps) {
|
|
647
652
|
return (
|
|
648
653
|
<ReactFlowProvider>
|
|
@@ -651,6 +656,7 @@ export function Graph({
|
|
|
651
656
|
dataComponentLookup={dataComponentLookup}
|
|
652
657
|
artifactComponentLookup={artifactComponentLookup}
|
|
653
658
|
toolLookup={toolLookup}
|
|
659
|
+
credentialLookup={credentialLookup}
|
|
654
660
|
/>
|
|
655
661
|
</ReactFlowProvider>
|
|
656
662
|
);
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { ChevronsUpDown } from 'lucide-react';
|
|
4
|
+
import { useState } from 'react';
|
|
5
|
+
import { Badge } from '@/components/ui/badge';
|
|
6
|
+
import { Button } from '@/components/ui/button';
|
|
7
|
+
import {
|
|
8
|
+
Command,
|
|
9
|
+
CommandEmpty,
|
|
10
|
+
CommandGroup,
|
|
11
|
+
CommandInput,
|
|
12
|
+
CommandItem,
|
|
13
|
+
CommandList,
|
|
14
|
+
} from '@/components/ui/command';
|
|
15
|
+
import { Label } from '@/components/ui/label';
|
|
16
|
+
import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';
|
|
17
|
+
import type { Credential } from '@/lib/api/credentials';
|
|
18
|
+
|
|
19
|
+
// Header component - shows label and status
|
|
20
|
+
interface CredentialHeaderProps {
|
|
21
|
+
label: string;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function CredentialHeader({ label }: CredentialHeaderProps) {
|
|
25
|
+
return (
|
|
26
|
+
<div className="flex gap-2">
|
|
27
|
+
<Label>{label}</Label>
|
|
28
|
+
</div>
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Dropdown for selecting credentials
|
|
33
|
+
interface CredentialDropdownProps {
|
|
34
|
+
selectedCredentialId: string | null;
|
|
35
|
+
onSelect: (credentialId: string | null) => void;
|
|
36
|
+
availableCredentials: Credential[];
|
|
37
|
+
placeholder?: string;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function CredentialDropdown({
|
|
41
|
+
selectedCredentialId,
|
|
42
|
+
onSelect,
|
|
43
|
+
availableCredentials,
|
|
44
|
+
placeholder = 'Select credential...',
|
|
45
|
+
}: CredentialDropdownProps) {
|
|
46
|
+
const [open, setOpen] = useState(false);
|
|
47
|
+
|
|
48
|
+
return (
|
|
49
|
+
<div className="flex w-full">
|
|
50
|
+
<Popover open={open} onOpenChange={setOpen}>
|
|
51
|
+
<PopoverTrigger asChild>
|
|
52
|
+
<Button
|
|
53
|
+
variant="outline"
|
|
54
|
+
role="combobox"
|
|
55
|
+
aria-expanded={open}
|
|
56
|
+
className="w-full justify-between bg-transparent text-gray-700"
|
|
57
|
+
>
|
|
58
|
+
{selectedCredentialId === null ? (
|
|
59
|
+
<div className="text-muted-foreground">No Authentication</div>
|
|
60
|
+
) : selectedCredentialId ? (
|
|
61
|
+
<div className="flex items-center gap-2">
|
|
62
|
+
<span className="font-medium">
|
|
63
|
+
{availableCredentials.find((c) => c.id === selectedCredentialId)?.id ||
|
|
64
|
+
selectedCredentialId}
|
|
65
|
+
</span>
|
|
66
|
+
<span className="text-xs text-muted-foreground">
|
|
67
|
+
(
|
|
68
|
+
{availableCredentials.find((c) => c.id === selectedCredentialId)?.type ||
|
|
69
|
+
'Unknown'}
|
|
70
|
+
)
|
|
71
|
+
</span>
|
|
72
|
+
</div>
|
|
73
|
+
) : (
|
|
74
|
+
<div className="text-muted-foreground">{placeholder}</div>
|
|
75
|
+
)}
|
|
76
|
+
<ChevronsUpDown className="ml-2 h-4 w-4 shrink-0 opacity-50" />
|
|
77
|
+
</Button>
|
|
78
|
+
</PopoverTrigger>
|
|
79
|
+
<PopoverContent className="w-[var(--radix-popover-trigger-width)] p-0">
|
|
80
|
+
<Command>
|
|
81
|
+
<CommandInput placeholder="Search credentials..." />
|
|
82
|
+
<CommandList>
|
|
83
|
+
<CommandEmpty>No credentials found.</CommandEmpty>
|
|
84
|
+
<CommandGroup>
|
|
85
|
+
{/* No Authentication option */}
|
|
86
|
+
<CommandItem
|
|
87
|
+
value=""
|
|
88
|
+
onSelect={() => {
|
|
89
|
+
onSelect(null);
|
|
90
|
+
setOpen(false);
|
|
91
|
+
}}
|
|
92
|
+
className="cursor-pointer"
|
|
93
|
+
>
|
|
94
|
+
<div className="flex items-center justify-between w-full">
|
|
95
|
+
<div>
|
|
96
|
+
<div className="font-medium">No Authentication</div>
|
|
97
|
+
<div className="text-xs text-muted-foreground">Unsecured connection</div>
|
|
98
|
+
</div>
|
|
99
|
+
{selectedCredentialId === null && (
|
|
100
|
+
<Badge variant="success" className="text-[10px]">
|
|
101
|
+
Selected
|
|
102
|
+
</Badge>
|
|
103
|
+
)}
|
|
104
|
+
</div>
|
|
105
|
+
</CommandItem>
|
|
106
|
+
|
|
107
|
+
{/* Available credentials */}
|
|
108
|
+
{availableCredentials.map((credential) => (
|
|
109
|
+
<CommandItem
|
|
110
|
+
key={credential.id}
|
|
111
|
+
value={credential.id}
|
|
112
|
+
onSelect={() => {
|
|
113
|
+
onSelect(credential.id);
|
|
114
|
+
setOpen(false);
|
|
115
|
+
}}
|
|
116
|
+
className="cursor-pointer"
|
|
117
|
+
>
|
|
118
|
+
<div className="flex items-center justify-between w-full">
|
|
119
|
+
<div>
|
|
120
|
+
<div className="font-medium">{credential.id}</div>
|
|
121
|
+
<div className="text-xs text-muted-foreground">{credential.type}</div>
|
|
122
|
+
</div>
|
|
123
|
+
{selectedCredentialId === credential.id && (
|
|
124
|
+
<Badge variant="success" className="text-[10px]">
|
|
125
|
+
Selected
|
|
126
|
+
</Badge>
|
|
127
|
+
)}
|
|
128
|
+
</div>
|
|
129
|
+
</CommandItem>
|
|
130
|
+
))}
|
|
131
|
+
</CommandGroup>
|
|
132
|
+
</CommandList>
|
|
133
|
+
</Command>
|
|
134
|
+
</PopoverContent>
|
|
135
|
+
</Popover>
|
|
136
|
+
</div>
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Main selector component
|
|
141
|
+
interface CredentialSelectorProps {
|
|
142
|
+
label?: string;
|
|
143
|
+
value?: string | null;
|
|
144
|
+
onValueChange?: (value: string | null) => void;
|
|
145
|
+
placeholder?: string;
|
|
146
|
+
credentialLookup: Record<string, Credential>;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export function CredentialSelector({
|
|
150
|
+
label = 'Credential',
|
|
151
|
+
value,
|
|
152
|
+
credentialLookup,
|
|
153
|
+
onValueChange,
|
|
154
|
+
placeholder = 'Select credential...',
|
|
155
|
+
}: CredentialSelectorProps) {
|
|
156
|
+
const handleSelect = (credentialId: string | null) => {
|
|
157
|
+
onValueChange?.(credentialId);
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
return (
|
|
161
|
+
<div className="flex flex-col gap-2">
|
|
162
|
+
<div className="flex flex-col gap-2">
|
|
163
|
+
<CredentialHeader label={label} />
|
|
164
|
+
</div>
|
|
165
|
+
<CredentialDropdown
|
|
166
|
+
selectedCredentialId={value || null}
|
|
167
|
+
onSelect={handleSelect}
|
|
168
|
+
availableCredentials={Object.values(credentialLookup)}
|
|
169
|
+
placeholder={placeholder}
|
|
170
|
+
/>
|
|
171
|
+
</div>
|
|
172
|
+
);
|
|
173
|
+
}
|
|
@@ -1,32 +1,35 @@
|
|
|
1
1
|
import type { Node } from '@xyflow/react';
|
|
2
2
|
import { useCallback } from 'react';
|
|
3
|
+
import { ExpandableJsonEditor } from '@/components/form/expandable-json-editor';
|
|
3
4
|
import { useAutoPrefillIdZustand } from '@/hooks/use-auto-prefill-id-zustand';
|
|
4
5
|
import type { ErrorHelpers } from '@/hooks/use-graph-errors';
|
|
5
6
|
import { useNodeEditor } from '@/hooks/use-node-editor';
|
|
7
|
+
import type { Credential } from '@/lib/api/credentials';
|
|
6
8
|
import type { ExternalAgentNodeData } from '../../configuration/node-types';
|
|
9
|
+
import { CredentialSelector } from './credential-selector';
|
|
7
10
|
import { InputField, TextareaField } from './form-fields';
|
|
8
11
|
|
|
9
12
|
interface ExternalAgentNodeEditorProps {
|
|
10
13
|
selectedNode: Node<ExternalAgentNodeData>;
|
|
14
|
+
credentialLookup: Record<string, Credential>;
|
|
11
15
|
errorHelpers?: ErrorHelpers;
|
|
12
16
|
}
|
|
13
17
|
|
|
14
18
|
export function ExternalAgentNodeEditor({
|
|
15
19
|
selectedNode,
|
|
20
|
+
credentialLookup,
|
|
16
21
|
errorHelpers,
|
|
17
22
|
}: ExternalAgentNodeEditorProps) {
|
|
18
|
-
const { handleInputChange, getFieldError, setFieldRef } = useNodeEditor({
|
|
23
|
+
const { handleInputChange, getFieldError, setFieldRef, updateField } = useNodeEditor({
|
|
19
24
|
selectedNodeId: selectedNode.id,
|
|
20
25
|
errorHelpers,
|
|
21
26
|
});
|
|
22
27
|
|
|
23
28
|
const handleIdChange = useCallback(
|
|
24
29
|
(generatedId: string) => {
|
|
25
|
-
|
|
26
|
-
target: { name: 'id', value: generatedId },
|
|
27
|
-
} as React.ChangeEvent<HTMLInputElement>);
|
|
30
|
+
updateField('id', generatedId);
|
|
28
31
|
},
|
|
29
|
-
[
|
|
32
|
+
[updateField]
|
|
30
33
|
);
|
|
31
34
|
|
|
32
35
|
// Auto-prefill ID based on name field (always enabled for agent nodes)
|
|
@@ -91,6 +94,25 @@ export function ExternalAgentNodeEditor({
|
|
|
91
94
|
error={getFieldError('baseUrl')}
|
|
92
95
|
tooltip="This URL is used to discover the agent's capabilities and communicate with it using the A2A protocol. For locally hosted graphs defined with the agent-framework this would be: http://localhost:3002/tenants/:tenantId/projects/:projectId/agents/:graphId"
|
|
93
96
|
/>
|
|
97
|
+
<ExpandableJsonEditor
|
|
98
|
+
name="headers"
|
|
99
|
+
label="Headers"
|
|
100
|
+
value={selectedNode.data.headers}
|
|
101
|
+
onChange={(value) => updateField('headers', value)}
|
|
102
|
+
placeholder="{}"
|
|
103
|
+
className=""
|
|
104
|
+
/>
|
|
105
|
+
<CredentialSelector
|
|
106
|
+
label="Credential"
|
|
107
|
+
credentialLookup={credentialLookup}
|
|
108
|
+
value={
|
|
109
|
+
typeof selectedNode.data.credentialReferenceId === 'string'
|
|
110
|
+
? selectedNode.data.credentialReferenceId
|
|
111
|
+
: null
|
|
112
|
+
}
|
|
113
|
+
onValueChange={(value) => updateField('credentialReferenceId', value || '')}
|
|
114
|
+
placeholder="Select a credential"
|
|
115
|
+
/>
|
|
94
116
|
</div>
|
|
95
117
|
);
|
|
96
118
|
}
|
|
@@ -4,6 +4,7 @@ import { type LucideIcon, Workflow } from 'lucide-react';
|
|
|
4
4
|
import { useMemo } from 'react';
|
|
5
5
|
import { useGraphErrors } from '@/hooks/use-graph-errors';
|
|
6
6
|
import type { ArtifactComponent } from '@/lib/api/artifact-components';
|
|
7
|
+
import type { Credential } from '@/lib/api/credentials';
|
|
7
8
|
import type { DataComponent } from '@/lib/api/data-components';
|
|
8
9
|
import { SidePane as SidePaneLayout } from '../../layout/sidepane';
|
|
9
10
|
import { edgeTypeMap } from '../configuration/edge-types';
|
|
@@ -32,6 +33,7 @@ interface SidePaneProps {
|
|
|
32
33
|
dataComponentLookup: Record<string, DataComponent>;
|
|
33
34
|
artifactComponentLookup: Record<string, ArtifactComponent>;
|
|
34
35
|
agentToolConfigLookup: AgentToolConfigLookup;
|
|
36
|
+
credentialLookup: Record<string, Credential>;
|
|
35
37
|
}
|
|
36
38
|
|
|
37
39
|
export function SidePane({
|
|
@@ -43,6 +45,7 @@ export function SidePane({
|
|
|
43
45
|
dataComponentLookup,
|
|
44
46
|
artifactComponentLookup,
|
|
45
47
|
agentToolConfigLookup,
|
|
48
|
+
credentialLookup,
|
|
46
49
|
}: SidePaneProps) {
|
|
47
50
|
const selectedNode = useNodesData(selectedNodeId || '');
|
|
48
51
|
const edges = useEdges();
|
|
@@ -100,6 +103,7 @@ export function SidePane({
|
|
|
100
103
|
return (
|
|
101
104
|
<ExternalAgentNodeEditor
|
|
102
105
|
selectedNode={selectedNode as Node<ExternalAgentNodeData>}
|
|
106
|
+
credentialLookup={credentialLookup}
|
|
103
107
|
errorHelpers={errorHelpers}
|
|
104
108
|
/>
|
|
105
109
|
);
|
|
@@ -5,6 +5,7 @@ import { useEffect, useState } from 'react';
|
|
|
5
5
|
import { Badge } from '@/components/ui/badge';
|
|
6
6
|
import { Button } from '@/components/ui/button';
|
|
7
7
|
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
|
|
8
|
+
import { ExternalLink } from '@/components/ui/external-link';
|
|
8
9
|
import { Skeleton } from '@/components/ui/skeleton';
|
|
9
10
|
|
|
10
11
|
interface ConversationErrorsProps {
|
|
@@ -98,6 +99,13 @@ export function ConversationErrors({ conversationId, onBack }: ConversationError
|
|
|
98
99
|
</CardHeader>
|
|
99
100
|
<CardContent>
|
|
100
101
|
<p className="text-sm text-muted-foreground">{error || 'Conversation not found'}</p>
|
|
102
|
+
{error && (
|
|
103
|
+
<div className="mt-3">
|
|
104
|
+
<ExternalLink href="https://docs.inkeep.com/quick-start/observability">
|
|
105
|
+
View observability setup guide
|
|
106
|
+
</ExternalLink>
|
|
107
|
+
</div>
|
|
108
|
+
)}
|
|
101
109
|
{onBack && (
|
|
102
110
|
<Button onClick={onBack} variant="outline" className="mt-4">
|
|
103
111
|
<ArrowLeft className="h-4 w-4 mr-2" />
|
|
@@ -89,7 +89,12 @@ function EmptyTimeline({
|
|
|
89
89
|
</ExternalLink>
|
|
90
90
|
</div>
|
|
91
91
|
) : (
|
|
92
|
-
|
|
92
|
+
<div>
|
|
93
|
+
<p>{error}</p>
|
|
94
|
+
<ExternalLink href="https://docs.inkeep.com/quick-start/observability">
|
|
95
|
+
View observability setup guide
|
|
96
|
+
</ExternalLink>
|
|
97
|
+
</div>
|
|
93
98
|
)}
|
|
94
99
|
</AlertDescription>
|
|
95
100
|
</Alert>
|
|
@@ -14,7 +14,6 @@ import type {
|
|
|
14
14
|
FullGraphDefinition,
|
|
15
15
|
InternalAgentDefinition,
|
|
16
16
|
} from '@/lib/types/graph-full';
|
|
17
|
-
|
|
18
17
|
import { formatJsonField } from '@/lib/utils';
|
|
19
18
|
|
|
20
19
|
interface TransformResult {
|
|
@@ -118,7 +117,9 @@ export function deserializeGraphData(data: FullGraphDefinition): TransformResult
|
|
|
118
117
|
name: agent.name,
|
|
119
118
|
description: agent.description,
|
|
120
119
|
baseUrl: (agent as ExternalAgentDefinition).baseUrl,
|
|
120
|
+
headers: formatJsonField(agent.headers) || '{}',
|
|
121
121
|
type: agent.type,
|
|
122
|
+
credentialReferenceId: agent.credentialReferenceId,
|
|
122
123
|
}
|
|
123
124
|
: (() => {
|
|
124
125
|
const internalAgent = agent as InternalAgentDefinition;
|
|
@@ -20,7 +20,9 @@ type ExternalAgent = {
|
|
|
20
20
|
name: string;
|
|
21
21
|
description: string;
|
|
22
22
|
baseUrl: string;
|
|
23
|
+
headers?: Record<string, string> | null;
|
|
23
24
|
type: 'external';
|
|
25
|
+
credentialReferenceId?: string | null;
|
|
24
26
|
};
|
|
25
27
|
|
|
26
28
|
export type ExtendedAgent =
|
|
@@ -206,12 +208,18 @@ export function serializeGraphData(
|
|
|
206
208
|
agents[agentId] = agent;
|
|
207
209
|
} else if (node.type === NodeType.ExternalAgent) {
|
|
208
210
|
const agentId = (node.data.id as string) || node.id;
|
|
211
|
+
|
|
212
|
+
// Parse headers from JSON string to object
|
|
213
|
+
const parsedHeaders = safeJsonParse(node.data.headers as string);
|
|
214
|
+
|
|
209
215
|
const agent: ExternalAgent = {
|
|
210
216
|
id: agentId,
|
|
211
217
|
name: node.data.name as string,
|
|
212
218
|
description: (node.data.description as string) || '',
|
|
213
219
|
baseUrl: node.data.baseUrl as string,
|
|
220
|
+
headers: parsedHeaders || null,
|
|
214
221
|
type: 'external',
|
|
222
|
+
credentialReferenceId: (node.data.credentialReferenceId as string) || null,
|
|
215
223
|
};
|
|
216
224
|
|
|
217
225
|
if ((node.data as any).isDefault) {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
'use server';
|
|
6
6
|
|
|
7
7
|
import { revalidatePath } from 'next/cache';
|
|
8
|
-
import { deleteCredential } from '../api/credentials';
|
|
8
|
+
import { type Credential, deleteCredential, fetchCredentials } from '../api/credentials';
|
|
9
9
|
import { ApiError } from '../types/errors';
|
|
10
10
|
import type { ActionResult } from './types';
|
|
11
11
|
|
|
@@ -40,3 +40,33 @@ export async function deleteCredentialAction(
|
|
|
40
40
|
};
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Fetch all credentials
|
|
46
|
+
*/
|
|
47
|
+
export async function fetchCredentialsAction(
|
|
48
|
+
tenantId: string,
|
|
49
|
+
projectId: string
|
|
50
|
+
): Promise<ActionResult<Credential[]>> {
|
|
51
|
+
try {
|
|
52
|
+
const result = await fetchCredentials(tenantId, projectId);
|
|
53
|
+
return {
|
|
54
|
+
success: true,
|
|
55
|
+
data: result,
|
|
56
|
+
};
|
|
57
|
+
} catch (error) {
|
|
58
|
+
if (error instanceof ApiError) {
|
|
59
|
+
return {
|
|
60
|
+
success: false,
|
|
61
|
+
error: error.message,
|
|
62
|
+
code: error.error.code,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return {
|
|
67
|
+
success: false,
|
|
68
|
+
error: error instanceof Error ? error.message : 'Unknown error occurred',
|
|
69
|
+
code: 'unknown_error',
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";exports.id=3518,exports.ids=[3518],exports.modules={6461:(a,b,c)=>{let d,e;c.d(b,{Ak:()=>g});var f=c(77598);function g(a=21){var b;b=a|=0,!d||d.length<b?(d=Buffer.allocUnsafe(128*b),f.webcrypto.getRandomValues(d),e=0):e+b>d.length&&(f.webcrypto.getRandomValues(d),e=0),e+=b;let c="";for(let b=e-a;b<e;b++)c+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[63&d[b]];return c}},12463:(a,b,c)=>{c.d(b,{E:()=>i});var d=c(59111),e=c(98848),f=c(53433),g=c(42723);let h=(0,f.F)("inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",secondary:"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",primary:"border border-primary/50 text-primary bg-primary/5 rounded-sm p-0.5 px-1.5 font-mono",destructive:"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",outline:"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",code:"text-xs text-muted-foreground border bg-muted/80 dark:bg-muted/50 rounded-sm p-0.5 px-1.5 font-mono",success:"text-xs text-muted-foreground border rounded-sm p-0.5 px-1.5 font-mono bg-emerald-50 border-emerald-200 text-emerald-800 dark:text-emerald-300 dark:bg-emerald-950/40 uppercase",error:"text-xs text-muted-foreground border rounded-sm p-0.5 px-1.5 font-mono bg-red-50 border-red-200 text-red-800 dark:border-red-700 dark:text-red-300 dark:bg-red-950/40 uppercase",warning:"text-xs text-muted-foreground border rounded-sm p-0.5 px-1.5 font-mono bg-amber-50 border-amber-200 text-amber-800 dark:border-amber-700 dark:text-amber-300 dark:bg-amber-950/40 uppercase",sky:"text-xs text-muted-foreground border rounded-sm p-0.5 px-1.5 font-mono bg-sky-50 border-sky-200 text-sky-800 dark:border-sky-700 dark:text-sky-300 dark:bg-sky-950/40",violet:"text-xs text-muted-foreground border rounded-sm p-0.5 px-1.5 font-mono bg-violet-50 border-violet-200 text-violet-800 dark:border-violet-700 dark:text-violet-300 dark:bg-violet-950/40",orange:"text-xs text-muted-foreground border rounded-sm p-0.5 px-1.5 font-mono bg-orange-50 border-orange-200 text-orange-800 dark:border-orange-700 dark:text-orange-300 dark:bg-orange-950/40"}},defaultVariants:{variant:"default"}});function i({className:a,variant:b,asChild:c=!1,...f}){let i=c?e.DX:"span";return(0,d.jsx)(i,{"data-slot":"badge",className:(0,g.cn)(h({variant:b}),a),...f})}},24703:(a,b,c)=>{c.d(b,{S:()=>h});var d=c(59111),e=c(51006),f=c(39108),g=c(42723);function h({className:a,...b}){return(0,d.jsx)(e.bL,{"data-slot":"checkbox",className:(0,g.cn)("peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",a),...b,children:(0,d.jsx)(e.C1,{"data-slot":"checkbox-indicator",className:"flex items-center justify-center text-current transition-none",children:(0,d.jsx)(f.A,{className:"size-3.5"})})})}},49540:(a,b,c)=>{c.d(b,{bq:()=>l,eb:()=>n,gC:()=>m,l6:()=>j,yv:()=>k});var d=c(59111),e=c(41404),f=c(67048),g=c(39108),h=c(25773),i=c(42723);function j({...a}){return(0,d.jsx)(e.bL,{"data-slot":"select",...a})}function k({...a}){return(0,d.jsx)(e.WT,{"data-slot":"select-value",...a})}function l({className:a,size:b="default",children:c,...g}){return(0,d.jsxs)(e.l9,{"data-slot":"select-trigger","data-size":b,className:(0,i.cn)("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 font-normal normal-case",a),...g,children:[c,(0,d.jsx)(e.In,{asChild:!0,children:(0,d.jsx)(f.A,{className:"size-4 opacity-50"})})]})}function m({className:a,children:b,position:c="popper",...f}){return(0,d.jsx)(e.ZL,{children:(0,d.jsxs)(e.UC,{"data-slot":"select-content",className:(0,i.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto scrollbar-thin scrollbar-thumb-muted-foreground/30 dark:scrollbar-thumb-muted-foreground/50 scrollbar-track-transparent rounded-md border shadow-md","popper"===c&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",a),position:c,...f,children:[(0,d.jsx)(o,{}),(0,d.jsx)(e.LM,{className:(0,i.cn)("p-1","popper"===c&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:b}),(0,d.jsx)(p,{})]})})}function n({className:a,children:b,...c}){return(0,d.jsxs)(e.q7,{"data-slot":"select-item",className:(0,i.cn)("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",a),...c,children:[(0,d.jsx)("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:(0,d.jsx)(e.VF,{children:(0,d.jsx)(g.A,{className:"size-4"})})}),(0,d.jsx)(e.p4,{children:b})]})}function o({className:a,...b}){return(0,d.jsx)(e.PP,{"data-slot":"select-scroll-up-button",className:(0,i.cn)("flex cursor-default items-center justify-center py-1",a),...b,children:(0,d.jsx)(h.A,{className:"size-4"})})}function p({className:a,...b}){return(0,d.jsx)(e.wn,{"data-slot":"select-scroll-down-button",className:(0,i.cn)("flex cursor-default items-center justify-center py-1",a),...b,children:(0,d.jsx)(f.A,{className:"size-4"})})}},51006:(a,b,c)=>{c.d(b,{C1:()=>x,bL:()=>v});var d=c(14450),e=c(90890),f=c(2102),g=c(13254),h=c(19975),i=c(82087),j=c(22871),k=c(66261),l=c(6118),m=c(59111),n="Checkbox",[o,p]=(0,f.A)(n),[q,r]=o(n);function s(a){let{__scopeCheckbox:b,checked:c,children:e,defaultChecked:f,disabled:g,form:i,name:j,onCheckedChange:k,required:l,value:o="on",internal_do_not_use_render:p}=a,[r,s]=(0,h.i)({prop:c,defaultProp:f??!1,onChange:k,caller:n}),[t,u]=d.useState(null),[v,w]=d.useState(null),x=d.useRef(!1),y=!t||!!i||!!t.closest("form"),z={checked:r,disabled:g,setChecked:s,control:t,setControl:u,name:j,form:i,value:o,hasConsumerStoppedPropagationRef:x,required:l,defaultChecked:!A(f)&&f,isFormControl:y,bubbleInput:v,setBubbleInput:w};return(0,m.jsx)(q,{scope:b,...z,children:"function"==typeof p?p(z):e})}var t="CheckboxTrigger",u=d.forwardRef(({__scopeCheckbox:a,onKeyDown:b,onClick:c,...f},h)=>{let{control:i,value:j,disabled:k,checked:n,required:o,setControl:p,setChecked:q,hasConsumerStoppedPropagationRef:s,isFormControl:u,bubbleInput:v}=r(t,a),w=(0,e.s)(h,p),x=d.useRef(n);return d.useEffect(()=>{let a=i?.form;if(a){let b=()=>q(x.current);return a.addEventListener("reset",b),()=>a.removeEventListener("reset",b)}},[i,q]),(0,m.jsx)(l.sG.button,{type:"button",role:"checkbox","aria-checked":A(n)?"mixed":n,"aria-required":o,"data-state":B(n),"data-disabled":k?"":void 0,disabled:k,value:j,...f,ref:w,onKeyDown:(0,g.mK)(b,a=>{"Enter"===a.key&&a.preventDefault()}),onClick:(0,g.mK)(c,a=>{q(a=>!!A(a)||!a),v&&u&&(s.current=a.isPropagationStopped(),s.current||a.stopPropagation())})})});u.displayName=t;var v=d.forwardRef((a,b)=>{let{__scopeCheckbox:c,name:d,checked:e,defaultChecked:f,required:g,disabled:h,value:i,onCheckedChange:j,form:k,...l}=a;return(0,m.jsx)(s,{__scopeCheckbox:c,checked:e,defaultChecked:f,disabled:h,required:g,onCheckedChange:j,name:d,form:k,value:i,internal_do_not_use_render:({isFormControl:a})=>(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(u,{...l,ref:b,__scopeCheckbox:c}),a&&(0,m.jsx)(z,{__scopeCheckbox:c})]})})});v.displayName=n;var w="CheckboxIndicator",x=d.forwardRef((a,b)=>{let{__scopeCheckbox:c,forceMount:d,...e}=a,f=r(w,c);return(0,m.jsx)(k.C,{present:d||A(f.checked)||!0===f.checked,children:(0,m.jsx)(l.sG.span,{"data-state":B(f.checked),"data-disabled":f.disabled?"":void 0,...e,ref:b,style:{pointerEvents:"none",...a.style}})})});x.displayName=w;var y="CheckboxBubbleInput",z=d.forwardRef(({__scopeCheckbox:a,...b},c)=>{let{control:f,hasConsumerStoppedPropagationRef:g,checked:h,defaultChecked:k,required:n,disabled:o,name:p,value:q,form:s,bubbleInput:t,setBubbleInput:u}=r(y,a),v=(0,e.s)(c,u),w=(0,i.Z)(h),x=(0,j.X)(f);d.useEffect(()=>{if(!t)return;let a=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"checked").set,b=!g.current;if(w!==h&&a){let c=new Event("click",{bubbles:b});t.indeterminate=A(h),a.call(t,!A(h)&&h),t.dispatchEvent(c)}},[t,w,h,g]);let z=d.useRef(!A(h)&&h);return(0,m.jsx)(l.sG.input,{type:"checkbox","aria-hidden":!0,defaultChecked:k??z.current,required:n,disabled:o,name:p,value:q,form:s,...b,tabIndex:-1,ref:v,style:{...b.style,...x,position:"absolute",pointerEvents:"none",opacity:0,margin:0,transform:"translateX(-100%)"}})});function A(a){return"indeterminate"===a}function B(a){return A(a)?"indeterminate":a?"checked":"unchecked"}z.displayName=y},55124:(a,b,c)=>{c.d(b,{U:()=>g});var d=c(59111),e=c(49540),f=c(71771);function g({control:a,name:b,label:c,placeholder:g,options:h,disabled:i=!1,selectTriggerClassName:j,isRequired:k=!1}){return(0,d.jsx)(f.u,{control:a,name:b,label:c,isRequired:k,children:a=>(0,d.jsxs)(e.l6,{onValueChange:a.onChange,defaultValue:a.value,disabled:i,children:[(0,d.jsx)(e.bq,{disabled:i,className:j,children:(0,d.jsx)(e.yv,{placeholder:g})}),(0,d.jsx)(e.gC,{children:h.map(a=>(0,d.jsx)(e.eb,{value:a.value,disabled:a.disabled,children:a.label},a.value))})]})})}},57230:(a,b,c)=>{c.d(b,{Y:()=>e});var d=c(90147);let e=(0,d.createServerReference)("78e662e64cdad6a4545d70b82089eb9478bdc9314b",d.callServer,void 0,d.findSourceMapURL,"updateMCPTool")},72969:(a,b,c)=>{c.d(b,{MCPServerForm:()=>d});let d=(0,c(60241).registerClientReference)(function(){throw Error("Attempted to call MCPServerForm() from the server but MCPServerForm is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/agents/agents/agents-manage-ui/src/components/mcp-servers/form/mcp-server-form.tsx","MCPServerForm")},81097:(a,b,c)=>{c.d(b,{$Y:()=>g,GO:()=>i,K3:()=>h,h9:()=>k,nZ:()=>j});var d=c(1274);c(2082);var e=c(53842),f=c(41979);async function g(a,b,c=1,d=50){(0,f.M2)(a),(0,f.nt)(b);let h=new URLSearchParams({page:c.toString(),limit:d.toString()});return(await (0,e.J)(`tenants/${a}/projects/${b}/credentials?${h}`)).data}async function h(a,b,c){return(0,f.M2)(a),(0,f.nt)(b),(await (0,e.J)(`tenants/${a}/projects/${b}/credentials/${c}`)).data}async function i(a,b,c){return(0,f.M2)(a),(0,f.nt)(b),(await (0,e.J)(`tenants/${a}/projects/${b}/credentials`,{method:"POST",body:JSON.stringify(c)})).data}async function j(a,b,c,d){return(0,f.M2)(a),(0,f.nt)(b),(await (0,e.J)(`tenants/${a}/projects/${b}/credentials/${c}`,{method:"PUT",body:JSON.stringify(d)})).data}async function k(a,b,c){(0,f.M2)(a),(0,f.nt)(b),await (0,e.J)(`tenants/${a}/projects/${b}/credentials/${c}`,{method:"DELETE"})}(0,c(95454).D)([g,h,i,j,k]),(0,d.A)(g,"78208c6b11a01052c252cd4f79ad30a3fe0666f4ac",null),(0,d.A)(h,"701f7a5a8af1b8f25519723729e1378f506c1d68a9",null),(0,d.A)(i,"70798d2c583e5d80f450a83af999943df80ddbb2a5",null),(0,d.A)(j,"782d4ba348df8297929ddd2a0c92b532a5ad9d5432",null),(0,d.A)(k,"7026e14203187193850e9810a24e4d24e15489e2e6",null)},88720:(a,b,c)=>{c.d(b,{MCPServerForm:()=>C});var d=c(59111),e=c(59099),f=c(35558),g=c(6461),h=c(485),i=c(94150),j=c(68156),k=c(17130),l=c(55124),m=c(2856),n=c(93622),o=c(57230),p=c(90147);let q=(0,p.createServerReference)("70d169bf889cc99844e9024eb9f6aad0ba287986bc",p.callServer,void 0,p.findSourceMapURL,"createMCPTool");var r=c(91740),s=c(39108),t=c(14450),u=c(12463),v=c(24703),w=c(37671);function x({control:a,name:b,label:c,availableTools:e=[],description:f,disabled:g=!1}){let{field:{value:h,onChange:j},fieldState:{error:k}}=(0,i.as)({name:b,control:a}),l=(0,t.useMemo)(()=>"object"==typeof h&&null!==h&&"type"in h?"all"===h.type?{type:"all"}:"selective"===h.type&&Array.isArray(h.tools)?{type:"selective",tools:h.tools}:{type:"selective",tools:[]}:{type:"selective",tools:[]},[h]),o=()=>{j({type:"all"})},p=()=>{j({type:"selective",tools:[]})},q=(a,b)=>{if("all"===l.type){let c=e.map(a=>a.name).filter(b=>b!==a);j({type:"selective",tools:b?[...c,a]:c})}else j({type:"selective",tools:b?[...l.tools.filter(b=>b!==a),a]:l.tools.filter(b=>b!==a)})},x=()=>{switch(l.type){case"all":return e.length;case"selective":return l.tools.filter(a=>e.some(b=>b.name===a)).length;default:return 0}},y=x()===e.length;return(0,d.jsx)(n.zB,{control:a,name:b,render:()=>(0,d.jsxs)(n.eI,{children:[(0,d.jsxs)(n.lR,{children:[c,(0,d.jsx)(u.E,{variant:"code",className:"border-none px-2 text-[10px] text-muted-foreground",children:x()})]}),f&&(0,d.jsx)("p",{className:"text-sm text-muted-foreground",children:f}),(0,d.jsxs)("div",{className:"mt-2",children:[0===e.length&&(0,d.jsx)("div",{className:"text-sm text-muted-foreground border rounded-md p-3 py-2 bg-gray-100/80 dark:bg-sidebar",children:"No tools available from this server"}),e.length>0&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"flex items-center gap-2 justify-between py-3 px-6 rounded-t-lg border border-b-0",children:[(0,d.jsxs)("div",{className:"text-sm",children:[x()," ",(0,d.jsxs)("span",{className:"text-gray-400 dark:text-white/40",children:["/ ",e.length," tool",1===e.length?"":"s"]})]}),y?(0,d.jsxs)(m.$,{type:"button",variant:"outline",size:"sm",onClick:p,disabled:g,children:[(0,d.jsx)(r.A,{className:"w-4 h-4 text-muted-foreground"}),"Deselect all"]}):(0,d.jsxs)(m.$,{type:"button",variant:"outline",size:"sm",onClick:o,disabled:g,children:[(0,d.jsx)(s.A,{className:"w-4 h-4 text-muted-foreground"}),"Select all"]})]}),(0,d.jsx)("div",{className:"max-h-96 overflow-y-auto border rounded-lg rounded-t-none scrollbar-thin scrollbar-thumb-muted-foreground/30 dark:scrollbar-thumb-muted-foreground/50 scrollbar-track-transparent",children:e.map(a=>{let b=(a=>{switch(l.type){case"all":return e.some(b=>b.name===a);case"selective":return l.tools.includes(a)&&e.some(b=>b.name===a);default:return!1}})(a.name);return(0,d.jsxs)("div",{className:"space-y-2 flex items-start gap-6 border-b last:border-b-0 py-4 px-6 relative",children:[(0,d.jsx)("div",{className:"flex items-center h-[22px]",children:(0,d.jsx)(v.S,{checked:b,disabled:g,className:"mb-0",onClick:()=>!g&&q(a.name,!b)})}),(0,d.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,d.jsx)(u.E,{variant:b?"primary":"code",className:`font-mono font-medium text-xs cursor-pointer transition-colors ${g?"opacity-50 cursor-not-allowed":""}`,onClick:()=>!g&&q(a.name,!b),children:a.name}),(0,d.jsxs)(w.Tooltip,{delayDuration:800,children:[(0,d.jsx)(w.TooltipTrigger,{asChild:!0,children:(0,d.jsx)("p",{className:"text-sm text-muted-foreground line-clamp-1",children:a.description})}),(0,d.jsx)(w.TooltipContent,{side:"bottom",align:"start",children:a.description})]})]})]},a.name)})})]})]}),(0,d.jsx)(n.C5,{children:k?.message})]})})}var y=c(45809);let z=y.discriminatedUnion("type",[y.object({type:y.literal("all")}),y.object({type:y.literal("selective"),tools:y.array(y.string())})]),A=y.object({name:y.string().min(1,"Name is required."),config:y.object({type:y.literal("mcp"),mcp:y.object({server:y.object({url:y.string().url("Must be a valid URL.")}),transport:y.object({type:y.nativeEnum(f.o7)}),toolsConfig:z.default({type:"all"})})}),credentialReferenceId:y.string().nullish(),imageUrl:y.string().optional()}),B={name:"",config:{type:"mcp",mcp:{server:{url:""},transport:{type:f.o7.streamableHttp},toolsConfig:{type:"all"}}},imageUrl:"",credentialReferenceId:"none"};function C({initialData:a,mode:b="create",tool:c,credentials:p,tenantId:r,projectId:s}){let t=(0,h.useRouter)(),u=(0,i.mN)({resolver:(0,e.u)(A),defaultValues:{...B,...a}}),{isSubmitting:v}=u.formState,w=async a=>{try{let d={...a,credentialReferenceId:"none"===a.credentialReferenceId?null:a.credentialReferenceId,config:{...a.config,mcp:{...a.config.mcp,activeTools:(a=>{if("all"===a.type)return;let b=c?.availableTools?.map(a=>a.name)||[];return a.tools.filter(a=>b.includes(a))})(a.config.mcp.toolsConfig)}}};if("update"===b&&c)await (0,o.Y)(r,s,c.id,d),j.oR.success("MCP server updated successfully"),t.push(`/${r}/projects/${s}/mcp-servers/${c.id}`);else{let a=await q(r,s,{...d,id:(0,g.Ak)()});j.oR.success("MCP server created successfully"),t.push(`/${r}/projects/${s}/mcp-servers/${a.id}`)}}catch(a){console.error(`Failed to ${b} MCP tool:`,a),j.oR.error(`Failed to ${b} MCP server. Please try again.`)}};return(0,d.jsx)(n.lV,{...u,children:(0,d.jsxs)("form",{onSubmit:u.handleSubmit(w),className:"space-y-8",children:[(0,d.jsx)(k.a,{control:u.control,name:"name",label:"Name",placeholder:"MCP server",isRequired:!0}),(0,d.jsx)(k.a,{control:u.control,name:"config.mcp.server.url",label:"URL",placeholder:"https://api.example.com/mcp",isRequired:!0}),(0,d.jsx)(l.U,{control:u.control,selectTriggerClassName:"w-full",name:"config.mcp.transport.type",label:"Transport type",placeholder:"Select transport type",options:[{value:f.o7.streamableHttp,label:"Streamable HTTP"},{value:f.o7.sse,label:"Server-Sent Events (SSE)"}]}),(0,d.jsx)(k.a,{control:u.control,name:"imageUrl",label:"Image URL (optional)",placeholder:"https://example.com/icon.png or data:image/png;base64,..."}),(0,d.jsx)(l.U,{control:u.control,selectTriggerClassName:"w-full",name:"credentialReferenceId",label:"Credential",placeholder:"Select a credential",options:[{value:"none",label:"No Authentication"},...p.map(a=>({value:a.id,label:a.id}))]}),"update"===b&&(0,d.jsx)(x,{control:u.control,name:"config.mcp.toolsConfig",label:"Tools",availableTools:c?.availableTools||[],description:"Select which tools should be enabled for this MCP server"}),(0,d.jsx)(m.$,{type:"submit",disabled:v,children:"update"===b?"Save":"Create"})]})})}}};
|