@inkeep/agents-manage-ui 0.21.0 → 0.21.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/.next/standalone/agents-manage-ui/.next/BUILD_ID +1 -1
  2. package/.next/standalone/agents-manage-ui/.next/app-build-manifest.json +87 -87
  3. package/.next/standalone/agents-manage-ui/.next/app-path-routes-manifest.json +4 -4
  4. package/.next/standalone/agents-manage-ui/.next/build-manifest.json +2 -2
  5. package/.next/standalone/agents-manage-ui/.next/prerender-manifest.json +3 -3
  6. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/page.js +1 -1
  7. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/page_client-reference-manifest.js +1 -1
  8. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/[agentId]/page.js +2 -2
  9. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/[agentId]/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/new/page.js +2 -2
  11. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/new/page_client-reference-manifest.js +1 -1
  12. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/page.js +2 -2
  13. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/agents/page_client-reference-manifest.js +1 -1
  14. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/api-keys/page.js +2 -2
  15. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/api-keys/page_client-reference-manifest.js +1 -1
  16. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page.js +1 -1
  17. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page.js.nft.json +1 -1
  18. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/page_client-reference-manifest.js +1 -1
  19. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page.js +2 -2
  20. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page.js.nft.json +1 -1
  21. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/new/page_client-reference-manifest.js +1 -1
  22. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/page.js +2 -2
  23. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/artifacts/page_client-reference-manifest.js +1 -1
  24. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page.js +2 -2
  25. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page.js.nft.json +1 -1
  26. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/page_client-reference-manifest.js +1 -1
  27. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page.js +2 -2
  28. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page.js.nft.json +1 -1
  29. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/new/page_client-reference-manifest.js +1 -1
  30. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/page.js +2 -2
  31. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/components/page_client-reference-manifest.js +1 -1
  32. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page.js +1 -1
  33. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page.js.nft.json +1 -1
  34. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page_client-reference-manifest.js +1 -1
  35. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js +2 -2
  36. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page.js.nft.json +1 -1
  37. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page_client-reference-manifest.js +1 -1
  38. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page.js +2 -2
  39. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page.js.nft.json +1 -1
  40. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/page_client-reference-manifest.js +1 -1
  41. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.js +2 -2
  42. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page.js.nft.json +1 -1
  43. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page_client-reference-manifest.js +1 -1
  44. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page.js +2 -2
  45. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page.js.nft.json +1 -1
  46. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/new/providers/page_client-reference-manifest.js +1 -1
  47. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page.js +2 -2
  48. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/credentials/page_client-reference-manifest.js +1 -1
  49. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page.js +2 -2
  50. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/edit/page_client-reference-manifest.js +1 -1
  51. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page.js +1 -1
  52. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/[mcpServerId]/page_client-reference-manifest.js +1 -1
  53. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page.js +2 -2
  54. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/new/page_client-reference-manifest.js +1 -1
  55. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page.js +2 -2
  56. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/mcp-servers/page_client-reference-manifest.js +1 -1
  57. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page.js +2 -2
  58. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/page_client-reference-manifest.js +1 -1
  59. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page.js +2 -2
  60. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/settings/page_client-reference-manifest.js +1 -1
  61. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js +1 -1
  62. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page.js.nft.json +1 -1
  63. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/ai-calls/page_client-reference-manifest.js +1 -1
  64. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page.js +1 -1
  65. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/conversations/[conversationId]/page_client-reference-manifest.js +1 -1
  66. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page.js +3 -3
  67. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page.js.nft.json +1 -1
  68. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/[projectId]/traces/page_client-reference-manifest.js +1 -1
  69. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page.js +2 -2
  70. package/.next/standalone/agents-manage-ui/.next/server/app/[tenantId]/projects/page_client-reference-manifest.js +1 -1
  71. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page.js +1 -1
  72. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  73. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.html +1 -1
  74. package/.next/standalone/agents-manage-ui/.next/server/app/_not-found.rsc +8 -8
  75. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route.js +2 -2
  76. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
  77. package/.next/standalone/agents-manage-ui/.next/server/app/api/signoz/route_client-reference-manifest.js +1 -1
  78. package/.next/standalone/agents-manage-ui/.next/server/app/page.js +2 -2
  79. package/.next/standalone/agents-manage-ui/.next/server/app/page_client-reference-manifest.js +1 -1
  80. package/.next/standalone/agents-manage-ui/.next/server/app-paths-manifest.json +4 -4
  81. package/.next/standalone/agents-manage-ui/.next/server/chunks/1201.js +1 -0
  82. package/.next/standalone/agents-manage-ui/.next/server/chunks/{6112.js → 1848.js} +1 -1
  83. package/.next/standalone/agents-manage-ui/.next/server/chunks/2083.js +1 -1
  84. package/.next/standalone/agents-manage-ui/.next/server/chunks/3547.js +1 -1
  85. package/.next/standalone/agents-manage-ui/.next/server/chunks/612.js +1 -0
  86. package/.next/standalone/agents-manage-ui/.next/server/chunks/6641.js +1 -1
  87. package/.next/standalone/agents-manage-ui/.next/server/chunks/6741.js +1 -1
  88. package/.next/standalone/agents-manage-ui/.next/server/chunks/7457.js +2 -2
  89. package/.next/standalone/agents-manage-ui/.next/server/chunks/7504.js +4 -4
  90. package/.next/standalone/agents-manage-ui/.next/server/chunks/7711.js +4 -4
  91. package/.next/standalone/agents-manage-ui/.next/server/chunks/{5689.js → 8793.js} +1 -1
  92. package/.next/standalone/agents-manage-ui/.next/server/chunks/9068.js +1 -0
  93. package/.next/standalone/agents-manage-ui/.next/server/pages/404.html +1 -1
  94. package/.next/standalone/agents-manage-ui/.next/server/pages/500.html +1 -1
  95. package/.next/standalone/agents-manage-ui/.next/server/server-reference-manifest.js +1 -1
  96. package/.next/standalone/agents-manage-ui/.next/server/server-reference-manifest.json +1 -1
  97. package/.next/standalone/agents-manage-ui/.next/static/chunks/29035-3cd84c67f9b6b416.js +1 -0
  98. package/.next/standalone/agents-manage-ui/.next/static/chunks/{71558-ec1db8ba03c725b8.js → 71558-7159340848a00831.js} +1 -1
  99. package/.next/standalone/agents-manage-ui/.next/static/chunks/7190-4b1dd4fc9621b580.js +1 -0
  100. package/.next/standalone/agents-manage-ui/.next/static/chunks/78225-06ef3ef4b847caee.js +1 -0
  101. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/agents/{page-dccc4d0967ab039c.js → page-b2a21244bdb8bcff.js} +1 -1
  102. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-7f9d4957283fbf4f.js +1 -0
  103. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/[artifactComponentId]/{page-c3fb73f525dcca7b.js → page-f72ceb257e58237d.js} +1 -1
  104. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/new/{page-c3fb73f525dcca7b.js → page-f72ceb257e58237d.js} +1 -1
  105. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/page-f8e36cd398206e5e.js +1 -0
  106. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/[dataComponentId]/{page-d0b61eea4092270f.js → page-adebb0e65a442407.js} +1 -1
  107. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/new/{page-d0b61eea4092270f.js → page-adebb0e65a442407.js} +1 -1
  108. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/page-6bedc4a46779de22.js +1 -0
  109. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-2b367809e9b6118d.js +1 -0
  110. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-1c6b3e4f7717dd79.js +1 -0
  111. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-42324d60ffa842bf.js +1 -0
  112. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/page-87daa54e7253fc47.js +1 -0
  113. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/new/{page-afbda9d62a083c82.js → page-4484dba437e34079.js} +1 -1
  114. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/page-db3134c5506a01dd.js +1 -0
  115. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/settings/{page-b45c94e5316eba0f.js → page-04d4a657192ace9b.js} +1 -1
  116. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-80db5f31070cd7cf.js +1 -0
  117. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/page-282f35c2c212eaac.js +1 -0
  118. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-13a696e8292dd92c.js +1 -0
  119. package/.next/standalone/agents-manage-ui/package.json +1 -1
  120. package/.next/standalone/packages/agents-core/package.json +1 -1
  121. package/package.json +4 -4
  122. package/src/app/[tenantId]/projects/[projectId]/credentials/new/page.tsx +13 -4
  123. package/src/components/agent/configuration/model-options.tsx +10 -10
  124. package/src/components/credentials/views/credential-form-validation.ts +3 -0
  125. package/src/components/credentials/views/credential-form.tsx +127 -22
  126. package/src/components/credentials/views/edit-credential-form.tsx +1 -5
  127. package/src/components/credentials/views/new-credential-form.tsx +65 -39
  128. package/src/lib/api/credentialStores.ts +70 -0
  129. package/.next/standalone/agents-manage-ui/.next/server/chunks/3024.js +0 -1
  130. package/.next/standalone/agents-manage-ui/.next/server/chunks/5216.js +0 -1
  131. package/.next/standalone/agents-manage-ui/.next/server/chunks/9919.js +0 -1
  132. package/.next/standalone/agents-manage-ui/.next/static/chunks/48154-d59e3a94dcc204cb.js +0 -1
  133. package/.next/standalone/agents-manage-ui/.next/static/chunks/7190-9f79959ef15514fc.js +0 -1
  134. package/.next/standalone/agents-manage-ui/.next/static/chunks/78225-50111df5e77a5e16.js +0 -1
  135. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/api-keys/page-c894cf34e38f0106.js +0 -1
  136. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/artifacts/page-5fe1256299d0574c.js +0 -1
  137. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/components/page-c952156059d097eb.js +0 -1
  138. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/[credentialId]/page-dbf8afc2734277c7.js +0 -1
  139. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/bearer/page-28106d6f99c9d4d1.js +0 -1
  140. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/new/providers/[providerId]/page-78e196c5e73762ca.js +0 -1
  141. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/credentials/page-a70bd87a0b04b1d5.js +0 -1
  142. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/mcp-servers/page-6d2e468869ec9f2a.js +0 -1
  143. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/[projectId]/traces/page-d3405bd00174af50.js +0 -1
  144. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/[tenantId]/projects/page-6927e6f75b1af49e.js +0 -1
  145. package/.next/standalone/agents-manage-ui/.next/static/chunks/app/layout-ae6feca142ce23d2.js +0 -1
  146. /package/.next/standalone/agents-manage-ui/.next/static/{YAZ-9NKnwGndT1sywiuFZ → pMDFyJ94tRwdkx0-74rwy}/_buildManifest.js +0 -0
  147. /package/.next/standalone/agents-manage-ui/.next/static/{YAZ-9NKnwGndT1sywiuFZ → pMDFyJ94tRwdkx0-74rwy}/_ssgManifest.js +0 -0
@@ -20,45 +20,45 @@ export const DEFAULT_GOOGLE_SUMMARIZER_MODEL = GOOGLE_MODELS.GEMINI_2_5_FLASH_LI
20
20
  export const modelOptions = {
21
21
  anthropic: [
22
22
  {
23
- value: ANTHROPIC_MODELS.CLAUDE_OPUS_4_1_20250805,
23
+ value: ANTHROPIC_MODELS.CLAUDE_OPUS_4_1,
24
24
  label: 'Claude Opus 4.1',
25
25
  },
26
26
  {
27
- value: ANTHROPIC_MODELS.CLAUDE_SONNET_4_5_20250929,
27
+ value: ANTHROPIC_MODELS.CLAUDE_SONNET_4_5,
28
28
  label: 'Claude Sonnet 4.5',
29
29
  },
30
30
  {
31
- value: ANTHROPIC_MODELS.CLAUDE_SONNET_4_20250514,
31
+ value: ANTHROPIC_MODELS.CLAUDE_SONNET_4,
32
32
  label: 'Claude Sonnet 4',
33
33
  },
34
34
  {
35
- value: ANTHROPIC_MODELS.CLAUDE_3_5_HAIKU_20241022,
35
+ value: ANTHROPIC_MODELS.CLAUDE_3_5_HAIKU,
36
36
  label: 'Claude 3.5 Haiku',
37
37
  },
38
38
  ],
39
39
  openai: [
40
40
  {
41
- value: OPENAI_MODELS.GPT_4_1_20250414,
41
+ value: OPENAI_MODELS.GPT_4_1,
42
42
  label: 'GPT-4.1',
43
43
  },
44
44
  {
45
- value: OPENAI_MODELS.GPT_4_1_MINI_20250414,
45
+ value: OPENAI_MODELS.GPT_4_1_MINI,
46
46
  label: 'GPT-4.1 Mini',
47
47
  },
48
48
  {
49
- value: OPENAI_MODELS.GPT_4_1_NANO_20250414,
49
+ value: OPENAI_MODELS.GPT_4_1_NANO,
50
50
  label: 'GPT-4.1 Nano',
51
51
  },
52
52
  {
53
- value: OPENAI_MODELS.GPT_5_20250807,
53
+ value: OPENAI_MODELS.GPT_5,
54
54
  label: 'GPT-5',
55
55
  },
56
56
  {
57
- value: OPENAI_MODELS.GPT_5_MINI_20250807,
57
+ value: OPENAI_MODELS.GPT_5_MINI,
58
58
  label: 'GPT-5 Mini',
59
59
  },
60
60
  {
61
- value: OPENAI_MODELS.GPT_5_NANO_20250807,
61
+ value: OPENAI_MODELS.GPT_5_NANO,
62
62
  label: 'GPT-5 Nano',
63
63
  },
64
64
  ],
@@ -1,3 +1,4 @@
1
+ import { CredentialStoreType } from '@inkeep/agents-core/client-exports';
1
2
  import { z } from 'zod';
2
3
 
3
4
  export const credentialFormSchema = z.object({
@@ -8,6 +9,8 @@ export const credentialFormSchema = z.object({
8
9
  .refine((val) => val.length <= 50, 'Name must be 50 characters or less'),
9
10
  apiKeyToSet: z.string().min(1, 'Enter an API key'),
10
11
  metadata: z.record(z.string(), z.string()).default({}),
12
+ credentialStoreId: z.string().min(1, 'Please select a credential store'),
13
+ credentialStoreType: z.enum(CredentialStoreType),
11
14
  selectedTool: z.string().optional(),
12
15
  });
13
16
 
@@ -1,6 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import { zodResolver } from '@hookform/resolvers/zod';
4
+ import { CredentialStoreType } from '@inkeep/agents-core/client-exports';
4
5
  import { useEffect, useMemo, useState } from 'react';
5
6
  import { useForm } from 'react-hook-form';
6
7
  import { toast } from 'sonner';
@@ -11,6 +12,10 @@ import { Button } from '@/components/ui/button';
11
12
  import { Checkbox } from '@/components/ui/checkbox';
12
13
  import { Form } from '@/components/ui/form';
13
14
  import { InfoCard } from '@/components/ui/info-card';
15
+ import {
16
+ type CredentialStoreStatus,
17
+ listCredentialStores,
18
+ } from '@/lib/api/credentialStores';
14
19
  import { fetchMCPTools } from '@/lib/api/tools';
15
20
  import type { MCPTool } from '@/lib/types/tools';
16
21
  import { type CredentialFormData, credentialFormSchema } from './credential-form-validation';
@@ -28,13 +33,17 @@ const defaultValues: CredentialFormData = {
28
33
  name: '',
29
34
  apiKeyToSet: '',
30
35
  metadata: {},
36
+ credentialStoreId: '',
37
+ credentialStoreType: 'nango',
31
38
  selectedTool: undefined,
32
39
  };
33
40
 
34
41
  export function CredentialForm({ onCreateCredential, tenantId, projectId }: CredentialFormProps) {
35
- const [availableTools, setAvailableTools] = useState<MCPTool[]>([]);
42
+ const [availableMCPServers, setAvailableMCPServers] = useState<MCPTool[]>([]);
36
43
  const [toolsLoading, setToolsLoading] = useState(true);
37
44
  const [shouldLinkToServer, setShouldLinkToServer] = useState(false);
45
+ const [credentialStores, setCredentialStores] = useState<CredentialStoreStatus[]>([]);
46
+ const [storesLoading, setStoresLoading] = useState(true);
38
47
 
39
48
  const form = useForm({
40
49
  resolver: zodResolver(credentialFormSchema),
@@ -48,7 +57,7 @@ export function CredentialForm({ onCreateCredential, tenantId, projectId }: Cred
48
57
  try {
49
58
  const allTools = await fetchMCPTools(tenantId, projectId);
50
59
  const toolsWithoutCredentials = allTools.filter((tool) => !tool.credentialReferenceId);
51
- setAvailableTools(toolsWithoutCredentials);
60
+ setAvailableMCPServers(toolsWithoutCredentials);
52
61
  } catch (err) {
53
62
  console.error('Failed to load MCP tools:', err);
54
63
  } finally {
@@ -59,6 +68,38 @@ export function CredentialForm({ onCreateCredential, tenantId, projectId }: Cred
59
68
  loadAvailableTools();
60
69
  }, [tenantId, projectId]);
61
70
 
71
+ useEffect(() => {
72
+ const loadCredentialStores = async () => {
73
+ try {
74
+ const stores = await listCredentialStores(tenantId, projectId);
75
+ setCredentialStores(stores);
76
+
77
+ // Auto-select preferred store: prioritize Nango, then other available non-memory stores
78
+ const availableStores = stores.filter(
79
+ (store) => store.available && store.type !== 'memory'
80
+ );
81
+ if (availableStores.length > 0) {
82
+ // First try to find Nango store
83
+ const nangoStore = availableStores.find((store) => store.type === 'nango');
84
+ const preferredStore = nangoStore || availableStores[0];
85
+
86
+ // Only set values if form doesn't already have a credentialStoreId value
87
+ const currentStoreId = form.getValues('credentialStoreId');
88
+ if (!currentStoreId) {
89
+ form.setValue('credentialStoreId', preferredStore.id, { shouldValidate: true });
90
+ form.setValue('credentialStoreType', preferredStore.type as 'keychain' | 'nango', { shouldValidate: true });
91
+ }
92
+ }
93
+ } catch (err) {
94
+ console.error('Failed to load credential stores:', err);
95
+ } finally {
96
+ setStoresLoading(false);
97
+ }
98
+ };
99
+
100
+ loadCredentialStores();
101
+ }, [tenantId, projectId, form.getValues, form.setValue]);
102
+
62
103
  // Handle checkbox state changes
63
104
  useEffect(() => {
64
105
  if (!shouldLinkToServer) {
@@ -67,6 +108,20 @@ export function CredentialForm({ onCreateCredential, tenantId, projectId }: Cred
67
108
  }
68
109
  }, [shouldLinkToServer, form]);
69
110
 
111
+ useEffect(() => {
112
+ const subscription = form.watch((value: any, { name }: any) => {
113
+ if (name === 'credentialStoreId' && value.credentialStoreId) {
114
+ const selectedStore = credentialStores.find(
115
+ (store) => store.id === value.credentialStoreId
116
+ );
117
+ if (selectedStore && selectedStore.type !== 'memory') {
118
+ form.setValue('credentialStoreType', selectedStore.type);
119
+ }
120
+ }
121
+ });
122
+ return () => subscription.unsubscribe();
123
+ }, [form, credentialStores]);
124
+
70
125
  const handleLinkToServerChange = (checked: boolean | 'indeterminate') => {
71
126
  setShouldLinkToServer(checked === true);
72
127
  };
@@ -99,14 +154,47 @@ export function CredentialForm({ onCreateCredential, tenantId, projectId }: Cred
99
154
  },
100
155
  ]
101
156
  : []),
102
- ...availableTools.map((tool) => ({
157
+ ...availableMCPServers.map((tool) => ({
103
158
  value: tool.id,
104
159
  label: `${tool.name} - ${tool.config.type === 'mcp' ? tool.config.mcp.server.url : ''}`,
105
160
  })),
106
161
  ],
107
- [availableTools, toolsLoading]
162
+ [availableMCPServers, toolsLoading]
108
163
  );
109
164
 
165
+ const credentialStoreOptions = useMemo(() => {
166
+ if (storesLoading) {
167
+ return [
168
+ {
169
+ value: 'loading',
170
+ label: 'Loading credential stores...',
171
+ disabled: true,
172
+ },
173
+ ];
174
+ }
175
+
176
+ const availableStores = credentialStores.filter(
177
+ (store) => store.available && store.type !== 'memory'
178
+ );
179
+
180
+ if (availableStores.length === 0) {
181
+ return [
182
+ {
183
+ value: 'none',
184
+ label: 'No credential stores available',
185
+ disabled: true,
186
+ },
187
+ ];
188
+ }
189
+
190
+ const options = availableStores.map((store) => ({
191
+ value: store.id,
192
+ label: `${store.type === 'keychain' ? 'Keychain Store' : 'Nango Store'} (${store.id})`,
193
+ }));
194
+
195
+ return options;
196
+ }, [credentialStores, storesLoading]);
197
+
110
198
  return (
111
199
  <Form {...form}>
112
200
  <form onSubmit={form.handleSubmit(onSubmit)} className="space-y-8">
@@ -142,30 +230,47 @@ export function CredentialForm({ onCreateCredential, tenantId, projectId }: Cred
142
230
  </InfoCard>
143
231
  </div>
144
232
 
145
- {/* Metadata Section */}
233
+ {!storesLoading && form.watch('credentialStoreType') === CredentialStoreType.nango && (
234
+ <div className="space-y-3">
235
+ <GenericKeyValueInput
236
+ control={form.control}
237
+ name="metadata"
238
+ label="Metadata (optional)"
239
+ keyPlaceholder="Header name (e.g., X-API-Key)"
240
+ valuePlaceholder="Header value"
241
+ />
242
+ <InfoCard title="Additional headers">
243
+ <p className="mb-2">
244
+ Add extra headers to be included with authentication requests.
245
+ </p>
246
+ <p>
247
+ Examples:{' '}
248
+ <code className="bg-background px-1.5 py-0.5 rounded border mx-1">
249
+ User-Agent
250
+ </code>
251
+ <code className="bg-background px-1.5 py-0.5 rounded border mx-1">X-API-Key</code>
252
+ <code className="bg-background px-1.5 py-0.5 rounded border mx-1">
253
+ Content-Type
254
+ </code>
255
+ </p>
256
+ </InfoCard>
257
+ </div>
258
+ )}
259
+
260
+ {/* Credential Store Selection Section */}
146
261
  <div className="space-y-3">
147
- <GenericKeyValueInput
262
+ <GenericSelect
263
+ isRequired
148
264
  control={form.control}
149
- name="metadata"
150
- label="Metadata (optional)"
151
- keyPlaceholder="Header name (e.g., X-API-Key)"
152
- valuePlaceholder="Header value"
265
+ name="credentialStoreId"
266
+ label="Credential store"
267
+ options={credentialStoreOptions}
268
+ key={`credential-store-${credentialStores.length}-${storesLoading}`} // Force re-render when stores change
153
269
  />
154
- <InfoCard title="Additional headers">
155
- <p className="mb-2">Add extra headers to be included with authentication requests.</p>
156
- <p>
157
- Examples:{' '}
158
- <code className="bg-background px-1.5 py-0.5 rounded border mx-1">User-Agent</code>
159
- <code className="bg-background px-1.5 py-0.5 rounded border mx-1">X-API-Key</code>
160
- <code className="bg-background px-1.5 py-0.5 rounded border mx-1">
161
- Content-Type
162
- </code>
163
- </p>
164
- </InfoCard>
165
270
  </div>
166
271
 
167
272
  {/* Tool Selection Section */}
168
- {availableTools.length > 0 && (
273
+ {availableMCPServers.length > 0 && (
169
274
  <div className="space-y-4">
170
275
  <div className="flex items-center space-x-3 relative">
171
276
  <Checkbox
@@ -161,11 +161,7 @@ export function EditCredentialForm({
161
161
  )}
162
162
 
163
163
  {/* MCP Servers Using This Credential */}
164
- <CredentialToolsList
165
- tools={credential.tools}
166
- tenantId={tenantId}
167
- projectId={projectId}
168
- />
164
+ <CredentialToolsList tools={credential.tools} tenantId={tenantId} projectId={projectId} />
169
165
  </div>
170
166
 
171
167
  <div className="flex gap-3 pt-4">
@@ -1,58 +1,84 @@
1
- 'use client'
1
+ 'use client';
2
2
 
3
- import { generateIdFromName } from '@inkeep/agents-core/client-exports'
4
- import { CredentialStoreType } from '@inkeep/agents-core/types'
5
- import { useParams, useRouter } from 'next/navigation'
6
- import { toast } from 'sonner'
7
- import type { CredentialFormData } from '@/components/credentials/views/credential-form-validation'
8
- import { updateMCPTool } from '@/lib/api/tools'
9
- import { createNangoApiKeyConnection } from '@/lib/mcp-tools/nango'
10
- import { findOrCreateCredential } from '@/lib/utils/credentials-utils'
11
- import { CredentialForm } from './credential-form'
3
+ import { generateIdFromName } from '@inkeep/agents-core/client-exports';
4
+ import { CredentialStoreType } from '@inkeep/agents-core/types';
5
+ import { useParams, useRouter } from 'next/navigation';
6
+ import { toast } from 'sonner';
7
+ import type { CredentialFormData } from '@/components/credentials/views/credential-form-validation';
8
+ import { createCredentialInStore } from '@/lib/api/credentialStores';
9
+ import { updateMCPTool } from '@/lib/api/tools';
10
+ import { createNangoApiKeyConnection } from '@/lib/mcp-tools/nango';
11
+ import { findOrCreateCredential } from '@/lib/utils/credentials-utils';
12
+ import { CredentialForm } from './credential-form';
12
13
 
13
14
  export function NewCredentialForm() {
14
- const router = useRouter()
15
+ const router = useRouter();
15
16
  const { tenantId, projectId } = useParams<{
16
- tenantId: string
17
- projectId: string
18
- }>()
17
+ tenantId: string;
18
+ projectId: string;
19
+ }>();
19
20
 
20
21
  const handleCreateCredential = async (data: CredentialFormData) => {
21
22
  try {
22
- const idFromName = generateIdFromName(data.name.trim())
23
+ const idFromName = generateIdFromName(data.name.trim());
23
24
 
24
- const { integration } = await createNangoApiKeyConnection({
25
- name: idFromName,
26
- apiKeyToSet: data.apiKeyToSet,
27
- metadata: data.metadata as Record<string, string>,
28
- })
25
+ let newCredential: Credential | undefined;
29
26
 
30
- const newCredential = await findOrCreateCredential(tenantId, projectId, {
31
- id: idFromName,
32
- type: CredentialStoreType.nango,
33
- credentialStoreId: 'nango-default',
34
- retrievalParams: {
35
- connectionId: idFromName,
36
- providerConfigKey: integration.unique_key,
37
- provider: integration.provider,
38
- authMode: 'API_KEY',
39
- },
40
- })
27
+ if (data.credentialStoreType === CredentialStoreType.nango) {
28
+ const { integration } = await createNangoApiKeyConnection({
29
+ name: idFromName,
30
+ apiKeyToSet: data.apiKeyToSet,
31
+ metadata: data.metadata as Record<string, string>,
32
+ });
33
+
34
+ newCredential = await findOrCreateCredential(tenantId, projectId, {
35
+ id: idFromName,
36
+ type: data.credentialStoreType,
37
+ credentialStoreId: data.credentialStoreId,
38
+ retrievalParams: {
39
+ connectionId: idFromName,
40
+ providerConfigKey: integration.unique_key,
41
+ provider: integration.provider,
42
+ authMode: 'API_KEY',
43
+ },
44
+ });
45
+ } else if (data.credentialStoreType === CredentialStoreType.keychain) {
46
+ const keychainStoreValueToSet = JSON.stringify({
47
+ access_token: data.apiKeyToSet,
48
+ });
49
+
50
+ await createCredentialInStore(
51
+ tenantId,
52
+ projectId,
53
+ data.credentialStoreId,
54
+ idFromName,
55
+ keychainStoreValueToSet
56
+ );
57
+
58
+ newCredential = await findOrCreateCredential(tenantId, projectId, {
59
+ id: idFromName,
60
+ type: data.credentialStoreType,
61
+ credentialStoreId: data.credentialStoreId,
62
+ retrievalParams: {
63
+ key: idFromName,
64
+ },
65
+ });
66
+ }
41
67
 
42
68
  if (data.selectedTool && newCredential) {
43
69
  const updatedTool = {
44
70
  credentialReferenceId: newCredential.id,
45
- }
46
- await updateMCPTool(tenantId, projectId, data.selectedTool, updatedTool)
71
+ };
72
+ await updateMCPTool(tenantId, projectId, data.selectedTool, updatedTool);
47
73
  }
48
74
 
49
- toast.success('Credential created successfully')
50
- router.push(`/${tenantId}/projects/${projectId}/credentials`)
75
+ toast.success('Credential created successfully');
76
+ router.push(`/${tenantId}/projects/${projectId}/credentials`);
51
77
  } catch (error) {
52
- console.error('Failed to create credential:', error)
53
- toast.error('Failed to create credential. Please try again.')
78
+ console.error('Failed to create credential:', error);
79
+ toast.error('Failed to create credential. Please try again.');
54
80
  }
55
- }
81
+ };
56
82
 
57
83
  return (
58
84
  <CredentialForm
@@ -60,5 +86,5 @@ export function NewCredentialForm() {
60
86
  tenantId={tenantId}
61
87
  projectId={projectId}
62
88
  />
63
- )
89
+ );
64
90
  }
@@ -0,0 +1,70 @@
1
+ 'use server';
2
+
3
+ import type { CredentialStoreType } from '@inkeep/agents-core/client-exports';
4
+ import { makeManagementApiRequest } from './api-config';
5
+ import { validateProjectId, validateTenantId } from './resource-validation';
6
+
7
+ export interface CredentialStoreStatus {
8
+ id: string;
9
+ type: (typeof CredentialStoreType)[keyof typeof CredentialStoreType];
10
+ available: boolean;
11
+ reason: string | null;
12
+ }
13
+
14
+ export interface CredentialStoresListResponse {
15
+ data: CredentialStoreStatus[];
16
+ }
17
+
18
+ export interface CreateCredentialInStoreRequest {
19
+ key: string;
20
+ value: string;
21
+ }
22
+
23
+ export interface CreateCredentialInStoreResponse {
24
+ data: {
25
+ key: string;
26
+ storeId: string;
27
+ createdAt: string;
28
+ };
29
+ }
30
+
31
+ /**
32
+ * List credential stores - shows which credential stores are available and functional
33
+ */
34
+ export async function listCredentialStores(
35
+ tenantId: string,
36
+ projectId: string
37
+ ): Promise<CredentialStoreStatus[]> {
38
+ validateTenantId(tenantId);
39
+ validateProjectId(projectId);
40
+
41
+ const response = await makeManagementApiRequest<CredentialStoresListResponse>(
42
+ `tenants/${tenantId}/projects/${projectId}/credential-stores`
43
+ );
44
+
45
+ return response.data;
46
+ }
47
+
48
+ /**
49
+ * Create a credential in a specific credential store
50
+ */
51
+ export async function createCredentialInStore(
52
+ tenantId: string,
53
+ projectId: string,
54
+ storeId: string,
55
+ key: string,
56
+ value: string
57
+ ): Promise<CreateCredentialInStoreResponse['data']> {
58
+ validateTenantId(tenantId);
59
+ validateProjectId(projectId);
60
+
61
+ const response = await makeManagementApiRequest<CreateCredentialInStoreResponse>(
62
+ `tenants/${tenantId}/projects/${projectId}/credential-stores/${storeId}/credentials`,
63
+ {
64
+ method: 'POST',
65
+ body: JSON.stringify({ key, value }),
66
+ }
67
+ );
68
+
69
+ return response.data;
70
+ }
@@ -1 +0,0 @@
1
- exports.id=3024,exports.ids=[3024],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})}},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,65237)),Promise.resolve().then(c.bind(c,24003)),Promise.resolve().then(c.bind(c,19603)),Promise.resolve().then(c.t.bind(c,61678,23))},44613:(a,b,c)=>{"use strict";c.r(b),c.d(b,{"4018f6e07d119bf48adea272e73b80b92472cccaeb":()=>d.bW,"6037281cbae5e49dba331c0e707391963295e4ccb6":()=>p,"6042e15fb3407b96cca1c9364ed1493e63f0cba13a":()=>d.qf,"604e20d73339f461d506f03b76d77f5145ee9eab8a":()=>d.Dv,"60c3050041e31fbe78d49e9b1948da15aaea592382":()=>d.gL,"702fc2aac40a9c25ff5b2de9c969266041820edba3":()=>q,"703f3affd512112fac45a6a41e2eeb5018b13f2c80":()=>r,"7063b1d2c624d1f8aca454c1a5dc4c4fdf287a1a11":()=>s,"7096f68458c92d69e1c255e957e8e567374a35ad91":()=>d.Tg});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,"604fefff1279533a25b84ba6cdf08cbb8850d0459c",null),(0,e.A)(k,"70e9b2d723987deeffa993202ac38c80d768edee0c",null),(0,e.A)(l,"700883d56d5113b1eb63c2a500a02b34f2b27750c2",null),(0,e.A)(m,"700a0730817af8b0611fe92f1f1e2806a11de8f14a",null),(0,e.A)(n,"705db402358f05f53bb3b15e371116b6b1720fecaa",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,"6037281cbae5e49dba331c0e707391963295e4ccb6",null),(0,e.A)(q,"702fc2aac40a9c25ff5b2de9c969266041820edba3",null),(0,e.A)(r,"703f3affd512112fac45a6a41e2eeb5018b13f2c80",null),(0,e.A)(s,"7063b1d2c624d1f8aca454c1a5dc4c4fdf287a1a11",null)},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})})}},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.")},65237:(a,b,c)=>{"use strict";c.d(b,{DataComponentForm:()=>y});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(60848),n=c(93622),o=c(35283),p=c(90147);let q=(0,p.createServerReference)("703f3affd512112fac45a6a41e2eeb5018b13f2c80",p.callServer,void 0,p.findSourceMapURL,"updateDataComponentAction"),r=(0,p.createServerReference)("702fc2aac40a9c25ff5b2de9c969266041820edba3",p.callServer,void 0,p.findSourceMapURL,"createDataComponentAction");var s=c(42723);let t={id:"",name:"",description:"",props:""};var u=c(34576),v=c(80974),w=c(62503);let x=u.object({id:w.f,name:u.string().min(1,"Name is required."),description:u.string().min(1,"Description is required."),props:u.string().min(1,"Props schema is required.").transform((a,b)=>{try{let c=JSON.parse(a),d=(0,v._O)(a);if(!d.isValid){let a=d.errors[0]?.message||"Invalid JSON schema";return b.addIssue({code:u.ZodIssueCode.custom,message:a}),u.NEVER}return c}catch(a){return b.addIssue({code:u.ZodIssueCode.custom,message:(0,v.SR)(a)}),u.NEVER}}).optional()});function y({tenantId:a,projectId:b,id:c,initialData:p}){let u=(0,g.mN)({resolver:(0,e.u)(x),defaultValues:(a=>{if(!a)return t;let b={...a};return b.props&&(b.props=(0,s.S_)(b.props)),b})(p)}),{isSubmitting:v}=u.formState,w=(0,f.useRouter)();(0,o.S)({form:u,nameField:"name",idField:"id",isEditing:!!c});let y=async d=>{try{let e={...d};if(c){let c=await q(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 r(a,b,e);if(!c.success)return void h.oR.error(c.error||"Failed to create component");h.oR.success("Component created"),w.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)(n.lV,{...u,children:(0,d.jsxs)("form",{onSubmit:u.handleSubmit(y),className:"space-y-8",children:[(0,d.jsx)(i.a,{control:u.control,name:"name",label:"Name",placeholder:"ListOrders",description:(0,d.jsxs)(d.Fragment,{children:["This name is used to identify the component in chat widget integration."," ",(0,d.jsx)(m.G,{href:"https://docs.inkeep.com/typescript-sdk/structured-outputs/data-components#frontend-integration",target:"_blank",children:"Learn more"})]}),isRequired:!0}),(0,d.jsx)(i.a,{control:u.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:u.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:u.control,name:"props",label:"Props (JSON schema)",placeholder:"Enter a valid JSON Schema...",isRequired:!0}),(0,d.jsx)(l.$,{type:"submit",disabled:v,children:"Save"})]})})}},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")}};
@@ -1 +0,0 @@
1
- exports.id=5216,exports.ids=[5216],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"}]])},3339:(a,b,c)=>{Promise.resolve().then(c.bind(c,7838))},7838:(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]/artifacts/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]/artifacts/error.tsx","default")},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")},18862:(a,b,c)=>{"use strict";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)("7077d915a08665c994670b0d0aa80eee8c105f8434",o.callServer,void 0,o.findSourceMapURL,"updateArtifactComponentAction"),q=(0,o.createServerReference)("70d35d49d16ed382294751f29d26647a0a9a515b3f",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"})]})})}},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})}},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})]})}},44733:(a,b,c)=>{"use strict";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")},45622:()=>{},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})})}},59567:(a,b,c)=>{Promise.resolve().then(c.bind(c,44733)),Promise.resolve().then(c.bind(c,97633)),Promise.resolve().then(c.bind(c,80248)),Promise.resolve().then(c.t.bind(c,93520,23))},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.")},67815:(a,b,c)=>{Promise.resolve().then(c.bind(c,18862)),Promise.resolve().then(c.bind(c,24003)),Promise.resolve().then(c.bind(c,19603)),Promise.resolve().then(c.t.bind(c,61678,23))},79363:(a,b,c)=>{Promise.resolve().then(c.bind(c,82408))},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"}},82408:(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."})}},92478:()=>{},93056:(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:"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}`))})]})})}},96107:(a,b,c)=>{Promise.resolve().then(c.bind(c,37830))},96590:(a,b,c)=>{"use strict";c.r(b),c.d(b,{"4018f6e07d119bf48adea272e73b80b92472cccaeb":()=>d.bW,"6042e15fb3407b96cca1c9364ed1493e63f0cba13a":()=>d.qf,"604e20d73339f461d506f03b76d77f5145ee9eab8a":()=>d.Dv,"606e8593f7a77828b4713a0ffc78c7e75cb06f494b":()=>p,"60c3050041e31fbe78d49e9b1948da15aaea592382":()=>d.gL,"7031c263c174242b7e1651c73ca8daf0d5eb7b699b":()=>s,"7077d915a08665c994670b0d0aa80eee8c105f8434":()=>r,"7096f68458c92d69e1c255e957e8e567374a35ad91":()=>d.Tg,"70d35d49d16ed382294751f29d26647a0a9a515b3f":()=>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){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,"60d5860d0c91701c4915a4d0a3a7d82cda626dc885",null),(0,e.A)(k,"70d64c7f04e490f6b1bd9df397eec4f455e8f9905d",null),(0,e.A)(l,"7073f3c041daf6771dec8588b6549b81a027fd827f",null),(0,e.A)(m,"709d3194ed5d1312072ab96958447590da8722ba5e",null),(0,e.A)(n,"70061a9ad3de54207062eb6436dd58ac91a0553274",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,"606e8593f7a77828b4713a0ffc78c7e75cb06f494b",null),(0,e.A)(q,"70d35d49d16ed382294751f29d26647a0a9a515b3f",null),(0,e.A)(r,"7077d915a08665c994670b0d0aa80eee8c105f8434",null),(0,e.A)(s,"7031c263c174242b7e1651c73ca8daf0d5eb7b699b",null)}};