@inkeep/agents-manage-ui 0.12.0 → 0.13.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.
- package/.next/standalone/agents-manage-ui/.next/BUILD_ID +1 -1
- package/.next/standalone/agents-manage-ui/.next/app-build-manifest.json +344 -348
- package/.next/standalone/agents-manage-ui/.next/app-path-routes-manifest.json +6 -6
- package/.next/standalone/agents-manage-ui/.next/build-manifest.json +2 -2
- package/.next/standalone/agents-manage-ui/.next/prerender-manifest.json +13 -13
- package/.next/standalone/agents-manage-ui/.next/react-loadable-manifest.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/page.js.nft.json +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.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/api-keys/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/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.js.nft.json +1 -1
- 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 +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page.js +3 -3
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page.js +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.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page.js.nft.json +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 +9 -9
- package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/route.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/route.js.nft.json +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.js.nft.json +1 -1
- 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 +6 -6
- package/.next/standalone/agents-manage-ui/.next/server/chunks/1670.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/195.js +21 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/2190.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/2415.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/245.js +55 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/2496.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/2539.js +13 -13
- package/.next/standalone/agents-manage-ui/.next/server/chunks/2606.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/2916.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/320.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/3485.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/3547.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/{1933.js → 3672.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/{7503.js → 3884.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/3948.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/4843.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/5517.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/{7001.js → 5716.js} +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/chunks/5797.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/chunks/{7020.js → 6007.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/6212.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/6229.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/6351.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/6525.js +4087 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/6721.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/6747.js +10 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/694.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/7346.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/7511.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/7538.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/8048.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/8100.js +211 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/8321.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/8610.js +25 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/8615.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/9128.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/9340.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/9490.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/9754.js +1 -55
- package/.next/standalone/agents-manage-ui/.next/server/chunks/9892.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/{1577-0df32275eaf5d398.js → 102-7512914c45c3b1c7.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{2706-4fe94ba08fad72de.js → 1064-f747155da2f9bf6e.js} +61 -61
- package/.next/standalone/agents-manage-ui/.next/static/chunks/1191-22286038e3cf98ee.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/1482-9b4bf21cc7c344fc.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/1558-8cb46768b5585f53.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/1771-5ceaf6a0f3601ad4.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/1907-4a95aef238167de5.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{2063-3f9e00e568b9fbd9.js → 2063-00dd6285929e419a.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/225-12afe2ed1ce8f747.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/2334-9c0d908003b40bcd.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{8b56a9fc-190bd97ffda2165f.js → 24a2b255-903019441fb58706.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{2501-235de6a1719d22be.js → 2501-85880c1e62f3270a.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{3862-15cadd19b256aa73.js → 2597-b309d80128db51fe.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/2811-5cbe9d781cd0bafb.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/3737-2a02432078b2f2f0.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/397-611c044fe87d89cd.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{1d27a36c-d2d09454474eca1a.js → 4a1e02d9-c537fee21142b0db.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/6118-2a02432078b2f2f0.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/6410-f93d663c6ef0d128.js +2 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{3803-1ffa84f6122f67f8.js → 6419-cc97e3d16c7907dd.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/645-18422068b91714c4.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/6497-2a72e838c6240f76.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/6501-2c90923d1b2f0f3e.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/7167-8e3d7b9e316f636b.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/7273-2a07799b9220335f.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/7305-4bde6b1356d61f7a.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/776-1b93689bfa34311b.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{7775-ec1fa275bc3e6717.js → 7775-846c2c087ca8b724.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/7829-0a56074397c08ece.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/7904-825c751bfba62e0d.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/8057-4851dad2e4c79710.js +2 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/8130-c153c48b1fab6cb4.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{8197-a41c5aa502a71e0c.js → 8197-93dc03bb0bdcd89b.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/8467-977d32f1b1634139.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/8486-01fbe9371d862c28.js +25 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/8499-2a02432078b2f2f0.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/880-2a02432078b2f2f0.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/8831-9d23a1d8c9fb3858.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/926-2d2311c975e35a35.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/9425-43d6833e2edd012c.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/9846-e037fda0c364e432.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/{error-9b1788d15a572652.js → error-98ca4c8d51368705.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-c241f711010e7e13.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/{error-f4e04a252a003510.js → error-ef3511a0253a1330.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page-c3c91cd61be884a4.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/{error-8e7ee0b452e16bf3.js → error-0672656e9e678998.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/loading-0afec83059c372f2.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/new/page-c3c91cd61be884a4.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/page-ebf80aff5a2957f1.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/{error-0d5c117cb7d999c9.js → error-be8b5708f23d2e43.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page-6e9e120e0f0235de.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/{error-9499695753aa33ec.js → error-3b86172a5fe22d1c.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/loading-0afec83059c372f2.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/new/page-6e9e120e0f0235de.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/page-930b7126b9182e8d.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-72c57c0fb9389280.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/{error-409d41bd0525f22f.js → error-30b8013604e83604.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-9deb7adcdeed1a80.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/page-0afec83059c372f2.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-ea02a056bccd6124.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/page-9e9e45f4ed4671bd.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/page-a842eee6a4322d45.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/graphs/[graphId]/{error-8da8330295a84328.js → error-e6e8d53b544b7a3a.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/graphs/[graphId]/loading-cb0a860db0fa369e.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/graphs/[graphId]/page-21f1392ae65ea31a.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/graphs/{error-9cf04dc4aab414a2.js → error-80ac013e2e0d39ec.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/graphs/loading-0afec83059c372f2.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/graphs/new/page-b7ee3944e6a5c03d.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/graphs/{page-e16634fbbf6ba350.js → page-eb9c74bbc66bae57.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/{page-c1587a84a6de6faa.js → page-4498950740edb744.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/{page-653ca9c1d193612c.js → page-3b5ec607247c0070.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/new/layout-cb0a860db0fa369e.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/new/page-05827d40bb0aaf12.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/page-ababf7c5aa5e0bc0.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/{not-found-7f8ddb0d42ccf26c.js → not-found-abb1f829baf33e89.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/settings/{error-9be350c37252135d.js → error-eca20c06c32063db.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/settings/{page-1ad1329e9cb6ef07.js → page-d5fe05a40d56d36d.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/ai-calls/page-e1fbd32969de96cb.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/{page-b9deaa2fcd232705.js → page-59d660fb7778e22d.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-663da25347087a0f.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/{error-d0668aab86c9a04e.js → error-f217058bf7db150a.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/loading-0afec83059c372f2.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/page-1c25a0513febf08b.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-462211bdc5e56272.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/css/ff74e9dcb72fa41b.css +1 -0
- package/.next/standalone/agents-manage-ui/package.json +5 -2
- package/.next/standalone/package.json +8 -1
- package/.next/standalone/packages/agents-core/package.json +2 -2
- package/package.json +8 -5
- package/src/components/credentials/views/generic-auth-form.tsx +1 -1
- package/src/components/form/expandable-field.tsx +17 -11
- package/src/components/form/generic-input.tsx +2 -2
- package/src/components/form/prompt-editor.tsx +245 -0
- package/src/components/graph/graph.tsx +7 -5
- package/src/components/graph/nodes/agent-node.tsx +4 -2
- package/src/components/graph/nodes/mcp-node.tsx +5 -3
- package/src/components/graph/sidepane/edges/edge-editor.tsx +2 -2
- package/src/components/graph/sidepane/metadata/metadata-editor.tsx +3 -4
- package/src/components/graph/sidepane/nodes/agent-node-editor.tsx +2 -4
- package/src/components/graph/sidepane/nodes/expandable-text-area.tsx +54 -14
- package/src/components/graph/sidepane/nodes/mcp-node-editor.tsx +6 -4
- package/src/components/projects/form/form-configuration.ts +1 -1
- package/src/components/projects/form/project-form.tsx +14 -8
- package/src/components/projects/form/project-models-section.tsx +26 -2
- package/src/components/projects/form/project-stopwhen-section.tsx +18 -2
- package/src/components/projects/form/validation.ts +13 -4
- package/src/components/projects/project-item.tsx +2 -1
- package/src/features/graph/commands/commands.ts +24 -24
- package/src/features/graph/state/use-graph-store.ts +199 -172
- package/src/features/graph/ui/use-graph-shortcuts.ts +2 -2
- package/src/hooks/use-graph-errors.ts +7 -9
- package/src/hooks/use-node-editor.ts +4 -4
- package/src/lib/__tests__/context-suggestions.test.ts +205 -0
- package/src/lib/context-suggestions.ts +102 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/189.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/2212.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/2745.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/2749.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/3082.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/3468.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/3508.js +0 -98
- package/.next/standalone/agents-manage-ui/.next/server/chunks/3859.js +0 -25
- package/.next/standalone/agents-manage-ui/.next/server/chunks/5232.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/6749.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/6997.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/7373.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/7577.js +0 -211
- package/.next/standalone/agents-manage-ui/.next/server/chunks/8449.js +0 -10
- package/.next/standalone/agents-manage-ui/.next/server/chunks/9459.js +0 -4087
- package/.next/standalone/agents-manage-ui/.next/static/chunks/1122-8db1ba2ae3171a66.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/1278-51b8dfa15b83a027.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/1558-436164db937a531a.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/1907-0b40d23e09c01b49.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/2254-cc7102683251739e.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/2860-23cac986bdbc6f0d.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/2960-b37d998249a08bdd.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/3241-a114b4dae45882c2.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/384-a114b4dae45882c2.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/4258-6c416bb91f9962d0.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/4420-1006bcd3841d18ce.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/4690-df4b1a152d4a32fa.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/4773-c967811882d19608.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/5016-5212df5572c00450.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/5200-a92c33fc465d2ed6.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/5397-82d7c4a0c636b60e.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/5622-a114b4dae45882c2.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/6329-2f2d0a0417a77117.js +0 -2
- package/.next/standalone/agents-manage-ui/.next/static/chunks/6497-a7da874c33afd560.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/7167-84a6a1036d4ad8b9.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/7210-ed4b9b414a7bf114.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/7305-aac20b5da6ee7f39.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/7394-b444a34c3232ffe7.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/7674-b1c4e03f250a7863.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/7994-95135bda825a0b62.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/8003-a114b4dae45882c2.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/8246-7cc0530a582c679b.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/8831-3568b9a5c520254b.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/9098-b626908a872b75eb.js +0 -2
- package/.next/standalone/agents-manage-ui/.next/static/chunks/9773-05b506b28d6e39a2.js +0 -25
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-a77bea18c2ec4ddf.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page-bd3483f62fc4cfa6.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/loading-f16e83f5a76314a9.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/new/page-bd3483f62fc4cfa6.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/page-ab237a58ec5484e3.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page-43fa3e7cf1f000d9.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/loading-f16e83f5a76314a9.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/new/page-43fa3e7cf1f000d9.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/page-2f2f306471f494fb.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-c8a3cd07bfba729e.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-7917e532e48d68bc.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/page-f16e83f5a76314a9.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-bf4c5ee1fcd0a1f8.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/page-38d3932163173796.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/page-f6d7e7f8ecab1e3c.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/graphs/[graphId]/loading-2868de136b155d0e.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/graphs/[graphId]/page-d6f01d6d7fe69cea.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/graphs/loading-f16e83f5a76314a9.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/graphs/new/page-0d87ce40bb16c1de.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/new/layout-2868de136b155d0e.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/new/page-e7510fbf0b60102e.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/page-d6e247dbe00dedc9.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/ai-calls/page-597f4ccaf9557e60.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-64699c02792faa9e.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/loading-f16e83f5a76314a9.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/page-f8a28b248b84c95c.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-113eab9fed572fa2.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/css/e970895dc785a75c.css +0 -1
- /package/.next/standalone/agents-manage-ui/.next/static/{5x4YI62SrSI7BFnjIZTQf → YQiRd4Be9CAfAPdCkur2K}/_buildManifest.js +0 -0
- /package/.next/standalone/agents-manage-ui/.next/static/{5x4YI62SrSI7BFnjIZTQf → YQiRd4Be9CAfAPdCkur2K}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import { type FC, type RefObject, useEffect, useImperativeHandle, useMemo, useRef } from 'react';
|
|
2
|
+
import { autocompletion, type CompletionSource, startCompletion } from '@codemirror/autocomplete';
|
|
3
|
+
import { Decoration, ViewPlugin, EditorView, type DecorationSet } from '@codemirror/view';
|
|
4
|
+
import { linter, type Diagnostic } from '@codemirror/lint';
|
|
5
|
+
import { duotoneDark, duotoneLight } from '@uiw/codemirror-theme-duotone';
|
|
6
|
+
import CodeMirror, {
|
|
7
|
+
type ReactCodeMirrorProps,
|
|
8
|
+
type Range,
|
|
9
|
+
type ReactCodeMirrorRef,
|
|
10
|
+
} from '@uiw/react-codemirror';
|
|
11
|
+
import { useTheme } from 'next-themes';
|
|
12
|
+
import { cn } from '@/lib/utils';
|
|
13
|
+
import { getContextSuggestions } from '@/lib/context-suggestions';
|
|
14
|
+
import { useGraphStore } from '@/features/graph/state/use-graph-store';
|
|
15
|
+
|
|
16
|
+
// Decoration for template variables
|
|
17
|
+
const templateVariableDecoration = Decoration.mark({
|
|
18
|
+
class: 'cm-template-variable',
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
// Plugin to highlight template variables
|
|
22
|
+
const templateVariablePlugin = ViewPlugin.fromClass(
|
|
23
|
+
class {
|
|
24
|
+
decorations: DecorationSet;
|
|
25
|
+
|
|
26
|
+
constructor(view: EditorView) {
|
|
27
|
+
this.decorations = this.buildDecorations(view);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
update(update: any) {
|
|
31
|
+
if (update.docChanged) {
|
|
32
|
+
this.decorations = this.buildDecorations(update.view);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
buildDecorations(view: EditorView): DecorationSet {
|
|
37
|
+
const decorations: Range<Decoration>[] = [];
|
|
38
|
+
const regex = /\{\{([^}]+)}}/g;
|
|
39
|
+
|
|
40
|
+
for (let i = 0; i < view.state.doc.lines; i++) {
|
|
41
|
+
const line = view.state.doc.line(i + 1);
|
|
42
|
+
let match: RegExpExecArray | null;
|
|
43
|
+
|
|
44
|
+
while ((match = regex.exec(line.text)) !== null) {
|
|
45
|
+
const from = line.from + match.index;
|
|
46
|
+
const to = line.from + match.index + match[0].length;
|
|
47
|
+
decorations.push(templateVariableDecoration.range(from, to));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return Decoration.set(decorations);
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
decorations: (v) => v.decorations,
|
|
56
|
+
}
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
// Theme for template variables
|
|
60
|
+
const templateVariableTheme = EditorView.theme({
|
|
61
|
+
'& .cm-template-variable': {
|
|
62
|
+
color: '#e67e22', // Orange color for variables
|
|
63
|
+
fontWeight: 'bold',
|
|
64
|
+
},
|
|
65
|
+
'&.cm-dark .cm-template-variable': {
|
|
66
|
+
color: '#f39c12', // Lighter orange for dark theme
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
const RESERVED_KEYS = new Set(['$time', '$date', '$timestamp', '$now']);
|
|
71
|
+
|
|
72
|
+
function isJMESPathExpressions(key: string): boolean {
|
|
73
|
+
if (key.startsWith('length(')) {
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
return key.includes('[?') || key.includes('[*]');
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Create linter for template variable validation
|
|
80
|
+
function createTemplateVariableLinter(suggestions: string[]) {
|
|
81
|
+
return linter((view) => {
|
|
82
|
+
const diagnostics: Diagnostic[] = [];
|
|
83
|
+
const validVariables = new Set(suggestions);
|
|
84
|
+
const regex = /\{\{([^}]+)}}/g;
|
|
85
|
+
|
|
86
|
+
for (let i = 0; i < view.state.doc.lines; i++) {
|
|
87
|
+
const line = view.state.doc.line(i + 1);
|
|
88
|
+
let match: RegExpExecArray | null;
|
|
89
|
+
|
|
90
|
+
while ((match = regex.exec(line.text)) !== null) {
|
|
91
|
+
const from = line.from + match.index;
|
|
92
|
+
const to = line.from + match.index + match[0].length;
|
|
93
|
+
const variableName = match[1];
|
|
94
|
+
|
|
95
|
+
// Check if variable is valid (in suggestions) or reserved
|
|
96
|
+
const isValid =
|
|
97
|
+
validVariables.has(variableName) ||
|
|
98
|
+
RESERVED_KEYS.has(variableName) ||
|
|
99
|
+
variableName.startsWith('$env.') ||
|
|
100
|
+
// Exclude arrays from linting, as they are indicated with [*] in the suggestions
|
|
101
|
+
variableName.includes('[') ||
|
|
102
|
+
isJMESPathExpressions(variableName);
|
|
103
|
+
|
|
104
|
+
if (!isValid) {
|
|
105
|
+
diagnostics.push({
|
|
106
|
+
from,
|
|
107
|
+
to,
|
|
108
|
+
severity: 'error',
|
|
109
|
+
message: `Unknown variable: ${variableName}`,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return diagnostics;
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Create autocomplete source for context variables
|
|
120
|
+
function createContextAutocompleteSource(suggestions: string[]): CompletionSource {
|
|
121
|
+
return (context) => {
|
|
122
|
+
const { state, pos } = context;
|
|
123
|
+
const line = state.doc.lineAt(pos);
|
|
124
|
+
const to = pos - line.from;
|
|
125
|
+
const textBefore = line.text.slice(0, to);
|
|
126
|
+
// Check if we're after a { character
|
|
127
|
+
const match = textBefore.match(/\{([^}]*)$/);
|
|
128
|
+
if (!match) return null;
|
|
129
|
+
|
|
130
|
+
const query = match[1].toLowerCase();
|
|
131
|
+
const filteredSuggestions = suggestions.filter((s) => s.toLowerCase().includes(query));
|
|
132
|
+
const nextChar = line.text[to];
|
|
133
|
+
return {
|
|
134
|
+
from: pos - match[1].length,
|
|
135
|
+
to: pos,
|
|
136
|
+
options: ['$env.', ...RESERVED_KEYS, ...filteredSuggestions].map((suggestion) => ({
|
|
137
|
+
label: suggestion,
|
|
138
|
+
apply: `{${suggestion}${nextChar === '}' ? '}' : '}}'}`, // insert `}}` at the end if next character is not `}`
|
|
139
|
+
})),
|
|
140
|
+
};
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
export interface TextareaWithSuggestionsProps extends Omit<ReactCodeMirrorProps, 'onChange'> {
|
|
145
|
+
onChange: (value: string) => void;
|
|
146
|
+
placeholder?: string;
|
|
147
|
+
disabled?: boolean;
|
|
148
|
+
readOnly?: boolean;
|
|
149
|
+
ref?: RefObject<{ insertTemplateVariable: () => void }>;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
function tryJsonParse(json: string): object {
|
|
153
|
+
if (!json.trim()) {
|
|
154
|
+
return {};
|
|
155
|
+
}
|
|
156
|
+
try {
|
|
157
|
+
return JSON.parse(json);
|
|
158
|
+
} catch {}
|
|
159
|
+
return {};
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
export const PromptEditor: FC<TextareaWithSuggestionsProps> = ({
|
|
163
|
+
className,
|
|
164
|
+
value,
|
|
165
|
+
onChange,
|
|
166
|
+
placeholder,
|
|
167
|
+
disabled,
|
|
168
|
+
readOnly,
|
|
169
|
+
ref,
|
|
170
|
+
...rest
|
|
171
|
+
}) => {
|
|
172
|
+
const editorRef = useRef<ReactCodeMirrorRef | null>(null);
|
|
173
|
+
const { resolvedTheme } = useTheme();
|
|
174
|
+
const isDark = resolvedTheme === 'dark';
|
|
175
|
+
useEffect(() => {
|
|
176
|
+
editorRef.current = new EditorView();
|
|
177
|
+
}, []);
|
|
178
|
+
|
|
179
|
+
useImperativeHandle(ref, () => ({
|
|
180
|
+
insertTemplateVariable() {
|
|
181
|
+
const view = editorRef.current?.view;
|
|
182
|
+
if (!view) {
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
const { doc, selection } = view.state;
|
|
186
|
+
// If there's a caret, insert at caret; otherwise, fall back to end of the current line.
|
|
187
|
+
const insertPos = selection.main.empty ? selection.main.head : doc.line(doc.lines).to;
|
|
188
|
+
// Insert "{}" and put the cursor between
|
|
189
|
+
view.dispatch({
|
|
190
|
+
changes: { from: insertPos, to: insertPos, insert: '{}' },
|
|
191
|
+
selection: { anchor: insertPos + 1 },
|
|
192
|
+
scrollIntoView: true,
|
|
193
|
+
});
|
|
194
|
+
startCompletion(view);
|
|
195
|
+
},
|
|
196
|
+
}));
|
|
197
|
+
|
|
198
|
+
const contextConfig = useGraphStore((state) => state.metadata.contextConfig);
|
|
199
|
+
|
|
200
|
+
const extensions = useMemo(() => {
|
|
201
|
+
const contextVariables = tryJsonParse(contextConfig.contextVariables);
|
|
202
|
+
const requestContextSchema = tryJsonParse(contextConfig.requestContextSchema);
|
|
203
|
+
const suggestions = getContextSuggestions({
|
|
204
|
+
requestContextSchema,
|
|
205
|
+
// @ts-expect-error -- todo: improve type
|
|
206
|
+
contextVariables,
|
|
207
|
+
});
|
|
208
|
+
return [
|
|
209
|
+
autocompletion({
|
|
210
|
+
override: [createContextAutocompleteSource(suggestions)],
|
|
211
|
+
compareCompletions(_a, _b) {
|
|
212
|
+
// Disable default localCompare sorting
|
|
213
|
+
return -1;
|
|
214
|
+
},
|
|
215
|
+
}),
|
|
216
|
+
templateVariablePlugin,
|
|
217
|
+
templateVariableTheme,
|
|
218
|
+
createTemplateVariableLinter(suggestions),
|
|
219
|
+
];
|
|
220
|
+
}, [contextConfig]);
|
|
221
|
+
|
|
222
|
+
return (
|
|
223
|
+
<CodeMirror
|
|
224
|
+
ref={editorRef}
|
|
225
|
+
{...rest}
|
|
226
|
+
value={value || ''}
|
|
227
|
+
onChange={onChange}
|
|
228
|
+
extensions={extensions}
|
|
229
|
+
theme={isDark ? duotoneDark : duotoneLight}
|
|
230
|
+
placeholder={placeholder}
|
|
231
|
+
editable={!disabled && !readOnly}
|
|
232
|
+
basicSetup={{
|
|
233
|
+
lineNumbers: false,
|
|
234
|
+
foldGutter: false,
|
|
235
|
+
highlightActiveLine: false,
|
|
236
|
+
}}
|
|
237
|
+
data-disabled={disabled ? '' : undefined}
|
|
238
|
+
data-read-only={readOnly ? '' : undefined}
|
|
239
|
+
className={cn(
|
|
240
|
+
'h-full [&>.cm-editor]:max-h-[inherit] [&>.cm-editor]:!bg-transparent dark:[&>.cm-editor]:!bg-input/30 [&>.cm-editor]:!outline-none [&>.cm-editor]:rounded-[7px] [&>.cm-editor]:px-3 [&>.cm-editor]:py-2 leading-2 text-xs font-mono rounded-md border border-input shadow-xs transition-[color,box-shadow] data-disabled:cursor-not-allowed data-disabled:opacity-50 data-disabled:bg-muted data-invalid:border-destructive has-[.cm-focused]:border-ring has-[.cm-focused]:ring-ring/50 has-[.cm-focused]:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',
|
|
241
|
+
className
|
|
242
|
+
)}
|
|
243
|
+
/>
|
|
244
|
+
);
|
|
245
|
+
};
|
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
extractGraphMetadata,
|
|
27
27
|
serializeGraphData,
|
|
28
28
|
} from '@/features/graph/domain';
|
|
29
|
-
import { useGraphStore } from '@/features/graph/state/use-graph-store';
|
|
29
|
+
import { useGraphActions, useGraphStore } from '@/features/graph/state/use-graph-store';
|
|
30
30
|
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';
|
|
@@ -180,20 +180,22 @@ function Flow({
|
|
|
180
180
|
}, [graph?.agents]);
|
|
181
181
|
|
|
182
182
|
const { screenToFlowPosition, updateNodeData, fitView } = useReactFlow();
|
|
183
|
+
const { storeNodes, edges, metadata } = useGraphStore((state) => ({
|
|
184
|
+
storeNodes: state.nodes,
|
|
185
|
+
edges: state.edges,
|
|
186
|
+
metadata: state.metadata,
|
|
187
|
+
}));
|
|
183
188
|
const {
|
|
184
|
-
nodes: storeNodes,
|
|
185
|
-
edges,
|
|
186
189
|
setNodes,
|
|
187
190
|
setEdges,
|
|
188
191
|
onNodesChange,
|
|
189
192
|
onEdgesChange,
|
|
190
|
-
metadata,
|
|
191
193
|
setMetadata,
|
|
192
194
|
setInitial,
|
|
193
195
|
markSaved,
|
|
194
196
|
clearSelection,
|
|
195
197
|
markUnsaved,
|
|
196
|
-
} =
|
|
198
|
+
} = useGraphActions();
|
|
197
199
|
|
|
198
200
|
// Always use enriched nodes for ReactFlow
|
|
199
201
|
const nodes = useMemo(() => enrichNodes(storeNodes), [storeNodes, enrichNodes]);
|
|
@@ -46,8 +46,10 @@ export function AgentNode(props: NodeProps & { data: AgentNodeData }) {
|
|
|
46
46
|
const { name, isDefault, description, models } = data;
|
|
47
47
|
const modelName = models?.base?.model;
|
|
48
48
|
|
|
49
|
-
const dataComponentLookup = useGraphStore((state) =>
|
|
50
|
-
|
|
49
|
+
const { dataComponentLookup, artifactComponentLookup } = useGraphStore((state) => ({
|
|
50
|
+
dataComponentLookup: state.dataComponentLookup,
|
|
51
|
+
artifactComponentLookup: state.artifactComponentLookup,
|
|
52
|
+
}));
|
|
51
53
|
const { getNodeErrors, hasNodeErrors } = useGraphErrors();
|
|
52
54
|
|
|
53
55
|
// Use the agent ID from node data if available, otherwise fall back to React Flow node ID
|
|
@@ -12,9 +12,11 @@ const TOOLS_SHOWN_LIMIT = 4;
|
|
|
12
12
|
|
|
13
13
|
export function MCPNode(props: NodeProps & { data: MCPNodeData }) {
|
|
14
14
|
const { data, selected } = props;
|
|
15
|
-
const toolLookup = useGraphStore((state) =>
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
const { toolLookup, agentToolConfigLookup, edges } = useGraphStore((state) => ({
|
|
16
|
+
toolLookup: state.toolLookup,
|
|
17
|
+
agentToolConfigLookup: state.agentToolConfigLookup,
|
|
18
|
+
edges: state.edges,
|
|
19
|
+
}));
|
|
18
20
|
|
|
19
21
|
const name = data.name || `Tool: ${data.toolId}`;
|
|
20
22
|
const imageUrl = data.imageUrl;
|
|
@@ -3,7 +3,7 @@ import { Spline } from 'lucide-react';
|
|
|
3
3
|
import { DashedSplineIcon } from '@/components/icons/dashed-spline';
|
|
4
4
|
import { Checkbox } from '@/components/ui/checkbox';
|
|
5
5
|
import { Label } from '@/components/ui/label';
|
|
6
|
-
import {
|
|
6
|
+
import { useGraphActions } from '@/features/graph/state/use-graph-store';
|
|
7
7
|
import type { A2AEdgeData } from '../../configuration/edge-types';
|
|
8
8
|
|
|
9
9
|
type RelationshipOptionProps = {
|
|
@@ -75,7 +75,7 @@ function EdgeEditor({ selectedEdge }: EdgeEditorProps) {
|
|
|
75
75
|
const { updateEdgeData, setEdges } = useReactFlow();
|
|
76
76
|
const sourceNode = useNodesData(selectedEdge.source);
|
|
77
77
|
const targetNode = useNodesData(selectedEdge.target);
|
|
78
|
-
const markUnsaved =
|
|
78
|
+
const { markUnsaved } = useGraphActions();
|
|
79
79
|
|
|
80
80
|
// Check if this is a self-loop (source and target are the same)
|
|
81
81
|
const isSelfLoop = selectedEdge.source === selectedEdge.target;
|
|
@@ -19,7 +19,7 @@ import { Separator } from '@/components/ui/separator';
|
|
|
19
19
|
import { Textarea } from '@/components/ui/textarea';
|
|
20
20
|
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
|
|
21
21
|
import { useRuntimeConfig } from '@/contexts/runtime-config-context';
|
|
22
|
-
import { useGraphStore } from '@/features/graph/state/use-graph-store';
|
|
22
|
+
import { useGraphActions, useGraphStore } from '@/features/graph/state/use-graph-store';
|
|
23
23
|
import { useAutoPrefillIdZustand } from '@/hooks/use-auto-prefill-id-zustand';
|
|
24
24
|
import { useProjectData } from '@/hooks/use-project-data';
|
|
25
25
|
import { CollapsibleSettings } from '../collapsible-settings';
|
|
@@ -64,7 +64,7 @@ function MetadataEditor() {
|
|
|
64
64
|
// Fetch project data for inheritance indicators
|
|
65
65
|
const { project } = useProjectData();
|
|
66
66
|
|
|
67
|
-
const { markUnsaved, setMetadata } =
|
|
67
|
+
const { markUnsaved, setMetadata } = useGraphActions();
|
|
68
68
|
|
|
69
69
|
const updateMetadata: typeof setMetadata = useCallback(
|
|
70
70
|
(...attrs) => {
|
|
@@ -148,10 +148,9 @@ function MetadataEditor() {
|
|
|
148
148
|
<div className="space-y-2">
|
|
149
149
|
<ExpandableTextArea
|
|
150
150
|
id="graph-prompt"
|
|
151
|
-
name="graph-prompt"
|
|
152
151
|
label="Graph prompt"
|
|
153
152
|
value={graphPrompt || ''}
|
|
154
|
-
onChange={(
|
|
153
|
+
onChange={(value) => updateMetadata('graphPrompt', value)}
|
|
155
154
|
placeholder="System-level instructions for this graph..."
|
|
156
155
|
className="max-h-96"
|
|
157
156
|
/>
|
|
@@ -135,11 +135,9 @@ export function AgentNodeEditor({
|
|
|
135
135
|
|
|
136
136
|
<div className="space-y-2">
|
|
137
137
|
<ExpandableTextArea
|
|
138
|
-
ref={(el) => setFieldRef('prompt', el)}
|
|
139
138
|
id="prompt"
|
|
140
|
-
name="prompt"
|
|
141
139
|
value={selectedNode.data.prompt || ''}
|
|
142
|
-
onChange={(
|
|
140
|
+
onChange={(value) => updatePath('prompt', value)}
|
|
143
141
|
placeholder="You are a helpful assistant..."
|
|
144
142
|
data-invalid={errorHelpers?.hasFieldError('prompt') ? '' : undefined}
|
|
145
143
|
className="w-full max-h-96 data-invalid:border-red-300 data-invalid:focus-visible:border-red-300 data-invalid:focus-visible:ring-red-300"
|
|
@@ -159,7 +157,7 @@ export function AgentNodeEditor({
|
|
|
159
157
|
/>
|
|
160
158
|
<Separator />
|
|
161
159
|
{/* Agent Execution Limits */}
|
|
162
|
-
<div className="space-y-8
|
|
160
|
+
<div className="space-y-8">
|
|
163
161
|
<SectionHeader
|
|
164
162
|
title="Execution limits"
|
|
165
163
|
description="Configure agent-level execution limits for steps within this agent."
|
|
@@ -1,32 +1,72 @@
|
|
|
1
|
+
import { type FC, type RefObject, useRef, type ComponentProps } from 'react';
|
|
1
2
|
import { ExpandableField } from '@/components/form/expandable-field';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
3
|
+
import { Button } from '@/components/ui/button';
|
|
4
|
+
import { Braces } from 'lucide-react';
|
|
5
|
+
import { TooltipTrigger, Tooltip, TooltipContent } from '@/components/ui/tooltip';
|
|
6
|
+
import { PromptEditor } from '@/components/form/prompt-editor';
|
|
7
|
+
import { cn } from '@/lib/utils';
|
|
4
8
|
|
|
5
|
-
|
|
6
|
-
|
|
9
|
+
// Extract inner type from RefObject<T>
|
|
10
|
+
type RefValue<T> = T extends RefObject<infer R> ? R : never;
|
|
7
11
|
|
|
12
|
+
const PromptEditorWithAddVariables: FC<
|
|
13
|
+
ComponentProps<typeof PromptEditor> & {
|
|
14
|
+
tooltipClassName: string;
|
|
15
|
+
}
|
|
16
|
+
> = ({ tooltipClassName, ...props }) => {
|
|
17
|
+
const codemirrorRef = useRef<RefValue<typeof props.ref>>(null!);
|
|
18
|
+
const variablesText = 'Add variables';
|
|
8
19
|
return (
|
|
9
|
-
<
|
|
10
|
-
{...props}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
20
|
+
<div className="h-full relative">
|
|
21
|
+
<PromptEditor ref={codemirrorRef} {...props} />
|
|
22
|
+
<Tooltip>
|
|
23
|
+
<TooltipTrigger asChild>
|
|
24
|
+
<Button
|
|
25
|
+
variant="ghost"
|
|
26
|
+
size="icon"
|
|
27
|
+
className={cn(
|
|
28
|
+
'absolute bottom-2.5 h-6 w-6 hover:text-foreground transition-all backdrop-blur-sm bg-white/90 hover:bg-white/95 dark:bg-card dark:hover:bg-accent border border-border shadow-md dark:shadow-lg',
|
|
29
|
+
tooltipClassName
|
|
30
|
+
)}
|
|
31
|
+
type="button"
|
|
32
|
+
onClick={() => {
|
|
33
|
+
codemirrorRef.current.insertTemplateVariable();
|
|
34
|
+
}}
|
|
35
|
+
>
|
|
36
|
+
<Braces className="h-4 w-4 text-muted-foreground" />
|
|
37
|
+
<span className="sr-only">{variablesText}</span>
|
|
38
|
+
</Button>
|
|
39
|
+
</TooltipTrigger>
|
|
40
|
+
<TooltipContent>
|
|
41
|
+
{variablesText}
|
|
42
|
+
</TooltipContent>
|
|
43
|
+
</Tooltip>
|
|
44
|
+
</div>
|
|
15
45
|
);
|
|
16
|
-
}
|
|
46
|
+
};
|
|
17
47
|
|
|
18
48
|
export function ExpandableTextArea({
|
|
19
49
|
label,
|
|
20
50
|
isRequired = false,
|
|
21
51
|
...props
|
|
22
|
-
}: {
|
|
52
|
+
}: {
|
|
53
|
+
label: string;
|
|
54
|
+
isRequired?: boolean;
|
|
55
|
+
} & React.ComponentProps<typeof PromptEditor>) {
|
|
23
56
|
return (
|
|
24
57
|
<ExpandableField
|
|
25
58
|
name={props.id || 'expandable-textarea'}
|
|
26
59
|
label={label}
|
|
27
60
|
isRequired={isRequired}
|
|
28
|
-
compactView={<
|
|
29
|
-
expandedView={
|
|
61
|
+
compactView={<PromptEditorWithAddVariables {...props} tooltipClassName="right-10" />}
|
|
62
|
+
expandedView={
|
|
63
|
+
<PromptEditorWithAddVariables
|
|
64
|
+
{...props}
|
|
65
|
+
autoFocus
|
|
66
|
+
className="[&>.cm-editor]:h-full"
|
|
67
|
+
tooltipClassName="right-2.5"
|
|
68
|
+
/>
|
|
69
|
+
}
|
|
30
70
|
/>
|
|
31
71
|
);
|
|
32
72
|
}
|
|
@@ -10,7 +10,7 @@ import { ExternalLink } from '@/components/ui/external-link';
|
|
|
10
10
|
import { Input } from '@/components/ui/input';
|
|
11
11
|
import { Label } from '@/components/ui/label';
|
|
12
12
|
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
|
|
13
|
-
import { useGraphStore } from '@/features/graph/state/use-graph-store';
|
|
13
|
+
import { useGraphActions, useGraphStore } from '@/features/graph/state/use-graph-store';
|
|
14
14
|
import { getToolTypeAndName } from '@/lib/utils/mcp-utils';
|
|
15
15
|
import {
|
|
16
16
|
getCurrentHeadersForNode,
|
|
@@ -33,11 +33,13 @@ export function MCPServerNodeEditor({
|
|
|
33
33
|
tenantId: string;
|
|
34
34
|
projectId: string;
|
|
35
35
|
}>();
|
|
36
|
-
const markUnsaved =
|
|
36
|
+
const { markUnsaved } = useGraphActions();
|
|
37
37
|
|
|
38
38
|
// Only use toolLookup - single source of truth
|
|
39
|
-
const toolLookup = useGraphStore((state) =>
|
|
40
|
-
|
|
39
|
+
const { toolLookup, edges } = useGraphStore((state) => ({
|
|
40
|
+
toolLookup: state.toolLookup,
|
|
41
|
+
edges: state.edges,
|
|
42
|
+
}));
|
|
41
43
|
|
|
42
44
|
const getCurrentHeaders = useCallback((): Record<string, string> => {
|
|
43
45
|
return getCurrentHeadersForNode(selectedNode, agentToolConfigLookup, edges);
|
|
@@ -34,9 +34,9 @@ const serializeData = (data: ProjectFormData) => {
|
|
|
34
34
|
};
|
|
35
35
|
|
|
36
36
|
const cleanStopWhen = (stopWhen: any) => {
|
|
37
|
-
// If stopWhen is null, undefined, or empty object, return undefined
|
|
37
|
+
// If stopWhen is null, undefined, or empty object, return empty object (undefined will not update the field)
|
|
38
38
|
if (!stopWhen || (typeof stopWhen === 'object' && Object.keys(stopWhen).length === 0)) {
|
|
39
|
-
return
|
|
39
|
+
return {};
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
// Clean the individual properties - remove null/undefined values
|
|
@@ -48,9 +48,9 @@ const serializeData = (data: ProjectFormData) => {
|
|
|
48
48
|
cleaned.stepCountIs = stopWhen.stepCountIs;
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
// If no valid properties, return undefined
|
|
51
|
+
// If no valid properties, return empty object (undefined will not update the field)
|
|
52
52
|
if (Object.keys(cleaned).length === 0) {
|
|
53
|
-
return
|
|
53
|
+
return {};
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
return cleaned;
|
|
@@ -81,6 +81,15 @@ const serializeData = (data: ProjectFormData) => {
|
|
|
81
81
|
};
|
|
82
82
|
};
|
|
83
83
|
|
|
84
|
+
const createDefaultValues = (initialData?: ProjectFormData) => {
|
|
85
|
+
return {
|
|
86
|
+
...initialData,
|
|
87
|
+
// Handle null values from database - if an object field is null, validation will fail so we need to set it to an empty object
|
|
88
|
+
stopWhen: initialData?.stopWhen || {},
|
|
89
|
+
models: initialData?.models || { base: { model: '', providerOptions: null } },
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
|
|
84
93
|
export function ProjectForm({
|
|
85
94
|
tenantId,
|
|
86
95
|
projectId,
|
|
@@ -90,10 +99,7 @@ export function ProjectForm({
|
|
|
90
99
|
}: ProjectFormProps) {
|
|
91
100
|
const form = useForm<ProjectFormData>({
|
|
92
101
|
resolver: zodResolver(projectSchema),
|
|
93
|
-
defaultValues: {
|
|
94
|
-
...defaultValues,
|
|
95
|
-
...initialData,
|
|
96
|
-
},
|
|
102
|
+
defaultValues: initialData ? createDefaultValues(initialData) : { ...defaultValues },
|
|
97
103
|
});
|
|
98
104
|
|
|
99
105
|
const { isSubmitting } = form.formState;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import { ChevronRight, Info } from 'lucide-react';
|
|
4
|
-
import {
|
|
4
|
+
import { useEffect, useState } from 'react';
|
|
5
|
+
import { type Control, useController, useFormState, useWatch } from 'react-hook-form';
|
|
5
6
|
import { ExpandableJsonEditor } from '@/components/form/expandable-json-editor';
|
|
6
7
|
import { FormFieldWrapper } from '@/components/form/form-field-wrapper';
|
|
7
8
|
import { ModelSelector } from '@/components/graph/sidepane/nodes/model-selector';
|
|
@@ -179,6 +180,25 @@ function SummarizerModelSection({ control }: { control: Control<ProjectFormData>
|
|
|
179
180
|
}
|
|
180
181
|
|
|
181
182
|
export function ProjectModelsSection({ control }: ProjectModelsSectionProps) {
|
|
183
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
184
|
+
const { errors } = useFormState({ control });
|
|
185
|
+
|
|
186
|
+
const hasModelsErrors = !!(
|
|
187
|
+
errors.models?.base?.model ||
|
|
188
|
+
errors.models?.base?.providerOptions ||
|
|
189
|
+
errors.models?.structuredOutput?.model ||
|
|
190
|
+
errors.models?.structuredOutput?.providerOptions ||
|
|
191
|
+
errors.models?.summarizer?.model ||
|
|
192
|
+
errors.models?.summarizer?.providerOptions
|
|
193
|
+
);
|
|
194
|
+
|
|
195
|
+
// Auto-open the collapsible when there are errors in the models section
|
|
196
|
+
useEffect(() => {
|
|
197
|
+
if (hasModelsErrors) {
|
|
198
|
+
setIsOpen(true);
|
|
199
|
+
}
|
|
200
|
+
}, [hasModelsErrors]);
|
|
201
|
+
|
|
182
202
|
return (
|
|
183
203
|
<div className="space-y-4">
|
|
184
204
|
<div>
|
|
@@ -188,7 +208,11 @@ export function ProjectModelsSection({ control }: ProjectModelsSectionProps) {
|
|
|
188
208
|
</p>
|
|
189
209
|
</div>
|
|
190
210
|
|
|
191
|
-
<Collapsible
|
|
211
|
+
<Collapsible
|
|
212
|
+
open={isOpen}
|
|
213
|
+
onOpenChange={setIsOpen}
|
|
214
|
+
className="border rounded-md bg-background"
|
|
215
|
+
>
|
|
192
216
|
<CollapsibleTrigger asChild>
|
|
193
217
|
<Button
|
|
194
218
|
type="button"
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import { ChevronRight, Info } from 'lucide-react';
|
|
4
|
+
import { useEffect, useState } from 'react';
|
|
4
5
|
import type { Control } from 'react-hook-form';
|
|
5
|
-
import { useWatch } from 'react-hook-form';
|
|
6
|
+
import { useFormState, useWatch } from 'react-hook-form';
|
|
6
7
|
import { GenericInput } from '@/components/form/generic-input';
|
|
7
8
|
import { Button } from '@/components/ui/button';
|
|
8
9
|
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible';
|
|
@@ -18,6 +19,17 @@ export function ProjectStopWhenSection({ control }: ProjectStopWhenSectionProps)
|
|
|
18
19
|
// Check if any stopWhen values are configured to determine default open state
|
|
19
20
|
const stopWhen = useWatch({ control, name: 'stopWhen' });
|
|
20
21
|
const hasConfiguredStopWhen = !!(stopWhen?.transferCountIs || stopWhen?.stepCountIs);
|
|
22
|
+
const [isOpen, setIsOpen] = useState(hasConfiguredStopWhen);
|
|
23
|
+
|
|
24
|
+
const { errors } = useFormState({ control });
|
|
25
|
+
const hasStopWhenErrors = !!(errors.stopWhen?.transferCountIs || errors.stopWhen?.stepCountIs);
|
|
26
|
+
|
|
27
|
+
// Auto-open the collapsible when there are errors in the stopWhen section
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
if (hasStopWhenErrors) {
|
|
30
|
+
setIsOpen(true);
|
|
31
|
+
}
|
|
32
|
+
}, [hasStopWhenErrors]);
|
|
21
33
|
|
|
22
34
|
return (
|
|
23
35
|
<div className="space-y-4">
|
|
@@ -28,7 +40,11 @@ export function ProjectStopWhenSection({ control }: ProjectStopWhenSectionProps)
|
|
|
28
40
|
</p>
|
|
29
41
|
</div>
|
|
30
42
|
|
|
31
|
-
<Collapsible
|
|
43
|
+
<Collapsible
|
|
44
|
+
open={isOpen}
|
|
45
|
+
onOpenChange={setIsOpen}
|
|
46
|
+
className="border rounded-md bg-background"
|
|
47
|
+
>
|
|
32
48
|
<CollapsibleTrigger asChild>
|
|
33
49
|
<Button
|
|
34
50
|
type="button"
|