agent-relay 6.0.2 → 6.0.4

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 (173) hide show
  1. package/README.md +10 -3
  2. package/dist/index.cjs +2024 -962
  3. package/dist/src/cli/commands/cloud.d.ts.map +1 -1
  4. package/dist/src/cli/commands/cloud.js +17 -144
  5. package/dist/src/cli/commands/cloud.js.map +1 -1
  6. package/dist/src/cli/commands/setup.d.ts +2 -39
  7. package/dist/src/cli/commands/setup.d.ts.map +1 -1
  8. package/dist/src/cli/commands/setup.js +4 -333
  9. package/dist/src/cli/commands/setup.js.map +1 -1
  10. package/dist/src/cli/lib/auth-ssh.d.ts +2 -33
  11. package/dist/src/cli/lib/auth-ssh.d.ts.map +1 -1
  12. package/dist/src/cli/lib/auth-ssh.js +3 -39
  13. package/dist/src/cli/lib/auth-ssh.js.map +1 -1
  14. package/dist/src/cli/lib/ssh-interactive.d.ts +4 -66
  15. package/dist/src/cli/lib/ssh-interactive.d.ts.map +1 -1
  16. package/dist/src/cli/lib/ssh-interactive.js +4 -436
  17. package/dist/src/cli/lib/ssh-interactive.js.map +1 -1
  18. package/node_modules/@relaycast/sdk/node_modules/zod/README.md +1 -1
  19. package/node_modules/@relaycast/sdk/node_modules/zod/locales/package.json +2 -1
  20. package/node_modules/@relaycast/sdk/node_modules/zod/mini/package.json +2 -1
  21. package/node_modules/@relaycast/sdk/node_modules/zod/package.json +1 -1
  22. package/node_modules/@relaycast/sdk/node_modules/zod/src/v3/tests/all-errors.test.ts +3 -3
  23. package/node_modules/@relaycast/sdk/node_modules/zod/src/v3/tests/object.test.ts +5 -5
  24. package/node_modules/@relaycast/sdk/node_modules/zod/src/v3/tests/partials.test.ts +3 -3
  25. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/errors.ts +2 -2
  26. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/external.ts +1 -0
  27. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/from-json-schema.ts +39 -23
  28. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/parse.ts +6 -6
  29. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/schemas.ts +389 -148
  30. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/tests/catch.test.ts +4 -2
  31. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/tests/codec.test.ts +142 -1
  32. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/tests/continuability.test.ts +1 -1
  33. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/tests/datetime.test.ts +1 -1
  34. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/tests/default.test.ts +44 -0
  35. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/tests/detached-methods.test.ts +197 -0
  36. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +31 -1
  37. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +214 -2
  38. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +161 -0
  39. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/tests/function.test.ts +6 -6
  40. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/tests/global-config.test.ts +39 -0
  41. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/tests/index.test.ts +2 -2
  42. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/tests/jitless-allows-eval.test.ts +46 -0
  43. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/tests/locales_ka.test.ts +29 -0
  44. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/tests/locales_ro.test.ts +24 -0
  45. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/tests/number.test.ts +55 -0
  46. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/tests/object.test.ts +83 -6
  47. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/tests/optional.test.ts +114 -4
  48. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/tests/partial.test.ts +28 -2
  49. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/tests/prefault.test.ts +1 -1
  50. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/tests/record.test.ts +85 -0
  51. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +49 -0
  52. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/tests/refine.test.ts +63 -0
  53. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/tests/string.test.ts +50 -1
  54. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +4 -4
  55. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +128 -14
  56. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/tests/transform.test.ts +17 -0
  57. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/tests/tuple.test.ts +315 -2
  58. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/classic/tests/union.test.ts +54 -0
  59. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/core/api.ts +25 -2
  60. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/core/checks.ts +1 -1
  61. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/core/core.ts +17 -2
  62. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/core/errors.ts +31 -24
  63. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/core/json-schema-processors.ts +15 -17
  64. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/core/parse.ts +7 -7
  65. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/core/regexes.ts +8 -1
  66. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/core/schemas.ts +218 -66
  67. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/core/tests/locales/el.test.ts +215 -0
  68. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/core/tests/locales/fr.test.ts +72 -0
  69. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/core/tests/locales/hr.test.ts +163 -0
  70. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/core/tests/locales/uz.test.ts +22 -0
  71. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/core/tests/record-constructor.test.ts +58 -0
  72. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/core/to-json-schema.ts +9 -1
  73. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/core/util.ts +52 -35
  74. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/core/versions.ts +2 -2
  75. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/locales/el.ts +121 -0
  76. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/locales/en.ts +4 -0
  77. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/locales/fr.ts +24 -8
  78. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/locales/hr.ts +131 -0
  79. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/locales/index.ts +3 -0
  80. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/locales/it.ts +1 -1
  81. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/locales/ka.ts +8 -8
  82. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/locales/ro.ts +129 -0
  83. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/locales/uz.ts +1 -0
  84. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/mini/external.ts +1 -0
  85. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/mini/schemas.ts +55 -24
  86. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/mini/tests/codec.test.ts +19 -0
  87. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/mini/tests/index.test.ts +27 -2
  88. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/mini/tests/object.test.ts +9 -9
  89. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +51 -1
  90. package/node_modules/@relaycast/sdk/node_modules/zod/src/v4/mini/tests/string.test.ts +5 -0
  91. package/node_modules/@relaycast/sdk/node_modules/zod/v3/package.json +2 -1
  92. package/node_modules/@relaycast/sdk/node_modules/zod/v4/classic/errors.js +2 -2
  93. package/node_modules/@relaycast/sdk/node_modules/zod/v4/classic/external.d.cts +1 -0
  94. package/node_modules/@relaycast/sdk/node_modules/zod/v4/classic/external.d.ts +1 -0
  95. package/node_modules/@relaycast/sdk/node_modules/zod/v4/classic/from-json-schema.cjs +31 -16
  96. package/node_modules/@relaycast/sdk/node_modules/zod/v4/classic/from-json-schema.js +31 -16
  97. package/node_modules/@relaycast/sdk/node_modules/zod/v4/classic/package.json +2 -1
  98. package/node_modules/@relaycast/sdk/node_modules/zod/v4/classic/schemas.cjs +346 -117
  99. package/node_modules/@relaycast/sdk/node_modules/zod/v4/classic/schemas.d.cts +34 -12
  100. package/node_modules/@relaycast/sdk/node_modules/zod/v4/classic/schemas.d.ts +34 -12
  101. package/node_modules/@relaycast/sdk/node_modules/zod/v4/classic/schemas.js +345 -117
  102. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/api.cjs +7 -2
  103. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/api.d.cts +20 -1
  104. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/api.d.ts +20 -1
  105. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/api.js +7 -2
  106. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/checks.d.cts +1 -1
  107. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/checks.d.ts +1 -1
  108. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/core.cjs +3 -1
  109. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/core.js +4 -2
  110. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/errors.cjs +26 -23
  111. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/errors.d.cts +1 -0
  112. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/errors.d.ts +1 -0
  113. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/errors.js +26 -23
  114. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/json-schema-processors.cjs +14 -19
  115. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/json-schema-processors.js +14 -19
  116. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/package.json +2 -1
  117. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/parse.cjs +7 -7
  118. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/parse.js +7 -7
  119. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/regexes.cjs +9 -3
  120. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/regexes.d.cts +6 -0
  121. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/regexes.d.ts +6 -0
  122. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/regexes.js +7 -1
  123. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/schemas.cjs +196 -59
  124. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/schemas.d.cts +21 -1
  125. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/schemas.d.ts +21 -1
  126. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/schemas.js +196 -59
  127. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/to-json-schema.cjs +10 -1
  128. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/to-json-schema.js +10 -1
  129. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/util.cjs +54 -30
  130. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/util.d.cts +1 -0
  131. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/util.d.ts +1 -0
  132. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/util.js +55 -32
  133. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/versions.cjs +2 -2
  134. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/versions.d.cts +1 -1
  135. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/versions.d.ts +1 -1
  136. package/node_modules/@relaycast/sdk/node_modules/zod/v4/core/versions.js +2 -2
  137. package/node_modules/@relaycast/sdk/node_modules/zod/v4/locales/el.cjs +136 -0
  138. package/node_modules/@relaycast/sdk/node_modules/zod/v4/locales/el.d.cts +5 -0
  139. package/node_modules/@relaycast/sdk/node_modules/zod/v4/locales/el.d.ts +4 -0
  140. package/node_modules/@relaycast/sdk/node_modules/zod/v4/locales/el.js +109 -0
  141. package/node_modules/@relaycast/sdk/node_modules/zod/v4/locales/en.cjs +4 -0
  142. package/node_modules/@relaycast/sdk/node_modules/zod/v4/locales/en.js +4 -0
  143. package/node_modules/@relaycast/sdk/node_modules/zod/v4/locales/fr.cjs +24 -7
  144. package/node_modules/@relaycast/sdk/node_modules/zod/v4/locales/fr.js +24 -7
  145. package/node_modules/@relaycast/sdk/node_modules/zod/v4/locales/hr.cjs +149 -0
  146. package/node_modules/@relaycast/sdk/node_modules/zod/v4/locales/hr.d.cts +5 -0
  147. package/node_modules/@relaycast/sdk/node_modules/zod/v4/locales/hr.d.ts +4 -0
  148. package/node_modules/@relaycast/sdk/node_modules/zod/v4/locales/hr.js +122 -0
  149. package/node_modules/@relaycast/sdk/node_modules/zod/v4/locales/index.cjs +8 -1
  150. package/node_modules/@relaycast/sdk/node_modules/zod/v4/locales/index.d.cts +3 -0
  151. package/node_modules/@relaycast/sdk/node_modules/zod/v4/locales/index.d.ts +3 -0
  152. package/node_modules/@relaycast/sdk/node_modules/zod/v4/locales/index.js +3 -0
  153. package/node_modules/@relaycast/sdk/node_modules/zod/v4/locales/it.cjs +1 -1
  154. package/node_modules/@relaycast/sdk/node_modules/zod/v4/locales/it.js +1 -1
  155. package/node_modules/@relaycast/sdk/node_modules/zod/v4/locales/ka.cjs +8 -8
  156. package/node_modules/@relaycast/sdk/node_modules/zod/v4/locales/ka.js +8 -8
  157. package/node_modules/@relaycast/sdk/node_modules/zod/v4/locales/package.json +2 -1
  158. package/node_modules/@relaycast/sdk/node_modules/zod/v4/locales/ro.cjs +146 -0
  159. package/node_modules/@relaycast/sdk/node_modules/zod/v4/locales/ro.d.cts +5 -0
  160. package/node_modules/@relaycast/sdk/node_modules/zod/v4/locales/ro.d.ts +4 -0
  161. package/node_modules/@relaycast/sdk/node_modules/zod/v4/locales/ro.js +119 -0
  162. package/node_modules/@relaycast/sdk/node_modules/zod/v4/locales/uz.cjs +1 -0
  163. package/node_modules/@relaycast/sdk/node_modules/zod/v4/locales/uz.js +1 -0
  164. package/node_modules/@relaycast/sdk/node_modules/zod/v4/mini/external.d.cts +1 -0
  165. package/node_modules/@relaycast/sdk/node_modules/zod/v4/mini/external.d.ts +1 -0
  166. package/node_modules/@relaycast/sdk/node_modules/zod/v4/mini/package.json +2 -1
  167. package/node_modules/@relaycast/sdk/node_modules/zod/v4/mini/schemas.cjs +41 -4
  168. package/node_modules/@relaycast/sdk/node_modules/zod/v4/mini/schemas.d.cts +27 -9
  169. package/node_modules/@relaycast/sdk/node_modules/zod/v4/mini/schemas.d.ts +27 -9
  170. package/node_modules/@relaycast/sdk/node_modules/zod/v4/mini/schemas.js +40 -4
  171. package/node_modules/@relaycast/sdk/node_modules/zod/v4/package.json +2 -1
  172. package/node_modules/@relaycast/sdk/node_modules/zod/v4-mini/package.json +2 -1
  173. package/package.json +10 -10
@@ -35,7 +35,7 @@ const z = {
35
35
  iso: _iso,
36
36
  };
37
37
  // Keys that are recognized and handled by the conversion logic
38
- const RECOGNIZED_KEYS = new Set([
38
+ const RECOGNIZED_KEYS = /*@__PURE__*/ new Set([
39
39
  // Schema identification
40
40
  "$schema",
41
41
  "$ref",
@@ -511,13 +511,6 @@ function convertBaseSchema(schema, ctx) {
511
511
  default:
512
512
  throw new Error(`Unsupported type: ${type}`);
513
513
  }
514
- // Apply metadata
515
- if (schema.description) {
516
- zodSchema = zodSchema.describe(schema.description);
517
- }
518
- if (schema.default !== undefined) {
519
- zodSchema = zodSchema.default(schema.default);
520
- }
521
514
  return zodSchema;
522
515
  }
523
516
  function convertSchema(schema, ctx) {
@@ -562,23 +555,28 @@ function convertSchema(schema, ctx) {
562
555
  if (schema.readOnly === true) {
563
556
  baseSchema = z.readonly(baseSchema);
564
557
  }
565
- // Collect metadata: core schema keywords and unrecognized keys
558
+ // Apply `default` so it wraps the fully-composed schema. This ensures
559
+ // `parse(undefined) -> default` works regardless of which branch of
560
+ // `convertBaseSchema` produced the inner schema (enum/const/not/typed/etc.).
561
+ if (schema.default !== undefined) {
562
+ baseSchema = baseSchema.default(schema.default);
563
+ }
564
+ // Collect non-description annotation metadata into the user-supplied
565
+ // registry. Description is handled separately below via `.describe()` to
566
+ // preserve the contract that `schema.description` reads from globalRegistry.
566
567
  const extraMeta = {};
567
- // Core schema keywords that should be captured as metadata
568
568
  const coreMetadataKeys = ["$id", "id", "$comment", "$anchor", "$vocabulary", "$dynamicRef", "$dynamicAnchor"];
569
569
  for (const key of coreMetadataKeys) {
570
570
  if (key in schema) {
571
571
  extraMeta[key] = schema[key];
572
572
  }
573
573
  }
574
- // Content keywords - store as metadata
575
574
  const contentMetadataKeys = ["contentEncoding", "contentMediaType", "contentSchema"];
576
575
  for (const key of contentMetadataKeys) {
577
576
  if (key in schema) {
578
577
  extraMeta[key] = schema[key];
579
578
  }
580
579
  }
581
- // Unrecognized keys (custom metadata)
582
580
  for (const key of Object.keys(schema)) {
583
581
  if (!RECOGNIZED_KEYS.has(key)) {
584
582
  extraMeta[key] = schema[key];
@@ -587,6 +585,12 @@ function convertSchema(schema, ctx) {
587
585
  if (Object.keys(extraMeta).length > 0) {
588
586
  ctx.registry.add(baseSchema, extraMeta);
589
587
  }
588
+ // Apply description last. `.describe()` clones the schema and sets
589
+ // `_zod.parent` on the clone, so registry lookups on the returned reference
590
+ // still resolve `extraMeta` via parent inheritance.
591
+ if (schema.description) {
592
+ baseSchema = baseSchema.describe(schema.description);
593
+ }
590
594
  return baseSchema;
591
595
  }
592
596
  /**
@@ -596,15 +600,26 @@ function fromJSONSchema(schema, params) {
596
600
  if (typeof schema === "boolean") {
597
601
  return schema ? z.any() : z.never();
598
602
  }
599
- const version = detectVersion(schema, params?.defaultTarget);
600
- const defs = (schema.$defs || schema.definitions || {});
603
+ // Normalize input via a JSON round-trip. This guarantees the converter
604
+ // walks a plain, finite, JSON-valid object graph: cyclic inputs fail here,
605
+ // getter/Proxy-based properties are materialized into static values, and
606
+ // class instances collapse to plain objects.
607
+ let normalized;
608
+ try {
609
+ normalized = JSON.parse(JSON.stringify(schema));
610
+ }
611
+ catch {
612
+ throw new Error("fromJSONSchema input is not valid JSON (possibly cyclic); use $defs/$ref for recursive schemas");
613
+ }
614
+ const version = detectVersion(normalized, params?.defaultTarget);
615
+ const defs = (normalized.$defs || normalized.definitions || {});
601
616
  const ctx = {
602
617
  version,
603
618
  defs,
604
619
  refs: new Map(),
605
620
  processing: new Set(),
606
- rootSchema: schema,
621
+ rootSchema: normalized,
607
622
  registry: params?.registry ?? registries_js_1.globalRegistry,
608
623
  };
609
- return convertSchema(schema, ctx);
624
+ return convertSchema(normalized, ctx);
610
625
  }
@@ -9,7 +9,7 @@ const z = {
9
9
  iso: _iso,
10
10
  };
11
11
  // Keys that are recognized and handled by the conversion logic
12
- const RECOGNIZED_KEYS = new Set([
12
+ const RECOGNIZED_KEYS = /*@__PURE__*/ new Set([
13
13
  // Schema identification
14
14
  "$schema",
15
15
  "$ref",
@@ -485,13 +485,6 @@ function convertBaseSchema(schema, ctx) {
485
485
  default:
486
486
  throw new Error(`Unsupported type: ${type}`);
487
487
  }
488
- // Apply metadata
489
- if (schema.description) {
490
- zodSchema = zodSchema.describe(schema.description);
491
- }
492
- if (schema.default !== undefined) {
493
- zodSchema = zodSchema.default(schema.default);
494
- }
495
488
  return zodSchema;
496
489
  }
497
490
  function convertSchema(schema, ctx) {
@@ -536,23 +529,28 @@ function convertSchema(schema, ctx) {
536
529
  if (schema.readOnly === true) {
537
530
  baseSchema = z.readonly(baseSchema);
538
531
  }
539
- // Collect metadata: core schema keywords and unrecognized keys
532
+ // Apply `default` so it wraps the fully-composed schema. This ensures
533
+ // `parse(undefined) -> default` works regardless of which branch of
534
+ // `convertBaseSchema` produced the inner schema (enum/const/not/typed/etc.).
535
+ if (schema.default !== undefined) {
536
+ baseSchema = baseSchema.default(schema.default);
537
+ }
538
+ // Collect non-description annotation metadata into the user-supplied
539
+ // registry. Description is handled separately below via `.describe()` to
540
+ // preserve the contract that `schema.description` reads from globalRegistry.
540
541
  const extraMeta = {};
541
- // Core schema keywords that should be captured as metadata
542
542
  const coreMetadataKeys = ["$id", "id", "$comment", "$anchor", "$vocabulary", "$dynamicRef", "$dynamicAnchor"];
543
543
  for (const key of coreMetadataKeys) {
544
544
  if (key in schema) {
545
545
  extraMeta[key] = schema[key];
546
546
  }
547
547
  }
548
- // Content keywords - store as metadata
549
548
  const contentMetadataKeys = ["contentEncoding", "contentMediaType", "contentSchema"];
550
549
  for (const key of contentMetadataKeys) {
551
550
  if (key in schema) {
552
551
  extraMeta[key] = schema[key];
553
552
  }
554
553
  }
555
- // Unrecognized keys (custom metadata)
556
554
  for (const key of Object.keys(schema)) {
557
555
  if (!RECOGNIZED_KEYS.has(key)) {
558
556
  extraMeta[key] = schema[key];
@@ -561,6 +559,12 @@ function convertSchema(schema, ctx) {
561
559
  if (Object.keys(extraMeta).length > 0) {
562
560
  ctx.registry.add(baseSchema, extraMeta);
563
561
  }
562
+ // Apply description last. `.describe()` clones the schema and sets
563
+ // `_zod.parent` on the clone, so registry lookups on the returned reference
564
+ // still resolve `extraMeta` via parent inheritance.
565
+ if (schema.description) {
566
+ baseSchema = baseSchema.describe(schema.description);
567
+ }
564
568
  return baseSchema;
565
569
  }
566
570
  /**
@@ -570,15 +574,26 @@ export function fromJSONSchema(schema, params) {
570
574
  if (typeof schema === "boolean") {
571
575
  return schema ? z.any() : z.never();
572
576
  }
573
- const version = detectVersion(schema, params?.defaultTarget);
574
- const defs = (schema.$defs || schema.definitions || {});
577
+ // Normalize input via a JSON round-trip. This guarantees the converter
578
+ // walks a plain, finite, JSON-valid object graph: cyclic inputs fail here,
579
+ // getter/Proxy-based properties are materialized into static values, and
580
+ // class instances collapse to plain objects.
581
+ let normalized;
582
+ try {
583
+ normalized = JSON.parse(JSON.stringify(schema));
584
+ }
585
+ catch {
586
+ throw new Error("fromJSONSchema input is not valid JSON (possibly cyclic); use $defs/$ref for recursive schemas");
587
+ }
588
+ const version = detectVersion(normalized, params?.defaultTarget);
589
+ const defs = (normalized.$defs || normalized.definitions || {});
575
590
  const ctx = {
576
591
  version,
577
592
  defs,
578
593
  refs: new Map(),
579
594
  processing: new Set(),
580
- rootSchema: schema,
595
+ rootSchema: normalized,
581
596
  registry: params?.registry ?? globalRegistry,
582
597
  };
583
- return convertSchema(schema, ctx);
598
+ return convertSchema(normalized, ctx);
584
599
  }
@@ -2,5 +2,6 @@
2
2
  "type": "module",
3
3
  "main": "./index.cjs",
4
4
  "module": "./index.js",
5
- "types": "./index.d.cts"
5
+ "types": "./index.d.cts",
6
+ "sideEffects": false
6
7
  }