@inkeep/agents-manage-ui 0.0.0-dev-20251018033935 → 0.0.0-dev-20251020213442
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 +141 -141
- package/.next/standalone/agents-manage-ui/.next/app-path-routes-manifest.json +7 -7
- package/.next/standalone/agents-manage-ui/.next/build-manifest.json +5 -5
- package/.next/standalone/agents-manage-ui/.next/prerender-manifest.json +15 -15
- package/.next/standalone/agents-manage-ui/.next/react-loadable-manifest.json +4 -4
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/[agentId]/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/[agentId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/[agentId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/new/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/new/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/api-keys/page.js +3 -3
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/api-keys/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/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_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 +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_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/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_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page.js +3 -3
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.rsc +9 -9
- package/.next/standalone/agents-manage-ui/.next/server/app/api/data-components/[dataComponentId]/generate-preview/route_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/route_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app-paths-manifest.json +7 -7
- package/.next/standalone/agents-manage-ui/.next/server/chunks/260.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/3159.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/3802.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/{6999.js → 4439.js} +3 -3
- package/.next/standalone/agents-manage-ui/.next/server/chunks/5450.js +7 -7
- package/.next/standalone/agents-manage-ui/.next/server/chunks/5478.js +4080 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/5732.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/5868.js +196 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/7711.js +5 -5
- package/.next/standalone/agents-manage-ui/.next/server/chunks/7848.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/7988.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/chunks/8586.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/middleware-build-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/middleware-manifest.json +5 -5
- 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/20837-ad6977f338f3bfdc.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{23113.536c8c9bea4a8c7b.js → 23113.d8f116e888ce6fa1.js} +3 -3
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{82382-2ec1fba08e0e167a.js → 46271-5ae8979ebc6a9456.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{4875-306209ac5547e001.js → 4875-6cc31870e1b4f78e.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/56269-b55108bb9998d5b1.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{59352-1073f56d4177807e.js → 60485-90364540677bd651.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/76125-82ebb14b304cfe0b.js +25 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{58857-25ea4e47782800c3.js → 77890-9a7f3c68888bc677.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/[agentId]/{page-efe560225036a9f6.js → page-e82a3e69e183168e.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/new/{page-ce87806ea0a2fb9f.js → page-551d6f2c589d8fef.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/{page-9f2da832ec1b94cd.js → page-ae102486d58be60f.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-0e6c6926536796bc.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/{page-32b6c7e2635bea05.js → page-93c054b2609cc052.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/new/{page-fdc1ce5478c3f0cb.js → page-fdbe8e8f73b6a56d.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/page-00820ff152e18e00.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/{page-00743b00bc2a3efc.js → page-e3fa0fbf28ca583c.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/new/{page-97e1941742c88f0e.js → page-19b01a165f5ceb34.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/page-25c4815e2f310734.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-c0609218dd908ac2.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-36b323f459eee78f.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-d2a83f2b10c42075.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/{page-4a371cd2cc6618ad.js → page-c1d8f8215da1b003.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page-d0a18e8cb6fde134.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/new/{page-bca1259638485a50.js → page-f591ed9d997e096c.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/page-3bea2e4a9c911df4.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/settings/{page-35cbbe7f8218c59e.js → page-e0587efb0b5b911d.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/{page-4cf0ddb5140d1a72.js → page-63642f9482685f55.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/{page-a8d0dc9a08662376.js → page-1ae7a8b2a98d7eb2.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-12db322c07fbd4a9.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{webpack-d65a3369c23bc1a6.js → webpack-1c52079c94af4342.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/css/86b7c14b860f21e3.css +1 -0
- package/.next/standalone/agents-manage-ui/package.json +2 -2
- package/.next/standalone/packages/agents-core/package.json +1 -1
- package/package.json +5 -5
- package/src/app/globals.css +21 -0
- package/src/components/agent/agent.tsx +173 -2
- package/src/components/agent/configuration/edge-types.tsx +7 -1
- package/src/components/agent/configuration/node-types.tsx +7 -0
- package/src/components/agent/edges/agent-to-agent-edge.tsx +11 -5
- package/src/components/agent/edges/default-edge.tsx +54 -11
- package/src/components/agent/node-library/node-item.tsx +1 -1
- package/src/components/agent/nodes/base-node.tsx +15 -20
- package/src/components/agent/nodes/external-agent-node.tsx +9 -4
- package/src/components/agent/nodes/function-tool-node.tsx +7 -2
- package/src/components/agent/nodes/mcp-node.tsx +29 -26
- package/src/components/agent/nodes/node-tab.tsx +7 -6
- package/src/components/agent/nodes/sub-agent-node.tsx +8 -3
- package/src/components/agent/toolbar/toolbar.tsx +18 -7
- package/src/features/agent/domain/serialize.ts +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/chunks/1213.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/2373.js +0 -196
- package/.next/standalone/agents-manage-ui/.next/server/chunks/4206.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/7283.js +0 -4080
- package/.next/standalone/agents-manage-ui/.next/server/chunks/882.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/20837-65cb634be65713b6.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/85014-410be6cfd6c0b753.js +0 -25
- package/.next/standalone/agents-manage-ui/.next/static/chunks/89101-92130409b1415c97.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-c82db08e9344f68c.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/page-990d882d78a195fd.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/page-64813d371a05bde6.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-7446ee2644d0185a.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-7b7a3ec55ec162a3.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-5b6aff4d987c89a4.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page-2f7f46580a298486.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/page-9a035796f985a386.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-08983ed4e0a95a94.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/css/5dfa86d258326297.css +0 -1
- /package/.next/standalone/agents-manage-ui/.next/static/{R4a26_eEJuwEWgW_zHsHJ → wpI-jqWSJp3whbjsuH69t}/_buildManifest.js +0 -0
- /package/.next/standalone/agents-manage-ui/.next/static/{R4a26_eEJuwEWgW_zHsHJ → wpI-jqWSJp3whbjsuH69t}/_ssgManifest.js +0 -0
|
@@ -12,7 +12,9 @@ export enum A2AEdgeType {
|
|
|
12
12
|
export enum EdgeType {
|
|
13
13
|
A2A = 'a2a',
|
|
14
14
|
A2AExternal = 'a2a-external',
|
|
15
|
-
|
|
15
|
+
// Built-in 'default' edges ignore the `data` prop.
|
|
16
|
+
// Use a custom edge type instead to access `data` in rendering.
|
|
17
|
+
Default = 'custom',
|
|
16
18
|
SelfLoop = 'self-loop',
|
|
17
19
|
}
|
|
18
20
|
|
|
@@ -23,6 +25,10 @@ export type A2AEdgeData = {
|
|
|
23
25
|
delegateTargetToSource: boolean;
|
|
24
26
|
delegateSourceToTarget: boolean;
|
|
25
27
|
};
|
|
28
|
+
/**
|
|
29
|
+
* Indicates whether this node delegates its task to another node.
|
|
30
|
+
*/
|
|
31
|
+
delegating: boolean | 'inverted';
|
|
26
32
|
};
|
|
27
33
|
|
|
28
34
|
export const edgeTypes = {
|
|
@@ -22,6 +22,8 @@ export interface MCPNodeData extends Record<string, unknown> {
|
|
|
22
22
|
name?: string;
|
|
23
23
|
imageUrl?: string;
|
|
24
24
|
provider?: string;
|
|
25
|
+
isExecuting?: boolean;
|
|
26
|
+
isDelegating?: boolean;
|
|
25
27
|
}
|
|
26
28
|
|
|
27
29
|
// Re-export the shared type for consistency
|
|
@@ -36,6 +38,9 @@ export interface AgentNodeData extends Record<string, unknown> {
|
|
|
36
38
|
artifactComponents?: string[];
|
|
37
39
|
models?: AgentModels; // Use same structure as agent
|
|
38
40
|
stopWhen?: SubAgentStopWhen;
|
|
41
|
+
isDefault?: boolean;
|
|
42
|
+
isExecuting?: boolean;
|
|
43
|
+
isDelegating?: boolean;
|
|
39
44
|
}
|
|
40
45
|
|
|
41
46
|
export interface ExternalAgentNodeData extends Record<string, unknown> {
|
|
@@ -57,6 +62,8 @@ export interface FunctionToolNodeData extends Record<string, unknown> {
|
|
|
57
62
|
code?: string;
|
|
58
63
|
inputSchema?: Record<string, unknown>;
|
|
59
64
|
dependencies?: Record<string, unknown>;
|
|
65
|
+
isExecuting?: boolean;
|
|
66
|
+
isDelegating?: boolean;
|
|
60
67
|
}
|
|
61
68
|
|
|
62
69
|
export enum NodeType {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { BaseEdge, EdgeLabelRenderer, type EdgeProps, getBezierPath } from '@xyflow/react';
|
|
2
2
|
import { ArrowRight, ArrowRightLeft } from 'lucide-react';
|
|
3
|
+
import { AnimatedCircle } from '@/components/agent/edges/default-edge';
|
|
3
4
|
import type { A2AEdgeData } from '../configuration/edge-types';
|
|
4
5
|
|
|
5
6
|
interface AgentToAgentEdgeProps extends EdgeProps {
|
|
@@ -22,6 +23,7 @@ export function AgentToAgentEdge({
|
|
|
22
23
|
delegateTargetToSource: false,
|
|
23
24
|
delegateSourceToTarget: false,
|
|
24
25
|
};
|
|
26
|
+
const delegating = data?.delegating;
|
|
25
27
|
|
|
26
28
|
const hasDelegate = relationships.delegateTargetToSource || relationships.delegateSourceToTarget;
|
|
27
29
|
const hasTransfer = relationships.transferTargetToSource || relationships.transferSourceToTarget;
|
|
@@ -86,16 +88,20 @@ export function AgentToAgentEdge({
|
|
|
86
88
|
const delegateMarkerEnd =
|
|
87
89
|
hasDelegate && relationships.delegateSourceToTarget ? getMarker(!!selected) : undefined;
|
|
88
90
|
|
|
91
|
+
const className =
|
|
92
|
+
selected || delegating ? '!stroke-primary' : '!stroke-border dark:!stroke-muted-foreground';
|
|
93
|
+
|
|
89
94
|
return (
|
|
90
95
|
<>
|
|
96
|
+
{/* Animated circles based on delegating direction */}
|
|
97
|
+
{delegating && <AnimatedCircle edgePath={edgePath} inverted={delegating === 'inverted'} />}
|
|
98
|
+
|
|
91
99
|
{/* Render transfer path (solid line) */}
|
|
92
100
|
{hasTransfer && (
|
|
93
101
|
<BaseEdge
|
|
94
|
-
className={
|
|
102
|
+
className={className}
|
|
95
103
|
path={hasDelegate ? calculateOffsetPath(-3)[0] : edgePath}
|
|
96
|
-
style={{
|
|
97
|
-
strokeWidth: 2,
|
|
98
|
-
}}
|
|
104
|
+
style={{ strokeWidth: 2 }}
|
|
99
105
|
markerEnd={transferMarkerEnd}
|
|
100
106
|
markerStart={transferMarkerStart}
|
|
101
107
|
/>
|
|
@@ -104,7 +110,7 @@ export function AgentToAgentEdge({
|
|
|
104
110
|
{/* Render delegate path (dashed line) */}
|
|
105
111
|
{hasDelegate && (
|
|
106
112
|
<BaseEdge
|
|
107
|
-
className={
|
|
113
|
+
className={className}
|
|
108
114
|
path={hasTransfer ? calculateOffsetPath(3)[0] : edgePath}
|
|
109
115
|
style={{
|
|
110
116
|
strokeDasharray: '5,5',
|
|
@@ -1,6 +1,39 @@
|
|
|
1
1
|
import { BaseEdge, type EdgeProps, getBezierPath } from '@xyflow/react';
|
|
2
|
+
import { type FC, useRef, useEffect } from 'react';
|
|
2
3
|
|
|
3
|
-
type DefaultEdgeProps = EdgeProps
|
|
4
|
+
type DefaultEdgeProps = EdgeProps & {
|
|
5
|
+
data?: {
|
|
6
|
+
delegating: boolean | 'inverted';
|
|
7
|
+
};
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export const AnimatedCircle: FC<{ edgePath: string; inverted: boolean }> = ({
|
|
11
|
+
edgePath,
|
|
12
|
+
inverted,
|
|
13
|
+
}) => {
|
|
14
|
+
const ref = useRef<SVGAnimateElement>(null);
|
|
15
|
+
|
|
16
|
+
// Without this useEffect, the animation won't start when this component is rendered dynamically.
|
|
17
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: We need restart animation when invert is changed
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
ref.current?.beginElement();
|
|
20
|
+
}, [inverted]);
|
|
21
|
+
|
|
22
|
+
return (
|
|
23
|
+
<circle fill="var(--primary)" r="6">
|
|
24
|
+
<animateMotion
|
|
25
|
+
ref={ref}
|
|
26
|
+
dur="2s"
|
|
27
|
+
path={edgePath}
|
|
28
|
+
{...(inverted && {
|
|
29
|
+
pathLength: '1',
|
|
30
|
+
keyPoints: '1;0',
|
|
31
|
+
keyTimes: '0;1',
|
|
32
|
+
})}
|
|
33
|
+
/>
|
|
34
|
+
</circle>
|
|
35
|
+
);
|
|
36
|
+
};
|
|
4
37
|
|
|
5
38
|
export function DefaultEdge({
|
|
6
39
|
id,
|
|
@@ -13,6 +46,7 @@ export function DefaultEdge({
|
|
|
13
46
|
label,
|
|
14
47
|
selected,
|
|
15
48
|
markerEnd,
|
|
49
|
+
data,
|
|
16
50
|
}: DefaultEdgeProps) {
|
|
17
51
|
const [edgePath] = getBezierPath({
|
|
18
52
|
sourceX,
|
|
@@ -23,16 +57,25 @@ export function DefaultEdge({
|
|
|
23
57
|
targetPosition,
|
|
24
58
|
});
|
|
25
59
|
|
|
60
|
+
const className =
|
|
61
|
+
selected || data?.delegating
|
|
62
|
+
? '!stroke-primary'
|
|
63
|
+
: '!stroke-border dark:!stroke-muted-foreground';
|
|
64
|
+
|
|
26
65
|
return (
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
66
|
+
<>
|
|
67
|
+
{/* Animated circles based on delegating direction */}
|
|
68
|
+
{data?.delegating && (
|
|
69
|
+
<AnimatedCircle edgePath={edgePath} inverted={data.delegating === 'inverted'} />
|
|
70
|
+
)}
|
|
71
|
+
<BaseEdge
|
|
72
|
+
id={id}
|
|
73
|
+
path={edgePath}
|
|
74
|
+
label={label}
|
|
75
|
+
markerEnd={markerEnd}
|
|
76
|
+
style={{ strokeWidth: 2 }}
|
|
77
|
+
className={className}
|
|
78
|
+
/>
|
|
79
|
+
</>
|
|
37
80
|
);
|
|
38
81
|
}
|
|
@@ -23,7 +23,7 @@ export function NodeItem({ node }: NodeItemProps) {
|
|
|
23
23
|
role="button"
|
|
24
24
|
tabIndex={disabled ? -1 : 0}
|
|
25
25
|
aria-label={`Drag ${name} node`}
|
|
26
|
-
className="border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 flex font-medium items-center text-sm rounded-md p-2 justify-between gap-2 text-left h-auto w-full group group-hover:bg-muted/50 transition-all ease-in-out duration-200 cursor-grab active:cursor-grabbing"
|
|
26
|
+
className="backdrop-blur-3xl border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 flex font-medium items-center text-sm rounded-md p-2 justify-between gap-2 text-left h-auto w-full group group-hover:bg-muted/50 transition-all ease-in-out duration-200 cursor-grab active:cursor-grabbing"
|
|
27
27
|
draggable={!disabled}
|
|
28
28
|
onDragStart={(e) => onDragStart(e, node)}
|
|
29
29
|
>
|
|
@@ -1,30 +1,25 @@
|
|
|
1
|
-
import { forwardRef, type HTMLAttributes } from 'react';
|
|
1
|
+
import { type FC, forwardRef, type HTMLAttributes } from 'react';
|
|
2
2
|
import { cn } from '@/lib/utils';
|
|
3
3
|
|
|
4
4
|
interface BaseNodeProps extends HTMLAttributes<HTMLDivElement> {
|
|
5
5
|
isSelected?: boolean;
|
|
6
6
|
}
|
|
7
7
|
|
|
8
|
-
export const BaseNode =
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
// tabIndex={0}
|
|
23
|
-
{...props}
|
|
24
|
-
/>
|
|
25
|
-
)
|
|
8
|
+
export const BaseNode: FC<BaseNodeProps> = ({ className, isSelected, ...props }) => (
|
|
9
|
+
<div
|
|
10
|
+
className={cn(
|
|
11
|
+
'relative rounded-lg border bg-card text-card-foreground',
|
|
12
|
+
// React Flow displays node elements inside of a `NodeWrapper` component,
|
|
13
|
+
// which compiles down to a div with a the class `react-flow__node`.
|
|
14
|
+
// When a node is selected, the class `selected` is added to the
|
|
15
|
+
// `react-flow__node` element. This allows us to style the node when it
|
|
16
|
+
isSelected ? 'ring-2 ring-primary' : 'hover:ring-2 hover:ring-gray-700/5',
|
|
17
|
+
className
|
|
18
|
+
)}
|
|
19
|
+
// tabIndex={0}
|
|
20
|
+
{...props}
|
|
21
|
+
/>
|
|
26
22
|
);
|
|
27
|
-
BaseNode.displayName = 'BaseNode';
|
|
28
23
|
|
|
29
24
|
/**
|
|
30
25
|
* A container for a consistent header layout intended to be used inside the
|
|
@@ -9,10 +9,11 @@ import { ErrorIndicator } from '../error-display/error-indicator';
|
|
|
9
9
|
import { BaseNode, BaseNodeContent, BaseNodeHeader, BaseNodeHeaderTitle } from './base-node';
|
|
10
10
|
import { Handle } from './handle';
|
|
11
11
|
import { NodeTab } from './node-tab';
|
|
12
|
+
import { cn } from '@/lib/utils';
|
|
12
13
|
|
|
13
14
|
export function ExternalAgentNode(props: NodeProps & { data: AgentNodeData }) {
|
|
14
15
|
const { data, selected, id } = props;
|
|
15
|
-
const { name, description } = data;
|
|
16
|
+
const { name, description, isExecuting } = data;
|
|
16
17
|
const { getNodeErrors, hasNodeErrors } = useAgentErrors();
|
|
17
18
|
|
|
18
19
|
// Use the agent ID from node data if available, otherwise fall back to React Flow node ID
|
|
@@ -22,10 +23,14 @@ export function ExternalAgentNode(props: NodeProps & { data: AgentNodeData }) {
|
|
|
22
23
|
|
|
23
24
|
return (
|
|
24
25
|
<div className="relative">
|
|
25
|
-
<NodeTab
|
|
26
|
+
<NodeTab isSelected={selected}>External</NodeTab>
|
|
26
27
|
<BaseNode
|
|
27
|
-
isSelected={selected}
|
|
28
|
-
className={
|
|
28
|
+
isSelected={selected || data.isDelegating}
|
|
29
|
+
className={cn(
|
|
30
|
+
'rounded-tl-none',
|
|
31
|
+
hasErrors && 'ring-2 ring-red-300 border-red-300',
|
|
32
|
+
isExecuting && 'node-executing'
|
|
33
|
+
)}
|
|
29
34
|
style={{ width: NODE_WIDTH }}
|
|
30
35
|
>
|
|
31
36
|
<BaseNodeHeader className="flex items-center justify-between gap-2">
|
|
@@ -5,6 +5,7 @@ import { type FunctionToolNodeData, functionToolNodeHandleId } from '../configur
|
|
|
5
5
|
import { ErrorIndicator } from '../error-display/error-indicator';
|
|
6
6
|
import { BaseNode, BaseNodeHeader, BaseNodeHeaderTitle } from './base-node';
|
|
7
7
|
import { Handle } from './handle';
|
|
8
|
+
import { cn } from '@/lib/utils';
|
|
8
9
|
|
|
9
10
|
export function FunctionToolNode(props: NodeProps & { data: FunctionToolNodeData }) {
|
|
10
11
|
const { data, selected, id } = props;
|
|
@@ -21,8 +22,12 @@ export function FunctionToolNode(props: NodeProps & { data: FunctionToolNodeData
|
|
|
21
22
|
return (
|
|
22
23
|
<div className="relative">
|
|
23
24
|
<BaseNode
|
|
24
|
-
isSelected={selected}
|
|
25
|
-
className={
|
|
25
|
+
isSelected={selected || data.isDelegating}
|
|
26
|
+
className={cn(
|
|
27
|
+
'rounded-4xl min-w-40 max-w-xs',
|
|
28
|
+
hasErrors && 'ring-2 ring-red-300 border-red-300',
|
|
29
|
+
data.isExecuting && 'node-executing'
|
|
30
|
+
)}
|
|
26
31
|
>
|
|
27
32
|
<BaseNodeHeader className="mb-0 py-3">
|
|
28
33
|
<div className="flex flex-col gap-1.5">
|
|
@@ -5,8 +5,9 @@ import { Badge } from '@/components/ui/badge';
|
|
|
5
5
|
import { useAgentStore } from '@/features/agent/state/use-agent-store';
|
|
6
6
|
import { getCurrentSelectedToolsForNode } from '@/lib/utils/orphaned-tools-detector';
|
|
7
7
|
import { type MCPNodeData, mcpNodeHandleId } from '../configuration/node-types';
|
|
8
|
-
import { BaseNode, BaseNodeHeader, BaseNodeHeaderTitle } from './base-node';
|
|
8
|
+
import { BaseNode, BaseNodeContent, BaseNodeHeader, BaseNodeHeaderTitle } from './base-node';
|
|
9
9
|
import { Handle } from './handle';
|
|
10
|
+
import { cn } from '@/lib/utils';
|
|
10
11
|
|
|
11
12
|
const TOOLS_SHOWN_LIMIT = 4;
|
|
12
13
|
|
|
@@ -78,32 +79,34 @@ export function MCPNode(props: NodeProps & { data: MCPNodeData }) {
|
|
|
78
79
|
const toolBadges = getToolDisplay();
|
|
79
80
|
|
|
80
81
|
return (
|
|
81
|
-
<BaseNode
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
key={index}
|
|
98
|
-
variant="code"
|
|
99
|
-
className="px-2 text-2xs text-gray-700 dark:text-gray-300 flex-shrink-0"
|
|
100
|
-
>
|
|
101
|
-
{label}
|
|
102
|
-
</Badge>
|
|
103
|
-
))}
|
|
104
|
-
</div>
|
|
105
|
-
</div>
|
|
82
|
+
<BaseNode
|
|
83
|
+
isSelected={selected || data.isDelegating}
|
|
84
|
+
className={cn(
|
|
85
|
+
'rounded-4xl min-w-40 min-h-13 max-w-3xs',
|
|
86
|
+
data.isExecuting && 'node-executing'
|
|
87
|
+
)}
|
|
88
|
+
>
|
|
89
|
+
<BaseNodeHeader className="flex items-center justify-between gap-2">
|
|
90
|
+
<MCPToolImage
|
|
91
|
+
imageUrl={imageUrl}
|
|
92
|
+
name={name}
|
|
93
|
+
provider={provider || undefined}
|
|
94
|
+
size={24}
|
|
95
|
+
className="flex-shrink-0"
|
|
96
|
+
/>
|
|
97
|
+
<BaseNodeHeaderTitle>{name}</BaseNodeHeaderTitle>
|
|
106
98
|
</BaseNodeHeader>
|
|
99
|
+
<BaseNodeContent>
|
|
100
|
+
{toolBadges.map((label, index) => (
|
|
101
|
+
<Badge
|
|
102
|
+
key={index}
|
|
103
|
+
variant="code"
|
|
104
|
+
className="px-2 text-2xs text-gray-700 dark:text-gray-300 flex-shrink-0"
|
|
105
|
+
>
|
|
106
|
+
{label}
|
|
107
|
+
</Badge>
|
|
108
|
+
))}
|
|
109
|
+
</BaseNodeContent>
|
|
107
110
|
<Handle id={mcpNodeHandleId} type="target" position={Position.Top} isConnectable />
|
|
108
111
|
</BaseNode>
|
|
109
112
|
);
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
+
import type { FC, ReactNode } from 'react';
|
|
1
2
|
import { cn } from '@/lib/utils';
|
|
2
3
|
|
|
3
4
|
interface NodeTabProps {
|
|
4
|
-
|
|
5
|
-
children:
|
|
5
|
+
isSelected?: boolean;
|
|
6
|
+
children: ReactNode;
|
|
6
7
|
}
|
|
7
8
|
|
|
8
|
-
export
|
|
9
|
+
export const NodeTab: FC<NodeTabProps> = ({ isSelected, children }) => {
|
|
9
10
|
return (
|
|
10
11
|
<div
|
|
11
12
|
className={cn(
|
|
12
|
-
'
|
|
13
|
-
|
|
13
|
+
'px-2 py-0.5 rounded-t-md flex items-center gap-2 w-fit border border-b-0 font-medium font-mono text-xs uppercase',
|
|
14
|
+
isSelected
|
|
14
15
|
? 'bg-primary border-primary text-white ring-2 ring-primary'
|
|
15
16
|
: 'bg-muted text-muted-foreground border-border'
|
|
16
17
|
)}
|
|
@@ -18,4 +19,4 @@ export function NodeTab({ selected, children }: NodeTabProps) {
|
|
|
18
19
|
{children}
|
|
19
20
|
</div>
|
|
20
21
|
);
|
|
21
|
-
}
|
|
22
|
+
};
|
|
@@ -14,6 +14,7 @@ import { ErrorIndicator } from '../error-display/error-indicator';
|
|
|
14
14
|
import { BaseNode, BaseNodeContent, BaseNodeHeader, BaseNodeHeaderTitle } from './base-node';
|
|
15
15
|
import { Handle } from './handle';
|
|
16
16
|
import { NodeTab } from './node-tab';
|
|
17
|
+
import { cn } from '@/lib/utils';
|
|
17
18
|
|
|
18
19
|
const ListSection = ({
|
|
19
20
|
title,
|
|
@@ -73,10 +74,14 @@ export function SubAgentNode(props: NodeProps & { data: AgentNodeData }) {
|
|
|
73
74
|
|
|
74
75
|
return (
|
|
75
76
|
<div className="relative">
|
|
76
|
-
{isDefault
|
|
77
|
+
{isDefault && <NodeTab isSelected={selected || data.isDelegating}>Default</NodeTab>}
|
|
77
78
|
<BaseNode
|
|
78
|
-
isSelected={selected}
|
|
79
|
-
className={
|
|
79
|
+
isSelected={selected || data.isDelegating}
|
|
80
|
+
className={cn(
|
|
81
|
+
isDefault && 'rounded-tl-none',
|
|
82
|
+
hasErrors && 'ring-2 ring-red-300 border-red-300',
|
|
83
|
+
data.isExecuting && 'node-executing'
|
|
84
|
+
)}
|
|
80
85
|
style={{ width: NODE_WIDTH }}
|
|
81
86
|
>
|
|
82
87
|
<BaseNodeHeader className="flex items-center justify-between gap-2">
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Play, Settings } from 'lucide-react';
|
|
2
|
-
import { useEffect, useRef } from 'react';
|
|
2
|
+
import { useEffect, useRef, type ComponentProps } from 'react';
|
|
3
3
|
import { Button } from '@/components/ui/button';
|
|
4
4
|
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
|
|
5
5
|
import { useAgentStore } from '@/features/agent/state/use-agent-store';
|
|
@@ -20,14 +20,20 @@ export function Toolbar({
|
|
|
20
20
|
}: ToolbarProps) {
|
|
21
21
|
const dirty = useAgentStore((state) => state.dirty);
|
|
22
22
|
const saveButtonRef = useRef<HTMLButtonElement>(null);
|
|
23
|
+
|
|
24
|
+
const commonProps: ComponentProps<typeof Button> = {
|
|
25
|
+
className: 'backdrop-blur-3xl',
|
|
26
|
+
type: 'button',
|
|
27
|
+
variant: 'outline',
|
|
28
|
+
};
|
|
29
|
+
|
|
23
30
|
const PreviewButton = (
|
|
24
31
|
<Button
|
|
32
|
+
{...commonProps}
|
|
25
33
|
disabled={dirty || inPreviewDisabled}
|
|
26
|
-
variant="outline"
|
|
27
|
-
type="button"
|
|
28
34
|
onClick={() => setShowPlayground(true)}
|
|
29
35
|
>
|
|
30
|
-
<Play className="
|
|
36
|
+
<Play className="size-4 text-muted-foreground" />
|
|
31
37
|
Try it
|
|
32
38
|
</Button>
|
|
33
39
|
);
|
|
@@ -48,10 +54,14 @@ export function Toolbar({
|
|
|
48
54
|
}, []);
|
|
49
55
|
|
|
50
56
|
return (
|
|
51
|
-
<div className="flex gap-2">
|
|
57
|
+
<div className="flex gap-2 flex-wrap justify-end content-start">
|
|
52
58
|
{dirty || inPreviewDisabled ? (
|
|
53
59
|
<Tooltip>
|
|
54
60
|
<TooltipTrigger asChild>
|
|
61
|
+
{/**
|
|
62
|
+
* Wrap the disabled button in a <div> that can receive hover events since disabled <button> elements
|
|
63
|
+
* don’t trigger pointer events in the browser
|
|
64
|
+
**/}
|
|
55
65
|
<div>{PreviewButton}</div>
|
|
56
66
|
</TooltipTrigger>
|
|
57
67
|
<TooltipContent>
|
|
@@ -64,6 +74,7 @@ export function Toolbar({
|
|
|
64
74
|
PreviewButton
|
|
65
75
|
)}
|
|
66
76
|
<Button
|
|
77
|
+
{...commonProps}
|
|
67
78
|
onClick={onSubmit}
|
|
68
79
|
variant={dirty ? 'default' : 'outline'}
|
|
69
80
|
disabled={!dirty && !inPreviewDisabled}
|
|
@@ -71,8 +82,8 @@ export function Toolbar({
|
|
|
71
82
|
>
|
|
72
83
|
{inPreviewDisabled ? 'Save' : 'Save changes'}
|
|
73
84
|
</Button>
|
|
74
|
-
<Button
|
|
75
|
-
<Settings className="
|
|
85
|
+
<Button {...commonProps} onClick={toggleSidePane}>
|
|
86
|
+
<Settings className="size-4" />
|
|
76
87
|
Agent Settings
|
|
77
88
|
</Button>
|
|
78
89
|
</div>
|
|
@@ -259,7 +259,7 @@ export function serializeAgentData(
|
|
|
259
259
|
...(stopWhen && { stopWhen }),
|
|
260
260
|
};
|
|
261
261
|
|
|
262
|
-
if (
|
|
262
|
+
if (node.data.isDefault) {
|
|
263
263
|
defaultSubAgentId = subAgentId;
|
|
264
264
|
}
|
|
265
265
|
|
|
@@ -280,7 +280,7 @@ export function serializeAgentData(
|
|
|
280
280
|
credentialReferenceId: (node.data.credentialReferenceId as string) || null,
|
|
281
281
|
};
|
|
282
282
|
|
|
283
|
-
if (
|
|
283
|
+
if (node.data.isDefault) {
|
|
284
284
|
defaultSubAgentId = subAgentId;
|
|
285
285
|
}
|
|
286
286
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";exports.id=1213,exports.ids=[1213],exports.modules={25498:(a,b,c)=>{c.r(b),c.d(b,{"40dcefeb381a5213090206da357ef95ff10446057d":()=>d.bW,"6075560ff8b706329b9472cd9ba11dfcbfd45223b6":()=>d.qf,"609d043dec93e6bdcdea2e716cd9ae1e482e2366da":()=>d.gL,"60bd5203c8bca4853e6eeb937b011d9c1e4e9d63fb":()=>d.Dv,"60d8914a16ea8e574f99e1c01192972ad4b5709393":()=>p,"7035be8f2ca98959c6f8d0cb8a2aa3281d4763fbef":()=>q,"7071f7f69d35912805a385ac5a910f6ab45e66cc96":()=>d.Tg,"70ce184243b59224f4a8c4d6da522a40c570f046c6":()=>r,"70f59614abb2d675176ed45033918b0efc090d4a1c":()=>s});var d=c(72025),e=c(29991);c(58415);var f=c(83248),g=c(8703),h=c(45796),i=c(33451);async function j(a,b){return(0,h.M2)(a),(0,h.nt)(b),await (0,g.J)(`tenants/${a}/projects/${b}/artifact-components`)}async function k(a,b,c){return(0,h.M2)(a),(0,h.nt)(b),(await (0,g.J)(`tenants/${a}/projects/${b}/artifact-components/${c}`)).data}async function l(a,b,c){return(0,h.M2)(a),(0,h.nt)(b),(await (0,g.J)(`tenants/${a}/projects/${b}/artifact-components`,{method:"POST",body:JSON.stringify(c)})).data}async function m(a,b,c){return(0,h.M2)(a),(0,h.nt)(b),(await (0,g.J)(`tenants/${a}/projects/${b}/artifact-components/${c.id}`,{method:"PUT",body:JSON.stringify(c)})).data}async function n(a,b,c){(0,h.M2)(a),(0,h.nt)(b),await (0,g.J)(`tenants/${a}/projects/${b}/artifact-components/${c}`,{method:"DELETE"})}(0,i.D)([j,k,l,m,n]),(0,e.A)(j,"60a9ea07cb0b745ddfbe5900068e3f1ff21d912a4b",null),(0,e.A)(k,"708a7dc847fe4b3e77e18aabc4ee3f54f911c04cc9",null),(0,e.A)(l,"709a0d0d4c5be6e15c53cf1340f939f2d904294c65",null),(0,e.A)(m,"704be9598808f9944c78b0730bf6e78de7f5084803",null),(0,e.A)(n,"70ea5711c7d43ac6daf61568dcfd27e195f30f20da",null);var o=c(36608);async function p(a,b){try{let c=await j(a,b);return{success:!0,data:c.data}}catch(a){if(a instanceof o.h)return{success:!1,error:a.message,code:a.error.code};return{success:!1,error:a instanceof Error?a.message:"Unknown error occurred",code:"unknown_error"}}}async function q(a,b,c){try{let d=await l(a,b,c);return(0,f.revalidatePath)(`/${a}/projects/${b}/artifacts`),{success:!0,data:d}}catch(a){if(a instanceof o.h)return{success:!1,error:a.message,code:a.error.code};return{success:!1,error:a instanceof Error?a.message:"Unknown error occurred",code:"unknown_error"}}}async function r(a,b,c){try{let d=await m(a,b,c);return(0,f.revalidatePath)(`/${a}/projects/${b}/artifacts`),(0,f.revalidatePath)(`/${a}/projects/${b}/artifacts/${c.id}`),{success:!0,data:d}}catch(a){if(a instanceof o.h)return{success:!1,error:a.message,code:a.error.code};return{success:!1,error:a instanceof Error?a.message:"Unknown error occurred",code:"unknown_error"}}}async function s(a,b,c){try{return await n(a,b,c),(0,f.revalidatePath)(`/${a}/projects/${b}/artifacts`),(0,f.revalidatePath)(`/${a}/projects/${b}/artifacts/${c}`),{success:!0}}catch(a){if(a instanceof o.h)return{success:!1,error:a.message,code:a.error.code};return{success:!1,error:a instanceof Error?a.message:"Unknown error occurred",code:"unknown_error"}}}(0,i.D)([p,q,r,s]),(0,e.A)(p,"60d8914a16ea8e574f99e1c01192972ad4b5709393",null),(0,e.A)(q,"7035be8f2ca98959c6f8d0cb8a2aa3281d4763fbef",null),(0,e.A)(r,"70ce184243b59224f4a8c4d6da522a40c570f046c6",null),(0,e.A)(s,"70f59614abb2d675176ed45033918b0efc090d4a1c",null)},29160:(a,b,c)=>{c.r(b),c.d(b,{default:()=>h,dynamic:()=>g});var d=c(72669),e=c(45907),f=c(54637);let g="force-dynamic";async function h({children:a,params:b}){let{tenantId:c,projectId:g}=await b;try{await (0,f.Sw)(c,g)}catch(a){return(0,d.jsx)(e.default,{error:a,context:"project"})}return(0,d.jsx)(d.Fragment,{children:a})}},32582:(a,b,c)=>{c.d(b,{ArtifactComponentForm:()=>x});var d=c(59111),e=c(6614),f=c(485),g=c(75823),h=c(68156),i=c(17130),j=c(16426),k=c(56019),l=c(2856),m=c(93622),n=c(35283),o=c(90147);let p=(0,o.createServerReference)("70ce184243b59224f4a8c4d6da522a40c570f046c6",o.callServer,void 0,o.findSourceMapURL,"updateArtifactComponentAction"),q=(0,o.createServerReference)("7035be8f2ca98959c6f8d0cb8a2aa3281d4763fbef",o.callServer,void 0,o.findSourceMapURL,"createArtifactComponentAction");var r=c(42723);let s={id:"",name:"",description:"",props:void 0};var t=c(34576),u=c(80974),v=c(62503);let w=t.object({id:v.f,name:t.string().min(1,"Name is required."),description:t.string().min(1,"Description is required."),props:t.union([t.string(),t.null(),t.undefined()]).transform((a,b)=>{if(a&&""!==a&&null!==a)try{let c=JSON.parse(a),d=(0,u._O)(a);if(!d.isValid){let a=d.errors[0]?.message||"Invalid JSON schema";return b.addIssue({code:t.ZodIssueCode.custom,message:a}),t.NEVER}return c}catch(a){return b.addIssue({code:t.ZodIssueCode.custom,message:(0,u.SR)(a)}),t.NEVER}}).optional()});function x({id:a,tenantId:b,projectId:c,initialData:o}){let t=(0,g.mN)({resolver:(0,e.u)(w),defaultValues:(a=>{if(!a)return s;let b={...a};return b.props&&(b.props=(0,r.S_)(b.props)),b})(o)}),{isSubmitting:u}=t.formState,v=(0,f.useRouter)();(0,n.S)({form:t,nameField:"name",idField:"id",isEditing:!!a});let x=async d=>{try{let e={...d};if(void 0===e.props&&(e.props=null),a){let a=await p(b,c,e);if(!a.success)return void h.oR.error(a.error||"Failed to update artifact.");h.oR.success("Artifact updated.")}else{let a=await q(b,c,e);if(!a.success)return void h.oR.error(a.error||"Failed to create artifact");h.oR.success("Artifact created."),v.push(`/${b}/projects/${c}/artifacts`)}}catch(b){console.error("Error submitting artifact:",b);let a=b instanceof Error?b.message:"An unexpected error occurred.";h.oR.error(a)}};return(0,d.jsx)(m.lV,{...t,children:(0,d.jsxs)("form",{onSubmit:t.handleSubmit(x),className:"space-y-8",children:[(0,d.jsx)(i.a,{control:t.control,name:"name",label:"Name",placeholder:"Document Artifact",isRequired:!0}),(0,d.jsx)(i.a,{control:t.control,name:"id",label:"Id",placeholder:"my-artifact",disabled:!!a,isRequired:!0,description:a?"":"Choose a unique identifier for this artifact. Using an existing id will replace that artifact."}),(0,d.jsx)(j.K,{control:t.control,name:"description",label:"Description",placeholder:"Structured factual information extracted from search results",className:"min-h-[80px]",isRequired:!0}),(0,d.jsx)(k.S,{control:t.control,name:"props",label:"Props (JSON schema with inPreview indicators)",placeholder:"Enter a valid JSON Schema with inPreview flags, or leave empty to save entire tool result...",description:"Optional: Define specific fields with inPreview flags, or leave empty to capture the complete tool response."}),(0,d.jsx)(l.$,{type:"submit",disabled:u,children:"Save"})]})})}},39878:(a,b,c)=>{c.d(b,{$:()=>i});var d=c(59111),e=c(2856),f=c(80974),g=c(42723),h=c(67466);function i(a){return(0,d.jsxs)("div",{"data-slot":"json-editor",className:`space-y-3 relative overflow-hidden p-1 ${a.className||""}`,children:[(0,d.jsxs)("div",{className:"flex items-center gap-2 absolute top-3 right-3 z-10",children:[!a.value?.trim()&&(0,d.jsx)(e.$,{type:"button",onClick:()=>{let b=(0,f.Qj)();a.onChange(b)},variant:"outline",size:"sm",className:"h-6 px-2 text-xs rounded-sm",children:"Template"}),(0,d.jsx)(e.$,{type:"button",onClick:()=>{let b=a.value;if(b?.trim()){let c=(0,g.IB)(b);a.onChange(c)}},variant:"outline",size:"sm",className:"h-6 px-2 text-xs rounded-sm",disabled:!a.value?.trim(),children:"Format"})]}),(0,d.jsx)(h.i,{value:a.value||"",onChange:a.onChange,placeholder:a.placeholder,disabled:a.disabled,readOnly:a.readOnly})]})}},44733:(a,b,c)=>{c.d(b,{ArtifactComponentForm:()=>d});let d=(0,c(60241).registerClientReference)(function(){throw Error("Attempted to call ArtifactComponentForm() from the server but ArtifactComponentForm is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/agents/agents/agents-manage-ui/src/components/artifact-components/form/artifact-component-form.tsx","ArtifactComponentForm")},56019:(a,b,c)=>{c.d(b,{S:()=>g});var d=c(59111),e=c(71771),f=c(39878);function g({control:a,name:b,label:c="JSON Schema",placeholder:g,disabled:h,description:i,readOnly:j,isRequired:k=!1}){return(0,d.jsx)(e.u,{control:a,name:b,label:c,description:i,isRequired:k,children:a=>(0,d.jsx)(f.$,{placeholder:g,...a,onChange:a.onChange,readOnly:j,disabled:h})})}},62503:(a,b,c)=>{c.d(b,{f:()=>d});let d=c(34576).string().min(1,"Id is required.").max(64,"Id must be less than 64 characters.").regex(/^[a-zA-Z0-9_-]+$/,"Id must contain only alphanumeric characters, underscores, and dashes. No spaces allowed.")},80974:(a,b,c)=>{c.d(b,{Qj:()=>k,SR:()=>l,_O:()=>j});var d=c(7352),e=c(43381);let f=d.ZU.Object({type:d.ZU.Union([d.ZU.Literal("string"),d.ZU.Literal("number"),d.ZU.Literal("integer"),d.ZU.Literal("boolean"),d.ZU.Literal("array"),d.ZU.Literal("object"),d.ZU.Literal("null")]),description:d.ZU.String({minLength:1}),format:d.ZU.Optional(d.ZU.String()),pattern:d.ZU.Optional(d.ZU.String()),minimum:d.ZU.Optional(d.ZU.Number()),maximum:d.ZU.Optional(d.ZU.Number()),minLength:d.ZU.Optional(d.ZU.Number()),maxLength:d.ZU.Optional(d.ZU.Number()),items:d.ZU.Optional(d.ZU.Any()),properties:d.ZU.Optional(d.ZU.Any()),enum:d.ZU.Optional(d.ZU.Array(d.ZU.Any())),const:d.ZU.Optional(d.ZU.Any()),default:d.ZU.Optional(d.ZU.Any())}),g=d.ZU.Object({type:d.ZU.Literal("object"),properties:d.ZU.Record(d.ZU.String(),f),required:d.ZU.Array(d.ZU.String(),{minItems:1}),additionalProperties:d.ZU.Optional(d.ZU.Boolean()),description:d.ZU.Optional(d.ZU.String())}),h=e.gv.Compile(f),i=e.gv.Compile(g);function j(a){let b=[],{parsed:c,errors:d}=function(a){let b=[],c=null;if(!a?.trim())return{parsed:null,errors:b};try{c=JSON.parse(a)}catch(a){b.push({path:"root",message:a instanceof Error?a.message:"Invalid JSON syntax",type:"syntax"})}return{parsed:c,errors:b}}(a);if(d.length>0)return{isValid:!1,errors:d,warnings:b};if(!c)return{isValid:!0,errors:[],warnings:["Empty schema provided"]};let e=[...function(a){let b=[];return a&&"object"==typeof a?!i.Check(a)&&(a.type&&"object"===a.type||b.push({path:"type",message:'Schema must have type: "object" for LLM compatibility',type:"llm_requirement"}),a.properties&&"object"==typeof a.properties||b.push({path:"properties",message:'Schema must have a "properties" object',type:"schema"}),a.required&&Array.isArray(a.required)||b.push({path:"required",message:'Schema must have a "required" array (can be empty)',type:"llm_requirement"}),a.properties&&"object"==typeof a.properties&&Object.entries(a.properties).forEach(([a,c])=>{h.Check(c)||[...h.Errors(c)].forEach(c=>{let d=c.message;"/description"===c.path?d='Each property must have a "description" for LLM compatibility':"/type"===c.path&&(d='Each property must have a valid "type"'),b.push({path:`properties.${a}${c.path}`,message:d,type:"/description"===c.path?"llm_requirement":"schema"})})})):b.push({path:"root",message:"Schema must be an object",type:"schema"}),b}(c),...function(a){let b=[];return a&&"object"==typeof a&&(a.required&&Array.isArray(a.required)&&a.properties&&a.required.forEach(c=>{a.properties[c]||b.push({path:"required",message:`Required property "${c}" must exist in properties`,type:"schema"})}),a.properties&&"object"==typeof a.properties&&Object.entries(a.properties).forEach(([a,c])=>{c.description&&"string"==typeof c.description&&0!==c.description.trim().length||b.push({path:`properties.${a}.description`,message:"Each property must have a non-empty description for LLM compatibility",type:"llm_requirement"})})),b}(c)];return{isValid:0===e.length,errors:e,warnings:b}}function k(){return JSON.stringify({type:"object",properties:{example_property:{type:"string",description:"Description of what this property represents"}},required:["example_property"]},null,2)}function l(a){if(a instanceof SyntaxError){let b=a.message.toLowerCase();return b.includes("unexpected end of json input")?"Incomplete JSON - missing closing brackets or quotes":b.includes("unexpected token")?"Invalid character in JSON - check for missing commas, quotes, or brackets":b.includes("expected property name")||b.includes("expected ':' after property name")?"Property names must be in double quotes":b.includes("duplicate keys")?"Duplicate property names are not allowed":"Invalid JSON syntax - check structure and formatting"}return"Unable to parse JSON"}},93056:(a,b,c)=>{c.r(b),c.d(b,{default:()=>j});var d=c(72669),e=c(17932),f=c(96737),g=c(39885),h=c(3687),i=c(43461);function j(){return(0,d.jsx)(e.H,{breadcrumbs:[{label:"Artifacts"}],children:(0,d.jsxs)(f.D,{children:[(0,d.jsx)(g.zY,{title:"Artifacts",description:i.lh}),(0,d.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-3 md:gap-4",children:Array.from({length:6}).map((a,b)=>(0,d.jsx)(h.E,{className:"h-36 w-full rounded-lg"},`loading-artifact-${b}`))})]})})}}};
|