@inkeep/agents-manage-ui 0.31.7 → 0.32.0

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 (218) 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 +174 -174
  3. package/.next/standalone/agents-manage-ui/.next/app-path-routes-manifest.json +7 -7
  4. package/.next/standalone/agents-manage-ui/.next/build-manifest.json +5 -5
  5. package/.next/standalone/agents-manage-ui/.next/prerender-manifest.json +13 -13
  6. package/.next/standalone/agents-manage-ui/.next/react-loadable-manifest.json +2 -2
  7. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/page.js +1 -1
  8. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/[agentId]/page.js +2 -2
  10. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/[agentId]/page.js.nft.json +1 -1
  11. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/[agentId]/page_client-reference-manifest.js +1 -1
  12. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/new/page.js +2 -2
  13. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/new/page.js.nft.json +1 -1
  14. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/new/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/page.js +2 -2
  16. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/page.js.nft.json +1 -1
  17. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/page_client-reference-manifest.js +1 -1
  18. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/api-keys/page.js +3 -3
  19. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/api-keys/page_client-reference-manifest.js +1 -1
  20. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page.js +2 -2
  21. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page.js.nft.json +1 -1
  22. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page_client-reference-manifest.js +1 -1
  23. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page.js +2 -2
  24. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page.js.nft.json +1 -1
  25. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page_client-reference-manifest.js +1 -1
  26. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/page.js +2 -2
  27. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/page_client-reference-manifest.js +1 -1
  28. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page.js +1 -1
  29. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page_client-reference-manifest.js +1 -1
  30. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page.js +1 -1
  31. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page_client-reference-manifest.js +1 -1
  32. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/page.js +1 -1
  33. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/page_client-reference-manifest.js +1 -1
  34. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page.js +2 -2
  35. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page.js.nft.json +1 -1
  36. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page_client-reference-manifest.js +1 -1
  37. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js +2 -2
  38. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js.nft.json +1 -1
  39. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page_client-reference-manifest.js +1 -1
  40. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page.js +2 -2
  41. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page.js.nft.json +1 -1
  42. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page_client-reference-manifest.js +1 -1
  43. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.js +2 -2
  44. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.js.nft.json +1 -1
  45. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page_client-reference-manifest.js +1 -1
  46. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page.js +2 -2
  47. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page_client-reference-manifest.js +1 -1
  48. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page.js +2 -2
  49. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page_client-reference-manifest.js +1 -1
  50. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/edit/page.js +2 -2
  51. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/edit/page_client-reference-manifest.js +1 -1
  52. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/page.js +2 -2
  53. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/page_client-reference-manifest.js +1 -1
  54. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/new/page.js +1 -1
  55. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/new/page_client-reference-manifest.js +1 -1
  56. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/page.js +2 -2
  57. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/external-agents/page_client-reference-manifest.js +1 -1
  58. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page.js +2 -2
  59. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page.js.nft.json +1 -1
  60. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page_client-reference-manifest.js +1 -1
  61. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page.js +2 -2
  62. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page.js.nft.json +1 -1
  63. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page_client-reference-manifest.js +1 -1
  64. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page.js +2 -2
  65. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page.js.nft.json +1 -1
  66. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page_client-reference-manifest.js +1 -1
  67. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page.js +2 -2
  68. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page.js.nft.json +1 -1
  69. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page_client-reference-manifest.js +1 -1
  70. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page.js +2 -2
  71. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page_client-reference-manifest.js +1 -1
  72. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page.js +2 -2
  73. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page_client-reference-manifest.js +1 -1
  74. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js +2 -2
  75. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js.nft.json +1 -1
  76. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page_client-reference-manifest.js +1 -1
  77. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page.js +1 -1
  78. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page_client-reference-manifest.js +1 -1
  79. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page.js +3 -3
  80. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page.js.nft.json +1 -1
  81. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page_client-reference-manifest.js +1 -1
  82. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page.js +2 -2
  83. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page_client-reference-manifest.js +1 -1
  84. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page.js +2 -2
  85. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  86. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.html +1 -1
  87. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.rsc +9 -9
  88. package/.next/standalone/agents-manage-ui/.next/server/app/api/data-components/[dataComponentId]/generate-render/route.js +3 -3
  89. package/.next/standalone/agents-manage-ui/.next/server/app/api/data-components/[dataComponentId]/generate-render/route_client-reference-manifest.js +1 -1
  90. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route.js +2 -2
  91. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route.js.nft.json +1 -1
  92. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
  93. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/route_client-reference-manifest.js +1 -1
  94. package/.next/standalone/agents-manage-ui/.next/server/app/page.js +2 -2
  95. package/.next/standalone/agents-manage-ui/.next/server/app/page_client-reference-manifest.js +1 -1
  96. package/.next/standalone/agents-manage-ui/.next/server/app-paths-manifest.json +7 -7
  97. package/.next/standalone/agents-manage-ui/.next/server/chunks/2323.js +2 -2
  98. package/.next/standalone/agents-manage-ui/.next/server/chunks/2351.js +26 -0
  99. package/.next/standalone/agents-manage-ui/.next/server/chunks/{2885.js → 2592.js} +1 -1
  100. package/.next/standalone/agents-manage-ui/.next/server/chunks/341.js +13 -13
  101. package/.next/standalone/agents-manage-ui/.next/server/chunks/4321.js +1 -0
  102. package/.next/standalone/agents-manage-ui/.next/server/chunks/4429.js +1 -1
  103. package/.next/standalone/agents-manage-ui/.next/server/chunks/4528.js +1 -0
  104. package/.next/standalone/agents-manage-ui/.next/server/chunks/5316.js +3 -3
  105. package/.next/standalone/agents-manage-ui/.next/server/chunks/6150.js +1 -0
  106. package/.next/standalone/agents-manage-ui/.next/server/chunks/7023.js +1 -0
  107. package/.next/standalone/agents-manage-ui/.next/server/chunks/7065.js +9 -9
  108. package/.next/standalone/agents-manage-ui/.next/server/chunks/{5052.js → 7942.js} +1 -1
  109. package/.next/standalone/agents-manage-ui/.next/server/chunks/8072.js +7 -0
  110. package/.next/standalone/agents-manage-ui/.next/server/chunks/8079.js +7 -0
  111. package/.next/standalone/agents-manage-ui/.next/server/chunks/8359.js +1 -1
  112. package/.next/standalone/agents-manage-ui/.next/server/chunks/865.js +1 -0
  113. package/.next/standalone/agents-manage-ui/.next/server/chunks/9542.js +1 -1
  114. package/.next/standalone/agents-manage-ui/.next/server/middleware-build-manifest.js +1 -1
  115. package/.next/standalone/agents-manage-ui/.next/server/middleware-manifest.json +5 -5
  116. package/.next/standalone/agents-manage-ui/.next/server/middleware-react-loadable-manifest.js +1 -1
  117. package/.next/standalone/agents-manage-ui/.next/server/pages/404.html +1 -1
  118. package/.next/standalone/agents-manage-ui/.next/server/pages/500.html +1 -1
  119. package/.next/standalone/agents-manage-ui/.next/server/server-reference-manifest.js +1 -1
  120. package/.next/standalone/agents-manage-ui/.next/server/server-reference-manifest.json +1 -1
  121. package/.next/standalone/agents-manage-ui/.next/static/chunks/10526-bb5d650d2bbf91c3.js +7 -0
  122. package/.next/standalone/agents-manage-ui/.next/static/chunks/1343-05a94311cdb00e10.js +1 -0
  123. package/.next/standalone/agents-manage-ui/.next/static/chunks/{27474-1de1d642fe2b23e9.js → 19588-0cc7b6a67a286737.js} +1 -1
  124. package/.next/standalone/agents-manage-ui/.next/static/chunks/{32848-ccddf72d711e0f10.js → 32848-ac4c735ae57c726f.js} +1 -1
  125. package/.next/standalone/agents-manage-ui/.next/static/chunks/39256-3131bd7496c85a2c.js +1 -0
  126. package/.next/standalone/agents-manage-ui/.next/static/chunks/{40845-ecd3bc249496097d.js → 47932-d523e3a7b5baff5a.js} +1 -1
  127. package/.next/standalone/agents-manage-ui/.next/static/chunks/53027-c6cccd113b6a239b.js +1 -0
  128. package/.next/standalone/agents-manage-ui/.next/static/chunks/53352-1f91930691e35c02.js +1 -0
  129. package/.next/standalone/agents-manage-ui/.next/static/chunks/{76185-f0817813a3a145b7.js → 71744-f216532e995a4b83.js} +1 -1
  130. package/.next/standalone/agents-manage-ui/.next/static/chunks/73744-949c586a30746f35.js +1 -0
  131. package/.next/standalone/agents-manage-ui/.next/static/chunks/{7965-be321dadb7ef1e3d.js → 7965-0cbec24081da936f.js} +1 -1
  132. package/.next/standalone/agents-manage-ui/.next/static/chunks/{84172.84228bc3aac63f18.js → 84172.d603063077e44fcd.js} +3 -3
  133. package/.next/standalone/agents-manage-ui/.next/static/chunks/96776-fe61e5d43d56e87f.js +1 -0
  134. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/{layout-31bb2858b2f8811e.js → layout-233003c6e3a913c9.js} +1 -1
  135. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/[agentId]/{page-dc2bbca539207ff4.js → page-70bd344ae83cdf57.js} +1 -1
  136. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/new/{page-6b81c125af2ef393.js → page-2acc6942acfb4269.js} +1 -1
  137. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/{page-78b372afad2858a5.js → page-6e05da8dfe63ccfc.js} +1 -1
  138. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-5ccf6d182ca8d482.js +1 -0
  139. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page-768f637e70fd488b.js +1 -0
  140. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/new/page-b50da076da4a34ec.js +1 -0
  141. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/page-035679aa4e52639f.js +1 -0
  142. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page-eebdbef3e57952d7.js +1 -0
  143. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/new/page-b617cafe316af8a8.js +1 -0
  144. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/page-f0c93e5c631720b1.js +1 -0
  145. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-3c1d43536cd446c9.js +1 -0
  146. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-3de6cb70ef769c1a.js +1 -0
  147. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-bd02aa7979988a9c.js +1 -0
  148. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/{page-9fe1a5e047ed6b4f.js → page-87889cad75a1afae.js} +1 -1
  149. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/edit/page-d96342ec2075e3a0.js +1 -0
  150. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/external-agents/new/{page-070baa8c2160fe4f.js → page-be70c9ab4296dfff.js} +1 -1
  151. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/external-agents/{page-92e3c9b4eaac0929.js → page-a941809e8cc6b5b4.js} +1 -1
  152. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page-2df6a828216b429b.js +1 -0
  153. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page-7f1e4e29534d657d.js +1 -0
  154. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/new/page-393070b09141eda0.js +1 -0
  155. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/{page-cf6b56386d15861e.js → page-7f05e033cfe7f523.js} +1 -1
  156. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/settings/{page-7a78b4e6d800a7fd.js → page-955cc730719a65f5.js} +1 -1
  157. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/ai-calls/{page-1ca030e6ca5874c2.js → page-1314aae4f8ba9c57.js} +1 -1
  158. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-0e2176028b073ac4.js +1 -0
  159. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/{page-b3166f96516c4e92.js → page-b96eba24cb7470a9.js} +1 -1
  160. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-c3890efb3f17c1fa.js +1 -0
  161. package/.next/standalone/agents-manage-ui/.next/static/chunks/{webpack-8e2fc942dbca69df.js → webpack-c428abc075ea89a6.js} +1 -1
  162. package/.next/standalone/agents-manage-ui/.next/static/css/050e9681f681dbc5.css +1 -0
  163. package/.next/standalone/agents-manage-ui/package.json +1 -1
  164. package/.next/standalone/packages/agents-core/package.json +7 -3
  165. package/package.json +4 -4
  166. package/src/app/utils/format-date.ts +32 -7
  167. package/src/components/agent/agent.tsx +31 -10
  168. package/src/components/agent/sidepane/metadata/metadata-editor.tsx +1 -1
  169. package/src/components/agent/sidepane/nodes/form-fields.tsx +104 -107
  170. package/src/components/agent/sidepane/nodes/sub-agent-node-editor.tsx +2 -1
  171. package/src/components/agent/sidepane/sidepane.tsx +4 -0
  172. package/src/components/editors/code-editor.tsx +12 -1
  173. package/src/components/editors/expandable-code-editor.tsx +9 -5
  174. package/src/components/editors/expandable-json-editor.tsx +9 -6
  175. package/src/components/editors/expandable-prompt-editor.tsx +13 -5
  176. package/src/components/editors/json-editor.tsx +11 -2
  177. package/src/components/editors/monaco-editor.tsx +1 -1
  178. package/src/components/editors/prompt-editor.tsx +1 -0
  179. package/src/components/form/expandable-field.tsx +21 -5
  180. package/src/env.d.ts +2 -0
  181. package/src/features/agent/domain/__tests__/serialize.test.ts +68 -1
  182. package/src/features/agent/domain/serialize.ts +47 -14
  183. package/src/features/agent/state/use-monaco-store.ts +2 -0
  184. package/src/hooks/use-traces.ts +1 -2
  185. package/.next/standalone/agents-manage-ui/.next/server/chunks/3200.js +0 -1
  186. package/.next/standalone/agents-manage-ui/.next/server/chunks/3690.js +0 -7
  187. package/.next/standalone/agents-manage-ui/.next/server/chunks/3828.js +0 -26
  188. package/.next/standalone/agents-manage-ui/.next/server/chunks/6537.js +0 -1
  189. package/.next/standalone/agents-manage-ui/.next/server/chunks/665.js +0 -1
  190. package/.next/standalone/agents-manage-ui/.next/server/chunks/817.js +0 -7
  191. package/.next/standalone/agents-manage-ui/.next/server/chunks/8320.js +0 -1
  192. package/.next/standalone/agents-manage-ui/.next/server/chunks/9920.js +0 -1
  193. package/.next/standalone/agents-manage-ui/.next/static/chunks/14909-1cf401a4a6237a80.js +0 -1
  194. package/.next/standalone/agents-manage-ui/.next/static/chunks/39256-7a33a7cfbdecf52b.js +0 -1
  195. package/.next/standalone/agents-manage-ui/.next/static/chunks/65154-137db1fcf88667f6.js +0 -1
  196. package/.next/standalone/agents-manage-ui/.next/static/chunks/73744-ed53b2a1b7396fba.js +0 -1
  197. package/.next/standalone/agents-manage-ui/.next/static/chunks/75824-37e301e785290f2b.js +0 -7
  198. package/.next/standalone/agents-manage-ui/.next/static/chunks/85210-101ae8171554340b.js +0 -1
  199. package/.next/standalone/agents-manage-ui/.next/static/chunks/86058-7baf7d67c45cf07b.js +0 -1
  200. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-8a954fb49eb6194d.js +0 -1
  201. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page-a8cbd8de6bdac5f1.js +0 -1
  202. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/new/page-b0aa444ce25a9163.js +0 -1
  203. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/page-6151fb67072fd844.js +0 -1
  204. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page-525136b6f3f8bbc1.js +0 -1
  205. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/new/page-fb5c4eb8ffcb005b.js +0 -1
  206. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/page-589a6f520bee59ef.js +0 -1
  207. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-92c4b0c043b9017b.js +0 -1
  208. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-f8ab102948037e59.js +0 -1
  209. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-78db9a24c159a560.js +0 -1
  210. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/external-agents/[externalAgentId]/edit/page-7ddf65c6e29524cc.js +0 -1
  211. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page-318b46c144e31fe6.js +0 -1
  212. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page-cb41d6099043e89b.js +0 -1
  213. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/new/page-2ee1d8bd566b2464.js +0 -1
  214. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-70b384dae15d2ae3.js +0 -1
  215. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-abed61f333180063.js +0 -1
  216. package/.next/standalone/agents-manage-ui/.next/static/css/31178030b73a06ca.css +0 -1
  217. /package/.next/standalone/agents-manage-ui/.next/static/{Q71tqQj8taybcSmTlcTR6 → At1iGs09dqE60J93w2PO0}/_buildManifest.js +0 -0
  218. /package/.next/standalone/agents-manage-ui/.next/static/{Q71tqQj8taybcSmTlcTR6 → At1iGs09dqE60J93w2PO0}/_ssgManifest.js +0 -0
@@ -1,5 +1,5 @@
1
1
  import { Info } from 'lucide-react';
2
- import { forwardRef } from 'react';
2
+ import type { ChangeEvent, FC, Ref } from 'react';
3
3
  import { Input } from '@/components/ui/input';
4
4
  import { Label } from '@/components/ui/label';
5
5
  import { Textarea } from '@/components/ui/textarea';
@@ -11,7 +11,7 @@ interface BaseFieldProps {
11
11
  name: string;
12
12
  label: string;
13
13
  value: string;
14
- onChange: (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void;
14
+ onChange: (e: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void;
15
15
  placeholder?: string;
16
16
  error?: string;
17
17
  className?: string;
@@ -23,115 +23,112 @@ interface BaseFieldProps {
23
23
 
24
24
  interface InputFieldProps extends BaseFieldProps {
25
25
  type?: 'text' | 'email' | 'password' | 'url';
26
+ ref?: Ref<HTMLInputElement>;
26
27
  }
27
28
 
28
29
  interface TextareaFieldProps extends BaseFieldProps {
29
30
  maxHeight?: string;
31
+ ref?: Ref<HTMLTextAreaElement>;
30
32
  }
31
33
 
32
- export const InputField = forwardRef<HTMLInputElement, InputFieldProps>(
33
- (
34
- {
35
- id,
36
- name,
37
- label,
38
- value,
39
- onChange,
40
- placeholder,
41
- error,
42
- className = '',
43
- description,
44
- tooltip,
45
- type = 'text',
46
- isRequired = false,
47
- disabled = false,
48
- },
49
- ref
50
- ) => {
51
- return (
52
- <div className="space-y-2">
53
- <Label htmlFor={id} className={cn(error ? 'text-red-600' : '', 'gap-1')}>
54
- {label}
55
- {isRequired && <span className="text-red-500">*</span>}
56
- {tooltip && (
57
- <Tooltip>
58
- <TooltipTrigger>
59
- <Info className="w-3 h-3 text-muted-foreground ml-1" />
60
- </TooltipTrigger>
61
- <TooltipContent className="break-words">{tooltip}</TooltipContent>
62
- </Tooltip>
63
- )}
64
- </Label>
65
- <Input
66
- ref={ref}
67
- id={id}
68
- name={name}
69
- type={type}
70
- value={value}
71
- onChange={onChange}
72
- placeholder={placeholder}
73
- data-invalid={error ? '' : undefined}
74
- className={`w-full data-invalid:border-red-300 data-invalid:focus-visible:border-red-300 data-invalid:focus-visible:ring-red-300 ${className}`}
75
- disabled={disabled}
76
- />
77
- {error && <p className="text-sm text-red-600">{error}</p>}
78
- {description && <p className="text-xs text-muted-foreground">{description}</p>}
79
- </div>
80
- );
81
- }
82
- );
34
+ export const InputField: FC<InputFieldProps> = ({
35
+ id,
36
+ name,
37
+ label,
38
+ value,
39
+ onChange,
40
+ placeholder,
41
+ error,
42
+ className,
43
+ description,
44
+ tooltip,
45
+ type = 'text',
46
+ isRequired,
47
+ disabled,
48
+ ref,
49
+ }) => {
50
+ return (
51
+ <div className="space-y-2">
52
+ <Label htmlFor={id} className={cn(error && 'text-red-600', 'gap-1')}>
53
+ {label}
54
+ {isRequired && <span className="text-red-500">*</span>}
55
+ {tooltip && (
56
+ <Tooltip>
57
+ <TooltipTrigger>
58
+ <Info className="w-3 h-3 text-muted-foreground ml-1" />
59
+ </TooltipTrigger>
60
+ <TooltipContent className="break-words">{tooltip}</TooltipContent>
61
+ </Tooltip>
62
+ )}
63
+ </Label>
64
+ <Input
65
+ ref={ref}
66
+ id={id}
67
+ name={name}
68
+ type={type}
69
+ value={value}
70
+ onChange={onChange}
71
+ placeholder={placeholder}
72
+ aria-invalid={error ? 'true' : undefined}
73
+ className={cn(
74
+ 'aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40',
75
+ className
76
+ )}
77
+ disabled={disabled}
78
+ />
79
+ {error && <p className="text-sm text-red-600">{error}</p>}
80
+ {description && <p className="text-xs text-muted-foreground">{description}</p>}
81
+ </div>
82
+ );
83
+ };
83
84
 
84
- InputField.displayName = 'InputField';
85
-
86
- export const TextareaField = forwardRef<HTMLTextAreaElement, TextareaFieldProps>(
87
- (
88
- {
89
- id,
90
- name,
91
- label,
92
- value,
93
- onChange,
94
- placeholder,
95
- error,
96
- className = '',
97
- description,
98
- tooltip,
99
- maxHeight = 'max-h-96',
100
- isRequired = false,
101
- disabled = false,
102
- },
103
- ref
104
- ) => {
105
- return (
106
- <div className="space-y-2">
107
- <Label htmlFor={id} className={cn(error ? 'text-red-600' : '', 'gap-1')}>
108
- {label}
109
- {isRequired && <span className="text-red-500">*</span>}
110
- {tooltip && (
111
- <Tooltip>
112
- <TooltipTrigger>
113
- <Info className="w-3 h-3 text-muted-foreground ml-1" />
114
- </TooltipTrigger>
115
- <TooltipContent className="break-words">{tooltip}</TooltipContent>
116
- </Tooltip>
117
- )}
118
- </Label>
119
- <Textarea
120
- ref={ref}
121
- id={id}
122
- name={name}
123
- value={value}
124
- onChange={onChange}
125
- placeholder={placeholder}
126
- data-invalid={error ? '' : undefined}
127
- className={`w-full ${maxHeight} data-invalid:border-red-300 data-invalid:focus-visible:border-red-300 data-invalid:focus-visible:ring-red-300 ${className}`}
128
- disabled={disabled}
129
- />
130
- {error && <p className="text-sm text-red-600">{error}</p>}
131
- {description && <p className="text-xs text-muted-foreground">{description}</p>}
132
- </div>
133
- );
134
- }
135
- );
136
-
137
- TextareaField.displayName = 'TextareaField';
85
+ export const TextareaField: FC<TextareaFieldProps> = ({
86
+ id,
87
+ name,
88
+ label,
89
+ value,
90
+ onChange,
91
+ placeholder,
92
+ error,
93
+ className,
94
+ description,
95
+ tooltip,
96
+ maxHeight = 'max-h-96',
97
+ isRequired,
98
+ disabled,
99
+ ref,
100
+ }) => {
101
+ return (
102
+ <div className="space-y-2">
103
+ <Label htmlFor={id} className={cn(error && 'text-red-600', 'gap-1')}>
104
+ {label}
105
+ {isRequired && <span className="text-red-500">*</span>}
106
+ {tooltip && (
107
+ <Tooltip>
108
+ <TooltipTrigger>
109
+ <Info className="w-3 h-3 text-muted-foreground ml-1" />
110
+ </TooltipTrigger>
111
+ <TooltipContent className="break-words">{tooltip}</TooltipContent>
112
+ </Tooltip>
113
+ )}
114
+ </Label>
115
+ <Textarea
116
+ ref={ref}
117
+ id={id}
118
+ name={name}
119
+ value={value}
120
+ onChange={onChange}
121
+ placeholder={placeholder}
122
+ aria-invalid={error ? 'true' : undefined}
123
+ className={cn(
124
+ 'aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40',
125
+ maxHeight,
126
+ className
127
+ )}
128
+ disabled={disabled}
129
+ />
130
+ {error && <p className="text-sm text-red-600">{error}</p>}
131
+ {description && <p className="text-xs text-muted-foreground">{description}</p>}
132
+ </div>
133
+ );
134
+ };
@@ -144,7 +144,8 @@ export function SubAgentNodeEditor({
144
144
 
145
145
  <div className="space-y-2">
146
146
  <ExpandablePromptEditor
147
- id="prompt"
147
+ key={selectedNode.id}
148
+ name="prompt"
148
149
  value={selectedNode.data.prompt}
149
150
  onChange={(value) => updatePath('prompt', value)}
150
151
  placeholder="You are a helpful assistant..."
@@ -2,6 +2,7 @@ import type { Edge, Node } from '@xyflow/react';
2
2
  import { useEdges, useNodesData } from '@xyflow/react';
3
3
  import { type LucideIcon, Workflow } from 'lucide-react';
4
4
  import { useMemo } from 'react';
5
+ import { useAgentStore } from '@/features/agent/state/use-agent-store';
5
6
  import { useAgentErrors } from '@/hooks/use-agent-errors';
6
7
  import type { ArtifactComponent } from '@/lib/api/artifact-components';
7
8
  import type { Credential } from '@/lib/api/credentials';
@@ -64,6 +65,7 @@ export function SidePane({
64
65
  const selectedNode = useNodesData(selectedNodeId || '');
65
66
  const edges = useEdges();
66
67
  const { hasFieldError, getFieldErrorMessage, getFirstErrorField } = useAgentErrors();
68
+ const errors = useAgentStore((state) => state.errors);
67
69
 
68
70
  const selectedEdge = useMemo(
69
71
  () => (selectedEdgeId ? edges.find((edge) => edge.id === selectedEdgeId) : null),
@@ -183,6 +185,8 @@ export function SidePane({
183
185
  credentialLookup,
184
186
  subAgentExternalAgentConfigLookup,
185
187
  subAgentTeamAgentConfigLookup,
188
+ // Rerender sidepane when errors changes
189
+ errors,
186
190
  ]);
187
191
 
188
192
  const showBackButton = selectedNode || selectedEdge;
@@ -10,10 +10,21 @@ interface CodeEditorProps extends Omit<ComponentProps<typeof MonacoEditor>, 'uri
10
10
  export const CodeEditor: FC<CodeEditorProps> = ({
11
11
  uri,
12
12
  placeholder = 'Enter code...',
13
+ editorOptions,
13
14
  ...props
14
15
  }) => {
15
16
  const id = useId();
16
17
  uri ??= `${id}.jsx`;
17
18
 
18
- return <MonacoEditor uri={uri} placeholder={placeholder} {...props} />;
19
+ return (
20
+ <MonacoEditor
21
+ uri={uri}
22
+ placeholder={placeholder}
23
+ editorOptions={{
24
+ ariaLabel: 'Code editor',
25
+ ...editorOptions,
26
+ }}
27
+ {...props}
28
+ />
29
+ );
19
30
  };
@@ -29,26 +29,30 @@ export function ExpandableCodeEditor({
29
29
  isRequired,
30
30
  }: ExpandableCodeEditorProps) {
31
31
  const [open, setOpen] = useState(false);
32
-
32
+ const uri = `${open ? 'expanded-' : ''}${name}.jsx` as const;
33
+ const id = `${name}-label`;
33
34
  return (
34
35
  <ExpandableField
36
+ id={id}
35
37
  open={open}
36
38
  onOpenChange={setOpen}
37
- name={name}
39
+ uri={uri}
38
40
  label={label}
39
41
  className={className}
40
42
  isRequired={isRequired}
43
+ hasError={!!error}
41
44
  >
42
45
  <CodeEditor
43
- id={name}
46
+ uri={uri}
44
47
  value={value}
45
48
  onChange={onChange}
46
49
  placeholder={placeholder}
47
- aria-invalid={!!error}
50
+ aria-invalid={error ? 'true' : undefined}
48
51
  hasDynamicHeight={!open}
49
52
  className={cn(!open && error && 'max-h-96')}
53
+ aria-labelledby={id}
50
54
  />
51
- {error && <p className="text-sm mt-1 text-destructive">{error}</p>}
55
+ {error && <p className="text-sm text-red-600">{error}</p>}
52
56
  </ExpandableField>
53
57
  );
54
58
  }
@@ -67,16 +67,18 @@ export function ExpandableJsonEditor({
67
67
  !!(externalError || internalError)
68
68
  );
69
69
  const [open, setOpen] = useState(false);
70
-
70
+ const uri = `${open ? 'expanded-' : ''}${name}.json` as const;
71
71
  const error = externalError || internalError;
72
-
72
+ const id = `${name}-label`;
73
73
  return (
74
74
  <ExpandableField
75
+ id={id}
75
76
  open={open}
76
77
  onOpenChange={setOpen}
77
- name={name}
78
+ uri={uri}
78
79
  label={label}
79
80
  className={className}
81
+ hasError={!!error}
80
82
  actions={
81
83
  <Button
82
84
  type="button"
@@ -91,15 +93,16 @@ export function ExpandableJsonEditor({
91
93
  }
92
94
  >
93
95
  <JsonEditor
94
- id={name}
96
+ uri={uri}
95
97
  value={value}
96
98
  onChange={onChange}
97
99
  placeholder={placeholder}
98
- aria-invalid={!!error}
100
+ aria-invalid={error ? 'true' : undefined}
99
101
  className={cn(!open && error && 'max-h-96')}
100
102
  hasDynamicHeight={!open}
103
+ aria-labelledby={id}
101
104
  />
102
- {error && <p className="text-sm mt-1 text-destructive absolute -bottom-6">{error}</p>}
105
+ {error && <p className="text-sm text-red-600">{error}</p>}
103
106
  </ExpandableField>
104
107
  );
105
108
  }
@@ -7,13 +7,16 @@ import { Button } from '@/components/ui/button';
7
7
  import { useMonacoStore } from '@/features/agent/state/use-monaco-store';
8
8
  import { cn } from '@/lib/utils';
9
9
 
10
- type PromptEditorProps = ComponentProps<typeof PromptEditor>;
10
+ type PromptEditorProps = ComponentProps<typeof PromptEditor> & {
11
+ name: string;
12
+ };
11
13
 
12
14
  export function ExpandablePromptEditor({
13
15
  label,
14
16
  isRequired = false,
15
17
  className,
16
18
  error,
19
+ name,
17
20
  ...props
18
21
  }: {
19
22
  label: string;
@@ -22,7 +25,7 @@ export function ExpandablePromptEditor({
22
25
  } & PromptEditorProps) {
23
26
  const [open, onOpenChange] = useState(false);
24
27
  const monaco = useMonacoStore((state) => state.monaco);
25
- const uri = `${open ? 'small' : 'full'}-${props.id}.template` as const;
28
+ const uri = `${open ? 'expanded-' : ''}${name}.template` as const;
26
29
 
27
30
  const handleAddVariable = useCallback(() => {
28
31
  if (!monaco) {
@@ -45,13 +48,17 @@ export function ExpandablePromptEditor({
45
48
  editor.trigger('insert-template-variable', 'editor.action.triggerSuggest', {});
46
49
  }, [monaco, uri]);
47
50
 
51
+ const id = `${name}-label`;
52
+
48
53
  return (
49
54
  <ExpandableField
55
+ id={id}
50
56
  open={open}
51
57
  onOpenChange={onOpenChange}
52
- name={props.id || 'expandable-textarea'}
58
+ uri={uri}
53
59
  label={label}
54
60
  isRequired={isRequired}
61
+ hasError={!!error}
55
62
  actions={
56
63
  <Button
57
64
  size="sm"
@@ -68,12 +75,13 @@ export function ExpandablePromptEditor({
68
75
  <PromptEditor
69
76
  uri={uri}
70
77
  autoFocus={open}
71
- aria-invalid={!!error}
78
+ aria-invalid={error ? 'true' : undefined}
72
79
  className={cn(!open && 'max-h-96', className)}
73
80
  hasDynamicHeight={!open}
81
+ aria-labelledby={id}
74
82
  {...props}
75
83
  />
76
- {error && <p className="text-sm mt-1 text-destructive absolute -bottom-6">{error}</p>}
84
+ {error && <p className="text-sm text-red-600">{error}</p>}
77
85
  </ExpandableField>
78
86
  );
79
87
  }
@@ -7,8 +7,17 @@ interface JsonEditorProps extends Omit<ComponentProps<typeof MonacoEditor>, 'uri
7
7
  uri?: `${string}.json`;
8
8
  }
9
9
 
10
- export const JsonEditor: FC<JsonEditorProps> = ({ uri, ...props }) => {
10
+ export const JsonEditor: FC<JsonEditorProps> = ({ uri, editorOptions, ...props }) => {
11
11
  const id = useId();
12
12
  uri ??= `${id}.json`;
13
- return <MonacoEditor uri={uri} {...props} />;
13
+ return (
14
+ <MonacoEditor
15
+ uri={uri}
16
+ editorOptions={{
17
+ ariaLabel: 'JSON editor',
18
+ ...editorOptions,
19
+ }}
20
+ {...props}
21
+ />
22
+ );
14
23
  };
@@ -91,7 +91,7 @@ export const MonacoEditor: FC<MonacoEditorProps> = ({
91
91
  '[--vscode-editor-background:transparent]!',
92
92
  '[--vscode-editorGutter-background:transparent]!',
93
93
  '[--vscode-focusBorder:transparent]!',
94
- ].join('\n'),
94
+ ].join(' '),
95
95
  automaticLayout: true,
96
96
  minimap: { enabled: false }, // disable the minimap
97
97
  overviewRulerLanes: 0, // remove unnecessary error highlight on the scroll
@@ -85,6 +85,7 @@ export const PromptEditor: FC<PromptEditorProps> = ({ uri, editorOptions, onMoun
85
85
  editorOptions={{
86
86
  autoClosingBrackets: 'never',
87
87
  renderLineHighlight: 'none', // disable active line highlight
88
+ ariaLabel: 'Prompt input editor',
88
89
  ...editorOptions,
89
90
  }}
90
91
  {...props}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import { Maximize } from 'lucide-react';
4
- import type { ComponentProps, ReactNode } from 'react';
4
+ import { type ComponentProps, type ReactNode, useCallback } from 'react';
5
5
  import { Button } from '@/components/ui/button';
6
6
  import {
7
7
  Dialog,
@@ -11,12 +11,13 @@ import {
11
11
  DialogTrigger,
12
12
  } from '@/components/ui/dialog';
13
13
  import { Label } from '@/components/ui/label';
14
+ import { useMonacoStore } from '@/features/agent/state/use-monaco-store';
14
15
  import { cn } from '@/lib/utils';
15
16
 
16
17
  type DialogProps = Required<ComponentProps<typeof Dialog>>;
17
18
 
18
19
  interface ExpandableFieldProps {
19
- name: string;
20
+ uri: string;
20
21
  label: string;
21
22
  className?: string;
22
23
  children: ReactNode;
@@ -24,21 +25,36 @@ interface ExpandableFieldProps {
24
25
  isRequired?: boolean;
25
26
  open: DialogProps['open'];
26
27
  onOpenChange: DialogProps['onOpenChange'];
28
+ hasError?: boolean;
29
+ id: string;
27
30
  }
28
31
 
29
32
  export function ExpandableField({
30
- name,
33
+ id,
34
+ uri,
31
35
  label,
32
36
  children,
33
37
  actions,
34
38
  isRequired = false,
35
39
  open,
36
40
  onOpenChange,
41
+ hasError,
37
42
  }: ExpandableFieldProps) {
43
+ const monaco = useMonacoStore((state) => state.monaco);
44
+
45
+ const handleClick = useCallback(() => {
46
+ if (!monaco) {
47
+ return;
48
+ }
49
+ const model = monaco.editor.getModel(monaco.Uri.parse(uri));
50
+ const [editor] = monaco.editor.getEditors().filter((editor) => editor.getModel() === model);
51
+ editor?.focus();
52
+ }, [monaco, uri]);
53
+
38
54
  const content = (
39
55
  <>
40
56
  <div className="flex items-center justify-between">
41
- <Label className="gap-1" htmlFor={name}>
57
+ <Label id={id} className={cn(hasError && 'text-red-600', 'gap-1')} onClick={handleClick}>
42
58
  {label}
43
59
  {isRequired && <span className="text-red-500">*</span>}
44
60
  </Label>
@@ -54,7 +70,7 @@ export function ExpandableField({
54
70
  )}
55
71
  </div>
56
72
  </div>
57
- <div className={cn('relative', open && 'grow')}>{children}</div>
73
+ <div className={cn('relative space-y-2', open && 'grow')}>{children}</div>
58
74
  </>
59
75
  );
60
76
 
package/src/env.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  declare namespace globalThis {
2
2
  import type * as Monaco from 'monaco-editor';
3
3
  var MonacoEnvironment: Monaco.Environment;
4
+ // For cypress
5
+ var monaco: Monaco;
4
6
  }
5
7
 
6
8
  declare module '*.svg?svgr' {
@@ -2,7 +2,7 @@ import type { Edge, Node } from '@xyflow/react';
2
2
  import { EdgeType } from '@/components/agent/configuration/edge-types';
3
3
  import type { AgentNodeData, MCPNodeData } from '@/components/agent/configuration/node-types';
4
4
  import { NodeType } from '@/components/agent/configuration/node-types';
5
- import { serializeAgentData } from '../serialize';
5
+ import { isContextConfigParseError, serializeAgentData } from '../serialize';
6
6
 
7
7
  describe('serializeAgentData', () => {
8
8
  describe('models object processing', () => {
@@ -416,4 +416,71 @@ describe('serializeAgentData', () => {
416
416
  });
417
417
  });
418
418
  });
419
+
420
+ describe('`contextConfig` parsing', () => {
421
+ const baseNodes: Node<AgentNodeData>[] = [];
422
+ const edges: Edge[] = [];
423
+
424
+ it('throws when `contextVariables` contains invalid JSON', () => {
425
+ try {
426
+ serializeAgentData(
427
+ baseNodes,
428
+ edges,
429
+ {
430
+ // @ts-expect-error -- ignore
431
+ contextConfig: { contextVariables: '{' },
432
+ },
433
+ {},
434
+ {},
435
+ {}
436
+ );
437
+ throw new Error('Expected `serializeAgentData` to throw');
438
+ } catch (error) {
439
+ expect(isContextConfigParseError(error)).toBe(true);
440
+ if (isContextConfigParseError(error)) {
441
+ expect(error.field).toBe('contextVariables');
442
+ }
443
+ }
444
+ });
445
+
446
+ it('throws when `headersSchema` contains invalid JSON', () => {
447
+ try {
448
+ serializeAgentData(
449
+ baseNodes,
450
+ edges,
451
+ {
452
+ // @ts-expect-error -- ignore
453
+ contextConfig: { headersSchema: '{' },
454
+ },
455
+ {},
456
+ {},
457
+ {}
458
+ );
459
+ throw new Error('Expected `serializeAgentData` to throw');
460
+ } catch (error) {
461
+ expect(isContextConfigParseError(error)).toBe(true);
462
+ if (isContextConfigParseError(error)) {
463
+ expect(error.field).toBe('headersSchema');
464
+ }
465
+ }
466
+ });
467
+
468
+ it('allows valid JSON payloads', () => {
469
+ const result = serializeAgentData(
470
+ baseNodes,
471
+ edges,
472
+ // @ts-expect-error -- ignore
473
+ {
474
+ contextConfig: {
475
+ contextVariables: '{"foo":"bar"}',
476
+ headersSchema: '{"type":"object"}',
477
+ },
478
+ },
479
+ {},
480
+ {},
481
+ {}
482
+ );
483
+ expect(result).toBeTruthy();
484
+ });
485
+ });
419
486
  });