@inkeep/agents-manage-ui 0.6.6 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/.next/standalone/agents-manage-ui/.next/BUILD_ID +1 -1
  2. package/.next/standalone/agents-manage-ui/.next/app-build-manifest.json +68 -68
  3. package/.next/standalone/agents-manage-ui/.next/app-path-routes-manifest.json +2 -2
  4. package/.next/standalone/agents-manage-ui/.next/build-manifest.json +2 -2
  5. package/.next/standalone/agents-manage-ui/.next/prerender-manifest.json +15 -15
  6. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/page.js +1 -1
  7. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/page_client-reference-manifest.js +1 -1
  8. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/api-keys/page.js +3 -3
  9. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/api-keys/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifact-components/[artifactComponentId]/page.js +2 -2
  11. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifact-components/[artifactComponentId]/page.js.nft.json +1 -1
  12. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifact-components/[artifactComponentId]/page_client-reference-manifest.js +1 -1
  13. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifact-components/new/page.js +2 -2
  14. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifact-components/new/page.js.nft.json +1 -1
  15. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifact-components/new/page_client-reference-manifest.js +1 -1
  16. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifact-components/page.js +2 -2
  17. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifact-components/page_client-reference-manifest.js +1 -1
  18. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page.js +1 -1
  19. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page.js.nft.json +1 -1
  20. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page_client-reference-manifest.js +1 -1
  21. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js +2 -2
  22. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js.nft.json +1 -1
  23. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page_client-reference-manifest.js +1 -1
  24. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page.js +1 -1
  25. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page_client-reference-manifest.js +1 -1
  26. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.js +2 -2
  27. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.js.nft.json +1 -1
  28. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page_client-reference-manifest.js +1 -1
  29. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page.js +2 -2
  30. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page.js.nft.json +1 -1
  31. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page_client-reference-manifest.js +1 -1
  32. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page.js +2 -2
  33. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page_client-reference-manifest.js +1 -1
  34. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/data-components/[dataComponentId]/page.js +1 -1
  35. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/data-components/[dataComponentId]/page.js.nft.json +1 -1
  36. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/data-components/[dataComponentId]/page_client-reference-manifest.js +1 -1
  37. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/data-components/new/page.js +2 -2
  38. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/data-components/new/page.js.nft.json +1 -1
  39. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/data-components/new/page_client-reference-manifest.js +1 -1
  40. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/data-components/page.js +2 -2
  41. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/data-components/page_client-reference-manifest.js +1 -1
  42. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/[graphId]/page.js +2 -2
  43. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/[graphId]/page.js.nft.json +1 -1
  44. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/[graphId]/page_client-reference-manifest.js +1 -1
  45. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/new/page.js +2 -2
  46. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/new/page.js.nft.json +1 -1
  47. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/new/page_client-reference-manifest.js +1 -1
  48. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/page.js +2 -2
  49. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/graphs/page_client-reference-manifest.js +1 -1
  50. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page.js +2 -2
  51. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page.js.nft.json +1 -1
  52. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page_client-reference-manifest.js +1 -1
  53. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page.js +2 -2
  54. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page.js.nft.json +1 -1
  55. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page_client-reference-manifest.js +1 -1
  56. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page.js +1 -1
  57. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page.js.nft.json +1 -1
  58. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page_client-reference-manifest.js +1 -1
  59. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page.js +2 -2
  60. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page.js.nft.json +1 -1
  61. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page_client-reference-manifest.js +1 -1
  62. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page.js +1 -1
  63. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page_client-reference-manifest.js +1 -1
  64. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page.js +2 -2
  65. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page_client-reference-manifest.js +1 -1
  66. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js +1 -1
  67. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js.nft.json +1 -1
  68. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page_client-reference-manifest.js +1 -1
  69. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page.js +2 -2
  70. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page_client-reference-manifest.js +1 -1
  71. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page.js +3 -3
  72. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page.js.nft.json +1 -1
  73. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page_client-reference-manifest.js +1 -1
  74. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page.js +3 -3
  75. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page_client-reference-manifest.js +1 -1
  76. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page.js +1 -1
  77. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  78. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.html +1 -1
  79. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.rsc +9 -9
  80. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
  81. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/route_client-reference-manifest.js +1 -1
  82. package/.next/standalone/agents-manage-ui/.next/server/app/page.js +2 -2
  83. package/.next/standalone/agents-manage-ui/.next/server/app/page_client-reference-manifest.js +1 -1
  84. package/.next/standalone/agents-manage-ui/.next/server/app-paths-manifest.json +2 -2
  85. package/.next/standalone/agents-manage-ui/.next/server/chunks/2124.js +13 -13
  86. package/.next/standalone/agents-manage-ui/.next/server/chunks/2184.js +1 -0
  87. package/.next/standalone/agents-manage-ui/.next/server/chunks/3547.js +1 -1
  88. package/.next/standalone/agents-manage-ui/.next/server/chunks/3645.js +1 -0
  89. package/.next/standalone/agents-manage-ui/.next/server/chunks/{3793.js → 4370.js} +1 -1
  90. package/.next/standalone/agents-manage-ui/.next/server/chunks/5232.js +1 -1
  91. package/.next/standalone/agents-manage-ui/.next/server/chunks/6726.js +1 -0
  92. package/.next/standalone/agents-manage-ui/.next/server/chunks/{7067.js → 6992.js} +1 -1
  93. package/.next/standalone/agents-manage-ui/.next/server/chunks/8389.js +1 -0
  94. package/.next/standalone/agents-manage-ui/.next/server/chunks/8449.js +2 -2
  95. package/.next/standalone/agents-manage-ui/.next/server/chunks/{4108.js → 9772.js} +11 -11
  96. package/.next/standalone/agents-manage-ui/.next/server/pages/404.html +1 -1
  97. package/.next/standalone/agents-manage-ui/.next/server/pages/500.html +1 -1
  98. package/.next/standalone/agents-manage-ui/.next/server/server-reference-manifest.js +1 -1
  99. package/.next/standalone/agents-manage-ui/.next/server/server-reference-manifest.json +1 -1
  100. package/.next/standalone/agents-manage-ui/.next/static/chunks/{7232-63c17ffc2737968a.js → 1016-065c7c4004850849.js} +13 -13
  101. package/.next/standalone/agents-manage-ui/.next/static/chunks/6497-b90b21b559925fc6.js +1 -0
  102. package/.next/standalone/agents-manage-ui/.next/static/chunks/6705-978d47db41063bdb.js +1 -0
  103. package/.next/standalone/agents-manage-ui/.next/static/chunks/6709-d1f3493d1e80cb0e.js +1 -0
  104. package/.next/standalone/agents-manage-ui/.next/static/chunks/7167-8d05e2e8db9def49.js +1 -0
  105. package/.next/standalone/agents-manage-ui/.next/static/chunks/{4931-1291b39db1c5dedf.js → 8675-4c7d3c3828d84535.js} +1 -1
  106. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-79109cbb97bd2fe5.js +1 -0
  107. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifact-components/[artifactComponentId]/{page-ac2f8091f8a53342.js → page-c0ed5ffd69a57af5.js} +1 -1
  108. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifact-components/new/{page-ac2f8091f8a53342.js → page-c0ed5ffd69a57af5.js} +1 -1
  109. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifact-components/{page-e3e9163c148c1239.js → page-40d1360e37d37109.js} +1 -1
  110. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-7d5dcfc0e775458a.js +1 -0
  111. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-ad3217b28b09b5a5.js +1 -0
  112. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-0ef881f4f392086a.js +1 -0
  113. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/{page-876f0c019187591d.js → page-e7239c0637ac7efa.js} +1 -1
  114. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/data-components/[dataComponentId]/page-736bec9f0541e08f.js +1 -0
  115. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/data-components/new/page-736bec9f0541e08f.js +1 -0
  116. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/data-components/{page-e289128665acffb1.js → page-21d8913c3297829c.js} +1 -1
  117. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/graphs/[graphId]/{page-b574c5e1d3df7e73.js → page-83f03615dc11014b.js} +1 -1
  118. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/graphs/new/{page-95c13c0305dfddfb.js → page-da8ddb54272917ab.js} +1 -1
  119. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/graphs/{page-e89edd98413b78a4.js → page-8ace8753502148be.js} +1 -1
  120. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/{page-6ffb17fc6301b481.js → page-02feacd52d06239a.js} +1 -1
  121. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page-aa753859a6cd98f8.js +1 -0
  122. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/new/{page-539caba402ab546f.js → page-a393f3437852e5f9.js} +1 -1
  123. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/page-5c0b6a43b3000e09.js +1 -0
  124. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/settings/{page-8731d2271ec07d33.js → page-8be4791ce624489e.js} +1 -1
  125. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-555f353076460fa9.js +1 -0
  126. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/page-544544e7fd94b1de.js +1 -0
  127. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-48d40ad8a53bfc9b.js +1 -0
  128. package/.next/standalone/agents-manage-ui/.next/static/css/98c416ff19152db0.css +1 -0
  129. package/.next/standalone/agents-manage-ui/package.json +2 -2
  130. package/.next/standalone/packages/agents-core/package.json +1 -1
  131. package/package.json +5 -5
  132. package/src/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page.tsx +12 -12
  133. package/src/components/credentials/credential-tools-list.tsx +0 -25
  134. package/src/components/graph/configuration/node-types.tsx +6 -2
  135. package/src/components/graph/graph.tsx +66 -8
  136. package/src/components/graph/nodes/mcp-node.tsx +6 -11
  137. package/src/components/graph/sidepane/nodes/mcp-node-editor.tsx +69 -68
  138. package/src/components/graph/sidepane/nodes/mcp-selector/mcp-selector.tsx +44 -44
  139. package/src/components/graph/sidepane/sidepane.tsx +5 -0
  140. package/src/components/mcp-servers/form/mcp-server-form.tsx +47 -46
  141. package/src/components/mcp-servers/mcp-tool-item.tsx +3 -0
  142. package/src/components/mcp-servers/view-mcp-server-details.tsx +76 -37
  143. package/src/components/ui/copyable-multi-line-code.tsx +17 -0
  144. package/src/features/graph/domain/__tests__/serialize.test.ts +21 -51
  145. package/src/features/graph/domain/deserialize.ts +5 -26
  146. package/src/features/graph/domain/serialize.ts +56 -52
  147. package/src/lib/api/tools.ts +2 -92
  148. package/src/lib/utils/orphaned-tools-detector.ts +145 -0
  149. package/.next/standalone/agents-manage-ui/.next/server/chunks/241.js +0 -1
  150. package/.next/standalone/agents-manage-ui/.next/server/chunks/3995.js +0 -1
  151. package/.next/standalone/agents-manage-ui/.next/server/chunks/6300.js +0 -1
  152. package/.next/standalone/agents-manage-ui/.next/server/chunks/6838.js +0 -1
  153. package/.next/standalone/agents-manage-ui/.next/server/chunks/9435.js +0 -1
  154. package/.next/standalone/agents-manage-ui/.next/static/chunks/1984-b89ef6de05884930.js +0 -1
  155. package/.next/standalone/agents-manage-ui/.next/static/chunks/6497-1503999d28bd793b.js +0 -1
  156. package/.next/standalone/agents-manage-ui/.next/static/chunks/7167-0892927ad1317753.js +0 -1
  157. package/.next/standalone/agents-manage-ui/.next/static/chunks/9202-65ce376d47468b8c.js +0 -1
  158. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-b12544e5422bb5f5.js +0 -1
  159. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-188cdc82aa6e4bc3.js +0 -1
  160. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-a45222825f0acc29.js +0 -1
  161. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-1952e6ae0b259e5e.js +0 -1
  162. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/data-components/[dataComponentId]/page-b945a6e458056f00.js +0 -1
  163. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/data-components/new/page-b945a6e458056f00.js +0 -1
  164. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page-190351c7f4b5d2f8.js +0 -1
  165. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/page-f819dadc0a6d3e17.js +0 -1
  166. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-d48cbe5a8a533023.js +0 -1
  167. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/page-39ca81e212d9fe4a.js +0 -1
  168. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-46ffc47ebd7010d6.js +0 -1
  169. package/.next/standalone/agents-manage-ui/.next/static/css/70e9093ef73fbe1b.css +0 -1
  170. /package/.next/standalone/agents-manage-ui/.next/static/{rTyWV-dnM3YFFcXfKZYFu → vo7pWHFkBgZcQOQOKotiJ}/_buildManifest.js +0 -0
  171. /package/.next/standalone/agents-manage-ui/.next/static/{rTyWV-dnM3YFFcXfKZYFu → vo7pWHFkBgZcQOQOKotiJ}/_ssgManifest.js +0 -0
@@ -1,28 +1,28 @@
1
- 'use client'
1
+ 'use client';
2
2
 
3
- import { zodResolver } from '@hookform/resolvers/zod'
4
- import { MCPTransportType } from '@inkeep/agents-core/client-exports'
5
- import { nanoid } from 'nanoid'
6
- import { useRouter } from 'next/navigation'
7
- import { useForm } from 'react-hook-form'
8
- import { toast } from 'sonner'
9
- import { GenericInput } from '@/components/form/generic-input'
10
- import { GenericSelect } from '@/components/form/generic-select'
11
- import { Button } from '@/components/ui/button'
12
- import { Form } from '@/components/ui/form'
13
- import type { Credential } from '@/lib/api/credentials'
14
- import { createMCPTool, syncMCPTool, updateMCPTool } from '@/lib/api/tools'
15
- import type { MCPTool } from '@/lib/types/tools'
16
- import { ActiveToolsSelector } from './active-tools-selector'
17
- import { type MCPToolFormData, mcpToolSchema } from './validation'
3
+ import { zodResolver } from '@hookform/resolvers/zod';
4
+ import { MCPTransportType } from '@inkeep/agents-core/client-exports';
5
+ import { nanoid } from 'nanoid';
6
+ import { useRouter } from 'next/navigation';
7
+ import { useForm } from 'react-hook-form';
8
+ import { toast } from 'sonner';
9
+ import { GenericInput } from '@/components/form/generic-input';
10
+ import { GenericSelect } from '@/components/form/generic-select';
11
+ import { Button } from '@/components/ui/button';
12
+ import { Form } from '@/components/ui/form';
13
+ import type { Credential } from '@/lib/api/credentials';
14
+ import { createMCPTool, updateMCPTool } from '@/lib/api/tools';
15
+ import type { MCPTool } from '@/lib/types/tools';
16
+ import { ActiveToolsSelector } from './active-tools-selector';
17
+ import { type MCPToolFormData, mcpToolSchema } from './validation';
18
18
 
19
19
  interface MCPServerFormProps {
20
- initialData?: MCPToolFormData
21
- mode?: 'create' | 'update'
22
- tool?: MCPTool
23
- credentials: Credential[]
24
- tenantId: string
25
- projectId: string
20
+ initialData?: MCPToolFormData;
21
+ mode?: 'create' | 'update';
22
+ tool?: MCPTool;
23
+ credentials: Credential[];
24
+ tenantId: string;
25
+ projectId: string;
26
26
  }
27
27
 
28
28
  const defaultValues: MCPToolFormData = {
@@ -41,7 +41,7 @@ const defaultValues: MCPToolFormData = {
41
41
  },
42
42
  imageUrl: '', // Initialize as empty string to avoid uncontrolled/controlled warning
43
43
  credentialReferenceId: 'none',
44
- }
44
+ };
45
45
 
46
46
  export function MCPServerForm({
47
47
  initialData,
@@ -51,7 +51,7 @@ export function MCPServerForm({
51
51
  tenantId,
52
52
  projectId,
53
53
  }: MCPServerFormProps) {
54
- const router = useRouter()
54
+ const router = useRouter();
55
55
 
56
56
  const form = useForm({
57
57
  resolver: zodResolver(mcpToolSchema),
@@ -59,9 +59,17 @@ export function MCPServerForm({
59
59
  ...defaultValues,
60
60
  ...initialData,
61
61
  },
62
- })
62
+ });
63
+
64
+ const { isSubmitting } = form.formState;
63
65
 
64
- const { isSubmitting } = form.formState
66
+ // Helper function to filter active tools against available tools
67
+ const getActiveTools = (toolsConfig: MCPToolFormData['config']['mcp']['toolsConfig']) => {
68
+ if (toolsConfig.type === 'all') return undefined;
69
+
70
+ const availableToolNames = tool?.availableTools?.map((t) => t.name) || [];
71
+ return toolsConfig.tools.filter((toolName) => availableToolNames.includes(toolName));
72
+ };
65
73
 
66
74
  const onSubmit = async (data: MCPToolFormData) => {
67
75
  try {
@@ -73,36 +81,29 @@ export function MCPServerForm({
73
81
  config: {
74
82
  ...data.config,
75
83
  mcp: {
76
- server: data.config.mcp.server,
77
- transport: data.config.mcp.transport,
78
- // Convert discriminated union to API format: type='all' → activeTools=undefined
79
- activeTools:
80
- data.config.mcp.toolsConfig.type === 'all'
81
- ? undefined
82
- : data.config.mcp.toolsConfig.tools,
84
+ ...data.config.mcp,
85
+ activeTools: getActiveTools(data.config.mcp.toolsConfig),
83
86
  },
84
87
  },
85
- }
88
+ };
86
89
 
87
90
  if (mode === 'update' && tool) {
88
- await updateMCPTool(tenantId, projectId, tool.id, transformedData)
89
- await syncMCPTool(tenantId, projectId, tool.id)
90
- toast.success('MCP server updated successfully')
91
- router.push(`/${tenantId}/projects/${projectId}/mcp-servers/${tool.id}`)
91
+ await updateMCPTool(tenantId, projectId, tool.id, transformedData);
92
+ toast.success('MCP server updated successfully');
93
+ router.push(`/${tenantId}/projects/${projectId}/mcp-servers/${tool.id}`);
92
94
  } else {
93
95
  const newTool = await createMCPTool(tenantId, projectId, {
94
96
  ...transformedData,
95
97
  id: nanoid(),
96
- })
97
- await syncMCPTool(tenantId, projectId, newTool.id)
98
- toast.success('MCP server created successfully')
99
- router.push(`/${tenantId}/projects/${projectId}/mcp-servers/${newTool.id}`)
98
+ });
99
+ toast.success('MCP server created successfully');
100
+ router.push(`/${tenantId}/projects/${projectId}/mcp-servers/${newTool.id}`);
100
101
  }
101
102
  } catch (error) {
102
- console.error(`Failed to ${mode} MCP tool:`, error)
103
- toast.error(`Failed to ${mode} MCP server. Please try again.`)
103
+ console.error(`Failed to ${mode} MCP tool:`, error);
104
+ toast.error(`Failed to ${mode} MCP server. Please try again.`);
104
105
  }
105
- }
106
+ };
106
107
 
107
108
  return (
108
109
  <Form {...form}>
@@ -171,5 +172,5 @@ export function MCPServerForm({
171
172
  </Button>
172
173
  </form>
173
174
  </Form>
174
- )
175
+ );
175
176
  }
@@ -160,6 +160,9 @@ export function MCPToolItem({
160
160
 
161
161
  {/* Key metrics in a structured layout */}
162
162
  <div className="flex items-center gap-2 flex-wrap">
163
+ {(tool.status === 'unhealthy' || tool.status === 'unknown') && (
164
+ <Badge variant="error">{tool.status}</Badge>
165
+ )}
163
166
  {tool.status === 'needs_auth' ? (
164
167
  <div className="flex items-center gap-2">
165
168
  <Badge variant="warning">Needs Login</Badge>
@@ -4,16 +4,46 @@ import { Lock, LockOpen, Pencil } from 'lucide-react';
4
4
  import Link from 'next/link';
5
5
  import { Badge } from '@/components/ui/badge';
6
6
  import { ExternalLink } from '@/components/ui/external-link';
7
+ import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
7
8
  import { useRuntimeConfig } from '@/contexts/runtime-config-context';
8
- import type { MCPTool } from "@/lib/types/tools";;
9
+ import type { MCPTool } from '@/lib/types/tools';
10
+
9
11
  import { cn } from '@/lib/utils';
10
12
  import { getOAuthLoginUrl } from '@/lib/utils/mcp-urls';
11
13
  import { getToolTypeAndName } from '@/lib/utils/mcp-utils';
12
14
  import { Button } from '../ui/button';
15
+ import { CopyableMultiLineCode } from '../ui/copyable-multi-line-code';
13
16
  import { CopyableSingleLineCode } from '../ui/copyable-single-line-code';
14
17
  import { AvailableToolsCard } from './available-tools-card';
15
18
  import { MCPToolImage } from './mcp-tool-image';
16
19
 
20
+ // Helper component to render active tool badges with availability status
21
+ function ActiveToolBadge({ toolName, isAvailable }: { toolName: string; isAvailable: boolean }) {
22
+ const badge = (
23
+ <Badge
24
+ variant={isAvailable ? 'primary' : 'warning'}
25
+ className={cn(
26
+ isAvailable ? '' : 'opacity-75 border-yellow-500 text-yellow-700 bg-yellow-50 normal-case'
27
+ )}
28
+ >
29
+ {toolName}
30
+ </Badge>
31
+ );
32
+
33
+ if (!isAvailable) {
34
+ return (
35
+ <Tooltip>
36
+ <TooltipTrigger asChild>{badge}</TooltipTrigger>
37
+ <TooltipContent>
38
+ <p>This tool is not available in the MCP server.</p>
39
+ </TooltipContent>
40
+ </Tooltip>
41
+ );
42
+ }
43
+
44
+ return badge;
45
+ }
46
+
17
47
  export function ViewMCPServerDetails({
18
48
  tool,
19
49
  tenantId,
@@ -147,33 +177,7 @@ export function ViewMCPServerDetails({
147
177
 
148
178
  {/* Basic Information */}
149
179
  <div className="space-y-8">
150
- <div className="grid grid-cols-1 md:grid-cols-2 gap-4 space-y-8">
151
- <div className="space-y-2">
152
- <ItemLabel>Name</ItemLabel>
153
- <ItemValue>{tool.name}</ItemValue>
154
- </div>
155
- <div className="space-y-2">
156
- <ItemLabel>Status</ItemLabel>
157
- <ItemValue className="items-center">
158
- {tool.status === 'needs_auth' ? (
159
- <Badge
160
- variant="outline"
161
- className="text-xs bg-amber-50 dark:bg-amber-900/20 text-amber-700 dark:text-amber-400 border-amber-200 dark:border-amber-800 cursor-pointer hover:bg-amber-100 dark:hover:bg-amber-900/30 hover:border-amber-300 dark:hover:border-amber-700 transition-colors"
162
- onClick={(e) => {
163
- e.preventDefault();
164
- e.stopPropagation();
165
- handleOAuthLogin(tool.id);
166
- }}
167
- >
168
- Click to Login
169
- </Badge>
170
- ) : (
171
- <Badge className="uppercase" variant={getStatusBadgeVariant(tool.status)}>
172
- {tool.status}
173
- </Badge>
174
- )}
175
- </ItemValue>
176
- </div>
180
+ <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
177
181
  <div className="space-y-2">
178
182
  <ItemLabel>Created At</ItemLabel>
179
183
  <ItemValue>
@@ -200,6 +204,37 @@ export function ViewMCPServerDetails({
200
204
  </div>
201
205
  )}
202
206
 
207
+ <div className="space-y-2">
208
+ <ItemLabel>Status</ItemLabel>
209
+ <ItemValue className="items-center">
210
+ {tool.status === 'needs_auth' ? (
211
+ <Badge
212
+ variant="outline"
213
+ className="text-xs bg-amber-50 dark:bg-amber-900/20 text-amber-700 dark:text-amber-400 border-amber-200 dark:border-amber-800 cursor-pointer hover:bg-amber-100 dark:hover:bg-amber-900/30 hover:border-amber-300 dark:hover:border-amber-700 transition-colors"
214
+ onClick={(e) => {
215
+ e.preventDefault();
216
+ e.stopPropagation();
217
+ handleOAuthLogin(tool.id);
218
+ }}
219
+ >
220
+ Click to Login
221
+ </Badge>
222
+ ) : (
223
+ <Badge className="uppercase" variant={getStatusBadgeVariant(tool.status)}>
224
+ {tool.status}
225
+ </Badge>
226
+ )}
227
+ </ItemValue>
228
+ </div>
229
+
230
+ {/* Last Error */}
231
+ {tool.lastError && (
232
+ <div className="space-y-2">
233
+ <ItemLabel>Last Error</ItemLabel>
234
+ <CopyableMultiLineCode code={tool.lastError} />
235
+ </div>
236
+ )}
237
+
203
238
  {/* Server URL */}
204
239
  <div className="space-y-2">
205
240
  <ItemLabel>Server URL</ItemLabel>
@@ -258,22 +293,26 @@ export function ViewMCPServerDetails({
258
293
  tool.availableTools && tool.availableTools.length > 0 ? (
259
294
  <div className="flex flex-wrap gap-2">
260
295
  {tool.availableTools.map((toolInfo) => (
261
- <Badge key={toolInfo.name} className="" variant="primary">
262
- {toolInfo.name}
263
- </Badge>
296
+ <ActiveToolBadge
297
+ key={toolInfo.name}
298
+ toolName={toolInfo.name}
299
+ isAvailable={true} // All available tools are shown, so they're all available
300
+ />
264
301
  ))}
265
302
  </div>
266
303
  ) : (
267
304
  <div className="text-sm text-muted-foreground">No tools available</div>
268
305
  )
269
306
  ) : tool.config.mcp.activeTools && tool.config.mcp.activeTools.length > 0 ? (
270
- // Specific tools are active
307
+ // Specific tools are active - check availability
271
308
  <div className="flex flex-wrap gap-2">
272
- {tool.config.mcp.activeTools.map((toolName) => (
273
- <Badge key={toolName} className="" variant="primary">
274
- {toolName}
275
- </Badge>
276
- ))}
309
+ {tool.config.mcp.activeTools.map((toolName) => {
310
+ const isAvailable =
311
+ tool.availableTools?.some((t) => t.name === toolName) ?? false;
312
+ return (
313
+ <ActiveToolBadge key={toolName} toolName={toolName} isAvailable={isAvailable} />
314
+ );
315
+ })}
277
316
  </div>
278
317
  ) : (
279
318
  // No tools are active (empty array)
@@ -0,0 +1,17 @@
1
+ import { CopyButton } from '@/components/ui/copy-button';
2
+ import { ScrollArea } from '@/components/ui/scroll-area';
3
+
4
+ export function CopyableMultiLineCode({ code }: { code: string }) {
5
+ return (
6
+ <div className="relative bg-muted/50 dark:bg-muted/30 rounded-md border overflow-hidden">
7
+ <ScrollArea className="h-20 w-full">
8
+ <div className="px-3 py-2 pr-8">
9
+ <pre className="text-sm text-foreground/90 font-mono whitespace-pre-wrap break-words leading-5">
10
+ {code}
11
+ </pre>
12
+ </div>
13
+ </ScrollArea>
14
+ <CopyButton className="absolute right-1 top-1 z-10" textToCopy={code} />
15
+ </div>
16
+ );
17
+ }
@@ -27,7 +27,7 @@ describe('serializeGraphData', () => {
27
27
  ];
28
28
  const edges: Edge[] = [];
29
29
 
30
- const result = serializeGraphData(nodes, edges);
30
+ const result = serializeGraphData(nodes, edges, undefined, {}, {}, {});
31
31
 
32
32
  expect((result.agents.agent1 as any).models).toBeUndefined();
33
33
  });
@@ -52,7 +52,7 @@ describe('serializeGraphData', () => {
52
52
  ];
53
53
  const edges: Edge[] = [];
54
54
 
55
- const result = serializeGraphData(nodes, edges);
55
+ const result = serializeGraphData(nodes, edges, undefined, {}, {}, {});
56
56
 
57
57
  expect((result.agents.agent1 as any).models).toBeUndefined();
58
58
  });
@@ -77,7 +77,7 @@ describe('serializeGraphData', () => {
77
77
  ];
78
78
  const edges: Edge[] = [];
79
79
 
80
- const result = serializeGraphData(nodes, edges);
80
+ const result = serializeGraphData(nodes, edges, undefined, {}, {}, {});
81
81
 
82
82
  expect((result.agents.agent1 as any).models).toEqual({
83
83
  base: { model: 'gpt-4' },
@@ -106,7 +106,7 @@ describe('serializeGraphData', () => {
106
106
  ];
107
107
  const edges: Edge[] = [];
108
108
 
109
- const result = serializeGraphData(nodes, edges);
109
+ const result = serializeGraphData(nodes, edges, undefined, {}, {}, {});
110
110
 
111
111
  expect((result.agents.agent1 as any).models).toEqual({
112
112
  base: undefined,
@@ -135,7 +135,7 @@ describe('serializeGraphData', () => {
135
135
  ];
136
136
  const edges: Edge[] = [];
137
137
 
138
- const result = serializeGraphData(nodes, edges);
138
+ const result = serializeGraphData(nodes, edges, undefined, {}, {}, {});
139
139
 
140
140
  expect((result.agents.agent1 as any).models).toEqual({
141
141
  base: undefined,
@@ -164,7 +164,7 @@ describe('serializeGraphData', () => {
164
164
  ];
165
165
  const edges: Edge[] = [];
166
166
 
167
- const result = serializeGraphData(nodes, edges);
167
+ const result = serializeGraphData(nodes, edges, undefined, {}, {}, {});
168
168
 
169
169
  expect((result.agents.agent1 as any).models).toEqual({
170
170
  base: { model: 'gpt-4' },
@@ -189,7 +189,7 @@ describe('serializeGraphData', () => {
189
189
  ];
190
190
  const edges: Edge[] = [];
191
191
 
192
- const result = serializeGraphData(nodes, edges);
192
+ const result = serializeGraphData(nodes, edges, undefined, {}, {}, {});
193
193
 
194
194
  expect((result.agents.agent1 as any).models).toBeUndefined();
195
195
  });
@@ -213,15 +213,9 @@ describe('serializeGraphData', () => {
213
213
  type: NodeType.MCP,
214
214
  position: { x: 200, y: 0 },
215
215
  data: {
216
- id: 'mcp1',
216
+ toolId: 'mcp1',
217
217
  name: 'Test MCP Server',
218
- config: { type: 'mcp', mcp: { server: { url: 'test://server' } } },
219
218
  tempSelectedTools: ['tool1', 'tool2'],
220
- tenantId: 'test-tenant',
221
- projectId: 'test-project',
222
- status: 'unknown',
223
- createdAt: new Date(),
224
- updatedAt: new Date(),
225
219
  } as MCPNodeData,
226
220
  },
227
221
  ];
@@ -235,13 +229,13 @@ describe('serializeGraphData', () => {
235
229
  },
236
230
  ];
237
231
 
238
- const result = serializeGraphData(nodes, edges);
232
+ const result = serializeGraphData(nodes, edges, undefined, {}, {}, {});
239
233
 
240
234
  expect((result.agents.agent1 as any).canUse).toBeDefined();
241
235
  expect((result.agents.agent1 as any).canUse).toHaveLength(1);
242
236
  expect((result.agents.agent1 as any).canUse[0]).toEqual({
243
237
  toolId: 'mcp1',
244
- toolSelection: ['tool1', 'tool2']
238
+ toolSelection: ['tool1', 'tool2'],
245
239
  });
246
240
  });
247
241
 
@@ -263,15 +257,9 @@ describe('serializeGraphData', () => {
263
257
  type: NodeType.MCP,
264
258
  position: { x: 200, y: 0 },
265
259
  data: {
266
- id: 'mcp1',
260
+ toolId: 'mcp1',
267
261
  name: 'Test MCP Server',
268
- config: { type: 'mcp', mcp: { server: { url: 'test://server' } } },
269
262
  tempSelectedTools: null, // null means all tools selected
270
- tenantId: 'test-tenant',
271
- projectId: 'test-project',
272
- status: 'unknown',
273
- createdAt: new Date(),
274
- updatedAt: new Date(),
275
263
  } as MCPNodeData,
276
264
  },
277
265
  ];
@@ -285,14 +273,14 @@ describe('serializeGraphData', () => {
285
273
  },
286
274
  ];
287
275
 
288
- const result = serializeGraphData(nodes, edges);
276
+ const result = serializeGraphData(nodes, edges, undefined, {}, {}, {});
289
277
 
290
278
  // When tempSelectedTools is null, all tools should be selected (toolSelection: null)
291
279
  expect((result.agents.agent1 as any).canUse).toBeDefined();
292
280
  expect((result.agents.agent1 as any).canUse).toHaveLength(1);
293
281
  expect((result.agents.agent1 as any).canUse[0]).toEqual({
294
282
  toolId: 'mcp1',
295
- toolSelection: null
283
+ toolSelection: null,
296
284
  });
297
285
  });
298
286
 
@@ -313,15 +301,9 @@ describe('serializeGraphData', () => {
313
301
  type: NodeType.MCP,
314
302
  position: { x: 200, y: 0 },
315
303
  data: {
316
- id: 'mcp1',
304
+ toolId: 'mcp1',
317
305
  name: 'Test MCP Server',
318
- config: { type: 'mcp', mcp: { server: { url: 'test://server' } } },
319
306
  tempSelectedTools: [], // empty array means no tools selected
320
- tenantId: 'test-tenant',
321
- projectId: 'test-project',
322
- status: 'unknown',
323
- createdAt: new Date(),
324
- updatedAt: new Date(),
325
307
  } as MCPNodeData,
326
308
  },
327
309
  ];
@@ -335,13 +317,13 @@ describe('serializeGraphData', () => {
335
317
  },
336
318
  ];
337
319
 
338
- const result = serializeGraphData(nodes, edges);
320
+ const result = serializeGraphData(nodes, edges, undefined, {}, {}, {});
339
321
 
340
322
  expect((result.agents.agent1 as any).canUse).toBeDefined();
341
323
  expect((result.agents.agent1 as any).canUse).toHaveLength(1);
342
324
  expect((result.agents.agent1 as any).canUse[0]).toEqual({
343
325
  toolId: 'mcp1',
344
- toolSelection: []
326
+ toolSelection: [],
345
327
  });
346
328
  });
347
329
 
@@ -362,15 +344,9 @@ describe('serializeGraphData', () => {
362
344
  type: NodeType.MCP,
363
345
  position: { x: 200, y: 0 },
364
346
  data: {
365
- id: 'mcp1',
347
+ toolId: 'mcp1',
366
348
  name: 'Test MCP Server',
367
- config: { type: 'mcp', mcp: { server: { url: 'test://server' } } },
368
349
  // no tempSelectedTools property
369
- tenantId: 'test-tenant',
370
- projectId: 'test-project',
371
- status: 'unknown',
372
- createdAt: new Date(),
373
- updatedAt: new Date(),
374
350
  } as MCPNodeData,
375
351
  },
376
352
  ];
@@ -384,7 +360,7 @@ describe('serializeGraphData', () => {
384
360
  },
385
361
  ];
386
362
 
387
- const result = serializeGraphData(nodes, edges);
363
+ const result = serializeGraphData(nodes, edges, undefined, {}, {}, {});
388
364
 
389
365
  // selectedTools should not be created if tempSelectedTools is undefined
390
366
  expect((result.agents.agent1 as any).selectedTools).toBeUndefined();
@@ -409,15 +385,9 @@ describe('serializeGraphData', () => {
409
385
  type: NodeType.MCP,
410
386
  position: { x: 200, y: 0 },
411
387
  data: {
412
- id: 'mcp1',
388
+ toolId: 'mcp1',
413
389
  name: 'Test MCP Server',
414
- config: { type: 'mcp', mcp: { server: { url: 'test://server' } } },
415
390
  // tempSelectedTools is undefined (user didn't interact with UI)
416
- tenantId: 'test-tenant',
417
- projectId: 'test-project',
418
- status: 'unknown',
419
- createdAt: new Date(),
420
- updatedAt: new Date(),
421
391
  } as MCPNodeData,
422
392
  },
423
393
  ];
@@ -431,7 +401,7 @@ describe('serializeGraphData', () => {
431
401
  },
432
402
  ];
433
403
 
434
- const result = serializeGraphData(nodes, edges);
404
+ const result = serializeGraphData(nodes, edges, undefined, {}, {}, {});
435
405
 
436
406
  // When tempSelectedTools is undefined and there's an edge to MCP tool,
437
407
  // the toolSelection will be null (all tools selected by default)
@@ -439,7 +409,7 @@ describe('serializeGraphData', () => {
439
409
  expect((result.agents.agent1 as any).canUse).toHaveLength(1);
440
410
  expect((result.agents.agent1 as any).canUse[0]).toEqual({
441
411
  toolId: 'mcp1',
442
- toolSelection: null // null means all tools are selected
412
+ toolSelection: null, // null means all tools are selected
443
413
  });
444
414
  });
445
415
  });
@@ -14,7 +14,7 @@ import type {
14
14
  FullGraphDefinition,
15
15
  InternalAgentDefinition,
16
16
  } from '@/lib/types/graph-full';
17
- import type { MCPTool } from '@/lib/types/tools';
17
+
18
18
  import { formatJsonField } from '@/lib/utils';
19
19
 
20
20
  interface TransformResult {
@@ -101,10 +101,7 @@ function applyDagreLayout(nodes: Node[], edges: Edge[]): Node[] {
101
101
  });
102
102
  }
103
103
 
104
- export function deserializeGraphData(
105
- data: FullGraphDefinition,
106
- toolLookup?: Record<string, MCPTool>
107
- ): TransformResult {
104
+ export function deserializeGraphData(data: FullGraphDefinition): TransformResult {
108
105
  const nodes: Node[] = [];
109
106
  const edges: Edge[] = [];
110
107
 
@@ -213,7 +210,7 @@ export function deserializeGraphData(
213
210
  id: toolNodeId,
214
211
  type: NodeType.MCP,
215
212
  position: { x: 0, y: 0 },
216
- data: { id: tool.id, ...tool },
213
+ data: { toolId: tool.id },
217
214
  };
218
215
  nodes.push(toolNode);
219
216
 
@@ -228,33 +225,15 @@ export function deserializeGraphData(
228
225
  edges.push(agentToToolEdge);
229
226
  }
230
227
  } else {
231
- // Tools are project-scoped, use the tool lookup if available
228
+ // Tools are project-scoped - just store the tool ID
232
229
  for (const canUseItem of agent.canUse) {
233
230
  const toolId = canUseItem.toolId;
234
- const tool = toolLookup?.[toolId];
235
231
  const toolNodeId = nanoid();
236
232
  const toolNode: Node = {
237
233
  id: toolNodeId,
238
234
  type: NodeType.MCP,
239
235
  position: { x: 0, y: 0 },
240
- data: tool
241
- ? {
242
- id: tool.id,
243
- name: tool.name,
244
- description: '', // MCPTool doesn't have a description field at top level
245
- type: 'mcp',
246
- config: tool.config || {},
247
- status: tool.status,
248
- availableTools: tool.availableTools,
249
- selectedTools: canUseItem.toolSelection, // Use toolSelection from canUseItem
250
- }
251
- : {
252
- id: toolId,
253
- name: toolId,
254
- description: 'Project-scoped tool',
255
- type: 'project-scoped',
256
- config: {},
257
- },
236
+ data: { toolId },
258
237
  };
259
238
  nodes.push(toolNode);
260
239