@inkeep/agents-manage-ui 0.19.8 → 0.19.9
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 +132 -132
- package/.next/standalone/agents-manage-ui/.next/app-path-routes-manifest.json +5 -5
- package/.next/standalone/agents-manage-ui/.next/build-manifest.json +5 -5
- package/.next/standalone/agents-manage-ui/.next/prerender-manifest.json +13 -13
- package/.next/standalone/agents-manage-ui/.next/react-loadable-manifest.json +3 -3
- 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 +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 +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.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 +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/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_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js.nft.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page_client-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page.js +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 +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 +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 +8 -8
- package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route.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 +5 -5
- package/.next/standalone/agents-manage-ui/.next/server/chunks/2067.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/3400.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/3722.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/480.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/4889.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/6218.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/6641.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/7457.js +2 -2
- package/.next/standalone/agents-manage-ui/.next/server/chunks/7504.js +7 -7
- package/.next/standalone/agents-manage-ui/.next/server/middleware-build-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/pages/404.html +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/pages/500.html +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/agents-manage-ui/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/29440.44fedd2ec0823a02.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/49858-80fbae619dcf597d.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/71558-15582eb2578602c7.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/7190-1e2d739fc04faeaf.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/93677-c2967ad8c191461e.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/page-a4388aae9b646fbd.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-7288c0df010d0cc6.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/{page-9b9ccc14599cbd20.js → page-0f5b8283e533a741.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/new/{page-9b9ccc14599cbd20.js → page-0f5b8283e533a741.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/page-4cbf2f50465ca194.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page-05021c0d1b5b3b9e.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/new/page-05021c0d1b5b3b9e.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/{page-4028a78cd422088d.js → page-993b81d7cc4a8c48.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-c1d1b0c33f6b3a95.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-fd43a6e9943d7131.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-10a60aad2603cc3f.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/page-9ac2a6a56a5f8007.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/new/{page-50bb2f6d74e4b76a.js → page-851cde7b5754a696.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/page-d88b98f0c69f21ab.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/settings/{page-ca36fd27027464aa.js → page-8c55d9d495a2783c.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/ai-calls/{page-00cee6f3d629b552.js → page-580fa90a20317d9b.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page-e860de4595d782bf.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-70d78da1fdb78ef0.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/{page-87eb618883b4e3f5.js → page-c7a3db784f88966f.js} +1 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-c70e6e74af560638.js +1 -0
- package/.next/standalone/agents-manage-ui/.next/static/chunks/{webpack-bae1a6a598e24abf.js → webpack-ef3a13f9d4749344.js} +1 -1
- package/.next/standalone/agents-manage-ui/package.json +1 -1
- package/.next/standalone/packages/agents-core/package.json +1 -1
- package/package.json +4 -4
- package/src/app/[tenantId]/projects/[projectId]/agents/page.tsx +1 -1
- package/src/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.tsx +1 -1
- package/src/app/api/signoz/conversations/[conversationId]/route.ts +3 -11
- package/src/components/agent/agent.tsx +1 -1
- package/src/components/agent/configuration/agent-types.tsx +1 -1
- package/src/components/agent/nodes/sub-agent-node.tsx +2 -2
- package/src/components/agent/playground/chat-widget.tsx +1 -0
- package/src/components/agent/sidepane/edges/edge-editor.tsx +14 -9
- package/src/components/agent/sidepane/metadata/metadata-editor.tsx +8 -8
- package/src/components/agent/sidepane/nodes/external-agent-node-editor.tsx +1 -1
- package/src/components/agent/sidepane/nodes/mcp-node-editor.tsx +9 -4
- package/src/components/agent/sidepane/nodes/model-section.tsx +5 -3
- package/src/components/agent/sidepane/nodes/sub-agent-node-editor.tsx +7 -7
- package/src/components/artifact-components/form/artifact-component-form.tsx +1 -1
- package/src/components/data-components/form/data-component-form.tsx +10 -1
- package/src/components/form/form-field-wrapper.tsx +1 -1
- package/src/components/form/generic-input.tsx +1 -1
- package/src/components/projects/form/project-models-section.tsx +1 -1
- package/src/components/projects/form/project-sandbox-section.tsx +1 -1
- package/src/components/projects/form/project-stopwhen-section.tsx +2 -1
- package/src/components/sidebar-nav/project-selector.tsx +1 -1
- package/src/components/traces/ai-calls-breakdown.tsx +6 -6
- package/src/components/traces/conversation-detail.tsx +57 -13
- package/src/components/traces/conversation-stats/conversation-stats-card.tsx +2 -2
- package/src/components/traces/filters/agent-filter.tsx +1 -1
- package/src/components/traces/timeline/render-panel-content.tsx +3 -7
- package/src/components/traces/timeline/timeline-wrapper.tsx +35 -15
- package/src/components/ui/combobox.tsx +1 -1
- package/src/constants/page-descriptions.tsx +2 -2
- package/src/features/agent/domain/agent-initializer-helpers.ts +3 -2
- package/src/features/agent/domain/serialize.ts +6 -6
- package/src/features/agent/state/use-agent-store.ts +2 -2
- package/src/lib/README.md +15 -15
- package/src/lib/utils/agent-error-parser.ts +18 -18
- package/src/lib/utils/trace-formatter.ts +79 -0
- package/.next/standalone/agents-manage-ui/.next/server/chunks/2786.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/448.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/6451.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/7181.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/server/chunks/901.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/29440.b89b85e734301ee2.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/49858-9d58688d4acdd420.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/71558-ca56cb02e8dc8775.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/7190-20b3b477467e2207.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/80876-f0b57615fde13548.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/page-1443c84d0ae5c822.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-8f50ad0d7de69701.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/page-e1712be9ee333bd7.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page-18ae6491190c6805.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/new/page-18ae6491190c6805.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-d1e68d82991d5e5d.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-81023398e97ff7a4.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-d2f31f40b1c0e8cb.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/page-fe9376891c8931ec.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/page-0e6edfe2c3f181a7.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page-48512f59a08d0878.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-1a5884ccb79f23d6.js +0 -1
- package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-e037ed1265e8779d.js +0 -1
- /package/.next/standalone/agents-manage-ui/.next/static/{cEO8EC1LXYvvdtL1arXWQ → DpJf4ZoPjE78fg2jHh4S4}/_buildManifest.js +0 -0
- /package/.next/standalone/agents-manage-ui/.next/static/{cEO8EC1LXYvvdtL1arXWQ → DpJf4ZoPjE78fg2jHh4S4}/_ssgManifest.js +0 -0
|
@@ -74,7 +74,7 @@ export function renderPanelContent({
|
|
|
74
74
|
const AdvancedBlock = span ? (
|
|
75
75
|
<SpanAttributes span={span.data} />
|
|
76
76
|
) : (
|
|
77
|
-
<div className="text-center py-4 text-xs text-muted-foreground">Span not found
|
|
77
|
+
<div className="text-center py-4 text-xs text-muted-foreground">Span not found.</div>
|
|
78
78
|
);
|
|
79
79
|
|
|
80
80
|
switch (selected.type) {
|
|
@@ -261,14 +261,10 @@ export function renderPanelContent({
|
|
|
261
261
|
<>
|
|
262
262
|
<Section>
|
|
263
263
|
<LabeledBlock label="From sub agent">
|
|
264
|
-
<Badge variant="code">
|
|
265
|
-
{a.transferFromSubAgentId || 'Unknown sub agent'}
|
|
266
|
-
</Badge>
|
|
264
|
+
<Badge variant="code">{a.transferFromSubAgentId || 'Unknown sub agent'}</Badge>
|
|
267
265
|
</LabeledBlock>
|
|
268
266
|
<LabeledBlock label="To sub agent">
|
|
269
|
-
<Badge variant="code">
|
|
270
|
-
{a.transferToSubAgentId || 'Unknown target'}
|
|
271
|
-
</Badge>
|
|
267
|
+
<Badge variant="code">{a.transferToSubAgentId || 'Unknown target'}</Badge>
|
|
272
268
|
</LabeledBlock>
|
|
273
269
|
<Info
|
|
274
270
|
label="Tool name"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AlertTriangle, ChevronDown, ChevronUp, Loader2, RefreshCw } from 'lucide-react';
|
|
1
|
+
import { AlertTriangle, ChevronDown, ChevronUp, Copy, Loader2, RefreshCw } from 'lucide-react';
|
|
2
2
|
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
3
3
|
import { toast } from 'sonner';
|
|
4
4
|
import { StickToBottom } from 'use-stick-to-bottom';
|
|
@@ -63,6 +63,8 @@ interface TimelineWrapperProps {
|
|
|
63
63
|
refreshOnce?: () => Promise<{ hasNewActivity: boolean }>;
|
|
64
64
|
showConversationTracesLink?: boolean;
|
|
65
65
|
conversationId?: string;
|
|
66
|
+
onCopyTrace?: () => void;
|
|
67
|
+
isCopying?: boolean;
|
|
66
68
|
}
|
|
67
69
|
|
|
68
70
|
function EmptyTimeline({
|
|
@@ -152,6 +154,8 @@ export function TimelineWrapper({
|
|
|
152
154
|
refreshOnce,
|
|
153
155
|
showConversationTracesLink = false,
|
|
154
156
|
conversationId,
|
|
157
|
+
onCopyTrace,
|
|
158
|
+
isCopying = false,
|
|
155
159
|
}: TimelineWrapperProps) {
|
|
156
160
|
const [selected, setSelected] = useState<SelectedPanel | null>(null);
|
|
157
161
|
const [panelVisible, setPanelVisible] = useState(false);
|
|
@@ -236,7 +240,7 @@ export function TimelineWrapper({
|
|
|
236
240
|
// Track which messages we've already processed
|
|
237
241
|
const processedIdsRef = useRef<Set<string>>(new Set());
|
|
238
242
|
const lastConversationRef = useRef<string | undefined>(undefined);
|
|
239
|
-
|
|
243
|
+
|
|
240
244
|
useEffect(() => {
|
|
241
245
|
// Reset when conversation changes
|
|
242
246
|
if (conversationId !== lastConversationRef.current) {
|
|
@@ -245,37 +249,39 @@ export function TimelineWrapper({
|
|
|
245
249
|
setCollapsedAiMessages(new Set());
|
|
246
250
|
setAiMessagesGloballyCollapsed(false);
|
|
247
251
|
}
|
|
248
|
-
|
|
252
|
+
|
|
249
253
|
// Determine which IDs to auto-collapse based on view type
|
|
250
254
|
const idsToProcess = enableAutoScroll ? aiMessageIds : streamTextIds;
|
|
251
|
-
|
|
255
|
+
|
|
252
256
|
// Find new IDs that haven't been processed yet
|
|
253
|
-
const newIds = idsToProcess.filter(id => !processedIdsRef.current.has(id));
|
|
254
|
-
|
|
257
|
+
const newIds = idsToProcess.filter((id) => !processedIdsRef.current.has(id));
|
|
258
|
+
|
|
255
259
|
if (newIds.length > 0) {
|
|
256
260
|
// Mark these as processed
|
|
257
|
-
newIds.forEach(id => {
|
|
261
|
+
newIds.forEach((id) => {
|
|
258
262
|
processedIdsRef.current.add(id);
|
|
259
263
|
});
|
|
260
|
-
|
|
264
|
+
|
|
261
265
|
// Add new IDs to collapsed set
|
|
262
|
-
setCollapsedAiMessages(prev => {
|
|
266
|
+
setCollapsedAiMessages((prev) => {
|
|
263
267
|
const updated = new Set(prev);
|
|
264
|
-
newIds.forEach(id => {
|
|
268
|
+
newIds.forEach((id) => {
|
|
265
269
|
updated.add(id);
|
|
266
270
|
});
|
|
267
271
|
return updated;
|
|
268
272
|
});
|
|
269
273
|
// Update global state
|
|
270
|
-
const allProcessed = idsToProcess.every(id => processedIdsRef.current.has(id));
|
|
274
|
+
const allProcessed = idsToProcess.every((id) => processedIdsRef.current.has(id));
|
|
271
275
|
if (enableAutoScroll) {
|
|
272
276
|
setAiMessagesGloballyCollapsed(allProcessed && aiMessageIds.length > 0);
|
|
273
277
|
} else {
|
|
274
|
-
setAiMessagesGloballyCollapsed(
|
|
278
|
+
setAiMessagesGloballyCollapsed(
|
|
279
|
+
allProcessed && streamTextIds.length === aiMessageIds.length && aiMessageIds.length > 0
|
|
280
|
+
);
|
|
275
281
|
}
|
|
276
282
|
}
|
|
277
283
|
}, [conversationId, aiMessageIds, streamTextIds, enableAutoScroll]);
|
|
278
|
-
|
|
284
|
+
|
|
279
285
|
// Functions to handle expand/collapse all (memoized to prevent unnecessary re-renders)
|
|
280
286
|
const expandAllAiMessages = useCallback(() => {
|
|
281
287
|
setCollapsedAiMessages(new Set());
|
|
@@ -344,11 +350,11 @@ export function TimelineWrapper({
|
|
|
344
350
|
try {
|
|
345
351
|
const result = await refreshOnce();
|
|
346
352
|
if (!result.hasNewActivity) {
|
|
347
|
-
toast.info('No new activity found');
|
|
353
|
+
toast.info('No new activity found.');
|
|
348
354
|
}
|
|
349
355
|
setIsRefreshing(false);
|
|
350
356
|
} catch {
|
|
351
|
-
toast.error('Failed to refresh activities');
|
|
357
|
+
toast.error('Failed to refresh activities.');
|
|
352
358
|
setIsRefreshing(false);
|
|
353
359
|
}
|
|
354
360
|
};
|
|
@@ -361,6 +367,20 @@ export function TimelineWrapper({
|
|
|
361
367
|
<div className="flex items-center justify-between px-6 pb-4">
|
|
362
368
|
<div className="text-foreground text-md font-medium">Activity timeline</div>
|
|
363
369
|
<div className="flex items-center gap-2">
|
|
370
|
+
{/* Copy JSON Button */}
|
|
371
|
+
{onCopyTrace && (
|
|
372
|
+
<Button
|
|
373
|
+
variant="ghost"
|
|
374
|
+
size="sm"
|
|
375
|
+
onClick={onCopyTrace}
|
|
376
|
+
disabled={isCopying}
|
|
377
|
+
className="h-7 px-2 text-xs text-muted-foreground hover:text-foreground"
|
|
378
|
+
title="Copy trace as JSON"
|
|
379
|
+
>
|
|
380
|
+
<Copy className="h-3 w-3 mr-1" />
|
|
381
|
+
{isCopying ? 'Copying...' : 'Copy Trace'}
|
|
382
|
+
</Button>
|
|
383
|
+
)}
|
|
364
384
|
{/* Expand/Collapse AI Messages Buttons */}
|
|
365
385
|
{sortedActivities.some(
|
|
366
386
|
(activity) =>
|
|
@@ -23,7 +23,7 @@ export const dataComponentDescription = (
|
|
|
23
23
|
|
|
24
24
|
export const agentDescription = (
|
|
25
25
|
<>
|
|
26
|
-
Agents are visual representations of the data flow between agents and tools.
|
|
26
|
+
Agents are visual representations of the data flow between sub agents and tools.
|
|
27
27
|
{'\n'}
|
|
28
28
|
<ExternalLink href={`${DOCS_BASE_URL}/visual-builder/agent`}>Learn more</ExternalLink>
|
|
29
29
|
</>
|
|
@@ -31,7 +31,7 @@ export const agentDescription = (
|
|
|
31
31
|
|
|
32
32
|
export const apiKeyDescription = (
|
|
33
33
|
<>
|
|
34
|
-
API keys are use to authenticate against the Inkeep Agents Run API. They are associated with
|
|
34
|
+
API keys are use to authenticate against the Inkeep Agents Run API. They are associated with an
|
|
35
35
|
agent and can be used to chat with the agent programmatically.
|
|
36
36
|
{'\n'}
|
|
37
37
|
</>
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { AgentMetadata, ContextConfig } from '@/components/agent/configuration/agent-types';
|
|
2
2
|
import type { FullAgentDefinition } from '@/lib/types/agent-full';
|
|
3
3
|
import { formatJsonField } from '@/lib/utils';
|
|
4
4
|
|
|
5
5
|
export type ExtendedFullAgentDefinition = FullAgentDefinition & {
|
|
6
|
+
prompt?: string;
|
|
6
7
|
contextConfig?: Partial<Pick<ContextConfig, 'id'>> & {
|
|
7
8
|
contextVariables?: Record<string, any>;
|
|
8
9
|
headersSchema?: Record<string, any>;
|
|
@@ -22,7 +23,7 @@ export function extractAgentMetadata(
|
|
|
22
23
|
id: agent?.id,
|
|
23
24
|
name: agent?.name ?? '',
|
|
24
25
|
description: agent?.description ?? '',
|
|
25
|
-
|
|
26
|
+
prompt: agent?.prompt,
|
|
26
27
|
models: agent?.models
|
|
27
28
|
? {
|
|
28
29
|
base: agent.models.base
|
|
@@ -424,8 +424,8 @@ export function serializeAgentData(
|
|
|
424
424
|
(result as any).stopWhen = metadata.stopWhen;
|
|
425
425
|
}
|
|
426
426
|
|
|
427
|
-
if (metadata?.
|
|
428
|
-
(result as any).
|
|
427
|
+
if (metadata?.prompt) {
|
|
428
|
+
(result as any).prompt = metadata.prompt;
|
|
429
429
|
}
|
|
430
430
|
|
|
431
431
|
if (metadata?.statusUpdates) {
|
|
@@ -466,7 +466,7 @@ export function validateSerializedData(
|
|
|
466
466
|
|
|
467
467
|
if (data.defaultSubAgentId && !data.subAgents[data.defaultSubAgentId]) {
|
|
468
468
|
errors.push({
|
|
469
|
-
message: `Default agent ID '${data.defaultSubAgentId}' not found in agents
|
|
469
|
+
message: `Default agent ID '${data.defaultSubAgentId}' not found in agents.`,
|
|
470
470
|
field: 'defaultSubAgentId',
|
|
471
471
|
code: 'invalid_reference',
|
|
472
472
|
path: ['defaultSubAgentId'],
|
|
@@ -483,7 +483,7 @@ export function validateSerializedData(
|
|
|
483
483
|
const toolId = canUseItem.toolId;
|
|
484
484
|
if (!toolsData[toolId]) {
|
|
485
485
|
errors.push({
|
|
486
|
-
message: `Tool '${toolId}' not found
|
|
486
|
+
message: `Tool '${toolId}' not found.`,
|
|
487
487
|
field: 'toolId',
|
|
488
488
|
code: 'invalid_reference',
|
|
489
489
|
path: ['agents', subAgentId, 'canUse'],
|
|
@@ -565,7 +565,7 @@ export function validateSerializedData(
|
|
|
565
565
|
for (const targetId of agent.canTransferTo ?? []) {
|
|
566
566
|
if (!data.subAgents[targetId]) {
|
|
567
567
|
errors.push({
|
|
568
|
-
message: `Transfer target '${targetId}' not found in agents
|
|
568
|
+
message: `Transfer target '${targetId}' not found in agents.`,
|
|
569
569
|
field: 'canTransferTo',
|
|
570
570
|
code: 'invalid_reference',
|
|
571
571
|
path: ['agents', subAgentId, 'canTransferTo'],
|
|
@@ -575,7 +575,7 @@ export function validateSerializedData(
|
|
|
575
575
|
for (const targetId of agent.canDelegateTo ?? []) {
|
|
576
576
|
if (!data.subAgents[targetId]) {
|
|
577
577
|
errors.push({
|
|
578
|
-
message: `Delegate target '${targetId}' not found in agents
|
|
578
|
+
message: `Delegate target '${targetId}' not found in agents.`,
|
|
579
579
|
field: 'canDelegateTo',
|
|
580
580
|
code: 'invalid_reference',
|
|
581
581
|
path: ['agents', subAgentId, 'canDelegateTo'],
|
|
@@ -3,9 +3,9 @@ import { addEdge, applyEdgeChanges, applyNodeChanges } from '@xyflow/react';
|
|
|
3
3
|
import { create } from 'zustand';
|
|
4
4
|
import { devtools } from 'zustand/middleware';
|
|
5
5
|
import { useShallow } from 'zustand/react/shallow';
|
|
6
|
+
import type { AgentToolConfigLookup } from '@/components/agent/agent';
|
|
6
7
|
import type { AgentMetadata } from '@/components/agent/configuration/agent-types';
|
|
7
8
|
import { mcpNodeHandleId, NodeType } from '@/components/agent/configuration/node-types';
|
|
8
|
-
import type { AgentToolConfigLookup } from '@/components/agent/agent';
|
|
9
9
|
import type { ArtifactComponent } from '@/lib/api/artifact-components';
|
|
10
10
|
import type { DataComponent } from '@/lib/api/data-components';
|
|
11
11
|
import type { MCPTool } from '@/lib/types/tools';
|
|
@@ -81,7 +81,7 @@ export const agentStore = create<AgentState>()(
|
|
|
81
81
|
},
|
|
82
82
|
models: undefined,
|
|
83
83
|
stopWhen: undefined,
|
|
84
|
-
|
|
84
|
+
prompt: undefined,
|
|
85
85
|
statusUpdates: undefined,
|
|
86
86
|
},
|
|
87
87
|
dataComponentLookup: {},
|
package/src/lib/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Agent Builder Library
|
|
2
2
|
|
|
3
|
-
This library provides server actions and types for interacting with the
|
|
3
|
+
This library provides server actions and types for interacting with the AgentFull API from the inkeep-chat backend. It imports the original schemas from the inkeep-chat package to avoid duplication and ensure consistency.
|
|
4
4
|
|
|
5
5
|
## Configuration
|
|
6
6
|
|
|
@@ -17,13 +17,13 @@ INKEEP_AGENTS_MANAGE_API_URL="http://localhost:3002"
|
|
|
17
17
|
|
|
18
18
|
```typescript
|
|
19
19
|
import {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
type
|
|
20
|
+
createFullAgentAction,
|
|
21
|
+
deleteFullAgentAction,
|
|
22
|
+
getFullAgentAction,
|
|
23
|
+
updateFullAgentAction,
|
|
24
|
+
validateAgentData,
|
|
25
|
+
FullAgentDefinitionSchema,
|
|
26
|
+
type FullAgentDefinition,
|
|
27
27
|
type ActionResult,
|
|
28
28
|
} from '@/lib';
|
|
29
29
|
```
|
|
@@ -31,10 +31,10 @@ import {
|
|
|
31
31
|
### Create a new agent
|
|
32
32
|
|
|
33
33
|
```typescript
|
|
34
|
-
const result = await
|
|
34
|
+
const result = await createFullAgentAction('tenant-123', {
|
|
35
35
|
id: 'my-agent',
|
|
36
36
|
name: 'My Customer Service Agent',
|
|
37
|
-
description: '
|
|
37
|
+
description: 'An agent for customer service operations',
|
|
38
38
|
defaultSubAgentId: 'support-agent',
|
|
39
39
|
agents: {
|
|
40
40
|
'support-agent': {
|
|
@@ -64,7 +64,7 @@ if (result.success) {
|
|
|
64
64
|
### Get an existing agent
|
|
65
65
|
|
|
66
66
|
```typescript
|
|
67
|
-
const result = await
|
|
67
|
+
const result = await getFullAgentAction('tenant-123', 'my-agent');
|
|
68
68
|
|
|
69
69
|
if (result.success) {
|
|
70
70
|
console.log('Agent retrieved:', result.data);
|
|
@@ -76,13 +76,13 @@ if (result.success) {
|
|
|
76
76
|
### Update an agent
|
|
77
77
|
|
|
78
78
|
```typescript
|
|
79
|
-
const
|
|
79
|
+
const updatedAgent = {
|
|
80
80
|
id: 'my-agent',
|
|
81
81
|
name: 'Updated Customer Service Agent',
|
|
82
82
|
// ... other properties
|
|
83
83
|
};
|
|
84
84
|
|
|
85
|
-
const result = await
|
|
85
|
+
const result = await updateFullAgentAction('tenant-123', 'my-agent', updatedAgent);
|
|
86
86
|
|
|
87
87
|
if (result.success) {
|
|
88
88
|
console.log('Agent updated:', result.data);
|
|
@@ -94,7 +94,7 @@ if (result.success) {
|
|
|
94
94
|
### Delete an agent
|
|
95
95
|
|
|
96
96
|
```typescript
|
|
97
|
-
const result = await
|
|
97
|
+
const result = await deleteFullAgentAction('tenant-123', 'my-agent');
|
|
98
98
|
|
|
99
99
|
if (result.success) {
|
|
100
100
|
console.log('Agent deleted successfully');
|
|
@@ -108,7 +108,7 @@ if (result.success) {
|
|
|
108
108
|
Use this for form validation before submitting:
|
|
109
109
|
|
|
110
110
|
```typescript
|
|
111
|
-
const result = await
|
|
111
|
+
const result = await validateAgentData(formData);
|
|
112
112
|
|
|
113
113
|
if (result.success) {
|
|
114
114
|
// Data is valid, proceed with submission
|
|
@@ -14,7 +14,7 @@ export interface ValidationErrorDetail {
|
|
|
14
14
|
|
|
15
15
|
export interface ProcessedAgentError {
|
|
16
16
|
type: 'node' | 'edge' | 'agent';
|
|
17
|
-
nodeType?: '
|
|
17
|
+
nodeType?: 'subAgent' | 'functionTool';
|
|
18
18
|
nodeId?: string;
|
|
19
19
|
edgeId?: string;
|
|
20
20
|
field: string;
|
|
@@ -100,7 +100,7 @@ function processValidationError(
|
|
|
100
100
|
|
|
101
101
|
// Determine error type and extract IDs
|
|
102
102
|
let type: 'node' | 'edge' | 'agent' = 'agent';
|
|
103
|
-
let nodeType: '
|
|
103
|
+
let nodeType: 'subAgent' | 'functionTool' | undefined;
|
|
104
104
|
let nodeId: string | undefined;
|
|
105
105
|
let edgeId: string | undefined;
|
|
106
106
|
let field: string;
|
|
@@ -115,9 +115,9 @@ function processValidationError(
|
|
|
115
115
|
nodeType = 'functionTool';
|
|
116
116
|
nodeId = fullPath[1];
|
|
117
117
|
field = error.path.slice(2).join('.') || (error as any).field || 'configuration';
|
|
118
|
-
} else if (fullPath[0] === '
|
|
118
|
+
} else if (fullPath[0] === 'subAgents' && fullPath[1]) {
|
|
119
119
|
type = 'node';
|
|
120
|
-
nodeType = '
|
|
120
|
+
nodeType = 'subAgent';
|
|
121
121
|
nodeId = fullPath[1];
|
|
122
122
|
field = error.path.join('.') || 'configuration';
|
|
123
123
|
} else if (fullPath[0] === 'edges' && fullPath[1]) {
|
|
@@ -150,11 +150,11 @@ function createUserFriendlyMessage(
|
|
|
150
150
|
error: ValidationErrorDetail,
|
|
151
151
|
field: string,
|
|
152
152
|
type: 'node' | 'edge' | 'agent',
|
|
153
|
-
nodeType?: '
|
|
153
|
+
nodeType?: 'subAgent' | 'functionTool'
|
|
154
154
|
): string {
|
|
155
155
|
let entityType: string;
|
|
156
156
|
if (type === 'node') {
|
|
157
|
-
entityType = nodeType === 'functionTool' ? 'Function Tool' : 'Agent';
|
|
157
|
+
entityType = nodeType === 'functionTool' ? 'Function Tool' : 'Sub Agent';
|
|
158
158
|
} else if (type === 'edge') {
|
|
159
159
|
entityType = 'Connection';
|
|
160
160
|
} else {
|
|
@@ -193,25 +193,25 @@ function createUserFriendlyMessage(
|
|
|
193
193
|
function getFieldDisplayName(field: string): string {
|
|
194
194
|
const fieldMap: Record<string, string> = {
|
|
195
195
|
instructions: 'Instructions',
|
|
196
|
-
projectId: 'Project
|
|
196
|
+
projectId: 'Project id',
|
|
197
197
|
baseUrl: 'Host URL',
|
|
198
198
|
name: 'Name',
|
|
199
199
|
description: 'Description',
|
|
200
200
|
model: 'Model',
|
|
201
201
|
temperature: 'Temperature',
|
|
202
|
-
maxTokens: 'Max
|
|
203
|
-
systemPrompt: 'System
|
|
202
|
+
maxTokens: 'Max tokens',
|
|
203
|
+
systemPrompt: 'System prompt',
|
|
204
204
|
tools: 'Tools',
|
|
205
205
|
dataComponents: 'Components',
|
|
206
206
|
artifactComponents: 'Artifacts',
|
|
207
207
|
relationships: 'Relationships',
|
|
208
|
-
transferTargetToSource: 'Transfer (
|
|
209
|
-
transferSourceToTarget: 'Transfer (
|
|
210
|
-
delegateTargetToSource: 'Delegate (
|
|
211
|
-
delegateSourceToTarget: 'Delegate (
|
|
212
|
-
contextConfig: 'Context
|
|
213
|
-
contextVariables: 'Context
|
|
214
|
-
headersSchema: 'Headers
|
|
208
|
+
transferTargetToSource: 'Transfer (target to source)',
|
|
209
|
+
transferSourceToTarget: 'Transfer (source to target)',
|
|
210
|
+
delegateTargetToSource: 'Delegate (target to source)',
|
|
211
|
+
delegateSourceToTarget: 'Delegate (source to target)',
|
|
212
|
+
contextConfig: 'Context configuration',
|
|
213
|
+
contextVariables: 'Context variables',
|
|
214
|
+
headersSchema: 'Headers schema',
|
|
215
215
|
};
|
|
216
216
|
|
|
217
217
|
return (
|
|
@@ -289,12 +289,12 @@ export function getErrorSummaryMessage(errorSummary: AgentErrorSummary): string
|
|
|
289
289
|
|
|
290
290
|
const parts: string[] = [];
|
|
291
291
|
|
|
292
|
-
const subAgentErrorCount = Object.keys(
|
|
292
|
+
const subAgentErrorCount = Object.keys(subAgentErrors).length;
|
|
293
293
|
const functionToolErrorCount = Object.keys(functionToolErrors).length;
|
|
294
294
|
const edgeErrorCount = Object.keys(edgeErrors).length;
|
|
295
295
|
const agentErrorCount = agentErrors.length;
|
|
296
296
|
if (subAgentErrorCount > 0) {
|
|
297
|
-
parts.push(`${subAgentErrorCount}
|
|
297
|
+
parts.push(`${subAgentErrorCount} sub agent${subAgentErrorCount > 1 ? 's' : ''}`);
|
|
298
298
|
}
|
|
299
299
|
if (functionToolErrorCount > 0) {
|
|
300
300
|
parts.push(`${functionToolErrorCount} function tool${functionToolErrorCount > 1 ? 's' : ''}`);
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility to format OpenTelemetry trace data from conversation details
|
|
3
|
+
* into a human-readable, prettified JSON format
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { ActivityItem, ConversationDetail } from '@/components/traces/timeline/types';
|
|
7
|
+
|
|
8
|
+
export interface PrettifiedTrace {
|
|
9
|
+
metadata: {
|
|
10
|
+
conversationId: string;
|
|
11
|
+
traceId?: string;
|
|
12
|
+
agentId?: string;
|
|
13
|
+
agentName?: string;
|
|
14
|
+
exportedAt: string;
|
|
15
|
+
};
|
|
16
|
+
timing: {
|
|
17
|
+
startTime: string;
|
|
18
|
+
endTime: string ;
|
|
19
|
+
durationMs: number;
|
|
20
|
+
};
|
|
21
|
+
timeline: Omit<ActivityItem, 'id' | 'timestamp'>[];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Formats conversation detail data into a prettified OTEL trace structure
|
|
26
|
+
*/
|
|
27
|
+
export function formatConversationAsPrettifiedTrace(
|
|
28
|
+
conversation: ConversationDetail,
|
|
29
|
+
): PrettifiedTrace {
|
|
30
|
+
const trace: PrettifiedTrace = {
|
|
31
|
+
metadata: {
|
|
32
|
+
conversationId: conversation.conversationId,
|
|
33
|
+
traceId: conversation.traceId,
|
|
34
|
+
agentName: conversation.agentName,
|
|
35
|
+
agentId: conversation.agentId,
|
|
36
|
+
exportedAt: new Date().toISOString(),
|
|
37
|
+
},
|
|
38
|
+
timing: {
|
|
39
|
+
startTime: conversation.conversationStartTime || '',
|
|
40
|
+
endTime: conversation.conversationEndTime || '',
|
|
41
|
+
durationMs: conversation.duration
|
|
42
|
+
},
|
|
43
|
+
timeline: (conversation.activities || []).map((activity) => {
|
|
44
|
+
// Destructure to exclude unwanted fields
|
|
45
|
+
const { id: _id, timestamp: _timestamp, ...rest } = activity;
|
|
46
|
+
return {
|
|
47
|
+
...rest
|
|
48
|
+
};
|
|
49
|
+
}),
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
return trace;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Converts the trace to a prettified JSON string
|
|
57
|
+
*/
|
|
58
|
+
export function traceToJSON(trace: PrettifiedTrace, indent = 2): string {
|
|
59
|
+
return JSON.stringify(trace, null, indent);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Copies the prettified trace to clipboard with compact defaults
|
|
64
|
+
*/
|
|
65
|
+
export async function copyTraceToClipboard(
|
|
66
|
+
conversation: ConversationDetail,
|
|
67
|
+
): Promise<{ success: boolean; error?: string }> {
|
|
68
|
+
try {
|
|
69
|
+
const trace = formatConversationAsPrettifiedTrace(conversation);
|
|
70
|
+
const json = traceToJSON(trace);
|
|
71
|
+
await navigator.clipboard.writeText(json);
|
|
72
|
+
return { success: true };
|
|
73
|
+
} catch (error) {
|
|
74
|
+
return {
|
|
75
|
+
success: false,
|
|
76
|
+
error: error instanceof Error ? error.message : 'Failed to copy trace',
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
exports.id=2786,exports.ids=[2786],exports.modules={5294:(a,b,c)=>{"use strict";c.d(b,{$Y:()=>g,GO:()=>i,K3:()=>h,h9:()=>k});var d=c(29991);c(58415);var e=c(8703),f=c(45796);async function g(a,b,c=1,d=50){(0,f.M2)(a),(0,f.nt)(b);let h=new URLSearchParams({page:c.toString(),limit:d.toString()});return(await (0,e.J)(`tenants/${a}/projects/${b}/credentials?${h}`)).data}async function h(a,b,c){return(0,f.M2)(a),(0,f.nt)(b),(await (0,e.J)(`tenants/${a}/projects/${b}/credentials/${c}`)).data}async function i(a,b,c){return(0,f.M2)(a),(0,f.nt)(b),(await (0,e.J)(`tenants/${a}/projects/${b}/credentials`,{method:"POST",body:JSON.stringify(c)})).data}async function j(a,b,c,d){return(0,f.M2)(a),(0,f.nt)(b),(await (0,e.J)(`tenants/${a}/projects/${b}/credentials/${c}`,{method:"PUT",body:JSON.stringify(d)})).data}async function k(a,b,c){(0,f.M2)(a),(0,f.nt)(b),await (0,e.J)(`tenants/${a}/projects/${b}/credentials/${c}`,{method:"DELETE"})}(0,c(33451).D)([g,h,i,j,k]),(0,d.A)(g,"788da43332c5ab1720d73ff85a4b7dc3d2eec01dd7",null),(0,d.A)(h,"709fda575a6673fef6b3b598f8811b5432e403c703",null),(0,d.A)(i,"70fae18aeefc42a7799acb30f6d523d1cd4c6f438b",null),(0,d.A)(j,"7843f3a0fd5cb245b31ee07d10527203203d3d494d",null),(0,d.A)(k,"7032087d9624e44e962c0c3660351d6eac77f00c6a",null)},7503:(a,b,c)=>{"use strict";c.d(b,{U:()=>e});var d=c(90147);let e=(0,d.createServerReference)("70e45e460b761b6018812c87ebc8f23817a550032a",d.callServer,void 0,d.findSourceMapURL,"findOrCreateCredential")},19329:(a,b,c)=>{"use strict";c.d(b,{U:()=>f});var d=c(29991);c(58415);var e=c(5294);async function f(a,b,c){try{let d=await (0,e.K3)(a,b,c.id);if(d)return d}catch{}try{return await (0,e.GO)(a,b,c)}catch(a){throw console.error("Failed to save credential to database:",a),Error(`Failed to save credential '${c.id}' to database`)}}(0,c(33451).D)([f]),(0,d.A)(f,"70e45e460b761b6018812c87ebc8f23817a550032a",null)},21395:(a,b,c)=>{"use strict";c.d(b,{RN:()=>t,Ak:()=>q,uP:()=>u,tN:()=>r,Mj:()=>p,tQ:()=>o,pv:()=>n,Mb:()=>m,H6:()=>v,EN:()=>l,P:()=>w});var d=c(29991);c(58415);var e=c(56129),f=c(55797),g=c(67417);class h extends Error{constructor(a,b,c){super(a),this.operation=b,this.cause=c,this.name="NangoError"}}function i(a,b,c){if(a instanceof h)throw a;throw new h(b,c,a)}var j=c(33451);let k=()=>{let a=process.env.NANGO_SECRET_KEY;if(!a)throw new h("NANGO_SECRET_KEY environment variable is required for Nango integration");try{return new f.CA({secretKey:a,host:process.env.NANGO_SERVER_URL||void 0})}catch(a){throw new h("Failed to initialize Nango client","new Nango",a)}};async function l(){let a=process.env.NANGO_SECRET_KEY;return!!(a&&""!==a.trim())}async function m(){try{let a=k();return(await a.listProviders({})).data}catch(a){console.error("Failed to fetch providers:",a),i(a,"Unable to retrieve available providers from Nango","listProviders")}}async function n(a){try{let b=k();return(await b.getProvider({provider:a})).data}catch(b){console.error(`Failed to fetch provider ${a}:`,b),i(b,`Provider '${a}' not found or inaccessible`,"getProvider")}}async function o(){try{let a=k();return(await a.listIntegrations()).configs}catch(a){console.error("Failed to fetch integrations:",a),i(a,"Unable to retrieve existing integrations","listIntegrations")}}async function p(a){try{let b=k(),c=(await b.getIntegration({uniqueKey:a},{include:["credentials"]})).data,d=!1;d=c.credentials?.type==="OAUTH2"||c.credentials?.type==="OAUTH1"||c.credentials?.type==="TBA"?!!(c.credentials?.client_id&&c.credentials?.client_secret):c.credentials?.type!=="APP"||!!(c.credentials?.app_id&&c.credentials?.app_link);let{credentials:e,...f}=c;return{...f,areCredentialsSet:d}}catch(b){if(b&&"object"==typeof b&&"status"in b&&404===b.status)return null;console.error(`Failed to fetch integration ${a}:`,b),i(b,`Unable to fetch integration with key '${a}'`,"getIntegration")}}async function q(a){try{let b=k();return(await b.createIntegration({provider:a.provider,unique_key:a.uniqueKey,display_name:a.displayName,credentials:a.credentials})).data}catch(b){console.error("Failed to create integration:",b),i(b,`Failed to create integration '${a.uniqueKey}' for provider '${a.provider}'`,"createIntegration")}}async function r(a){try{let a=k();return(await a.listConnections()).connections}catch(c){let b=a?` for integration '${a}'`:"";console.error(`Failed to fetch connections${b}:`,c),i(c,`Unable to retrieve connections${b}`,"listConnections")}}async function s({endUserId:a="test-tenant",endUserEmail:b="test@test-tenant.com",endUserDisplayName:c="Test User",organizationId:d=process.env.TENANT_ID||g.P3,organizationDisplayName:e="Test Organization",integrationId:f}){try{let g=k(),{data:h}=await g.createConnectSession({end_user:{id:a,email:b,display_name:c},organization:{id:d,display_name:e},allowed_integrations:[f]});return h}catch(a){console.error("Failed to create connect session:",a),i(a,`Unable to create connect session for integration '${f}'`,"createConnectSession")}}async function t({name:a,apiKeyToSet:b,metadata:c}){let d=(0,e.K_)(a);try{let e;try{e=await q({provider:"private-api-bearer",uniqueKey:d,displayName:a})}catch(a){if(a instanceof h&&a.cause&&"object"==typeof a.cause&&"status"in a.cause&&400===a.cause.status){let b=await p(d);b?e=b:i(a,"Integration creation failed for unexpected reasons","create")}else i(a,`Failed to create or retrieve integration '${d}'`,"create")}try{let a=`${process.env.NANGO_SERVER_URL||"https://api.nango.dev"}/connections`,f={provider_config_key:e.unique_key,connection_id:d,metadata:c,credentials:{type:"API_KEY",apiKey:b}},g=await fetch(a,{method:"POST",headers:{Authorization:`Bearer ${process.env.NANGO_SECRET_KEY}`,"Content-Type":"application/json"},body:JSON.stringify(f)});if(!g.ok)throw new h(`Failed to import connection: HTTP ${g.status} - ${g.statusText}`,"importConnection")}catch(a){i(a,"Failed to import API key connection to Nango","importConnection")}try{await w({providerConfigKey:e.unique_key,connectionId:d,metadata:c})}catch(a){console.warn(`Failed to set metadata for connection ${d}:`,a)}return{integration:e}}catch(b){console.error("Unexpected error creating API key credential:",b),i(b,`Unexpected error creating API key credential '${a}'`,"createNangoApiKeyConnection")}}async function u({providerName:a,credentials:b}){try{let c,d=null;try{d=await p(a)}catch(b){if(b instanceof h)throw b;console.debug(`Integration '${a}' not found, will create new one`)}if(d?.areCredentialsSet)c=d;else try{c=await q({provider:a,uniqueKey:a,displayName:a,credentials:b})}catch(b){i(b,`Failed to create integration for provider '${a}'`,"create")}try{return(await s({integrationId:c.unique_key})).token}catch(a){i(a,`Failed to create connect session for integration '${c.unique_key}'`,"createConnectSession")}}catch(b){console.error("Unexpected error creating provider connect session:",b),i(b,`Unexpected error creating connect session for provider '${a}'`,"createProviderConnectSession")}}async function v({providerConfigKey:a,connectionId:b}){try{let c=k();return await c.getMetadata(a,b)}catch(a){if(a&&"object"==typeof a&&"status"in a&&404===a.status)return null;console.error("Failed to get connection metadata:",a),i(a,`Unable to retrieve metadata for connection '${b}'`,"getMetadata")}}async function w({providerConfigKey:a,connectionId:b,metadata:c}){try{let d=k();await d.setMetadata(a,b,c)}catch(a){console.error("Failed to set connection metadata:",a),i(a,`Unable to update metadata for connection '${b}'`,"setMetadata")}}(0,j.D)([l,m,n,o,p,q,r,t,u,v,w]),(0,d.A)(l,"00a1439792d436da8f9a6968bff1c8b62e8c06c530",null),(0,d.A)(m,"0092638e642a6c4671374788fbbcc02b111fc23271",null),(0,d.A)(n,"4077a41207aab0e0ecd656dc2c74661bfd8b5a06c9",null),(0,d.A)(o,"00b92e9ab76888c9a2d34c61b310f95be549065807",null),(0,d.A)(p,"402ce0fb9cd7910c809f1e5e8aeb89af4bf458b767",null),(0,d.A)(q,"401ec1cec1fce1152cc8c2474b5558ef02f67544d0",null),(0,d.A)(r,"4032855c3fb0b378e384ac6599de0c06a68d0a5143",null),(0,d.A)(t,"40911ed92406caeb1c0ca61ada454be8d20b877555",null),(0,d.A)(u,"402a6e476d7093a7d5f9684c8c70ddb733e1729038",null),(0,d.A)(v,"4083ad61f506792056ec8ebde21905bfd5c0295357",null),(0,d.A)(w,"408e81e00ba58ec2ea74965877bd7f22a70f659a6f",null)},22427:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>f});var d=c(59111),e=c(43433);function f(){return(0,d.jsx)(e.A,{description:"Something went wrong."})}},25600:(a,b,c)=>{Promise.resolve().then(c.bind(c,22427))},62048:(a,b,c)=>{Promise.resolve().then(c.bind(c,80969))},73340:(a,b,c)=>{"use strict";c.r(b),c.d(b,{"400682b0f71f6352b4c6abb9e47d2efee47058a805":()=>d.vj,"6062e7e61b9e062539f55b0c9826a6396c51988689":()=>d.Sw,"608ab65f20c33051b7102b2e980ff451f0817d2994":()=>d.xx,"60b92e75736364609f77b9d1245227090e819fb09e":()=>d.gA,"7059d26cae9466b496730a5f8b904eaaa951b1fd07":()=>d.vr});var d=c(54637)},80969:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(60241).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/runner/work/agents/agents/agents-manage-ui/src/app/[tenantId]/projects/[projectId]/credentials/error.tsx\" from the server, but it's 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/app/[tenantId]/projects/[projectId]/credentials/error.tsx","default")}};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
exports.id=448,exports.ids=[448],exports.modules={437:(a,b,c)=>{"use strict";c.d(b,{A:()=>d});let d=(0,c(89892).A)("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]])},8636:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(60241).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/runner/work/agents/agents/agents-manage-ui/src/app/[tenantId]/projects/[projectId]/not-found.tsx\" from the server, but it's 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/app/[tenantId]/projects/[projectId]/not-found.tsx","default")},29160:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>h,dynamic:()=>g});var d=c(72669),e=c(95460),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){(0,e.notFound)()}return(0,d.jsx)(d.Fragment,{children:a})}},33285:(a,b,c)=>{"use strict";c.r(b),c.d(b,{"403fb050847574c5fa32c3df3e4521eb966d992630":()=>d.bW,"6018b59d2317f74eb895db25a11c5c6872777a4d48":()=>p,"6043d8e25e8057590105a05ae589ab7f82d5c1e93e":()=>d.Dv,"6068964a1f132ffecb2677a7f44fd20b23d780ac19":()=>d.qf,"60a3f3b3dbd1c4fceb0ea06e0f80c4e8a588ee4535":()=>d.gL,"703cbc3e62af94cc96915f35590250111e34e81dd6":()=>r,"706bf3db03d80caf054e6cf0268c219d8a8f93aec2":()=>s,"70ca81c549226f5f58629281a2c6fd44ef508ba7c9":()=>d.Tg,"70e16481642d7b68453d23cced1881afcee279e8bd":()=>q});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){(0,h.M2)(a),(0,h.nt)(b);let c=await (0,g.J)(`tenants/${a}/projects/${b}/data-components`);return{...c,data:c.data.map(a=>({...a,props:a.props||{}}))}}async function k(a,b,c){(0,h.M2)(a),(0,h.nt)(b);let d=await (0,g.J)(`tenants/${a}/projects/${b}/data-components/${c}`);return{...d.data,props:d.data.props||{}}}async function l(a,b,c){(0,h.M2)(a),(0,h.nt)(b);let d=await (0,g.J)(`tenants/${a}/projects/${b}/data-components`,{method:"POST",body:JSON.stringify(c)});return{...d.data,props:d.data.props||{}}}async function m(a,b,c){(0,h.M2)(a),(0,h.nt)(b);let d=await (0,g.J)(`tenants/${a}/projects/${b}/data-components/${c.id}`,{method:"PUT",body:JSON.stringify(c)});return{...d.data,props:d.data.props||{}}}async function n(a,b,c){(0,h.M2)(a),(0,h.nt)(b),await (0,g.J)(`tenants/${a}/projects/${b}/data-components/${c}`,{method:"DELETE"})}(0,i.D)([j,k,l,m,n]),(0,e.A)(j,"602cb8110a4b4cacf0550113d30fd77caa6655367c",null),(0,e.A)(k,"7052447d6f67e13c33e294496d0940e8726f272906",null),(0,e.A)(l,"700f45d2f3472819cca86ebe27962aa8c839ad2f8f",null),(0,e.A)(m,"70cdfe91dd3772357fd582ad510810efd7933ce99e",null),(0,e.A)(n,"70b5b2263ac7552a0b51ea9318e2667183c0bcaae9",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}/components`),{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}/components`),(0,f.revalidatePath)(`/${a}/projects/${b}/components/${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}/components`),(0,f.revalidatePath)(`/${a}/projects/${b}/components/${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,"6018b59d2317f74eb895db25a11c5c6872777a4d48",null),(0,e.A)(q,"70e16481642d7b68453d23cced1881afcee279e8bd",null),(0,e.A)(r,"703cbc3e62af94cc96915f35590250111e34e81dd6",null),(0,e.A)(s,"706bf3db03d80caf054e6cf0268c219d8a8f93aec2",null)},35859:(a,b,c)=>{Promise.resolve().then(c.bind(c,8636))},37830:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>h});var d=c(59111),e=c(437),f=c(485);c(14450);var g=c(2856);function h(){let a=(0,f.useParams)(),b=(0,f.useRouter)(),c=a.tenantId,h=a.projectId;return(0,d.jsx)("div",{className:"flex min-h-[400px] flex-col items-center justify-center p-8",children:(0,d.jsxs)("div",{className:"text-center max-w-md",children:[(0,d.jsx)("div",{className:"mb-4 flex justify-center",children:(0,d.jsx)(e.A,{className:"h-12 w-12 text-muted-foreground"})}),(0,d.jsx)("h1",{className:"text-2xl font-semibold mb-2",children:"Project Not Found"}),(0,d.jsxs)("p",{className:"text-muted-foreground mb-6",children:['The project "',h,"\" does not exist or you don't have access to it."]}),(0,d.jsx)("p",{className:"text-sm text-muted-foreground mb-6",children:"Redirecting to projects list in 3 seconds..."}),(0,d.jsx)(g.$,{onClick:()=>b.push(`/${c}/projects`),variant:"default",children:"Go to Projects List"})]})})}},39878:(a,b,c)=>{"use strict";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})]})}},41325:(a,b,c)=>{Promise.resolve().then(c.bind(c,60458)),Promise.resolve().then(c.bind(c,24003)),Promise.resolve().then(c.bind(c,19603)),Promise.resolve().then(c.t.bind(c,61678,23))},45622:()=>{},53261:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(60241).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/runner/work/agents/agents/agents-manage-ui/src/app/[tenantId]/projects/[projectId]/components/error.tsx\" from the server, but it's 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/app/[tenantId]/projects/[projectId]/components/error.tsx","default")},56019:(a,b,c)=>{"use strict";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})})}},60458:(a,b,c)=>{"use strict";c.d(b,{DataComponentForm:()=>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)("703cbc3e62af94cc96915f35590250111e34e81dd6",o.callServer,void 0,o.findSourceMapURL,"updateDataComponentAction"),q=(0,o.createServerReference)("70e16481642d7b68453d23cced1881afcee279e8bd",o.callServer,void 0,o.findSourceMapURL,"createDataComponentAction");var r=c(42723);let s={id:"",name:"",description:"",props:""};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.string().min(1,"Props schema is required.").transform((a,b)=>{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({tenantId:a,projectId:b,id: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:!!c});let x=async d=>{try{let e={...d};if(c){let c=await p(a,b,e);if(!c.success)return void h.oR.error(c.error||"Failed to update component");h.oR.success("Component updated")}else{let c=await q(a,b,e);if(!c.success)return void h.oR.error(c.error||"Failed to create component");h.oR.success("Component created"),v.push(`/${a}/projects/${b}/components`)}}catch(b){console.error("Error submitting component:",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:"ListOrders",description:"This name is used to identify the component in chat widget integration. Example: components: { ListOrders: MyListOrdersComponent }",isRequired:!0}),(0,d.jsx)(i.a,{control:t.control,name:"id",label:"Id",placeholder:"my-data-component",disabled:!!c,description:c?"":"Choose a unique identifier for this component. Using an existing id will replace that component.",isRequired:!0}),(0,d.jsx)(j.K,{control:t.control,name:"description",label:"Description",placeholder:"Display a list of user orders with interactive options",className:"min-h-[80px]",isRequired:!0}),(0,d.jsx)(k.S,{control:t.control,name:"props",label:"Props (JSON schema)",placeholder:"Enter a valid JSON Schema...",isRequired:!0}),(0,d.jsx)(l.$,{type:"submit",disabled:u,children:"Save"})]})})}},62503:(a,b,c)=>{"use strict";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.")},71708:(a,b,c)=>{Promise.resolve().then(c.bind(c,81331))},77709:(a,b,c)=>{Promise.resolve().then(c.bind(c,98261)),Promise.resolve().then(c.bind(c,97633)),Promise.resolve().then(c.bind(c,80248)),Promise.resolve().then(c.t.bind(c,93520,23))},80974:(a,b,c)=>{"use strict";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"}},81331:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>f});var d=c(59111),e=c(43433);function f(){return(0,d.jsx)(e.A,{description:"Something went wrong."})}},85276:(a,b,c)=>{Promise.resolve().then(c.bind(c,53261))},92107:(a,b,c)=>{"use strict";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:"Components"}],children:(0,d.jsxs)(f.D,{children:[(0,d.jsx)(g.zY,{title:"Components",description:i.yr}),(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-skeleton-${b}`))})]})})}},92478:()=>{},96107:(a,b,c)=>{Promise.resolve().then(c.bind(c,37830))},98261:(a,b,c)=>{"use strict";c.d(b,{DataComponentForm:()=>d});let d=(0,c(60241).registerClientReference)(function(){throw Error("Attempted to call DataComponentForm() from the server but DataComponentForm 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/data-components/form/data-component-form.tsx","DataComponentForm")}};
|