@tambo-ai/react 0.66.0 → 0.66.2

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 (109) hide show
  1. package/dist/hooks/use-current-message.d.ts +2 -0
  2. package/dist/hooks/use-current-message.d.ts.map +1 -1
  3. package/dist/hooks/use-current-message.js +1 -0
  4. package/dist/hooks/use-current-message.js.map +1 -1
  5. package/dist/hooks/use-current-message.test.js +5 -0
  6. package/dist/hooks/use-current-message.test.js.map +1 -1
  7. package/dist/model/component-metadata.d.ts +2 -2
  8. package/dist/model/component-metadata.d.ts.map +1 -1
  9. package/dist/model/component-metadata.js.map +1 -1
  10. package/dist/providers/tambo-interactable-provider-partial-updates.test.js +87 -87
  11. package/dist/providers/tambo-interactable-provider-partial-updates.test.js.map +1 -1
  12. package/dist/providers/tambo-interactable-provider.d.ts.map +1 -1
  13. package/dist/providers/tambo-interactable-provider.js +46 -40
  14. package/dist/providers/tambo-interactable-provider.js.map +1 -1
  15. package/dist/providers/tambo-interactables-additional-context-edge-cases.test.js +8 -8
  16. package/dist/providers/tambo-interactables-additional-context-edge-cases.test.js.map +1 -1
  17. package/dist/providers/tambo-interactables-additional-context.test.js +10 -10
  18. package/dist/providers/tambo-interactables-additional-context.test.js.map +1 -1
  19. package/dist/providers/tambo-registry-provider.test.js +28 -18
  20. package/dist/providers/tambo-registry-provider.test.js.map +1 -1
  21. package/dist/providers/tambo-registry-schema-compat.test.js +57 -28
  22. package/dist/providers/tambo-registry-schema-compat.test.js.map +1 -1
  23. package/dist/providers/tambo-thread-provider.test.js +21 -19
  24. package/dist/providers/tambo-thread-provider.test.js.map +1 -1
  25. package/dist/schema/alias.d.ts +3 -0
  26. package/dist/schema/alias.d.ts.map +1 -0
  27. package/dist/schema/alias.js +6 -0
  28. package/dist/schema/alias.js.map +1 -0
  29. package/dist/schema/json-schema.js +29 -29
  30. package/dist/schema/json-schema.js.map +1 -1
  31. package/dist/schema/schema.d.ts.map +1 -1
  32. package/dist/schema/schema.js +27 -19
  33. package/dist/schema/schema.js.map +1 -1
  34. package/dist/schema/schema.test.js +291 -3
  35. package/dist/schema/schema.test.js.map +1 -1
  36. package/dist/schema/standard-schema.js +8 -8
  37. package/dist/schema/standard-schema.js.map +1 -1
  38. package/dist/schema/validate.test.js +31 -31
  39. package/dist/schema/validate.test.js.map +1 -1
  40. package/dist/schema/zod.d.ts +5 -5
  41. package/dist/schema/zod.d.ts.map +1 -1
  42. package/dist/schema/zod.js +45 -32
  43. package/dist/schema/zod.js.map +1 -1
  44. package/dist/util/registry-validators.d.ts.map +1 -1
  45. package/dist/util/registry-validators.js +40 -0
  46. package/dist/util/registry-validators.js.map +1 -1
  47. package/dist/util/registry-validators.test.js +69 -0
  48. package/dist/util/registry-validators.test.js.map +1 -1
  49. package/dist/util/registry.d.ts +1 -5
  50. package/dist/util/registry.d.ts.map +1 -1
  51. package/dist/util/registry.js +1 -5
  52. package/dist/util/registry.js.map +1 -1
  53. package/dist/util/registry.test.js +80 -67
  54. package/dist/util/registry.test.js.map +1 -1
  55. package/esm/hooks/use-current-message.d.ts +2 -0
  56. package/esm/hooks/use-current-message.d.ts.map +1 -1
  57. package/esm/hooks/use-current-message.js +1 -0
  58. package/esm/hooks/use-current-message.js.map +1 -1
  59. package/esm/hooks/use-current-message.test.js +5 -0
  60. package/esm/hooks/use-current-message.test.js.map +1 -1
  61. package/esm/model/component-metadata.d.ts +2 -2
  62. package/esm/model/component-metadata.d.ts.map +1 -1
  63. package/esm/model/component-metadata.js.map +1 -1
  64. package/esm/providers/tambo-interactable-provider-partial-updates.test.js +1 -1
  65. package/esm/providers/tambo-interactable-provider-partial-updates.test.js.map +1 -1
  66. package/esm/providers/tambo-interactable-provider.d.ts.map +1 -1
  67. package/esm/providers/tambo-interactable-provider.js +17 -11
  68. package/esm/providers/tambo-interactable-provider.js.map +1 -1
  69. package/esm/providers/tambo-interactables-additional-context-edge-cases.test.js +1 -1
  70. package/esm/providers/tambo-interactables-additional-context-edge-cases.test.js.map +1 -1
  71. package/esm/providers/tambo-interactables-additional-context.test.js +1 -1
  72. package/esm/providers/tambo-interactables-additional-context.test.js.map +1 -1
  73. package/esm/providers/tambo-registry-provider.test.js +16 -6
  74. package/esm/providers/tambo-registry-provider.test.js.map +1 -1
  75. package/esm/providers/tambo-registry-schema-compat.test.js +57 -28
  76. package/esm/providers/tambo-registry-schema-compat.test.js.map +1 -1
  77. package/esm/providers/tambo-thread-provider.test.js +8 -6
  78. package/esm/providers/tambo-thread-provider.test.js.map +1 -1
  79. package/esm/schema/alias.d.ts +3 -0
  80. package/esm/schema/alias.d.ts.map +1 -0
  81. package/esm/schema/alias.js +13 -0
  82. package/esm/schema/alias.js.map +1 -0
  83. package/esm/schema/json-schema.js +1 -1
  84. package/esm/schema/json-schema.js.map +1 -1
  85. package/esm/schema/schema.d.ts.map +1 -1
  86. package/esm/schema/schema.js +27 -19
  87. package/esm/schema/schema.js.map +1 -1
  88. package/esm/schema/schema.test.js +258 -3
  89. package/esm/schema/schema.test.js.map +1 -1
  90. package/esm/schema/standard-schema.js +1 -1
  91. package/esm/schema/standard-schema.js.map +1 -1
  92. package/esm/schema/validate.test.js +1 -1
  93. package/esm/schema/validate.test.js.map +1 -1
  94. package/esm/schema/zod.d.ts +5 -5
  95. package/esm/schema/zod.d.ts.map +1 -1
  96. package/esm/schema/zod.js +45 -32
  97. package/esm/schema/zod.js.map +1 -1
  98. package/esm/util/registry-validators.d.ts.map +1 -1
  99. package/esm/util/registry-validators.js +40 -0
  100. package/esm/util/registry-validators.js.map +1 -1
  101. package/esm/util/registry-validators.test.js +69 -0
  102. package/esm/util/registry-validators.test.js.map +1 -1
  103. package/esm/util/registry.d.ts +1 -5
  104. package/esm/util/registry.d.ts.map +1 -1
  105. package/esm/util/registry.js +1 -5
  106. package/esm/util/registry.js.map +1 -1
  107. package/esm/util/registry.test.js +80 -67
  108. package/esm/util/registry.test.js.map +1 -1
  109. package/package.json +1 -2
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.z = void 0;
4
+ const zodInternalAlias_1 = require("zodInternalAlias");
5
+ Object.defineProperty(exports, "z", { enumerable: true, get: function () { return zodInternalAlias_1.z; } });
6
+ //# sourceMappingURL=alias.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alias.js","sourceRoot":"","sources":["../../src/schema/alias.ts"],"names":[],"mappings":";;;AAAA,uDAAqC;AAa5B,kFAbA,oBAAC,OAaA","sourcesContent":["import { z } from \"zodInternalAlias\";\n\n/*\n * # Why \"zodInternalAlias\"?\n *\n * We use a custom alias for the zod package because we want to use zod for\n * schema parsing/validation, but we also want to use the _types_ from the\n * user-installed version of zod which could be either 3 or 4. By using an\n * alias, we can ensure that these schemas use our version of zod (v4.1), but\n * the user can use their own version elsewhere in their project without type\n * conflicts and sometimes circular dependencies.\n */\n\nexport { z };\n"]}
@@ -3,39 +3,39 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.looksLikeJSONSchema = looksLikeJSONSchema;
4
4
  exports.isJsonSchemaTuple = isJsonSchemaTuple;
5
5
  exports.getJsonSchemaTupleItems = getJsonSchemaTupleItems;
6
- const zodInternalAlias_1 = require("zodInternalAlias");
7
- const jsonSchemaType = zodInternalAlias_1.z.union([
8
- zodInternalAlias_1.z.literal("object"),
9
- zodInternalAlias_1.z.literal("array"),
10
- zodInternalAlias_1.z.literal("string"),
11
- zodInternalAlias_1.z.literal("number"),
12
- zodInternalAlias_1.z.literal("integer"),
13
- zodInternalAlias_1.z.literal("boolean"),
14
- zodInternalAlias_1.z.literal("null"),
15
- zodInternalAlias_1.z.array(zodInternalAlias_1.z.union([
16
- zodInternalAlias_1.z.literal("object"),
17
- zodInternalAlias_1.z.literal("array"),
18
- zodInternalAlias_1.z.literal("string"),
19
- zodInternalAlias_1.z.literal("number"),
20
- zodInternalAlias_1.z.literal("integer"),
21
- zodInternalAlias_1.z.literal("boolean"),
22
- zodInternalAlias_1.z.literal("null"),
6
+ const alias_1 = require("./alias");
7
+ const jsonSchemaType = alias_1.z.union([
8
+ alias_1.z.literal("object"),
9
+ alias_1.z.literal("array"),
10
+ alias_1.z.literal("string"),
11
+ alias_1.z.literal("number"),
12
+ alias_1.z.literal("integer"),
13
+ alias_1.z.literal("boolean"),
14
+ alias_1.z.literal("null"),
15
+ alias_1.z.array(alias_1.z.union([
16
+ alias_1.z.literal("object"),
17
+ alias_1.z.literal("array"),
18
+ alias_1.z.literal("string"),
19
+ alias_1.z.literal("number"),
20
+ alias_1.z.literal("integer"),
21
+ alias_1.z.literal("boolean"),
22
+ alias_1.z.literal("null"),
23
23
  ])),
24
24
  ]);
25
- const jsonSchemaTopLevel = zodInternalAlias_1.z
25
+ const jsonSchemaTopLevel = alias_1.z
26
26
  .looseObject({
27
27
  type: jsonSchemaType.optional(),
28
- properties: zodInternalAlias_1.z.record(zodInternalAlias_1.z.string(), zodInternalAlias_1.z.unknown()).optional(),
29
- items: zodInternalAlias_1.z.union([zodInternalAlias_1.z.array(zodInternalAlias_1.z.unknown()), zodInternalAlias_1.z.unknown()]).optional(),
30
- required: zodInternalAlias_1.z.array(zodInternalAlias_1.z.string()).optional(),
31
- additionalProperties: zodInternalAlias_1.z.union([zodInternalAlias_1.z.boolean(), zodInternalAlias_1.z.unknown()]).optional(),
32
- enum: zodInternalAlias_1.z.array(zodInternalAlias_1.z.unknown()).optional(),
33
- const: zodInternalAlias_1.z.unknown().optional(),
34
- $ref: zodInternalAlias_1.z.string().optional(),
35
- $id: zodInternalAlias_1.z.string().optional(),
36
- $schema: zodInternalAlias_1.z.string().optional(),
37
- title: zodInternalAlias_1.z.string().optional(),
38
- description: zodInternalAlias_1.z.string().optional(),
28
+ properties: alias_1.z.record(alias_1.z.string(), alias_1.z.unknown()).optional(),
29
+ items: alias_1.z.union([alias_1.z.array(alias_1.z.unknown()), alias_1.z.unknown()]).optional(),
30
+ required: alias_1.z.array(alias_1.z.string()).optional(),
31
+ additionalProperties: alias_1.z.union([alias_1.z.boolean(), alias_1.z.unknown()]).optional(),
32
+ enum: alias_1.z.array(alias_1.z.unknown()).optional(),
33
+ const: alias_1.z.unknown().optional(),
34
+ $ref: alias_1.z.string().optional(),
35
+ $id: alias_1.z.string().optional(),
36
+ $schema: alias_1.z.string().optional(),
37
+ title: alias_1.z.string().optional(),
38
+ description: alias_1.z.string().optional(),
39
39
  })
40
40
  .refine((value) => {
41
41
  return (value.type !== undefined ||
@@ -1 +1 @@
1
- {"version":3,"file":"json-schema.js","sourceRoot":"","sources":["../../src/schema/json-schema.ts"],"names":[],"mappings":";;AA2DA,kDAMC;AAgBD,8CAkBC;AAQD,0DAkBC;AA5HD,uDAAqC;AAErC,MAAM,cAAc,GAAG,oBAAC,CAAC,KAAK,CAAC;IAC7B,oBAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACnB,oBAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IAClB,oBAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACnB,oBAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACnB,oBAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IACpB,oBAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IACpB,oBAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACjB,oBAAC,CAAC,KAAK,CACL,oBAAC,CAAC,KAAK,CAAC;QACN,oBAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;QACnB,oBAAC,CAAC,OAAO,CAAC,OAAO,CAAC;QAClB,oBAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;QACnB,oBAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;QACnB,oBAAC,CAAC,OAAO,CAAC,SAAS,CAAC;QACpB,oBAAC,CAAC,OAAO,CAAC,SAAS,CAAC;QACpB,oBAAC,CAAC,OAAO,CAAC,MAAM,CAAC;KAClB,CAAC,CACH;CACF,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,oBAAC;KACzB,WAAW,CAAC;IACX,IAAI,EAAE,cAAc,CAAC,QAAQ,EAAE;IAC/B,UAAU,EAAE,oBAAC,CAAC,MAAM,CAAC,oBAAC,CAAC,MAAM,EAAE,EAAE,oBAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IACxD,KAAK,EAAE,oBAAC,CAAC,KAAK,CAAC,CAAC,oBAAC,CAAC,KAAK,CAAC,oBAAC,CAAC,OAAO,EAAE,CAAC,EAAE,oBAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC9D,QAAQ,EAAE,oBAAC,CAAC,KAAK,CAAC,oBAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACxC,oBAAoB,EAAE,oBAAC,CAAC,KAAK,CAAC,CAAC,oBAAC,CAAC,OAAO,EAAE,EAAE,oBAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;IACpE,IAAI,EAAE,oBAAC,CAAC,KAAK,CAAC,oBAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IACrC,KAAK,EAAE,oBAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC7B,IAAI,EAAE,oBAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,GAAG,EAAE,oBAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,OAAO,EAAE,oBAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,KAAK,EAAE,oBAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,WAAW,EAAE,oBAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC;KACD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;IAChB,OAAO,CACL,KAAK,CAAC,IAAI,KAAK,SAAS;QACxB,KAAK,CAAC,UAAU,KAAK,SAAS;QAC9B,KAAK,CAAC,KAAK,KAAK,SAAS;QACzB,KAAK,CAAC,IAAI,KAAK,SAAS;QACxB,KAAK,CAAC,KAAK,KAAK,SAAS;QACzB,KAAK,CAAC,IAAI,KAAK,SAAS,CACzB,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL;;;;;;;;GAQG;AACH,SAAgB,mBAAmB,CAAC,GAAY;IAC9C,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;AACnD,CAAC;AAUD;;;;;GAKG;AACH,SAAgB,iBAAiB,CAC/B,MAA2B;IAE3B,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,mCAAmC;IACnC,IAAI,MAAM,CAAC,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wCAAwC;IACxC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,SAAgB,uBAAuB,CACrC,MAA2B;IAE3B,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,mCAAmC;IACnC,IAAI,MAAM,CAAC,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5D,OAAO,MAAM,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,2BAA2B;IAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC,KAAsB,CAAC;IACvC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["import { JSONSchema7 } from \"json-schema\";\nimport { z } from \"zodInternalAlias\";\n\nconst jsonSchemaType = z.union([\n z.literal(\"object\"),\n z.literal(\"array\"),\n z.literal(\"string\"),\n z.literal(\"number\"),\n z.literal(\"integer\"),\n z.literal(\"boolean\"),\n z.literal(\"null\"),\n z.array(\n z.union([\n z.literal(\"object\"),\n z.literal(\"array\"),\n z.literal(\"string\"),\n z.literal(\"number\"),\n z.literal(\"integer\"),\n z.literal(\"boolean\"),\n z.literal(\"null\"),\n ]),\n ),\n]);\n\nconst jsonSchemaTopLevel = z\n .looseObject({\n type: jsonSchemaType.optional(),\n properties: z.record(z.string(), z.unknown()).optional(),\n items: z.union([z.array(z.unknown()), z.unknown()]).optional(),\n required: z.array(z.string()).optional(),\n additionalProperties: z.union([z.boolean(), z.unknown()]).optional(),\n enum: z.array(z.unknown()).optional(),\n const: z.unknown().optional(),\n $ref: z.string().optional(),\n $id: z.string().optional(),\n $schema: z.string().optional(),\n title: z.string().optional(),\n description: z.string().optional(),\n })\n .refine((value) => {\n return (\n value.type !== undefined ||\n value.properties !== undefined ||\n value.items !== undefined ||\n value.enum !== undefined ||\n value.const !== undefined ||\n value.$ref !== undefined\n );\n });\n\n/**\n * Basic heuristic to check if an object looks like a JSON Schema at the top level.\n *\n * This uses a Zod schema to verify only top-level keys (type, properties, items,\n * etc.). It intentionally does not perform full JSON Schema validation; a more\n * thorough check should be done server-side.\n * @param obj - The value to check\n * @returns True if the value appears to be a JSON Schema\n */\nexport function looksLikeJSONSchema(obj: unknown): obj is JSONSchema7 {\n if (obj === null || typeof obj !== \"object\") {\n return false;\n }\n\n return jsonSchemaTopLevel.safeParse(obj).success;\n}\n\n/**\n * Extended JSON Schema type that includes draft 2020-12 features like prefixItems.\n * The json-schema package types are from draft-07 and don't include prefixItems.\n */\nexport type JSONSchema7Extended = JSONSchema7 & {\n prefixItems?: JSONSchema7[];\n};\n\n/**\n * Checks if a JSON Schema represents a tuple (array with positional items).\n * Supports both draft-07 (items as array) and draft 2020-12 (prefixItems).\n * @param schema - The JSON Schema to check\n * @returns True if the schema represents a tuple\n */\nexport function isJsonSchemaTuple(\n schema: JSONSchema7Extended,\n): schema is JSONSchema7Extended & { type: \"array\" } {\n if (schema.type !== \"array\") {\n return false;\n }\n\n // Draft 2020-12: prefixItems array\n if (schema.prefixItems && Array.isArray(schema.prefixItems)) {\n return true;\n }\n\n // Draft-07: items as array (not object)\n if (Array.isArray(schema.items)) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Gets the tuple items from a JSON Schema.\n * Supports both draft-07 (items as array) and draft 2020-12 (prefixItems).\n * @param schema - The JSON Schema tuple\n * @returns Array of item schemas, or undefined if not a tuple\n */\nexport function getJsonSchemaTupleItems(\n schema: JSONSchema7Extended,\n): JSONSchema7[] | undefined {\n if (schema.type !== \"array\") {\n return undefined;\n }\n\n // Draft 2020-12: prefixItems array\n if (schema.prefixItems && Array.isArray(schema.prefixItems)) {\n return schema.prefixItems;\n }\n\n // Draft-07: items as array\n if (Array.isArray(schema.items)) {\n return schema.items as JSONSchema7[];\n }\n\n return undefined;\n}\n"]}
1
+ {"version":3,"file":"json-schema.js","sourceRoot":"","sources":["../../src/schema/json-schema.ts"],"names":[],"mappings":"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","sourcesContent":["import { JSONSchema7 } from \"json-schema\";\nimport { z } from \"./alias\";\n\nconst jsonSchemaType = z.union([\n z.literal(\"object\"),\n z.literal(\"array\"),\n z.literal(\"string\"),\n z.literal(\"number\"),\n z.literal(\"integer\"),\n z.literal(\"boolean\"),\n z.literal(\"null\"),\n z.array(\n z.union([\n z.literal(\"object\"),\n z.literal(\"array\"),\n z.literal(\"string\"),\n z.literal(\"number\"),\n z.literal(\"integer\"),\n z.literal(\"boolean\"),\n z.literal(\"null\"),\n ]),\n ),\n]);\n\nconst jsonSchemaTopLevel = z\n .looseObject({\n type: jsonSchemaType.optional(),\n properties: z.record(z.string(), z.unknown()).optional(),\n items: z.union([z.array(z.unknown()), z.unknown()]).optional(),\n required: z.array(z.string()).optional(),\n additionalProperties: z.union([z.boolean(), z.unknown()]).optional(),\n enum: z.array(z.unknown()).optional(),\n const: z.unknown().optional(),\n $ref: z.string().optional(),\n $id: z.string().optional(),\n $schema: z.string().optional(),\n title: z.string().optional(),\n description: z.string().optional(),\n })\n .refine((value) => {\n return (\n value.type !== undefined ||\n value.properties !== undefined ||\n value.items !== undefined ||\n value.enum !== undefined ||\n value.const !== undefined ||\n value.$ref !== undefined\n );\n });\n\n/**\n * Basic heuristic to check if an object looks like a JSON Schema at the top level.\n *\n * This uses a Zod schema to verify only top-level keys (type, properties, items,\n * etc.). It intentionally does not perform full JSON Schema validation; a more\n * thorough check should be done server-side.\n * @param obj - The value to check\n * @returns True if the value appears to be a JSON Schema\n */\nexport function looksLikeJSONSchema(obj: unknown): obj is JSONSchema7 {\n if (obj === null || typeof obj !== \"object\") {\n return false;\n }\n\n return jsonSchemaTopLevel.safeParse(obj).success;\n}\n\n/**\n * Extended JSON Schema type that includes draft 2020-12 features like prefixItems.\n * The json-schema package types are from draft-07 and don't include prefixItems.\n */\nexport type JSONSchema7Extended = JSONSchema7 & {\n prefixItems?: JSONSchema7[];\n};\n\n/**\n * Checks if a JSON Schema represents a tuple (array with positional items).\n * Supports both draft-07 (items as array) and draft 2020-12 (prefixItems).\n * @param schema - The JSON Schema to check\n * @returns True if the schema represents a tuple\n */\nexport function isJsonSchemaTuple(\n schema: JSONSchema7Extended,\n): schema is JSONSchema7Extended & { type: \"array\" } {\n if (schema.type !== \"array\") {\n return false;\n }\n\n // Draft 2020-12: prefixItems array\n if (schema.prefixItems && Array.isArray(schema.prefixItems)) {\n return true;\n }\n\n // Draft-07: items as array (not object)\n if (Array.isArray(schema.items)) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Gets the tuple items from a JSON Schema.\n * Supports both draft-07 (items as array) and draft 2020-12 (prefixItems).\n * @param schema - The JSON Schema tuple\n * @returns Array of item schemas, or undefined if not a tuple\n */\nexport function getJsonSchemaTupleItems(\n schema: JSONSchema7Extended,\n): JSONSchema7[] | undefined {\n if (schema.type !== \"array\") {\n return undefined;\n }\n\n // Draft 2020-12: prefixItems array\n if (schema.prefixItems && Array.isArray(schema.prefixItems)) {\n return schema.prefixItems;\n }\n\n // Draft-07: items as array\n if (Array.isArray(schema.items)) {\n return schema.items as JSONSchema7[];\n }\n\n return undefined;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/schema/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EACL,aAAa,EACb,eAAe,EACf,SAAS,EACT,uBAAuB,EACxB,MAAM,6BAA6B,CAAC;AAYrC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,WAAW,CAOvE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,eAAe,GAAG,SAAS,GAAG,IAAI,EAC1C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GACjC,WAAW,GAAG,SAAS,CAYzB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,SAAS,GAAG,uBAAuB,GACxC,IAAI,IAAI,SAAS,CAEnB;AA0DD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,2BAA2B,GACtC,MAAM,SAAS,GAAG,uBAAuB,KACxC,aAAa,EAmDf,CAAC;AAEF,YAAY,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/schema/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EACL,aAAa,EACb,eAAe,EACf,SAAS,EACT,uBAAuB,EACxB,MAAM,6BAA6B,CAAC;AAYrC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,WAAW,CAOvE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,eAAe,GAAG,SAAS,GAAG,IAAI,EAC1C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GACjC,WAAW,GAAG,SAAS,CAYzB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,SAAS,GAAG,uBAAuB,GACxC,IAAI,IAAI,SAAS,CAEnB;AAwED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,2BAA2B,GACtC,MAAM,SAAS,GAAG,uBAAuB,KACxC,aAAa,EAmDf,CAAC;AAEF,YAAY,EAAE,eAAe,EAAE,CAAC"}
@@ -85,9 +85,6 @@ function hasInputSchema(tool) {
85
85
  * @returns The input schema (Standard Schema or JSON Schema), or undefined if not toolSchema
86
86
  */
87
87
  function getArgsFromToolSchema(tool) {
88
- if (!("toolSchema" in tool) || !tool.toolSchema) {
89
- return undefined;
90
- }
91
88
  if ((0, json_schema_1.looksLikeJSONSchema)(tool.toolSchema)) {
92
89
  return tool.toolSchema;
93
90
  }
@@ -116,14 +113,25 @@ function extractParamsFromJsonSchemaTuple(tupleItems) {
116
113
  * @param schema - The input schema (JSON Schema)
117
114
  * @returns A single parameter specification
118
115
  */
119
- function createInputParameter(schema) {
120
- return {
121
- name: "input",
122
- type: typeof schema.type === "string" ? schema.type : "object",
123
- description: schema.description ?? "",
124
- isRequired: true,
125
- schema,
126
- };
116
+ function createParametersFromSchema(schema) {
117
+ const properties = schema.properties ?? {};
118
+ return Object.entries(properties).map(([key, propSchema]) => ({
119
+ name: key,
120
+ type: propSchema && typeof propSchema === "object" && "type" in propSchema
121
+ ? propSchema.type
122
+ : "object",
123
+ description: propSchema &&
124
+ typeof propSchema === "object" &&
125
+ "description" in propSchema
126
+ ? (propSchema.description ?? "")
127
+ : "",
128
+ isRequired: Array.isArray(schema.required)
129
+ ? schema.required.includes(key)
130
+ : false,
131
+ schema: typeof propSchema === "object" && propSchema !== null
132
+ ? propSchema
133
+ : {},
134
+ }));
127
135
  }
128
136
  /**
129
137
  * Extracts parameter specifications from a tool schema.
@@ -154,7 +162,7 @@ const getParametersFromToolSchema = (tool) => {
154
162
  console.warn("Unknown inputSchema type, returning empty parameters");
155
163
  return [];
156
164
  }
157
- return [createInputParameter(jsonSchema)];
165
+ return createParametersFromSchema(jsonSchema);
158
166
  }
159
167
  // Deprecated interface: toolSchema with positional tuple args
160
168
  const argsSchema = getArgsFromToolSchema(tool);
@@ -163,19 +171,19 @@ const getParametersFromToolSchema = (tool) => {
163
171
  return [];
164
172
  }
165
173
  // Convert to JSON Schema if needed
166
- // For toolSchema, the args are typically a Zod tuple from z.function().args(...)
167
- // We use direct Zod conversion to ensure proper tuple handling
168
174
  let jsonSchema;
169
- if ((0, json_schema_1.looksLikeJSONSchema)(argsSchema)) {
170
- jsonSchema = argsSchema;
171
- }
172
- else if ((0, zod_1.isZodSchema)(argsSchema)) {
173
- // Use direct Zod conversion for more reliable tuple handling
175
+ // zod 3 and 4 are both compatible with StandardSchema
176
+ if ((0, zod_1.isZodSchema)(argsSchema)) {
174
177
  jsonSchema = (0, zod_1.handleZodSchemaToJson)(argsSchema);
175
178
  }
176
179
  else if ((0, standard_schema_1.isStandardSchema)(argsSchema)) {
180
+ // uses @standard-community/standard-json for conversion
177
181
  jsonSchema = schemaToJsonSchema(argsSchema);
178
182
  }
183
+ else if ((0, json_schema_1.looksLikeJSONSchema)(argsSchema)) {
184
+ // already JSON Schema
185
+ jsonSchema = argsSchema;
186
+ }
179
187
  else {
180
188
  console.warn("Unknown toolSchema args type, returning empty parameters");
181
189
  return [];
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/schema/schema.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Schema utilities for working with Standard Schema, Zod, and JSON Schema.\n *\n * This module provides a unified interface for handling different schema types\n * used in Tambo components and tools. It uses Standard Schema (https://standardschema.dev/)\n * as the primary interface, which is implemented by Zod and other validation libraries.\n *\n * JSON Schema conversion is handled by `@standard-community/standard-json`, with:\n * - Zod 4: Uses Zod's native toJSONSchema\n * - Zod 3: Requires optional peer dependency 'zod-to-json-schema'\n * - Other vendors: Handled by standard-json's built-in converters\n * @module schema\n */\n\nimport { loadVendor, toJsonSchema } from \"@standard-community/standard-json\";\nimport type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport type { JSONSchema7 } from \"json-schema\";\nimport {\n ParameterSpec,\n SupportedSchema,\n TamboTool,\n TamboToolWithToolSchema,\n} from \"../model/component-metadata\";\nimport {\n getJsonSchemaTupleItems,\n isJsonSchemaTuple,\n looksLikeJSONSchema,\n} from \"./json-schema\";\nimport { isStandardSchema } from \"./standard-schema\";\nimport { getZodFunctionArgs, handleZodSchemaToJson, isZodSchema } from \"./zod\";\n\n// Register the Zod vendor converter with standard-json\nloadVendor(\"zod\", handleZodSchemaToJson);\n\n/**\n * Converts a schema (Standard Schema or JSON Schema) to a JSON Schema object.\n *\n * If the schema is already a JSON Schema, it is returned as-is.\n * For Standard Schema validators (Zod, Valibot, ArkType, etc.), uses\n * `@standard-community/standard-json` for conversion.\n * @param schema - The schema to convert\n * @returns The JSON Schema representation\n * @example\n * ```typescript\n * import { z } from \"zod/v4\";\n *\n * // Convert a Zod schema\n * const zodSchema = z.object({ name: z.string() });\n * const jsonSchema = schemaToJsonSchema(zodSchema);\n *\n * // Pass through a JSON Schema\n * const existingJsonSchema = { type: \"object\", properties: { name: { type: \"string\" } } };\n * schemaToJsonSchema(existingJsonSchema); // returns the same object\n * ```\n */\nexport function schemaToJsonSchema(schema: SupportedSchema): JSONSchema7 {\n // Already a JSON Schema - return as-is\n if (!isStandardSchema(schema)) {\n return schema;\n }\n\n return toJsonSchema.sync(schema) as JSONSchema7;\n}\n\n/**\n * Safely converts a schema to JSON Schema, returning undefined for invalid inputs.\n * @param schema - The schema to convert (may be undefined)\n * @param onError - Optional callback invoked on conversion error\n * @returns The JSON Schema representation, or undefined if conversion fails\n */\nexport function safeSchemaToJsonSchema(\n schema: SupportedSchema | undefined | null,\n onError?: (error: unknown) => void,\n): JSONSchema7 | undefined {\n if (!schema) {\n return undefined;\n }\n\n try {\n return schemaToJsonSchema(schema);\n } catch (error) {\n console.error(\"Error converting schema to JSON Schema:\", error);\n onError?.(error);\n return undefined;\n }\n}\n\n/**\n * Checks if a tool uses the new inputSchema interface (vs deprecated toolSchema).\n * @param tool - The Tambo tool to check\n * @returns True if the tool uses inputSchema\n */\nexport function hasInputSchema(\n tool: TamboTool | TamboToolWithToolSchema,\n): tool is TamboTool {\n return \"inputSchema\" in tool && tool.inputSchema != null;\n}\n\n/**\n * Retrieves the input schema for a Tambo tool using the deprecated toolSchema.\n * For toolSchema, this extracts the args from the Zod function schema.\n * @param tool - The Tambo tool (potentially with toolSchema)\n * @returns The input schema (Standard Schema or JSON Schema), or undefined if not toolSchema\n */\nfunction getArgsFromToolSchema(\n tool: TamboTool | TamboToolWithToolSchema,\n): StandardSchemaV1 | JSONSchema7 | undefined {\n if (!(\"toolSchema\" in tool) || !tool.toolSchema) {\n return undefined;\n }\n\n if (looksLikeJSONSchema(tool.toolSchema)) {\n return tool.toolSchema;\n }\n\n return getZodFunctionArgs(tool.toolSchema);\n}\n\n/**\n * Extracts parameter specifications from JSON Schema tuple items.\n * Supports both draft-07 (items as array) and draft 2020-12 (prefixItems).\n * This is library-agnostic - works with Zod, Valibot, ArkType, etc.\n * @param tupleItems - The array of JSON Schema items\n * @returns An array of parameter specifications\n */\nfunction extractParamsFromJsonSchemaTuple(\n tupleItems: JSONSchema7[],\n): ParameterSpec[] {\n return tupleItems.map((item, index) => ({\n name: `param${index + 1}`,\n type: typeof item.type === \"string\" ? item.type : \"object\",\n description: item.description ?? \"\",\n isRequired: true, // tuple items are positional\n schema: item,\n }));\n}\n\n/**\n * Creates a single parameter spec from an input schema.\n * Used for the new inputSchema interface where the schema represents\n * the shape of the single object argument to the tool function.\n * @param schema - The input schema (JSON Schema)\n * @returns A single parameter specification\n */\nfunction createInputParameter(schema: JSONSchema7): ParameterSpec {\n return {\n name: \"input\",\n type: typeof schema.type === \"string\" ? schema.type : \"object\",\n description: schema.description ?? \"\",\n isRequired: true,\n schema,\n };\n}\n\n/**\n * Extracts parameter specifications from a tool schema.\n *\n * For tools with **inputSchema** (new interface):\n * - Returns a single parameter named \"input\" representing the object schema\n * - The inputSchema defines the shape of the single object argument\n *\n * For tools with **toolSchema** (deprecated):\n * - Extracts positional parameters from tuple/function args\n * - Returns params named \"param1\", \"param2\", etc.\n * @param tool - The tool containing the schema\n * @returns An array of parameter specifications\n */\nexport const getParametersFromToolSchema = (\n tool: TamboTool | TamboToolWithToolSchema,\n): ParameterSpec[] => {\n // New interface: inputSchema represents the single object argument\n if (hasInputSchema(tool)) {\n const schema = tool.inputSchema;\n\n // Convert to JSON Schema if needed\n let jsonSchema: JSONSchema7;\n if (looksLikeJSONSchema(schema)) {\n jsonSchema = schema;\n } else if (isStandardSchema(schema)) {\n jsonSchema = schemaToJsonSchema(schema);\n } else {\n console.warn(\"Unknown inputSchema type, returning empty parameters\");\n return [];\n }\n\n return [createInputParameter(jsonSchema)];\n }\n\n // Deprecated interface: toolSchema with positional tuple args\n const argsSchema = getArgsFromToolSchema(tool);\n\n if (!argsSchema) {\n console.warn(\"No toolSchema found, returning empty parameters\");\n return [];\n }\n\n // Convert to JSON Schema if needed\n // For toolSchema, the args are typically a Zod tuple from z.function().args(...)\n // We use direct Zod conversion to ensure proper tuple handling\n let jsonSchema: JSONSchema7;\n if (looksLikeJSONSchema(argsSchema)) {\n jsonSchema = argsSchema;\n } else if (isZodSchema(argsSchema)) {\n // Use direct Zod conversion for more reliable tuple handling\n jsonSchema = handleZodSchemaToJson(argsSchema) as JSONSchema7;\n } else if (isStandardSchema(argsSchema)) {\n jsonSchema = schemaToJsonSchema(argsSchema);\n } else {\n console.warn(\"Unknown toolSchema args type, returning empty parameters\");\n return [];\n }\n\n // Extract tuple items for positional params\n if (isJsonSchemaTuple(jsonSchema)) {\n const tupleItems = getJsonSchemaTupleItems(jsonSchema) ?? [];\n return extractParamsFromJsonSchemaTuple(tupleItems);\n }\n\n // Fallback: wrap as single param (shouldn't normally happen for toolSchema)\n return extractParamsFromJsonSchemaTuple([jsonSchema]);\n};\n\nexport type { SupportedSchema };\n"]}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/schema/schema.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Schema utilities for working with Standard Schema, Zod, and JSON Schema.\n *\n * This module provides a unified interface for handling different schema types\n * used in Tambo components and tools. It uses Standard Schema (https://standardschema.dev/)\n * as the primary interface, which is implemented by Zod and other validation libraries.\n *\n * JSON Schema conversion is handled by `@standard-community/standard-json`, with:\n * - Zod 4: Uses Zod's native toJSONSchema\n * - Zod 3: Requires optional peer dependency 'zod-to-json-schema'\n * - Other vendors: Handled by standard-json's built-in converters\n * @module schema\n */\n\nimport { loadVendor, toJsonSchema } from \"@standard-community/standard-json\";\nimport type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport type { JSONSchema7 } from \"json-schema\";\nimport {\n ParameterSpec,\n SupportedSchema,\n TamboTool,\n TamboToolWithToolSchema,\n} from \"../model/component-metadata\";\nimport {\n getJsonSchemaTupleItems,\n isJsonSchemaTuple,\n looksLikeJSONSchema,\n} from \"./json-schema\";\nimport { isStandardSchema } from \"./standard-schema\";\nimport { getZodFunctionArgs, handleZodSchemaToJson, isZodSchema } from \"./zod\";\n\n// Register the Zod vendor converter with standard-json\nloadVendor(\"zod\", handleZodSchemaToJson);\n\n/**\n * Converts a schema (Standard Schema or JSON Schema) to a JSON Schema object.\n *\n * If the schema is already a JSON Schema, it is returned as-is.\n * For Standard Schema validators (Zod, Valibot, ArkType, etc.), uses\n * `@standard-community/standard-json` for conversion.\n * @param schema - The schema to convert\n * @returns The JSON Schema representation\n * @example\n * ```typescript\n * import { z } from \"zod/v4\";\n *\n * // Convert a Zod schema\n * const zodSchema = z.object({ name: z.string() });\n * const jsonSchema = schemaToJsonSchema(zodSchema);\n *\n * // Pass through a JSON Schema\n * const existingJsonSchema = { type: \"object\", properties: { name: { type: \"string\" } } };\n * schemaToJsonSchema(existingJsonSchema); // returns the same object\n * ```\n */\nexport function schemaToJsonSchema(schema: SupportedSchema): JSONSchema7 {\n // Already a JSON Schema - return as-is\n if (!isStandardSchema(schema)) {\n return schema;\n }\n\n return toJsonSchema.sync(schema) as JSONSchema7;\n}\n\n/**\n * Safely converts a schema to JSON Schema, returning undefined for invalid inputs.\n * @param schema - The schema to convert (may be undefined)\n * @param onError - Optional callback invoked on conversion error\n * @returns The JSON Schema representation, or undefined if conversion fails\n */\nexport function safeSchemaToJsonSchema(\n schema: SupportedSchema | undefined | null,\n onError?: (error: unknown) => void,\n): JSONSchema7 | undefined {\n if (!schema) {\n return undefined;\n }\n\n try {\n return schemaToJsonSchema(schema);\n } catch (error) {\n console.error(\"Error converting schema to JSON Schema:\", error);\n onError?.(error);\n return undefined;\n }\n}\n\n/**\n * Checks if a tool uses the new inputSchema interface (vs deprecated toolSchema).\n * @param tool - The Tambo tool to check\n * @returns True if the tool uses inputSchema\n */\nexport function hasInputSchema(\n tool: TamboTool | TamboToolWithToolSchema,\n): tool is TamboTool {\n return \"inputSchema\" in tool && tool.inputSchema != null;\n}\n\n/**\n * Retrieves the input schema for a Tambo tool using the deprecated toolSchema.\n * For toolSchema, this extracts the args from the Zod function schema.\n * @param tool - The Tambo tool (potentially with toolSchema)\n * @returns The input schema (Standard Schema or JSON Schema), or undefined if not toolSchema\n */\nfunction getArgsFromToolSchema(\n tool: TamboToolWithToolSchema,\n): StandardSchemaV1 | JSONSchema7 | undefined {\n if (looksLikeJSONSchema(tool.toolSchema)) {\n return tool.toolSchema;\n }\n\n return getZodFunctionArgs(tool.toolSchema);\n}\n\n/**\n * Extracts parameter specifications from JSON Schema tuple items.\n * Supports both draft-07 (items as array) and draft 2020-12 (prefixItems).\n * This is library-agnostic - works with Zod, Valibot, ArkType, etc.\n * @param tupleItems - The array of JSON Schema items\n * @returns An array of parameter specifications\n */\nfunction extractParamsFromJsonSchemaTuple(\n tupleItems: JSONSchema7[],\n): ParameterSpec[] {\n return tupleItems.map((item, index) => ({\n name: `param${index + 1}`,\n type: typeof item.type === \"string\" ? item.type : \"object\",\n description: item.description ?? \"\",\n isRequired: true, // tuple items are positional\n schema: item,\n }));\n}\n\n/**\n * Creates a single parameter spec from an input schema.\n * Used for the new inputSchema interface where the schema represents\n * the shape of the single object argument to the tool function.\n * @param schema - The input schema (JSON Schema)\n * @returns A single parameter specification\n */\nfunction createParametersFromSchema(schema: JSONSchema7): ParameterSpec[] {\n const properties = schema.properties ?? {};\n\n return Object.entries(properties).map(\n ([key, propSchema]) =>\n ({\n name: key,\n type:\n propSchema && typeof propSchema === \"object\" && \"type\" in propSchema\n ? (propSchema.type as string)\n : \"object\",\n description:\n propSchema &&\n typeof propSchema === \"object\" &&\n \"description\" in propSchema\n ? (propSchema.description ?? \"\")\n : \"\",\n isRequired: Array.isArray(schema.required)\n ? schema.required.includes(key)\n : false,\n schema:\n typeof propSchema === \"object\" && propSchema !== null\n ? propSchema\n : {},\n }) satisfies ParameterSpec,\n );\n}\n\n/**\n * Extracts parameter specifications from a tool schema.\n *\n * For tools with **inputSchema** (new interface):\n * - Returns a single parameter named \"input\" representing the object schema\n * - The inputSchema defines the shape of the single object argument\n *\n * For tools with **toolSchema** (deprecated):\n * - Extracts positional parameters from tuple/function args\n * - Returns params named \"param1\", \"param2\", etc.\n * @param tool - The tool containing the schema\n * @returns An array of parameter specifications\n */\nexport const getParametersFromToolSchema = (\n tool: TamboTool | TamboToolWithToolSchema,\n): ParameterSpec[] => {\n // New interface: inputSchema represents the single object argument\n if (hasInputSchema(tool)) {\n const schema = tool.inputSchema;\n\n // Convert to JSON Schema if needed\n let jsonSchema: JSONSchema7;\n if (looksLikeJSONSchema(schema)) {\n jsonSchema = schema;\n } else if (isStandardSchema(schema)) {\n jsonSchema = schemaToJsonSchema(schema);\n } else {\n console.warn(\"Unknown inputSchema type, returning empty parameters\");\n return [];\n }\n\n return createParametersFromSchema(jsonSchema);\n }\n\n // Deprecated interface: toolSchema with positional tuple args\n const argsSchema = getArgsFromToolSchema(tool);\n\n if (!argsSchema) {\n console.warn(\"No toolSchema found, returning empty parameters\");\n return [];\n }\n\n // Convert to JSON Schema if needed\n let jsonSchema: JSONSchema7;\n // zod 3 and 4 are both compatible with StandardSchema\n if (isZodSchema(argsSchema)) {\n jsonSchema = handleZodSchemaToJson(argsSchema);\n } else if (isStandardSchema(argsSchema)) {\n // uses @standard-community/standard-json for conversion\n jsonSchema = schemaToJsonSchema(argsSchema);\n } else if (looksLikeJSONSchema(argsSchema)) {\n // already JSON Schema\n jsonSchema = argsSchema;\n } else {\n console.warn(\"Unknown toolSchema args type, returning empty parameters\");\n return [];\n }\n\n // Extract tuple items for positional params\n if (isJsonSchemaTuple(jsonSchema)) {\n const tupleItems = getJsonSchemaTupleItems(jsonSchema) ?? [];\n return extractParamsFromJsonSchemaTuple(tupleItems);\n }\n\n // Fallback: wrap as single param (shouldn't normally happen for toolSchema)\n return extractParamsFromJsonSchemaTuple([jsonSchema]);\n};\n\nexport type { SupportedSchema };\n"]}
@@ -1,7 +1,42 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const zodInternalAlias_1 = require("zodInternalAlias");
36
+ const z3 = __importStar(require("zod/v3"));
37
+ const z4 = __importStar(require("zod/v4"));
4
38
  const json_schema_1 = require("./json-schema");
39
+ const schema_1 = require("./schema");
5
40
  const standard_schema_1 = require("./standard-schema");
6
41
  describe("schema utilities", () => {
7
42
  describe("looksLikeJSONSchema", () => {
@@ -23,8 +58,8 @@ describe("schema utilities", () => {
23
58
  expect((0, json_schema_1.looksLikeJSONSchema)(jsonSchema)).toBe(true);
24
59
  });
25
60
  it("returns false for Standard Schema validators", () => {
26
- const zodSchema = zodInternalAlias_1.z.object({
27
- name: zodInternalAlias_1.z.string(),
61
+ const zodSchema = z4.object({
62
+ name: z4.string(),
28
63
  });
29
64
  expect((0, standard_schema_1.isStandardSchema)(zodSchema)).toBe(true);
30
65
  expect((0, json_schema_1.looksLikeJSONSchema)(zodSchema)).toBe(false);
@@ -37,5 +72,258 @@ describe("schema utilities", () => {
37
72
  expect((0, json_schema_1.looksLikeJSONSchema)(notSchema)).toBe(false);
38
73
  });
39
74
  });
75
+ describe("getParametersFromToolSchema", () => {
76
+ describe("inputSchema interface (object schemas)", () => {
77
+ it("extracts parameters from Zod 4 object schema properties", () => {
78
+ const tool = {
79
+ name: "test-tool",
80
+ description: "Test tool",
81
+ tool: jest.fn(),
82
+ inputSchema: z4.object({
83
+ query: z4.string().describe("Search query"),
84
+ limit: z4.number().describe("Max results"),
85
+ enabled: z4.boolean().optional().describe("Whether enabled"),
86
+ }),
87
+ outputSchema: z4.void(),
88
+ };
89
+ const params = (0, schema_1.getParametersFromToolSchema)(tool);
90
+ expect(params).toHaveLength(3);
91
+ const queryParam = params.find((p) => p.name === "query");
92
+ expect(queryParam).toBeDefined();
93
+ expect(queryParam?.type).toBe("string");
94
+ expect(queryParam?.description).toBe("Search query");
95
+ expect(queryParam?.isRequired).toBe(true);
96
+ const limitParam = params.find((p) => p.name === "limit");
97
+ expect(limitParam).toBeDefined();
98
+ expect(limitParam?.type).toBe("number");
99
+ expect(limitParam?.description).toBe("Max results");
100
+ expect(limitParam?.isRequired).toBe(true);
101
+ const enabledParam = params.find((p) => p.name === "enabled");
102
+ expect(enabledParam).toBeDefined();
103
+ expect(enabledParam?.type).toBe("boolean");
104
+ // Optional fields are not required
105
+ expect(enabledParam?.isRequired).toBe(false);
106
+ });
107
+ it("extracts parameters from Zod 3 object schema properties", () => {
108
+ const tool = {
109
+ name: "test-tool",
110
+ description: "Test tool",
111
+ tool: jest.fn(),
112
+ inputSchema: z3.object({
113
+ name: z3.string().describe("User name"),
114
+ age: z3.number().optional(),
115
+ }),
116
+ outputSchema: z3.void(),
117
+ };
118
+ const params = (0, schema_1.getParametersFromToolSchema)(tool);
119
+ expect(params).toHaveLength(2);
120
+ const nameParam = params.find((p) => p.name === "name");
121
+ expect(nameParam).toBeDefined();
122
+ expect(nameParam?.type).toBe("string");
123
+ expect(nameParam?.isRequired).toBe(true);
124
+ const ageParam = params.find((p) => p.name === "age");
125
+ expect(ageParam).toBeDefined();
126
+ expect(ageParam?.type).toBe("number");
127
+ expect(ageParam?.isRequired).toBe(false);
128
+ });
129
+ it("extracts parameters from JSON Schema object properties", () => {
130
+ const tool = {
131
+ name: "test-tool",
132
+ description: "Test tool",
133
+ tool: jest.fn(),
134
+ inputSchema: {
135
+ type: "object",
136
+ properties: {
137
+ id: { type: "string", description: "Item ID" },
138
+ count: { type: "number", description: "Item count" },
139
+ active: { type: "boolean" },
140
+ },
141
+ required: ["id"],
142
+ },
143
+ outputSchema: {},
144
+ };
145
+ const params = (0, schema_1.getParametersFromToolSchema)(tool);
146
+ expect(params).toHaveLength(3);
147
+ const idParam = params.find((p) => p.name === "id");
148
+ expect(idParam).toBeDefined();
149
+ expect(idParam?.type).toBe("string");
150
+ expect(idParam?.description).toBe("Item ID");
151
+ expect(idParam?.isRequired).toBe(true);
152
+ const countParam = params.find((p) => p.name === "count");
153
+ expect(countParam).toBeDefined();
154
+ expect(countParam?.type).toBe("number");
155
+ expect(countParam?.isRequired).toBe(false);
156
+ const activeParam = params.find((p) => p.name === "active");
157
+ expect(activeParam).toBeDefined();
158
+ expect(activeParam?.type).toBe("boolean");
159
+ expect(activeParam?.isRequired).toBe(false);
160
+ });
161
+ it("handles empty object schema", () => {
162
+ const tool = {
163
+ name: "test-tool",
164
+ description: "Test tool",
165
+ tool: jest.fn(),
166
+ inputSchema: z4.object({}),
167
+ outputSchema: z4.void(),
168
+ };
169
+ const params = (0, schema_1.getParametersFromToolSchema)(tool);
170
+ expect(params).toHaveLength(0);
171
+ });
172
+ it("handles nested object schemas", () => {
173
+ const tool = {
174
+ name: "test-tool",
175
+ description: "Test tool",
176
+ tool: jest.fn(),
177
+ inputSchema: z4.object({
178
+ user: z4
179
+ .object({
180
+ name: z4.string(),
181
+ email: z4.string(),
182
+ })
183
+ .describe("User info"),
184
+ options: z4.object({
185
+ notify: z4.boolean(),
186
+ }),
187
+ }),
188
+ outputSchema: z4.void(),
189
+ };
190
+ const params = (0, schema_1.getParametersFromToolSchema)(tool);
191
+ expect(params).toHaveLength(2);
192
+ const userParam = params.find((p) => p.name === "user");
193
+ expect(userParam).toBeDefined();
194
+ expect(userParam?.type).toBe("object");
195
+ expect(userParam?.description).toBe("User info");
196
+ const optionsParam = params.find((p) => p.name === "options");
197
+ expect(optionsParam).toBeDefined();
198
+ expect(optionsParam?.type).toBe("object");
199
+ });
200
+ it("handles array properties", () => {
201
+ const tool = {
202
+ name: "test-tool",
203
+ description: "Test tool",
204
+ tool: jest.fn(),
205
+ inputSchema: z4.object({
206
+ tags: z4.array(z4.string()).describe("List of tags"),
207
+ items: z4.array(z4.object({ id: z4.number() })),
208
+ }),
209
+ outputSchema: z4.void(),
210
+ };
211
+ const params = (0, schema_1.getParametersFromToolSchema)(tool);
212
+ expect(params).toHaveLength(2);
213
+ const tagsParam = params.find((p) => p.name === "tags");
214
+ expect(tagsParam).toBeDefined();
215
+ expect(tagsParam?.type).toBe("array");
216
+ expect(tagsParam?.description).toBe("List of tags");
217
+ const itemsParam = params.find((p) => p.name === "items");
218
+ expect(itemsParam).toBeDefined();
219
+ expect(itemsParam?.type).toBe("array");
220
+ });
221
+ });
222
+ describe("realistic inputSchema scenarios", () => {
223
+ it("handles enum properties", () => {
224
+ const tool = {
225
+ name: "test-tool",
226
+ description: "Test tool",
227
+ tool: jest.fn(),
228
+ inputSchema: z4.object({
229
+ status: z4.enum(["pending", "active", "completed"]),
230
+ priority: z4
231
+ .enum(["low", "medium", "high"])
232
+ .describe("Task priority"),
233
+ }),
234
+ outputSchema: z4.void(),
235
+ };
236
+ const params = (0, schema_1.getParametersFromToolSchema)(tool);
237
+ expect(params).toHaveLength(2);
238
+ const statusParam = params.find((p) => p.name === "status");
239
+ expect(statusParam).toBeDefined();
240
+ expect(statusParam?.type).toBe("string");
241
+ expect(statusParam?.isRequired).toBe(true);
242
+ const priorityParam = params.find((p) => p.name === "priority");
243
+ expect(priorityParam).toBeDefined();
244
+ expect(priorityParam?.type).toBe("string");
245
+ expect(priorityParam?.description).toBe("Task priority");
246
+ });
247
+ it("handles nullable properties", () => {
248
+ const tool = {
249
+ name: "test-tool",
250
+ description: "Test tool",
251
+ tool: jest.fn(),
252
+ inputSchema: z4.object({
253
+ name: z4.string().nullable().describe("Optional name"),
254
+ count: z4.number().nullable(),
255
+ }),
256
+ outputSchema: z4.void(),
257
+ };
258
+ const params = (0, schema_1.getParametersFromToolSchema)(tool);
259
+ expect(params).toHaveLength(2);
260
+ const nameParam = params.find((p) => p.name === "name");
261
+ expect(nameParam).toBeDefined();
262
+ expect(nameParam?.description).toBe("Optional name");
263
+ // Nullable fields are still required (they must be provided, even if null)
264
+ expect(nameParam?.isRequired).toBe(true);
265
+ });
266
+ it("handles deeply nested schemas and preserves full schema", () => {
267
+ const tool = {
268
+ name: "test-tool",
269
+ description: "Test tool",
270
+ tool: jest.fn(),
271
+ inputSchema: z4.object({
272
+ config: z4.object({
273
+ database: z4.object({
274
+ host: z4.string(),
275
+ port: z4.number().optional(),
276
+ }),
277
+ }),
278
+ }),
279
+ outputSchema: z4.void(),
280
+ };
281
+ const params = (0, schema_1.getParametersFromToolSchema)(tool);
282
+ expect(params).toHaveLength(1);
283
+ expect(params[0].name).toBe("config");
284
+ expect(params[0].type).toBe("object");
285
+ // The full nested schema should be preserved
286
+ expect(params[0].schema).toHaveProperty("properties");
287
+ });
288
+ it("handles mixed required and optional fields correctly", () => {
289
+ const tool = {
290
+ name: "test-tool",
291
+ description: "Test tool",
292
+ tool: jest.fn(),
293
+ inputSchema: z4.object({
294
+ required1: z4.string(),
295
+ optional1: z4.string().optional(),
296
+ required2: z4.number(),
297
+ }),
298
+ outputSchema: z4.void(),
299
+ };
300
+ const params = (0, schema_1.getParametersFromToolSchema)(tool);
301
+ expect(params).toHaveLength(3);
302
+ const required1 = params.find((p) => p.name === "required1");
303
+ const optional1 = params.find((p) => p.name === "optional1");
304
+ const required2 = params.find((p) => p.name === "required2");
305
+ expect(required1?.isRequired).toBe(true);
306
+ expect(optional1?.isRequired).toBe(false);
307
+ expect(required2?.isRequired).toBe(true);
308
+ });
309
+ });
310
+ describe("deprecated toolSchema interface (tuple/positional args)", () => {
311
+ it("extracts positional parameters from Zod 3 function schema", () => {
312
+ const tool = {
313
+ name: "test-tool",
314
+ description: "Test tool",
315
+ tool: jest.fn(),
316
+ toolSchema: z3
317
+ .function()
318
+ .args(z3.string().describe("First arg"), z3.number().describe("Second arg"))
319
+ .returns(z3.void()),
320
+ };
321
+ const params = (0, schema_1.getParametersFromToolSchema)(tool);
322
+ // toolSchema uses positional params (param1, param2, etc.)
323
+ expect(params.length).toBeGreaterThanOrEqual(1);
324
+ expect(params[0].name).toBe("param1");
325
+ });
326
+ });
327
+ });
40
328
  });
41
329
  //# sourceMappingURL=schema.test.js.map