@truefoundry/trueforge 0.1.0-rc.0 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/dist/_frontend/assets/ConnectorSettings-H37ZFC6Z-BoDzRBt-.js +1 -0
  2. package/dist/_frontend/assets/ConnectorSettings-H37ZFC6Z-BoDzRBt-.js.br +0 -0
  3. package/dist/_frontend/assets/ConnectorSettings-H37ZFC6Z-BoDzRBt-.js.gz +0 -0
  4. package/dist/_frontend/assets/{DockLayout-WRF7EQLD-BRAhcSNV.js → DockLayout-KEMFRWIR-2H2_fGVk.js} +1 -1
  5. package/dist/_frontend/assets/{DrawerLayout-X2UXYTOS-D60ziyi9.js → DrawerLayout-ZVWCKEIS-DFGUqK6q.js} +2 -2
  6. package/dist/_frontend/assets/DrawerLayout-ZVWCKEIS-DFGUqK6q.js.br +0 -0
  7. package/dist/_frontend/assets/DrawerLayout-ZVWCKEIS-DFGUqK6q.js.gz +0 -0
  8. package/dist/_frontend/assets/ModelSettings-QJMYHCMD-DaR_pzAb.js +1 -0
  9. package/dist/_frontend/assets/ModelSettings-QJMYHCMD-DaR_pzAb.js.br +0 -0
  10. package/dist/_frontend/assets/ModelSettings-QJMYHCMD-DaR_pzAb.js.gz +0 -0
  11. package/dist/_frontend/assets/SandboxSettings-BUBMLW7Q-ChiNe2Y8.js +1 -0
  12. package/dist/_frontend/assets/SandboxSettings-BUBMLW7Q-ChiNe2Y8.js.br +0 -0
  13. package/dist/_frontend/assets/SandboxSettings-BUBMLW7Q-ChiNe2Y8.js.gz +0 -0
  14. package/dist/_frontend/assets/SettingsBuilder-26XSGIHK-DmgjXL0m.js +2 -0
  15. package/dist/_frontend/assets/SettingsBuilder-26XSGIHK-DmgjXL0m.js.br +0 -0
  16. package/dist/_frontend/assets/SettingsBuilder-26XSGIHK-DmgjXL0m.js.gz +0 -0
  17. package/dist/_frontend/assets/{SidebarLayout-M7HEOZVK-owseAySg.js → SidebarLayout-F3XFXW7B-BQV8bkzL.js} +2 -2
  18. package/dist/_frontend/assets/SidebarLayout-F3XFXW7B-BQV8bkzL.js.br +0 -0
  19. package/dist/_frontend/assets/SidebarLayout-F3XFXW7B-BQV8bkzL.js.gz +0 -0
  20. package/dist/_frontend/assets/{SkillSettings-MXK4ZEI7-CrK7D1D-.js → SkillSettings-IRMGDFRG-ChKre3S8.js} +1 -1
  21. package/dist/_frontend/assets/SkillSettings-IRMGDFRG-ChKre3S8.js.br +0 -0
  22. package/dist/_frontend/assets/SkillSettings-IRMGDFRG-ChKre3S8.js.gz +0 -0
  23. package/dist/_frontend/assets/{WidgetLayout-7MDOKLHU-OdQcbsJk.js → WidgetLayout-SZMABKIR-BRKArpEm.js} +1 -1
  24. package/dist/_frontend/assets/WidgetLayout-SZMABKIR-BRKArpEm.js.br +0 -0
  25. package/dist/_frontend/assets/WidgetLayout-SZMABKIR-BRKArpEm.js.gz +0 -0
  26. package/dist/_frontend/assets/{chunk-NBMP2XNL-DdVXEaJy.js → chunk-7EEOWDLE-BIwInB6G.js} +2 -2
  27. package/dist/_frontend/assets/chunk-7EEOWDLE-BIwInB6G.js.br +0 -0
  28. package/dist/_frontend/assets/chunk-7EEOWDLE-BIwInB6G.js.gz +0 -0
  29. package/dist/_frontend/assets/{chunk-WFC3W4C3-DXFwnpmH.js → chunk-LRQHHZDX-eb14Z2nA.js} +1 -1
  30. package/dist/_frontend/assets/chunk-LRQHHZDX-eb14Z2nA.js.br +0 -0
  31. package/dist/_frontend/assets/chunk-LRQHHZDX-eb14Z2nA.js.gz +0 -0
  32. package/dist/_frontend/assets/{cssMode-BIIwADkQ.js → cssMode-Bb1lR8Ti.js} +1 -1
  33. package/dist/_frontend/assets/cssMode-Bb1lR8Ti.js.br +0 -0
  34. package/dist/_frontend/assets/cssMode-Bb1lR8Ti.js.gz +0 -0
  35. package/dist/_frontend/assets/{freemarker2-DWtRl63b.js → freemarker2-BrrF7mKG.js} +1 -1
  36. package/dist/_frontend/assets/freemarker2-BrrF7mKG.js.br +0 -0
  37. package/dist/_frontend/assets/freemarker2-BrrF7mKG.js.gz +0 -0
  38. package/dist/_frontend/assets/{handlebars-CJJYL_TE.js → handlebars-WQ7HMT1b.js} +1 -1
  39. package/dist/_frontend/assets/handlebars-WQ7HMT1b.js.br +0 -0
  40. package/dist/_frontend/assets/handlebars-WQ7HMT1b.js.gz +0 -0
  41. package/dist/_frontend/assets/{html-CIyPQjdd.js → html-CoOPnhCb.js} +1 -1
  42. package/dist/_frontend/assets/html-CoOPnhCb.js.br +0 -0
  43. package/dist/_frontend/assets/html-CoOPnhCb.js.gz +0 -0
  44. package/dist/_frontend/assets/{htmlMode-CDsupPvj.js → htmlMode-BW7taYty.js} +1 -1
  45. package/dist/_frontend/assets/htmlMode-BW7taYty.js.br +0 -0
  46. package/dist/_frontend/assets/htmlMode-BW7taYty.js.gz +0 -0
  47. package/dist/_frontend/assets/{index-B8NomNE2.js → index-ChCGltYc.js} +242 -232
  48. package/dist/_frontend/assets/index-ChCGltYc.js.br +0 -0
  49. package/dist/_frontend/assets/index-ChCGltYc.js.gz +0 -0
  50. package/dist/_frontend/assets/{index-CKMEtdQA.js → index-DFQqb6R1.js} +3 -3
  51. package/dist/_frontend/assets/index-DFQqb6R1.js.br +0 -0
  52. package/dist/_frontend/assets/index-DFQqb6R1.js.gz +0 -0
  53. package/dist/_frontend/assets/{javascript-CPSnXnaS.js → javascript-CPINtbIt.js} +1 -1
  54. package/dist/_frontend/assets/{jsonMode-DRy4DQT3.js → jsonMode-C8qDzOfb.js} +1 -1
  55. package/dist/_frontend/assets/jsonMode-C8qDzOfb.js.br +0 -0
  56. package/dist/_frontend/assets/jsonMode-C8qDzOfb.js.gz +0 -0
  57. package/dist/_frontend/assets/{liquid-a-xIf2lN.js → liquid-zGC9H1Dt.js} +1 -1
  58. package/dist/_frontend/assets/liquid-zGC9H1Dt.js.br +0 -0
  59. package/dist/_frontend/assets/liquid-zGC9H1Dt.js.gz +0 -0
  60. package/dist/_frontend/assets/{lspLanguageFeatures-Tavpp1a0.js → lspLanguageFeatures-B6VPH2Sv.js} +1 -1
  61. package/dist/_frontend/assets/lspLanguageFeatures-B6VPH2Sv.js.br +0 -0
  62. package/dist/_frontend/assets/lspLanguageFeatures-B6VPH2Sv.js.gz +0 -0
  63. package/dist/_frontend/assets/{mdx-D3wOHh0p.js → mdx-BrQrGCP9.js} +1 -1
  64. package/dist/_frontend/assets/mdx-BrQrGCP9.js.br +0 -0
  65. package/dist/_frontend/assets/mdx-BrQrGCP9.js.gz +0 -0
  66. package/dist/_frontend/assets/{python-8zlVof3q.js → python-zKGpYLwR.js} +1 -1
  67. package/dist/_frontend/assets/python-zKGpYLwR.js.br +0 -0
  68. package/dist/_frontend/assets/python-zKGpYLwR.js.gz +0 -0
  69. package/dist/_frontend/assets/{razor-q_HfjjpC.js → razor-BJ38lYsd.js} +1 -1
  70. package/dist/_frontend/assets/razor-BJ38lYsd.js.br +0 -0
  71. package/dist/_frontend/assets/razor-BJ38lYsd.js.gz +0 -0
  72. package/dist/_frontend/assets/{tsMode-DOOZolwq.js → tsMode-dPLqGMg8.js} +1 -1
  73. package/dist/_frontend/assets/tsMode-dPLqGMg8.js.br +0 -0
  74. package/dist/_frontend/assets/tsMode-dPLqGMg8.js.gz +0 -0
  75. package/dist/_frontend/assets/{typescript-CmhvHmNu.js → typescript-BJlivWry.js} +1 -1
  76. package/dist/_frontend/assets/typescript-BJlivWry.js.br +0 -0
  77. package/dist/_frontend/assets/typescript-BJlivWry.js.gz +0 -0
  78. package/dist/_frontend/assets/{workers-CfU2h0GU.js → workers-fMwav4jB.js} +1 -1
  79. package/dist/_frontend/assets/workers-fMwav4jB.js.br +0 -0
  80. package/dist/_frontend/assets/workers-fMwav4jB.js.gz +0 -0
  81. package/dist/_frontend/assets/{xml-D3jhgOra.js → xml-DZW470wi.js} +1 -1
  82. package/dist/_frontend/assets/xml-DZW470wi.js.br +0 -0
  83. package/dist/_frontend/assets/xml-DZW470wi.js.gz +0 -0
  84. package/dist/_frontend/assets/{yaml-B-q42846.js → yaml-Bs1DumYp.js} +1 -1
  85. package/dist/_frontend/assets/yaml-Bs1DumYp.js.br +0 -0
  86. package/dist/_frontend/assets/yaml-Bs1DumYp.js.gz +0 -0
  87. package/dist/_frontend/index.html +1 -1
  88. package/dist/_frontend/index.html.br +0 -0
  89. package/dist/_frontend/index.html.gz +0 -0
  90. package/dist/main.js +120 -79
  91. package/dist/main.js.map +1 -1
  92. package/dist/postgres/migrations/20260815_000002_mcp_server_description.js +23 -0
  93. package/dist/postgres/migrations/20260815_000002_mcp_server_description.js.map +1 -0
  94. package/dist/sqlite/migrations/20260815_000002_mcp_server_description.js +21 -0
  95. package/dist/sqlite/migrations/20260815_000002_mcp_server_description.js.map +1 -0
  96. package/package.json +2 -2
  97. package/dist/_frontend/assets/ConnectorSettings-CLBEWGQJ-BjMXOS3R.js +0 -1
  98. package/dist/_frontend/assets/ConnectorSettings-CLBEWGQJ-BjMXOS3R.js.br +0 -0
  99. package/dist/_frontend/assets/ConnectorSettings-CLBEWGQJ-BjMXOS3R.js.gz +0 -0
  100. package/dist/_frontend/assets/DrawerLayout-X2UXYTOS-D60ziyi9.js.br +0 -0
  101. package/dist/_frontend/assets/DrawerLayout-X2UXYTOS-D60ziyi9.js.gz +0 -0
  102. package/dist/_frontend/assets/ModelSettings-IJ55QJQO-BFV2nfxB.js +0 -1
  103. package/dist/_frontend/assets/ModelSettings-IJ55QJQO-BFV2nfxB.js.br +0 -0
  104. package/dist/_frontend/assets/ModelSettings-IJ55QJQO-BFV2nfxB.js.gz +0 -0
  105. package/dist/_frontend/assets/SandboxSettings-S5XGZWOL-BUQpWdqg.js +0 -1
  106. package/dist/_frontend/assets/SandboxSettings-S5XGZWOL-BUQpWdqg.js.br +0 -0
  107. package/dist/_frontend/assets/SandboxSettings-S5XGZWOL-BUQpWdqg.js.gz +0 -0
  108. package/dist/_frontend/assets/SettingsBuilder-64Y33NP3-BQNwNwxh.js +0 -2
  109. package/dist/_frontend/assets/SettingsBuilder-64Y33NP3-BQNwNwxh.js.br +0 -0
  110. package/dist/_frontend/assets/SettingsBuilder-64Y33NP3-BQNwNwxh.js.gz +0 -0
  111. package/dist/_frontend/assets/SidebarLayout-M7HEOZVK-owseAySg.js.br +0 -0
  112. package/dist/_frontend/assets/SidebarLayout-M7HEOZVK-owseAySg.js.gz +0 -0
  113. package/dist/_frontend/assets/SkillSettings-MXK4ZEI7-CrK7D1D-.js.br +0 -0
  114. package/dist/_frontend/assets/SkillSettings-MXK4ZEI7-CrK7D1D-.js.gz +0 -0
  115. package/dist/_frontend/assets/WidgetLayout-7MDOKLHU-OdQcbsJk.js.br +0 -0
  116. package/dist/_frontend/assets/WidgetLayout-7MDOKLHU-OdQcbsJk.js.gz +0 -0
  117. package/dist/_frontend/assets/chunk-NBMP2XNL-DdVXEaJy.js.br +0 -2
  118. package/dist/_frontend/assets/chunk-NBMP2XNL-DdVXEaJy.js.gz +0 -0
  119. package/dist/_frontend/assets/chunk-WFC3W4C3-DXFwnpmH.js.br +0 -0
  120. package/dist/_frontend/assets/chunk-WFC3W4C3-DXFwnpmH.js.gz +0 -0
  121. package/dist/_frontend/assets/cssMode-BIIwADkQ.js.br +0 -0
  122. package/dist/_frontend/assets/cssMode-BIIwADkQ.js.gz +0 -0
  123. package/dist/_frontend/assets/freemarker2-DWtRl63b.js.br +0 -0
  124. package/dist/_frontend/assets/freemarker2-DWtRl63b.js.gz +0 -0
  125. package/dist/_frontend/assets/handlebars-CJJYL_TE.js.br +0 -0
  126. package/dist/_frontend/assets/handlebars-CJJYL_TE.js.gz +0 -0
  127. package/dist/_frontend/assets/html-CIyPQjdd.js.br +0 -0
  128. package/dist/_frontend/assets/html-CIyPQjdd.js.gz +0 -0
  129. package/dist/_frontend/assets/htmlMode-CDsupPvj.js.br +0 -0
  130. package/dist/_frontend/assets/htmlMode-CDsupPvj.js.gz +0 -0
  131. package/dist/_frontend/assets/index-B8NomNE2.js.br +0 -0
  132. package/dist/_frontend/assets/index-B8NomNE2.js.gz +0 -0
  133. package/dist/_frontend/assets/index-CKMEtdQA.js.br +0 -0
  134. package/dist/_frontend/assets/index-CKMEtdQA.js.gz +0 -0
  135. package/dist/_frontend/assets/jsonMode-DRy4DQT3.js.br +0 -0
  136. package/dist/_frontend/assets/jsonMode-DRy4DQT3.js.gz +0 -0
  137. package/dist/_frontend/assets/liquid-a-xIf2lN.js.br +0 -0
  138. package/dist/_frontend/assets/liquid-a-xIf2lN.js.gz +0 -0
  139. package/dist/_frontend/assets/lspLanguageFeatures-Tavpp1a0.js.br +0 -0
  140. package/dist/_frontend/assets/lspLanguageFeatures-Tavpp1a0.js.gz +0 -0
  141. package/dist/_frontend/assets/mdx-D3wOHh0p.js.br +0 -0
  142. package/dist/_frontend/assets/mdx-D3wOHh0p.js.gz +0 -0
  143. package/dist/_frontend/assets/python-8zlVof3q.js.br +0 -0
  144. package/dist/_frontend/assets/python-8zlVof3q.js.gz +0 -0
  145. package/dist/_frontend/assets/razor-q_HfjjpC.js.br +0 -0
  146. package/dist/_frontend/assets/razor-q_HfjjpC.js.gz +0 -0
  147. package/dist/_frontend/assets/tsMode-DOOZolwq.js.br +0 -0
  148. package/dist/_frontend/assets/tsMode-DOOZolwq.js.gz +0 -0
  149. package/dist/_frontend/assets/typescript-CmhvHmNu.js.br +0 -0
  150. package/dist/_frontend/assets/typescript-CmhvHmNu.js.gz +0 -0
  151. package/dist/_frontend/assets/workers-CfU2h0GU.js.br +0 -0
  152. package/dist/_frontend/assets/workers-CfU2h0GU.js.gz +0 -0
  153. package/dist/_frontend/assets/xml-D3jhgOra.js.br +0 -0
  154. package/dist/_frontend/assets/xml-D3jhgOra.js.gz +0 -0
  155. package/dist/_frontend/assets/yaml-B-q42846.js.br +0 -0
  156. package/dist/_frontend/assets/yaml-B-q42846.js.gz +0 -0
package/dist/main.js CHANGED
@@ -4169,7 +4169,7 @@ import { z } from "@hono/zod-openapi";
4169
4169
  var NameSchema = z.string().min(2).max(64).regex(
4170
4170
  /^[a-z](?:[a-z0-9._-]{0,62}[a-z0-9])$/,
4171
4171
  'must be 2\u201364 lowercase chars: start with a letter, end with alphanumeric, optionally separated by ".", "_" or "-"'
4172
- ).describe("Fully qualified name. Unique within a tenant.").openapi("ResourceName");
4172
+ ).openapi("ResourceName");
4173
4173
  function uniqueNames(entries, ctx) {
4174
4174
  const seen = /* @__PURE__ */ new Set();
4175
4175
  for (const entry of entries) {
@@ -4691,10 +4691,10 @@ var DaytonaSandboxProviderAuthSchema = z5.object({
4691
4691
  api_key: z5.string().min(1).describe(
4692
4692
  "Daytona API key. Responses are redacted; on PUT, a real value sets/rotates and a redacted value keeps the stored key."
4693
4693
  )
4694
- }).strict().openapi("DaytonaSandboxProviderAuth");
4694
+ }).strict().describe("Daytona authentication credentials.").openapi("DaytonaSandboxProviderAuth");
4695
4695
  var DaytonaSandboxProviderSchema = z5.object({
4696
4696
  type: z5.literal("daytona").describe("Daytona sandbox provider."),
4697
- auth: DaytonaSandboxProviderAuthSchema.describe("Daytona authentication credentials."),
4697
+ auth: DaytonaSandboxProviderAuthSchema,
4698
4698
  exec_timeout_ms: z5.number().int().positive().describe("Default sandbox command exec timeout in milliseconds."),
4699
4699
  auto_stop_interval_in_minutes: z5.number().int().nonnegative().describe("Minutes of idle time before Daytona auto-stops the sandbox (0 disables)."),
4700
4700
  auto_archive_interval_in_minutes: z5.number().int().nonnegative().describe("Minutes before Daytona auto-archives the sandbox (0 disables)."),
@@ -4710,17 +4710,16 @@ var SandboxStatusSchema = z5.object({
4710
4710
  "Provider-specific build metadata; null when the provider has none."
4711
4711
  )
4712
4712
  }).strict();
4713
- var SandboxProviderResponseSchema = z5.object({
4713
+ var SandboxProviderSchema = z5.object({
4714
4714
  manifest: SandboxProviderManifestSchema,
4715
4715
  status: SandboxBuildStatusSchema,
4716
4716
  status_reason: z5.string().nullable().describe("Human-readable detail for the current status; null when ready.")
4717
- }).strict().openapi("SandboxProviderResponse");
4718
- var PutSandboxProviderRequestSchema = SandboxProviderManifestSchema;
4719
- var PutSandboxProviderResponseSchema = z5.object({
4720
- data: SandboxProviderResponseSchema
4721
- }).openapi("PutSandboxProviderResponse");
4717
+ }).strict().openapi("SandboxProvider");
4718
+ var PutSandboxProviderRequestSchema = z5.object({
4719
+ manifest: SandboxProviderManifestSchema
4720
+ }).strict().openapi("PutSandboxProviderRequest");
4722
4721
  var GetSandboxProviderResponseSchema = z5.object({
4723
- data: SandboxProviderResponseSchema
4722
+ data: SandboxProviderSchema
4724
4723
  }).openapi("GetSandboxProviderResponse");
4725
4724
  function toDaytonaSandboxProviderInput(manifest) {
4726
4725
  return {
@@ -4747,7 +4746,7 @@ function toDaytonaSandboxProvider({
4747
4746
  client: new Daytona({ apiKey }),
4748
4747
  ...settings,
4749
4748
  tenantName: tenant_id,
4750
- sandboxImage: SANDBOX_IMAGE_URI,
4749
+ sandboxImage: build_metadata?.["image_uri"] ?? SANDBOX_IMAGE_URI,
4751
4750
  buildRef: build_metadata?.["build_ref"],
4752
4751
  fileMaxBytesForDownload: config_default.SANDBOX_FILE_MAX_BYTES_FOR_DOWNLOAD,
4753
4752
  logger
@@ -4810,39 +4809,42 @@ var McpServerHeaderAuthSchema = z6.object({
4810
4809
  var McpServerDcrAuthSchema = z6.object({
4811
4810
  type: z6.literal("dcr").describe("Authenticate via OAuth Dynamic Client Registration.")
4812
4811
  }).strict().openapi("McpServerDcrAuth");
4813
- var McpServerAuthSettingsSchema = z6.discriminatedUnion("type", [McpServerHeaderAuthSchema, McpServerDcrAuthSchema]).openapi("ConfiguredMcpServerAuth");
4812
+ var McpServerManifestAuthSchema = z6.discriminatedUnion("type", [McpServerHeaderAuthSchema, McpServerDcrAuthSchema]).describe("Optional auth settings. Omit when the server needs no credentials.").openapi("McpServerManifestAuth");
4813
+ var McpServerDescriptionSchema = z6.string().trim().min(1).describe("Concise summary of what this MCP server provides.");
4814
4814
  var McpServerManifestObjectSchema = z6.object({
4815
- type: McpServerTypeSchema.describe("MCP server kind (`remote` today)."),
4815
+ type: McpServerTypeSchema,
4816
4816
  name: NameSchema,
4817
4817
  url: z6.url().describe("URL of the remote MCP server."),
4818
- auth: McpServerAuthSettingsSchema.optional().describe(
4819
- "Optional auth settings. Omit when the server needs no credentials."
4820
- )
4818
+ description: McpServerDescriptionSchema,
4819
+ auth: McpServerManifestAuthSchema.optional()
4821
4820
  }).strict();
4822
4821
  var McpServerManifestSchema = McpServerManifestObjectSchema.openapi("McpServerManifest");
4823
4822
  var McpAuthStatusSchema = z6.object({
4824
4823
  status: z6.enum(["authenticated", "auth_required", "not_required"]).describe("Current auth state for this MCP server."),
4825
4824
  authorization_url: z6.url().optional().describe("When auth is required, this contains the URL to redirect the user to for authorization.")
4826
- }).strict().openapi("McpAuthStatus");
4827
- var ConfiguredMcpServerSchema = McpServerManifestObjectSchema.extend({
4825
+ }).strict().describe("Current auth state.").openapi("McpAuthStatus");
4826
+ var ConfiguredMcpServerSchema = z6.object({
4827
+ name: NameSchema,
4828
+ manifest: McpServerManifestSchema,
4828
4829
  auth_status: McpAuthStatusSchema
4829
- }).openapi("ConfiguredMcpServer");
4830
- var PutMcpServerRequestSchema = McpServerManifestSchema;
4831
- var PutMcpServerResponseSchema = z6.object({ data: ConfiguredMcpServerSchema }).openapi("PutMcpServerResponse");
4832
- var CreateMcpServerRequestSchema = McpServerManifestObjectSchema.openapi("CreateMcpServerRequest");
4830
+ }).strict().openapi("ConfiguredMcpServer");
4831
+ var CreateMcpServerRequestSchema = z6.object({
4832
+ manifest: McpServerManifestSchema
4833
+ }).strict().openapi("CreateMcpServerRequest");
4834
+ var PutMcpServerRequestSchema = z6.object({
4835
+ manifest: McpServerManifestSchema
4836
+ }).strict().openapi("PutMcpServerRequest");
4833
4837
  var GetMcpServerResponseSchema = z6.object({ data: ConfiguredMcpServerSchema }).openapi("GetMcpServerResponse");
4834
4838
  var ListMcpServersResponseSchema = z6.object({ data: z6.array(ConfiguredMcpServerSchema) }).openapi("ListMcpServersResponse");
4835
4839
  var McpServerAuthPublicSchema = z6.discriminatedUnion("type", [
4836
4840
  z6.object({ type: z6.literal("dcr") }).strict(),
4837
4841
  z6.object({ type: z6.literal("header") }).strict()
4838
- ]).openapi("McpServerAuthPublic");
4842
+ ]).describe("Auth mechanism when configured (no secrets). Omit when the server needs no credentials.").openapi("McpServerAuthPublic");
4839
4843
  var McpServerReadEntrySchema = z6.object({
4840
4844
  name: NameSchema,
4841
4845
  url: z6.url().describe("URL of the remote MCP server."),
4842
- auth: McpServerAuthPublicSchema.optional().describe(
4843
- "Auth mechanism when configured (no secrets). Omit when the server needs no credentials."
4844
- ),
4845
- auth_status: McpAuthStatusSchema.describe("Auth state for the calling user.")
4846
+ auth: McpServerAuthPublicSchema.optional(),
4847
+ auth_status: McpAuthStatusSchema
4846
4848
  }).strict().openapi("McpServerReadEntry");
4847
4849
  var ListAvailableMcpServersResponseSchema = z6.object({ data: z6.array(McpServerReadEntrySchema) }).openapi("ListAvailableMcpServersResponse");
4848
4850
  function resolveConfiguredMcpRequestHeaders(manifest) {
@@ -6374,11 +6376,12 @@ import { createRoute as createRoute5 } from "@hono/zod-openapi";
6374
6376
  // src/schemas/mcpCatalog.ts
6375
6377
  import { z as z15 } from "@hono/zod-openapi";
6376
6378
  var CatalogMcpServerSchema = z15.object({
6377
- type: McpServerTypeSchema.describe("MCP server kind (`remote` today)."),
6379
+ type: McpServerTypeSchema,
6378
6380
  name: NameSchema,
6379
6381
  logo: z15.url().optional().describe("URL of the MCP server logo asset."),
6380
6382
  url: z15.url().describe("URL of the remote MCP server."),
6381
- auth: McpServerAuthSettingsSchema.optional().describe("Optional default auth settings for the preset.")
6383
+ description: McpServerDescriptionSchema,
6384
+ auth: McpServerManifestAuthSchema.optional()
6382
6385
  }).strict().openapi("CatalogMcpServer");
6383
6386
  var McpCatalogFileSchema = z15.object({
6384
6387
  mcp_servers: z15.array(CatalogMcpServerSchema)
@@ -6401,11 +6404,11 @@ var ModelPropertiesSchema = z16.object({
6401
6404
  context_length: z16.number().int().positive().optional().describe("Maximum context window size in tokens."),
6402
6405
  max_output_tokens: z16.number().int().positive().optional().describe("Maximum output tokens the model can generate."),
6403
6406
  reasoning_efforts: z16.array(ReasoningEffortSchema).min(1).optional().describe("Supported reasoning-effort values for this model.")
6404
- }).strict().openapi("ModelProperties");
6407
+ }).strict().describe("Optional model capability metadata.").openapi("ModelProperties");
6405
6408
  var ModelEntrySchema = z16.object({
6406
6409
  model_id: z16.string().min(1).describe("Upstream, provider-specific identifier sent to the provider API."),
6407
- name: NameSchema.describe("Internal identifier; forms the fully qualified name `name/model_name`."),
6408
- properties: ModelPropertiesSchema.describe("Optional model capability metadata.")
6410
+ name: NameSchema,
6411
+ properties: ModelPropertiesSchema
6409
6412
  }).strict().openapi("ModelEntry");
6410
6413
  function refineUniqueModels(models, ctx) {
6411
6414
  uniqueNames(models, ctx);
@@ -6425,9 +6428,9 @@ var ModelProviderAuthSchema = z16.object({
6425
6428
  api_key: z16.string().min(1).describe(
6426
6429
  "Provider API key. Responses are redacted; on PUT, a real value sets/rotates and a redacted value keeps the stored key."
6427
6430
  )
6428
- }).strict().openapi("ModelProviderAuth");
6431
+ }).strict().describe("Provider authentication credentials.").openapi("ModelProviderAuth");
6429
6432
  var ModelProviderManifestBaseSchema = z16.object({
6430
- auth: ModelProviderAuthSchema.describe("Provider authentication credentials."),
6433
+ auth: ModelProviderAuthSchema,
6431
6434
  models: z16.array(ModelEntrySchema).min(1).describe("Models exposed by this provider (at least one).")
6432
6435
  }).strict();
6433
6436
  function wellKnownProviderSchema({
@@ -6491,24 +6494,34 @@ var ModelProviderBodySchema = z16.discriminatedUnion("type", [
6491
6494
  AlibabaModelProviderSchema,
6492
6495
  CustomModelProviderSchema
6493
6496
  ]).superRefine(refineModelProviderManifest);
6494
- var ModelProviderSchema = ModelProviderBodySchema.openapi("ModelProvider");
6497
+ var ModelProviderManifestSchema = ModelProviderBodySchema.openapi("ModelProviderManifest");
6495
6498
  function modelProviderName(provider) {
6496
6499
  return provider.type === "custom" ? provider.name : provider.type;
6497
6500
  }
6501
+ var ModelProviderSchema = z16.object({
6502
+ name: NameSchema,
6503
+ manifest: ModelProviderManifestSchema
6504
+ }).strict().openapi("ModelProvider");
6505
+ var CreateModelProviderRequestSchema = z16.object({
6506
+ manifest: ModelProviderManifestSchema
6507
+ }).strict().openapi("CreateModelProviderRequest");
6508
+ var PutModelProviderRequestSchema = z16.object({
6509
+ manifest: ModelProviderManifestSchema
6510
+ }).strict().openapi("PutModelProviderRequest");
6511
+ var GetModelProviderResponseSchema = z16.object({
6512
+ data: ModelProviderSchema
6513
+ }).openapi("GetModelProviderResponse");
6498
6514
  var ListModelProvidersResponseSchema = z16.object({
6499
6515
  data: z16.array(ModelProviderSchema)
6500
6516
  }).openapi("ListModelProvidersResponse");
6501
- var PutModelProviderResponseSchema = z16.object({
6502
- data: ModelProviderSchema
6503
- }).openapi("PutModelProviderResponse");
6504
6517
  var ModelListProviderSchema = z16.object({
6505
6518
  name: z16.string().min(1).describe("Configured provider resource name; matches the FQN prefix of `name`.")
6506
- }).strict().openapi("ModelListProvider");
6519
+ }).strict().describe("Owning configured provider.").openapi("ModelListProvider");
6507
6520
  var ModelSchema = z16.object({
6508
6521
  name: z16.string().describe('Fully qualified name `provider_name/model_name`, e.g. "openai/gpt-5-6-sol". Unique within a tenant.'),
6509
6522
  model_id: z16.string().describe("Upstream, provider-specific identifier sent to the provider API."),
6510
- provider: ModelListProviderSchema.describe("Owning configured provider."),
6511
- properties: ModelPropertiesSchema.describe("Optional model capability metadata.")
6523
+ provider: ModelListProviderSchema,
6524
+ properties: ModelPropertiesSchema
6512
6525
  }).strict().openapi("Model");
6513
6526
  var ListModelsResponseSchema = z16.object({
6514
6527
  data: z16.array(ModelSchema)
@@ -6574,9 +6587,18 @@ var SkillManifestObjectSchema = z19.object({
6574
6587
  description: SkillDescriptionSchema
6575
6588
  }).strict();
6576
6589
  var SkillManifestSchema = SkillManifestObjectSchema.openapi("SkillManifest");
6577
- var ConfiguredSkillSchema = SkillManifestSchema;
6578
- var PutSkillResponseSchema = z19.object({ data: ConfiguredSkillSchema }).openapi("PutSkillResponse");
6579
- var ListConfiguredSkillsResponseSchema = z19.object({ data: z19.array(ConfiguredSkillSchema) }).openapi("ListConfiguredSkillsResponse");
6590
+ var ConfiguredSkillSchema = z19.object({
6591
+ name: NameSchema,
6592
+ manifest: SkillManifestSchema
6593
+ }).strict().openapi("ConfiguredSkill");
6594
+ var CreateSkillRequestSchema = z19.object({
6595
+ manifest: SkillManifestSchema
6596
+ }).strict().openapi("CreateSkillRequest");
6597
+ var PutSkillRequestSchema = z19.object({
6598
+ manifest: SkillManifestSchema
6599
+ }).strict().openapi("PutSkillRequest");
6600
+ var GetSkillResponseSchema = z19.object({ data: ConfiguredSkillSchema }).openapi("GetSkillResponse");
6601
+ var ListSkillsResponseSchema = z19.object({ data: z19.array(ConfiguredSkillSchema) }).openapi("ListSkillsResponse");
6580
6602
  var SkillReadEntrySchema = z19.object({
6581
6603
  name: NameSchema,
6582
6604
  description: SkillDescriptionSchema
@@ -6896,8 +6918,8 @@ var createMcpServerRoute = createRoute7({
6896
6918
  }
6897
6919
  },
6898
6920
  responses: {
6899
- 200: {
6900
- content: { "application/json": { schema: PutMcpServerResponseSchema } },
6921
+ 201: {
6922
+ content: { "application/json": { schema: GetMcpServerResponseSchema } },
6901
6923
  description: "The created MCP server with auth_status"
6902
6924
  },
6903
6925
  400: {
@@ -6930,7 +6952,7 @@ var putMcpServerRoute = createRoute7({
6930
6952
  },
6931
6953
  responses: {
6932
6954
  200: {
6933
- content: { "application/json": { schema: PutMcpServerResponseSchema } },
6955
+ content: { "application/json": { schema: GetMcpServerResponseSchema } },
6934
6956
  description: "The saved MCP server with auth_status"
6935
6957
  },
6936
6958
  400: {
@@ -7036,7 +7058,7 @@ var deleteAuthorizeMcpServerRoute = createRoute7({
7036
7058
  },
7037
7059
  responses: {
7038
7060
  200: {
7039
- content: { "application/json": { schema: PutMcpServerResponseSchema } },
7061
+ content: { "application/json": { schema: GetMcpServerResponseSchema } },
7040
7062
  description: "The MCP server after disconnect (auth_required for dcr)."
7041
7063
  },
7042
7064
  404: {
@@ -7125,7 +7147,8 @@ function toConfiguredMcpServer({
7125
7147
  token
7126
7148
  }) {
7127
7149
  return {
7128
- ...redactMcpServerManifest(record.manifest),
7150
+ name: record.name,
7151
+ manifest: redactMcpServerManifest(record.manifest),
7129
7152
  auth_status: resolveMcpAuthStatus({
7130
7153
  manifest: record.manifest,
7131
7154
  ...token !== void 0 ? { token } : {}
@@ -7172,7 +7195,8 @@ function createSettingsMcpServersRouter(deps) {
7172
7195
  return c.json({ data: toConfiguredMcpServer({ record, token }) }, 200);
7173
7196
  };
7174
7197
  const createHandler = async (c) => {
7175
- const incomingManifest = c.req.valid("json");
7198
+ const body = c.req.valid("json");
7199
+ const incomingManifest = body.manifest;
7176
7200
  let dcrClientToSave;
7177
7201
  if (incomingManifest.auth?.type === "dcr") {
7178
7202
  try {
@@ -7218,7 +7242,7 @@ function createSettingsMcpServersRouter(deps) {
7218
7242
  }
7219
7243
  return saved;
7220
7244
  });
7221
- return c.json({ data: toConfiguredMcpServer({ record, token: void 0 }) }, 200);
7245
+ return c.json({ data: toConfiguredMcpServer({ record, token: void 0 }) }, 201);
7222
7246
  } catch (error) {
7223
7247
  if (error instanceof McpServerNameConflictError) {
7224
7248
  return c.json({ error: { message: error.message } }, 409);
@@ -7228,7 +7252,8 @@ function createSettingsMcpServersRouter(deps) {
7228
7252
  };
7229
7253
  const putHandler = async (c) => {
7230
7254
  const userRef = deps.resolveUserContext(c).userRef;
7231
- const incomingManifest = c.req.valid("json");
7255
+ const body = c.req.valid("json");
7256
+ const incomingManifest = body.manifest;
7232
7257
  try {
7233
7258
  const record = await deps.withTransaction(async (transaction) => {
7234
7259
  const existing = await deps.mcpServerStore.getServerForUpdate(
@@ -7458,7 +7483,7 @@ var listModelProvidersRoute = createRoute9({
7458
7483
  path: "/",
7459
7484
  tags: [MODEL_PROVIDERS_TAG],
7460
7485
  summary: "List configured model providers",
7461
- description: "All configured providers with their models.",
7486
+ description: "All configured providers with nested manifests.",
7462
7487
  "x-fern-sdk-group-name": ["settings", "modelProviders"],
7463
7488
  "x-fern-sdk-method-name": "list",
7464
7489
  responses: {
@@ -7486,13 +7511,13 @@ var createModelProviderRoute = createRoute9({
7486
7511
  "x-fern-sdk-method-name": "create",
7487
7512
  request: {
7488
7513
  body: {
7489
- content: { "application/json": { schema: ModelProviderSchema } },
7514
+ content: { "application/json": { schema: CreateModelProviderRequestSchema } },
7490
7515
  required: true
7491
7516
  }
7492
7517
  },
7493
7518
  responses: {
7494
- 200: {
7495
- content: { "application/json": { schema: PutModelProviderResponseSchema } },
7519
+ 201: {
7520
+ content: { "application/json": { schema: GetModelProviderResponseSchema } },
7496
7521
  description: "The created provider"
7497
7522
  },
7498
7523
  400: {
@@ -7515,13 +7540,13 @@ var putModelProviderRoute = createRoute9({
7515
7540
  "x-fern-sdk-method-name": "upsert",
7516
7541
  request: {
7517
7542
  body: {
7518
- content: { "application/json": { schema: ModelProviderSchema } },
7543
+ content: { "application/json": { schema: PutModelProviderRequestSchema } },
7519
7544
  required: true
7520
7545
  }
7521
7546
  },
7522
7547
  responses: {
7523
7548
  200: {
7524
- content: { "application/json": { schema: PutModelProviderResponseSchema } },
7549
+ content: { "application/json": { schema: GetModelProviderResponseSchema } },
7525
7550
  description: "The saved provider"
7526
7551
  },
7527
7552
  400: {
@@ -7558,18 +7583,25 @@ function resolveModelProviderManifestForWrite({
7558
7583
  }
7559
7584
  };
7560
7585
  }
7586
+ function toWireProvider(record) {
7587
+ return {
7588
+ name: record.name,
7589
+ manifest: redactModelProvider(record.manifest)
7590
+ };
7591
+ }
7561
7592
  function createModelProvidersRouter(deps) {
7562
7593
  const listHandler = async (c) => {
7563
7594
  const records = await deps.modelProviderStore.listProviders(TENANT_ID);
7564
- return c.json({ data: records.map((record) => redactModelProvider(record.manifest)) }, 200);
7595
+ return c.json({ data: records.map(toWireProvider) }, 200);
7565
7596
  };
7566
7597
  const createHandler = async (c) => {
7567
- const provider = c.req.valid("json");
7598
+ const body = c.req.valid("json");
7599
+ const provider = body.manifest;
7568
7600
  const name = modelProviderName(provider);
7569
7601
  try {
7570
7602
  const manifest = resolveModelProviderManifestForWrite({ incoming: provider, existing: void 0 });
7571
7603
  const record = await deps.modelProviderStore.createProvider({ tenant_id: TENANT_ID, name, manifest });
7572
- return c.json({ data: redactModelProvider(record.manifest) }, 200);
7604
+ return c.json({ data: toWireProvider(record) }, 201);
7573
7605
  } catch (error) {
7574
7606
  if (error instanceof MissingStoredSecretError) {
7575
7607
  return c.json({ error: { message: "API key is required" } }, 400);
@@ -7581,7 +7613,8 @@ function createModelProvidersRouter(deps) {
7581
7613
  }
7582
7614
  };
7583
7615
  const putHandler = async (c) => {
7584
- const provider = c.req.valid("json");
7616
+ const body = c.req.valid("json");
7617
+ const provider = body.manifest;
7585
7618
  const name = modelProviderName(provider);
7586
7619
  try {
7587
7620
  const record = await deps.withTransaction(async (transaction) => {
@@ -7595,7 +7628,7 @@ function createModelProvidersRouter(deps) {
7595
7628
  });
7596
7629
  return deps.modelProviderStore.upsertProvider({ tenant_id: TENANT_ID, name, manifest }, transaction);
7597
7630
  });
7598
- return c.json({ data: redactModelProvider(record.manifest) }, 200);
7631
+ return c.json({ data: toWireProvider(record) }, 200);
7599
7632
  } catch (error) {
7600
7633
  if (error instanceof MissingStoredSecretError) {
7601
7634
  return c.json({ error: { message: "API key is required" } }, 400);
@@ -7652,7 +7685,7 @@ var putSandboxProviderRoute = createRoute10({
7652
7685
  },
7653
7686
  responses: {
7654
7687
  200: {
7655
- content: { "application/json": { schema: PutSandboxProviderResponseSchema } },
7688
+ content: { "application/json": { schema: GetSandboxProviderResponseSchema } },
7656
7689
  description: "The saved sandbox provider."
7657
7690
  },
7658
7691
  400: {
@@ -7697,7 +7730,8 @@ function createSandboxProvidersRouter(deps) {
7697
7730
  );
7698
7731
  };
7699
7732
  const putHandler = async (c) => {
7700
- const incoming = c.req.valid("json");
7733
+ const body = c.req.valid("json");
7734
+ const incoming = body.manifest;
7701
7735
  const resolveManifest = (existing) => ({
7702
7736
  ...incoming,
7703
7737
  auth: {
@@ -7711,7 +7745,12 @@ function createSandboxProvidersRouter(deps) {
7711
7745
  const { manifest, status } = await deps.withTransaction(async (transaction) => {
7712
7746
  const locked = await deps.sandboxProviderStore.getSandboxProviderForUpdate(TENANT_ID, transaction);
7713
7747
  const resolved = resolveManifest(locked);
7714
- const provider = toDaytonaSandboxProvider({ manifest: resolved, tenant_id: TENANT_ID, logger: deps.logger });
7748
+ const provider = toDaytonaSandboxProvider({
7749
+ manifest: resolved,
7750
+ tenant_id: TENANT_ID,
7751
+ logger: deps.logger,
7752
+ ...locked ? { build_metadata: locked.build_metadata } : {}
7753
+ });
7715
7754
  const built = toSandboxStatus(
7716
7755
  await withTimeout(provider.buildImage(), BUILD_REQUEST_TIMEOUT_MS, "sandbox buildImage")
7717
7756
  );
@@ -7778,12 +7817,12 @@ var listConfiguredSkillsRoute = createRoute11({
7778
7817
  path: "/",
7779
7818
  tags: [SKILLS_TAG],
7780
7819
  summary: "List configured skills",
7781
- description: "All configured skills with full manifests (settings / admin projection).",
7820
+ description: "All configured skills with nested manifests (settings / admin projection).",
7782
7821
  "x-fern-sdk-group-name": ["settings", "skills"],
7783
7822
  "x-fern-sdk-method-name": "list",
7784
7823
  responses: {
7785
7824
  200: {
7786
- content: { "application/json": { schema: ListConfiguredSkillsResponseSchema } },
7825
+ content: { "application/json": { schema: ListSkillsResponseSchema } },
7787
7826
  description: "All configured skills."
7788
7827
  },
7789
7828
  401: {
@@ -7806,13 +7845,13 @@ var createSkillRoute = createRoute11({
7806
7845
  "x-fern-sdk-method-name": "create",
7807
7846
  request: {
7808
7847
  body: {
7809
- content: { "application/json": { schema: SkillManifestSchema } },
7848
+ content: { "application/json": { schema: CreateSkillRequestSchema } },
7810
7849
  required: true
7811
7850
  }
7812
7851
  },
7813
7852
  responses: {
7814
- 200: {
7815
- content: { "application/json": { schema: PutSkillResponseSchema } },
7853
+ 201: {
7854
+ content: { "application/json": { schema: GetSkillResponseSchema } },
7816
7855
  description: "The created skill."
7817
7856
  },
7818
7857
  400: {
@@ -7835,13 +7874,13 @@ var putSkillRoute = createRoute11({
7835
7874
  "x-fern-sdk-method-name": "upsert",
7836
7875
  request: {
7837
7876
  body: {
7838
- content: { "application/json": { schema: SkillManifestSchema } },
7877
+ content: { "application/json": { schema: PutSkillRequestSchema } },
7839
7878
  required: true
7840
7879
  }
7841
7880
  },
7842
7881
  responses: {
7843
7882
  200: {
7844
- content: { "application/json": { schema: PutSkillResponseSchema } },
7883
+ content: { "application/json": { schema: GetSkillResponseSchema } },
7845
7884
  description: "The saved skill."
7846
7885
  },
7847
7886
  400: {
@@ -7854,8 +7893,8 @@ var putSkillRoute = createRoute11({
7854
7893
  // src/apis/skills.ts
7855
7894
  function toConfiguredSkill(record) {
7856
7895
  return {
7857
- ...record.manifest,
7858
- name: record.name
7896
+ name: record.name,
7897
+ manifest: record.manifest
7859
7898
  };
7860
7899
  }
7861
7900
  function createSkillsRouter(deps) {
@@ -7864,14 +7903,15 @@ function createSkillsRouter(deps) {
7864
7903
  return c.json({ data: records.map(toConfiguredSkill) }, 200);
7865
7904
  };
7866
7905
  const createHandler = async (c) => {
7867
- const manifest = c.req.valid("json");
7906
+ const body = c.req.valid("json");
7907
+ const manifest = body.manifest;
7868
7908
  try {
7869
7909
  const record = await deps.skillStore.createSkill({
7870
7910
  tenant_id: TENANT_ID,
7871
7911
  name: manifest.name,
7872
7912
  manifest
7873
7913
  });
7874
- return c.json({ data: toConfiguredSkill(record) }, 200);
7914
+ return c.json({ data: toConfiguredSkill(record) }, 201);
7875
7915
  } catch (error) {
7876
7916
  if (error instanceof SkillNameConflictError) {
7877
7917
  return c.json({ error: { message: error.message } }, 409);
@@ -7880,7 +7920,8 @@ function createSkillsRouter(deps) {
7880
7920
  }
7881
7921
  };
7882
7922
  const putHandler = async (c) => {
7883
- const manifest = c.req.valid("json");
7923
+ const body = c.req.valid("json");
7924
+ const manifest = body.manifest;
7884
7925
  const record = await deps.skillStore.upsertSkill({
7885
7926
  tenant_id: TENANT_ID,
7886
7927
  name: manifest.name,
@@ -9217,7 +9258,7 @@ function loadYamlAtPath(filePath, schema) {
9217
9258
  }
9218
9259
 
9219
9260
  // src/catalog/mcpCatalog.gen.ts
9220
- var shippedMcpCatalogYaml = "# Shipped MCP catalog: server presets offered by\n# GET /api/v1/catalog/mcp-servers for the UI to copy into\n# PUT /api/v1/settings/mcp-servers bodies. Discovery-only \u2014 never executed against.\nmcp_servers:\n - type: remote\n name: linear\n logo: https://assets.production.truefoundry.com/linear.svg\n url: https://mcp.linear.app/mcp\n auth:\n type: dcr\n - type: remote\n name: notion\n logo: https://assets.production.truefoundry.com/notion.svg\n url: https://mcp.notion.com/mcp\n auth:\n type: dcr\n - type: remote\n name: sentry\n logo: https://assets.production.truefoundry.com/sentry.svg\n url: https://mcp.sentry.dev/mcp\n auth:\n type: dcr\n - type: remote\n name: deepwiki\n logo: https://assets.production.truefoundry.com/deepwiki.png\n url: https://mcp.deepwiki.com/mcp\n - type: remote\n name: exa\n logo: https://assets.production.truefoundry.com/exa.svg\n url: https://mcp.exa.ai/mcp\n - type: remote\n name: parallel-web\n logo: https://assets.production.truefoundry.com/parallel-web.svg\n url: https://search.parallel.ai/mcp\n - type: remote\n name: github\n logo: https://assets.production.truefoundry.com/github.svg\n url: https://api.githubcopilot.com/mcp/\n auth:\n type: header\n headers:\n Authorization: Bearer YOUR_GITHUB_PAT\n - type: remote\n name: tavily\n logo: https://assets.production.truefoundry.com/tavily.svg\n url: https://mcp.tavily.com/mcp\n auth:\n type: header\n headers:\n Authorization: Bearer YOUR_TAVILY_API_KEY\n - type: remote\n name: bright-data\n logo: https://assets.production.truefoundry.com/bright-data.png\n url: https://mcp.brightdata.com/mcp\n auth:\n type: header\n headers:\n Authorization: Bearer YOUR_BRIGHT_DATA_API_TOKEN\n - type: remote\n name: supabase\n logo: https://assets.production.truefoundry.com/supabase.svg\n url: https://mcp.supabase.com/mcp\n auth:\n type: dcr\n - type: remote\n name: stripe\n logo: https://assets.production.truefoundry.com/stripe.svg\n url: https://mcp.stripe.com\n auth:\n type: dcr\n - type: remote\n name: confluence\n logo: https://assets.production.truefoundry.com/confluence.svg\n url: https://mcp.atlassian.com/v1/mcp\n auth:\n type: dcr\n - type: remote\n name: jira\n logo: https://assets.production.truefoundry.com/jira.png\n url: https://mcp.atlassian.com/v1/mcp\n auth:\n type: dcr\n";
9261
+ var shippedMcpCatalogYaml = "# Shipped MCP catalog: server presets offered by\n# GET /api/v1/catalog/mcp-servers for the UI to copy into\n# PUT /api/v1/settings/mcp-servers bodies. Discovery-only \u2014 never executed against.\nmcp_servers:\n - type: remote\n name: linear\n logo: https://assets.production.truefoundry.com/linear.svg\n url: https://mcp.linear.app/mcp\n description: Search, read, and create Linear issues.\n auth:\n type: dcr\n - type: remote\n name: notion\n logo: https://assets.production.truefoundry.com/notion.svg\n url: https://mcp.notion.com/mcp\n description: Search pages, read content, query databases, create pages.\n auth:\n type: dcr\n - type: remote\n name: sentry\n logo: https://assets.production.truefoundry.com/sentry.svg\n url: https://mcp.sentry.dev/mcp\n description: Search errors, read stack traces, and check releases.\n auth:\n type: dcr\n - type: remote\n name: deepwiki\n logo: https://assets.production.truefoundry.com/deepwiki.png\n url: https://mcp.deepwiki.com/mcp\n description: Read documentation and ask questions about any public GitHub repository.\n - type: remote\n name: exa\n logo: https://assets.production.truefoundry.com/exa.svg\n url: https://mcp.exa.ai/mcp\n description: Search the web, fetch page contents, and find similar pages.\n - type: remote\n name: parallel-web\n logo: https://assets.production.truefoundry.com/parallel-web.svg\n url: https://search.parallel.ai/mcp\n description: Search the web and get ranked results with extracted content.\n - type: remote\n name: github\n logo: https://assets.production.truefoundry.com/github.svg\n url: https://api.githubcopilot.com/mcp/\n description: Work with issues, pull requests, repository files, and CI status.\n auth:\n type: header\n headers:\n Authorization: Bearer YOUR_GITHUB_PAT\n - type: remote\n name: tavily\n logo: https://assets.production.truefoundry.com/tavily.svg\n url: https://mcp.tavily.com/mcp\n description: Search the web, extract page content, and crawl sites.\n auth:\n type: header\n headers:\n Authorization: Bearer YOUR_TAVILY_API_KEY\n - type: remote\n name: bright-data\n logo: https://assets.production.truefoundry.com/bright-data.png\n url: https://mcp.brightdata.com/mcp\n description: Search the web and scrape pages, including sites behind bot protection.\n auth:\n type: header\n headers:\n Authorization: Bearer YOUR_BRIGHT_DATA_API_TOKEN\n - type: remote\n name: supabase\n logo: https://assets.production.truefoundry.com/supabase.svg\n url: https://mcp.supabase.com/mcp\n description: Run SQL queries, manage tables, and inspect Supabase projects.\n auth:\n type: dcr\n - type: remote\n name: stripe\n logo: https://assets.production.truefoundry.com/stripe.svg\n url: https://mcp.stripe.com\n description: Create and manage customers, payments, invoices, and subscriptions.\n auth:\n type: dcr\n - type: remote\n name: confluence\n logo: https://assets.production.truefoundry.com/confluence.svg\n url: https://mcp.atlassian.com/v1/mcp\n description: Search spaces, read pages, and create or update content.\n auth:\n type: dcr\n - type: remote\n name: jira\n logo: https://assets.production.truefoundry.com/jira.png\n url: https://mcp.atlassian.com/v1/mcp\n description: Search, read, create, and update Jira issues.\n auth:\n type: dcr\n - type: remote\n name: posthog\n logo: https://assets.production.truefoundry.com/posthog.svg\n url: https://mcp.posthog.com/mcp\n description: Query product analytics, run SQL, and manage feature flags.\n auth:\n type: dcr\n";
9221
9262
 
9222
9263
  // src/catalog/McpCatalog.ts
9223
9264
  var McpCatalog = class _McpCatalog {