@tambo-ai/react 0.65.3 → 0.66.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +120 -20
- package/dist/{providers/hoc → hoc}/with-tambo-interactable.d.ts +2 -2
- package/dist/hoc/with-tambo-interactable.d.ts.map +1 -0
- package/dist/{providers/hoc → hoc}/with-tambo-interactable.js +29 -2
- package/dist/hoc/with-tambo-interactable.js.map +1 -0
- package/dist/hoc/with-tambo-interactable.test.d.ts +2 -0
- package/dist/hoc/with-tambo-interactable.test.d.ts.map +1 -0
- package/dist/hoc/with-tambo-interactable.test.js +192 -0
- package/dist/hoc/with-tambo-interactable.test.js.map +1 -0
- package/dist/hooks/index.d.ts +1 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +2 -1
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/use-current-message.d.ts +51 -7
- package/dist/hooks/use-current-message.d.ts.map +1 -1
- package/dist/hooks/use-current-message.js +50 -6
- package/dist/hooks/use-current-message.js.map +1 -1
- package/dist/hooks/use-current-message.test.d.ts +2 -0
- package/dist/hooks/use-current-message.test.d.ts.map +1 -0
- package/dist/hooks/use-current-message.test.js +264 -0
- package/dist/hooks/use-current-message.test.js.map +1 -0
- package/dist/index.d.ts +10 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/dist/mcp/index.d.ts +1 -1
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +2 -1
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/mcp-hooks.d.ts +77 -6
- package/dist/mcp/mcp-hooks.d.ts.map +1 -1
- package/dist/mcp/mcp-hooks.js +104 -40
- package/dist/mcp/mcp-hooks.js.map +1 -1
- package/dist/mcp/mcp-hooks.test.js +83 -18
- package/dist/mcp/mcp-hooks.test.js.map +1 -1
- package/dist/mcp/tambo-mcp-provider.d.ts.map +1 -1
- package/dist/mcp/tambo-mcp-provider.js +2 -1
- package/dist/mcp/tambo-mcp-provider.js.map +1 -1
- package/dist/model/component-metadata.d.ts +444 -14
- package/dist/model/component-metadata.d.ts.map +1 -1
- package/dist/model/component-metadata.js.map +1 -1
- package/dist/model/generate-component-response.d.ts +12 -1
- package/dist/model/generate-component-response.d.ts.map +1 -1
- package/dist/model/generate-component-response.js.map +1 -1
- package/dist/model/resource-info.d.ts +55 -0
- package/dist/model/resource-info.d.ts.map +1 -0
- package/dist/model/resource-info.js +3 -0
- package/dist/model/resource-info.js.map +1 -0
- package/dist/providers/index.d.ts +1 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/tambo-component-provider.d.ts +4 -4
- package/dist/providers/tambo-component-provider.d.ts.map +1 -1
- package/dist/providers/tambo-component-provider.js.map +1 -1
- package/dist/providers/tambo-interactable-provider-partial-updates.test.js +87 -87
- package/dist/providers/tambo-interactable-provider-partial-updates.test.js.map +1 -1
- package/dist/providers/tambo-interactable-provider.d.ts +2 -3
- package/dist/providers/tambo-interactable-provider.d.ts.map +1 -1
- package/dist/providers/tambo-interactable-provider.js +47 -41
- package/dist/providers/tambo-interactable-provider.js.map +1 -1
- package/dist/providers/tambo-interactables-additional-context-edge-cases.test.js +9 -9
- package/dist/providers/tambo-interactables-additional-context-edge-cases.test.js.map +1 -1
- package/dist/providers/tambo-interactables-additional-context.test.js +11 -11
- package/dist/providers/tambo-interactables-additional-context.test.js.map +1 -1
- package/dist/providers/tambo-registry-provider.d.ts +28 -7
- package/dist/providers/tambo-registry-provider.d.ts.map +1 -1
- package/dist/providers/tambo-registry-provider.js +70 -181
- package/dist/providers/tambo-registry-provider.js.map +1 -1
- package/dist/providers/tambo-registry-provider.test.js +152 -30
- package/dist/providers/tambo-registry-provider.test.js.map +1 -1
- package/dist/providers/tambo-registry-schema-compat.test.d.ts +2 -0
- package/dist/providers/tambo-registry-schema-compat.test.d.ts.map +1 -0
- package/dist/providers/tambo-registry-schema-compat.test.js +616 -0
- package/dist/providers/tambo-registry-schema-compat.test.js.map +1 -0
- package/dist/providers/tambo-stubs.d.ts +2 -2
- package/dist/providers/tambo-stubs.d.ts.map +1 -1
- package/dist/providers/tambo-stubs.js +5 -0
- package/dist/providers/tambo-stubs.js.map +1 -1
- package/dist/providers/tambo-thread-input-provider.d.ts +1 -0
- package/dist/providers/tambo-thread-input-provider.d.ts.map +1 -1
- package/dist/providers/tambo-thread-input-provider.js +3 -3
- package/dist/providers/tambo-thread-input-provider.js.map +1 -1
- package/dist/providers/tambo-thread-provider.d.ts.map +1 -1
- package/dist/providers/tambo-thread-provider.js.map +1 -1
- package/dist/providers/tambo-thread-provider.test.js +32 -36
- package/dist/providers/tambo-thread-provider.test.js.map +1 -1
- package/dist/schema/index.d.ts +6 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +18 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/json-schema.d.ts +35 -0
- package/dist/schema/json-schema.d.ts.map +1 -0
- package/dist/schema/json-schema.js +103 -0
- package/dist/schema/json-schema.js.map +1 -0
- package/dist/schema/schema.d.ts +66 -0
- package/dist/schema/schema.d.ts.map +1 -0
- package/dist/schema/schema.js +189 -0
- package/dist/schema/schema.js.map +1 -0
- package/dist/schema/schema.test.d.ts +2 -0
- package/dist/schema/schema.test.d.ts.map +1 -0
- package/dist/schema/schema.test.js +41 -0
- package/dist/schema/schema.test.js.map +1 -0
- package/dist/schema/standard-schema.d.ts +21 -0
- package/dist/schema/standard-schema.d.ts.map +1 -0
- package/dist/schema/standard-schema.js +37 -0
- package/dist/schema/standard-schema.js.map +1 -0
- package/dist/schema/validate.d.ts +14 -0
- package/dist/schema/validate.d.ts.map +1 -0
- package/dist/schema/validate.js +148 -0
- package/dist/schema/validate.js.map +1 -0
- package/dist/schema/validate.test.d.ts +2 -0
- package/dist/schema/validate.test.d.ts.map +1 -0
- package/dist/schema/validate.test.js +128 -0
- package/dist/schema/validate.test.js.map +1 -0
- package/dist/schema/zod.d.ts +54 -0
- package/dist/schema/zod.d.ts.map +1 -0
- package/dist/schema/zod.js +147 -0
- package/dist/schema/zod.js.map +1 -0
- package/dist/testing/tools.d.ts +29 -15
- package/dist/testing/tools.d.ts.map +1 -1
- package/dist/testing/tools.js +64 -19
- package/dist/testing/tools.js.map +1 -1
- package/dist/util/generate-component.d.ts.map +1 -1
- package/dist/util/generate-component.js +3 -3
- package/dist/util/generate-component.js.map +1 -1
- package/dist/util/mcp-server-utils.d.ts +23 -0
- package/dist/util/mcp-server-utils.d.ts.map +1 -0
- package/dist/util/mcp-server-utils.js +107 -0
- package/dist/util/mcp-server-utils.js.map +1 -0
- package/dist/util/mcp-server-utils.test.d.ts +2 -0
- package/dist/util/mcp-server-utils.test.d.ts.map +1 -0
- package/dist/util/mcp-server-utils.test.js +287 -0
- package/dist/util/mcp-server-utils.test.js.map +1 -0
- package/dist/util/message-builder.d.ts +2 -1
- package/dist/util/message-builder.d.ts.map +1 -1
- package/dist/util/message-builder.js +54 -36
- package/dist/util/message-builder.js.map +1 -1
- package/dist/util/message-builder.test.js +500 -13
- package/dist/util/message-builder.test.js.map +1 -1
- package/dist/util/registry-validators.d.ts +26 -0
- package/dist/util/registry-validators.d.ts.map +1 -0
- package/dist/util/registry-validators.js +105 -0
- package/dist/util/registry-validators.js.map +1 -0
- package/dist/util/registry-validators.test.d.ts +2 -0
- package/dist/util/registry-validators.test.d.ts.map +1 -0
- package/dist/util/registry-validators.test.js +235 -0
- package/dist/util/registry-validators.test.js.map +1 -0
- package/dist/util/registry.d.ts +35 -7
- package/dist/util/registry.d.ts.map +1 -1
- package/dist/util/registry.js +60 -77
- package/dist/util/registry.js.map +1 -1
- package/dist/util/registry.test.d.ts +2 -0
- package/dist/util/registry.test.d.ts.map +1 -0
- package/dist/util/registry.test.js +204 -0
- package/dist/util/registry.test.js.map +1 -0
- package/dist/util/resource-validators.d.ts +16 -0
- package/dist/util/resource-validators.d.ts.map +1 -0
- package/dist/util/resource-validators.js +34 -0
- package/dist/util/resource-validators.js.map +1 -0
- package/dist/util/tool-caller.d.ts +2 -2
- package/dist/util/tool-caller.d.ts.map +1 -1
- package/dist/util/tool-caller.js +12 -4
- package/dist/util/tool-caller.js.map +1 -1
- package/esm/{providers/hoc → hoc}/with-tambo-interactable.d.ts +2 -2
- package/esm/hoc/with-tambo-interactable.d.ts.map +1 -0
- package/esm/{providers/hoc → hoc}/with-tambo-interactable.js +29 -2
- package/esm/hoc/with-tambo-interactable.js.map +1 -0
- package/esm/hoc/with-tambo-interactable.test.d.ts +2 -0
- package/esm/hoc/with-tambo-interactable.test.d.ts.map +1 -0
- package/esm/hoc/with-tambo-interactable.test.js +187 -0
- package/esm/hoc/with-tambo-interactable.test.js.map +1 -0
- package/esm/hooks/index.d.ts +1 -1
- package/esm/hooks/index.d.ts.map +1 -1
- package/esm/hooks/index.js +1 -1
- package/esm/hooks/index.js.map +1 -1
- package/esm/hooks/use-current-message.d.ts +51 -7
- package/esm/hooks/use-current-message.d.ts.map +1 -1
- package/esm/hooks/use-current-message.js +48 -5
- package/esm/hooks/use-current-message.js.map +1 -1
- package/esm/hooks/use-current-message.test.d.ts +2 -0
- package/esm/hooks/use-current-message.test.d.ts.map +1 -0
- package/esm/hooks/use-current-message.test.js +259 -0
- package/esm/hooks/use-current-message.test.js.map +1 -0
- package/esm/index.d.ts +10 -8
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +4 -2
- package/esm/index.js.map +1 -1
- package/esm/mcp/index.d.ts +1 -1
- package/esm/mcp/index.d.ts.map +1 -1
- package/esm/mcp/index.js +1 -1
- package/esm/mcp/index.js.map +1 -1
- package/esm/mcp/mcp-hooks.d.ts +77 -6
- package/esm/mcp/mcp-hooks.d.ts.map +1 -1
- package/esm/mcp/mcp-hooks.js +103 -40
- package/esm/mcp/mcp-hooks.js.map +1 -1
- package/esm/mcp/mcp-hooks.test.js +84 -19
- package/esm/mcp/mcp-hooks.test.js.map +1 -1
- package/esm/mcp/tambo-mcp-provider.d.ts.map +1 -1
- package/esm/mcp/tambo-mcp-provider.js +2 -1
- package/esm/mcp/tambo-mcp-provider.js.map +1 -1
- package/esm/model/component-metadata.d.ts +444 -14
- package/esm/model/component-metadata.d.ts.map +1 -1
- package/esm/model/component-metadata.js.map +1 -1
- package/esm/model/generate-component-response.d.ts +12 -1
- package/esm/model/generate-component-response.d.ts.map +1 -1
- package/esm/model/generate-component-response.js.map +1 -1
- package/esm/model/resource-info.d.ts +55 -0
- package/esm/model/resource-info.d.ts.map +1 -0
- package/esm/model/resource-info.js +2 -0
- package/esm/model/resource-info.js.map +1 -0
- package/esm/providers/index.d.ts +1 -1
- package/esm/providers/index.d.ts.map +1 -1
- package/esm/providers/index.js.map +1 -1
- package/esm/providers/tambo-component-provider.d.ts +4 -4
- package/esm/providers/tambo-component-provider.d.ts.map +1 -1
- package/esm/providers/tambo-component-provider.js.map +1 -1
- package/esm/providers/tambo-interactable-provider-partial-updates.test.js +1 -1
- package/esm/providers/tambo-interactable-provider-partial-updates.test.js.map +1 -1
- package/esm/providers/tambo-interactable-provider.d.ts +2 -3
- package/esm/providers/tambo-interactable-provider.d.ts.map +1 -1
- package/esm/providers/tambo-interactable-provider.js +44 -38
- package/esm/providers/tambo-interactable-provider.js.map +1 -1
- package/esm/providers/tambo-interactables-additional-context-edge-cases.test.js +3 -3
- package/esm/providers/tambo-interactables-additional-context-edge-cases.test.js.map +1 -1
- package/esm/providers/tambo-interactables-additional-context.test.js +3 -3
- package/esm/providers/tambo-interactables-additional-context.test.js.map +1 -1
- package/esm/providers/tambo-registry-provider.d.ts +28 -7
- package/esm/providers/tambo-registry-provider.d.ts.map +1 -1
- package/esm/providers/tambo-registry-provider.js +67 -175
- package/esm/providers/tambo-registry-provider.js.map +1 -1
- package/esm/providers/tambo-registry-provider.test.js +148 -26
- package/esm/providers/tambo-registry-provider.test.js.map +1 -1
- package/esm/providers/tambo-registry-schema-compat.test.d.ts +2 -0
- package/esm/providers/tambo-registry-schema-compat.test.d.ts.map +1 -0
- package/esm/providers/tambo-registry-schema-compat.test.js +578 -0
- package/esm/providers/tambo-registry-schema-compat.test.js.map +1 -0
- package/esm/providers/tambo-stubs.d.ts +2 -2
- package/esm/providers/tambo-stubs.d.ts.map +1 -1
- package/esm/providers/tambo-stubs.js +5 -0
- package/esm/providers/tambo-stubs.js.map +1 -1
- package/esm/providers/tambo-thread-input-provider.d.ts +1 -0
- package/esm/providers/tambo-thread-input-provider.d.ts.map +1 -1
- package/esm/providers/tambo-thread-input-provider.js +3 -3
- package/esm/providers/tambo-thread-input-provider.js.map +1 -1
- package/esm/providers/tambo-thread-provider.d.ts.map +1 -1
- package/esm/providers/tambo-thread-provider.js.map +1 -1
- package/esm/providers/tambo-thread-provider.test.js +24 -28
- package/esm/providers/tambo-thread-provider.test.js.map +1 -1
- package/esm/schema/index.d.ts +6 -0
- package/esm/schema/index.d.ts.map +1 -0
- package/esm/schema/index.js +6 -0
- package/esm/schema/index.js.map +1 -0
- package/esm/schema/json-schema.d.ts +35 -0
- package/esm/schema/json-schema.d.ts.map +1 -0
- package/esm/schema/json-schema.js +98 -0
- package/esm/schema/json-schema.js.map +1 -0
- package/esm/schema/schema.d.ts +66 -0
- package/esm/schema/schema.d.ts.map +1 -0
- package/esm/schema/schema.js +182 -0
- package/esm/schema/schema.js.map +1 -0
- package/esm/schema/schema.test.d.ts +2 -0
- package/esm/schema/schema.test.d.ts.map +1 -0
- package/esm/schema/schema.test.js +39 -0
- package/esm/schema/schema.test.js.map +1 -0
- package/esm/schema/standard-schema.d.ts +21 -0
- package/esm/schema/standard-schema.d.ts.map +1 -0
- package/esm/schema/standard-schema.js +34 -0
- package/esm/schema/standard-schema.js.map +1 -0
- package/esm/schema/validate.d.ts +14 -0
- package/esm/schema/validate.d.ts.map +1 -0
- package/esm/schema/validate.js +145 -0
- package/esm/schema/validate.js.map +1 -0
- package/esm/schema/validate.test.d.ts +2 -0
- package/esm/schema/validate.test.d.ts.map +1 -0
- package/esm/schema/validate.test.js +126 -0
- package/esm/schema/validate.test.js.map +1 -0
- package/esm/schema/zod.d.ts +54 -0
- package/esm/schema/zod.d.ts.map +1 -0
- package/esm/schema/zod.js +136 -0
- package/esm/schema/zod.js.map +1 -0
- package/esm/testing/tools.d.ts +29 -15
- package/esm/testing/tools.d.ts.map +1 -1
- package/esm/testing/tools.js +62 -16
- package/esm/testing/tools.js.map +1 -1
- package/esm/util/generate-component.d.ts.map +1 -1
- package/esm/util/generate-component.js +3 -3
- package/esm/util/generate-component.js.map +1 -1
- package/esm/util/mcp-server-utils.d.ts +23 -0
- package/esm/util/mcp-server-utils.d.ts.map +1 -0
- package/esm/util/mcp-server-utils.js +102 -0
- package/esm/util/mcp-server-utils.js.map +1 -0
- package/esm/util/mcp-server-utils.test.d.ts +2 -0
- package/esm/util/mcp-server-utils.test.d.ts.map +1 -0
- package/esm/util/mcp-server-utils.test.js +285 -0
- package/esm/util/mcp-server-utils.test.js.map +1 -0
- package/esm/util/message-builder.d.ts +2 -1
- package/esm/util/message-builder.d.ts.map +1 -1
- package/esm/util/message-builder.js +54 -36
- package/esm/util/message-builder.js.map +1 -1
- package/esm/util/message-builder.test.js +500 -13
- package/esm/util/message-builder.test.js.map +1 -1
- package/esm/util/registry-validators.d.ts +26 -0
- package/esm/util/registry-validators.d.ts.map +1 -0
- package/esm/util/registry-validators.js +100 -0
- package/esm/util/registry-validators.js.map +1 -0
- package/esm/util/registry-validators.test.d.ts +2 -0
- package/esm/util/registry-validators.test.d.ts.map +1 -0
- package/esm/util/registry-validators.test.js +233 -0
- package/esm/util/registry-validators.test.js.map +1 -0
- package/esm/util/registry.d.ts +35 -7
- package/esm/util/registry.d.ts.map +1 -1
- package/esm/util/registry.js +57 -73
- package/esm/util/registry.js.map +1 -1
- package/esm/util/registry.test.d.ts +2 -0
- package/esm/util/registry.test.d.ts.map +1 -0
- package/esm/util/registry.test.js +169 -0
- package/esm/util/registry.test.js.map +1 -0
- package/esm/util/resource-validators.d.ts +16 -0
- package/esm/util/resource-validators.d.ts.map +1 -0
- package/esm/util/resource-validators.js +30 -0
- package/esm/util/resource-validators.js.map +1 -0
- package/esm/util/tool-caller.d.ts +2 -2
- package/esm/util/tool-caller.d.ts.map +1 -1
- package/esm/util/tool-caller.js +12 -4
- package/esm/util/tool-caller.js.map +1 -1
- package/package.json +13 -8
- package/dist/providers/hoc/with-tambo-interactable.d.ts.map +0 -1
- package/dist/providers/hoc/with-tambo-interactable.js.map +0 -1
- package/dist/util/validate-zod-schema.d.ts +0 -10
- package/dist/util/validate-zod-schema.d.ts.map +0 -1
- package/dist/util/validate-zod-schema.js +0 -100
- package/dist/util/validate-zod-schema.js.map +0 -1
- package/dist/util/validate-zod-schema.test.d.ts +0 -2
- package/dist/util/validate-zod-schema.test.d.ts.map +0 -1
- package/dist/util/validate-zod-schema.test.js +0 -96
- package/dist/util/validate-zod-schema.test.js.map +0 -1
- package/esm/providers/hoc/with-tambo-interactable.d.ts.map +0 -1
- package/esm/providers/hoc/with-tambo-interactable.js.map +0 -1
- package/esm/util/validate-zod-schema.d.ts +0 -10
- package/esm/util/validate-zod-schema.d.ts.map +0 -1
- package/esm/util/validate-zod-schema.js +0 -97
- package/esm/util/validate-zod-schema.js.map +0 -1
- package/esm/util/validate-zod-schema.test.d.ts +0 -2
- package/esm/util/validate-zod-schema.test.d.ts.map +0 -1
- package/esm/util/validate-zod-schema.test.js +0 -94
- package/esm/util/validate-zod-schema.test.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EACL,2BAA2B,EAC3B,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,KAAK,eAAe,GACrB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { looksLikeJSONSchema } from "./json-schema";
|
|
2
|
+
export { getParametersFromToolSchema, hasInputSchema, safeSchemaToJsonSchema, schemaToJsonSchema, } from "./schema";
|
|
3
|
+
export { isStandardSchema } from "./standard-schema";
|
|
4
|
+
export { assertNoRecordSchema } from "./validate";
|
|
5
|
+
export { getZodFunctionArgs, getZodFunctionReturns } from "./zod";
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EACL,2BAA2B,EAC3B,cAAc,EACd,sBAAsB,EACtB,kBAAkB,GAEnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC","sourcesContent":["export { looksLikeJSONSchema } from \"./json-schema\";\nexport {\n getParametersFromToolSchema,\n hasInputSchema,\n safeSchemaToJsonSchema,\n schemaToJsonSchema,\n type SupportedSchema,\n} from \"./schema\";\nexport { isStandardSchema } from \"./standard-schema\";\nexport { assertNoRecordSchema } from \"./validate\";\nexport { getZodFunctionArgs, getZodFunctionReturns } from \"./zod\";\n"]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { JSONSchema7 } from "json-schema";
|
|
2
|
+
/**
|
|
3
|
+
* Basic heuristic to check if an object looks like a JSON Schema at the top level.
|
|
4
|
+
*
|
|
5
|
+
* This uses a Zod schema to verify only top-level keys (type, properties, items,
|
|
6
|
+
* etc.). It intentionally does not perform full JSON Schema validation; a more
|
|
7
|
+
* thorough check should be done server-side.
|
|
8
|
+
* @param obj - The value to check
|
|
9
|
+
* @returns True if the value appears to be a JSON Schema
|
|
10
|
+
*/
|
|
11
|
+
export declare function looksLikeJSONSchema(obj: unknown): obj is JSONSchema7;
|
|
12
|
+
/**
|
|
13
|
+
* Extended JSON Schema type that includes draft 2020-12 features like prefixItems.
|
|
14
|
+
* The json-schema package types are from draft-07 and don't include prefixItems.
|
|
15
|
+
*/
|
|
16
|
+
export type JSONSchema7Extended = JSONSchema7 & {
|
|
17
|
+
prefixItems?: JSONSchema7[];
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Checks if a JSON Schema represents a tuple (array with positional items).
|
|
21
|
+
* Supports both draft-07 (items as array) and draft 2020-12 (prefixItems).
|
|
22
|
+
* @param schema - The JSON Schema to check
|
|
23
|
+
* @returns True if the schema represents a tuple
|
|
24
|
+
*/
|
|
25
|
+
export declare function isJsonSchemaTuple(schema: JSONSchema7Extended): schema is JSONSchema7Extended & {
|
|
26
|
+
type: "array";
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Gets the tuple items from a JSON Schema.
|
|
30
|
+
* Supports both draft-07 (items as array) and draft 2020-12 (prefixItems).
|
|
31
|
+
* @param schema - The JSON Schema tuple
|
|
32
|
+
* @returns Array of item schemas, or undefined if not a tuple
|
|
33
|
+
*/
|
|
34
|
+
export declare function getJsonSchemaTupleItems(schema: JSONSchema7Extended): JSONSchema7[] | undefined;
|
|
35
|
+
//# sourceMappingURL=json-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema.d.ts","sourceRoot":"","sources":["../../src/schema/json-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAkD1C;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,WAAW,CAMpE;AAED;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG;IAC9C,WAAW,CAAC,EAAE,WAAW,EAAE,CAAC;CAC7B,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,mBAAmB,GAC1B,MAAM,IAAI,mBAAmB,GAAG;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAgBnD;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,mBAAmB,GAC1B,WAAW,EAAE,GAAG,SAAS,CAgB3B"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { z } from "zodInternalAlias";
|
|
2
|
+
const jsonSchemaType = z.union([
|
|
3
|
+
z.literal("object"),
|
|
4
|
+
z.literal("array"),
|
|
5
|
+
z.literal("string"),
|
|
6
|
+
z.literal("number"),
|
|
7
|
+
z.literal("integer"),
|
|
8
|
+
z.literal("boolean"),
|
|
9
|
+
z.literal("null"),
|
|
10
|
+
z.array(z.union([
|
|
11
|
+
z.literal("object"),
|
|
12
|
+
z.literal("array"),
|
|
13
|
+
z.literal("string"),
|
|
14
|
+
z.literal("number"),
|
|
15
|
+
z.literal("integer"),
|
|
16
|
+
z.literal("boolean"),
|
|
17
|
+
z.literal("null"),
|
|
18
|
+
])),
|
|
19
|
+
]);
|
|
20
|
+
const jsonSchemaTopLevel = z
|
|
21
|
+
.looseObject({
|
|
22
|
+
type: jsonSchemaType.optional(),
|
|
23
|
+
properties: z.record(z.string(), z.unknown()).optional(),
|
|
24
|
+
items: z.union([z.array(z.unknown()), z.unknown()]).optional(),
|
|
25
|
+
required: z.array(z.string()).optional(),
|
|
26
|
+
additionalProperties: z.union([z.boolean(), z.unknown()]).optional(),
|
|
27
|
+
enum: z.array(z.unknown()).optional(),
|
|
28
|
+
const: z.unknown().optional(),
|
|
29
|
+
$ref: z.string().optional(),
|
|
30
|
+
$id: z.string().optional(),
|
|
31
|
+
$schema: z.string().optional(),
|
|
32
|
+
title: z.string().optional(),
|
|
33
|
+
description: z.string().optional(),
|
|
34
|
+
})
|
|
35
|
+
.refine((value) => {
|
|
36
|
+
return (value.type !== undefined ||
|
|
37
|
+
value.properties !== undefined ||
|
|
38
|
+
value.items !== undefined ||
|
|
39
|
+
value.enum !== undefined ||
|
|
40
|
+
value.const !== undefined ||
|
|
41
|
+
value.$ref !== undefined);
|
|
42
|
+
});
|
|
43
|
+
/**
|
|
44
|
+
* Basic heuristic to check if an object looks like a JSON Schema at the top level.
|
|
45
|
+
*
|
|
46
|
+
* This uses a Zod schema to verify only top-level keys (type, properties, items,
|
|
47
|
+
* etc.). It intentionally does not perform full JSON Schema validation; a more
|
|
48
|
+
* thorough check should be done server-side.
|
|
49
|
+
* @param obj - The value to check
|
|
50
|
+
* @returns True if the value appears to be a JSON Schema
|
|
51
|
+
*/
|
|
52
|
+
export function looksLikeJSONSchema(obj) {
|
|
53
|
+
if (obj === null || typeof obj !== "object") {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
return jsonSchemaTopLevel.safeParse(obj).success;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Checks if a JSON Schema represents a tuple (array with positional items).
|
|
60
|
+
* Supports both draft-07 (items as array) and draft 2020-12 (prefixItems).
|
|
61
|
+
* @param schema - The JSON Schema to check
|
|
62
|
+
* @returns True if the schema represents a tuple
|
|
63
|
+
*/
|
|
64
|
+
export function isJsonSchemaTuple(schema) {
|
|
65
|
+
if (schema.type !== "array") {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
// Draft 2020-12: prefixItems array
|
|
69
|
+
if (schema.prefixItems && Array.isArray(schema.prefixItems)) {
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
// Draft-07: items as array (not object)
|
|
73
|
+
if (Array.isArray(schema.items)) {
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Gets the tuple items from a JSON Schema.
|
|
80
|
+
* Supports both draft-07 (items as array) and draft 2020-12 (prefixItems).
|
|
81
|
+
* @param schema - The JSON Schema tuple
|
|
82
|
+
* @returns Array of item schemas, or undefined if not a tuple
|
|
83
|
+
*/
|
|
84
|
+
export function getJsonSchemaTupleItems(schema) {
|
|
85
|
+
if (schema.type !== "array") {
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
88
|
+
// Draft 2020-12: prefixItems array
|
|
89
|
+
if (schema.prefixItems && Array.isArray(schema.prefixItems)) {
|
|
90
|
+
return schema.prefixItems;
|
|
91
|
+
}
|
|
92
|
+
// Draft-07: items as array
|
|
93
|
+
if (Array.isArray(schema.items)) {
|
|
94
|
+
return schema.items;
|
|
95
|
+
}
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=json-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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 \"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"]}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema utilities for working with Standard Schema, Zod, and JSON Schema.
|
|
3
|
+
*
|
|
4
|
+
* This module provides a unified interface for handling different schema types
|
|
5
|
+
* used in Tambo components and tools. It uses Standard Schema (https://standardschema.dev/)
|
|
6
|
+
* as the primary interface, which is implemented by Zod and other validation libraries.
|
|
7
|
+
*
|
|
8
|
+
* JSON Schema conversion is handled by `@standard-community/standard-json`, with:
|
|
9
|
+
* - Zod 4: Uses Zod's native toJSONSchema
|
|
10
|
+
* - Zod 3: Requires optional peer dependency 'zod-to-json-schema'
|
|
11
|
+
* - Other vendors: Handled by standard-json's built-in converters
|
|
12
|
+
* @module schema
|
|
13
|
+
*/
|
|
14
|
+
import type { JSONSchema7 } from "json-schema";
|
|
15
|
+
import { ParameterSpec, SupportedSchema, TamboTool, TamboToolWithToolSchema } from "../model/component-metadata";
|
|
16
|
+
/**
|
|
17
|
+
* Converts a schema (Standard Schema or JSON Schema) to a JSON Schema object.
|
|
18
|
+
*
|
|
19
|
+
* If the schema is already a JSON Schema, it is returned as-is.
|
|
20
|
+
* For Standard Schema validators (Zod, Valibot, ArkType, etc.), uses
|
|
21
|
+
* `@standard-community/standard-json` for conversion.
|
|
22
|
+
* @param schema - The schema to convert
|
|
23
|
+
* @returns The JSON Schema representation
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* import { z } from "zod/v4";
|
|
27
|
+
*
|
|
28
|
+
* // Convert a Zod schema
|
|
29
|
+
* const zodSchema = z.object({ name: z.string() });
|
|
30
|
+
* const jsonSchema = schemaToJsonSchema(zodSchema);
|
|
31
|
+
*
|
|
32
|
+
* // Pass through a JSON Schema
|
|
33
|
+
* const existingJsonSchema = { type: "object", properties: { name: { type: "string" } } };
|
|
34
|
+
* schemaToJsonSchema(existingJsonSchema); // returns the same object
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare function schemaToJsonSchema(schema: SupportedSchema): JSONSchema7;
|
|
38
|
+
/**
|
|
39
|
+
* Safely converts a schema to JSON Schema, returning undefined for invalid inputs.
|
|
40
|
+
* @param schema - The schema to convert (may be undefined)
|
|
41
|
+
* @param onError - Optional callback invoked on conversion error
|
|
42
|
+
* @returns The JSON Schema representation, or undefined if conversion fails
|
|
43
|
+
*/
|
|
44
|
+
export declare function safeSchemaToJsonSchema(schema: SupportedSchema | undefined | null, onError?: (error: unknown) => void): JSONSchema7 | undefined;
|
|
45
|
+
/**
|
|
46
|
+
* Checks if a tool uses the new inputSchema interface (vs deprecated toolSchema).
|
|
47
|
+
* @param tool - The Tambo tool to check
|
|
48
|
+
* @returns True if the tool uses inputSchema
|
|
49
|
+
*/
|
|
50
|
+
export declare function hasInputSchema(tool: TamboTool | TamboToolWithToolSchema): tool is TamboTool;
|
|
51
|
+
/**
|
|
52
|
+
* Extracts parameter specifications from a tool schema.
|
|
53
|
+
*
|
|
54
|
+
* For tools with **inputSchema** (new interface):
|
|
55
|
+
* - Returns a single parameter named "input" representing the object schema
|
|
56
|
+
* - The inputSchema defines the shape of the single object argument
|
|
57
|
+
*
|
|
58
|
+
* For tools with **toolSchema** (deprecated):
|
|
59
|
+
* - Extracts positional parameters from tuple/function args
|
|
60
|
+
* - Returns params named "param1", "param2", etc.
|
|
61
|
+
* @param tool - The tool containing the schema
|
|
62
|
+
* @returns An array of parameter specifications
|
|
63
|
+
*/
|
|
64
|
+
export declare const getParametersFromToolSchema: (tool: TamboTool | TamboToolWithToolSchema) => ParameterSpec[];
|
|
65
|
+
export type { SupportedSchema };
|
|
66
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +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;AAsDD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,2BAA2B,GACtC,MAAM,SAAS,GAAG,uBAAuB,KACxC,aAAa,EAmDf,CAAC;AAEF,YAAY,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema utilities for working with Standard Schema, Zod, and JSON Schema.
|
|
3
|
+
*
|
|
4
|
+
* This module provides a unified interface for handling different schema types
|
|
5
|
+
* used in Tambo components and tools. It uses Standard Schema (https://standardschema.dev/)
|
|
6
|
+
* as the primary interface, which is implemented by Zod and other validation libraries.
|
|
7
|
+
*
|
|
8
|
+
* JSON Schema conversion is handled by `@standard-community/standard-json`, with:
|
|
9
|
+
* - Zod 4: Uses Zod's native toJSONSchema
|
|
10
|
+
* - Zod 3: Requires optional peer dependency 'zod-to-json-schema'
|
|
11
|
+
* - Other vendors: Handled by standard-json's built-in converters
|
|
12
|
+
* @module schema
|
|
13
|
+
*/
|
|
14
|
+
import { loadVendor, toJsonSchema } from "@standard-community/standard-json";
|
|
15
|
+
import { getJsonSchemaTupleItems, isJsonSchemaTuple, looksLikeJSONSchema, } from "./json-schema";
|
|
16
|
+
import { isStandardSchema } from "./standard-schema";
|
|
17
|
+
import { getZodFunctionArgs, handleZodSchemaToJson, isZodSchema } from "./zod";
|
|
18
|
+
// Register the Zod vendor converter with standard-json
|
|
19
|
+
loadVendor("zod", handleZodSchemaToJson);
|
|
20
|
+
/**
|
|
21
|
+
* Converts a schema (Standard Schema or JSON Schema) to a JSON Schema object.
|
|
22
|
+
*
|
|
23
|
+
* If the schema is already a JSON Schema, it is returned as-is.
|
|
24
|
+
* For Standard Schema validators (Zod, Valibot, ArkType, etc.), uses
|
|
25
|
+
* `@standard-community/standard-json` for conversion.
|
|
26
|
+
* @param schema - The schema to convert
|
|
27
|
+
* @returns The JSON Schema representation
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* import { z } from "zod/v4";
|
|
31
|
+
*
|
|
32
|
+
* // Convert a Zod schema
|
|
33
|
+
* const zodSchema = z.object({ name: z.string() });
|
|
34
|
+
* const jsonSchema = schemaToJsonSchema(zodSchema);
|
|
35
|
+
*
|
|
36
|
+
* // Pass through a JSON Schema
|
|
37
|
+
* const existingJsonSchema = { type: "object", properties: { name: { type: "string" } } };
|
|
38
|
+
* schemaToJsonSchema(existingJsonSchema); // returns the same object
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export function schemaToJsonSchema(schema) {
|
|
42
|
+
// Already a JSON Schema - return as-is
|
|
43
|
+
if (!isStandardSchema(schema)) {
|
|
44
|
+
return schema;
|
|
45
|
+
}
|
|
46
|
+
return toJsonSchema.sync(schema);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Safely converts a schema to JSON Schema, returning undefined for invalid inputs.
|
|
50
|
+
* @param schema - The schema to convert (may be undefined)
|
|
51
|
+
* @param onError - Optional callback invoked on conversion error
|
|
52
|
+
* @returns The JSON Schema representation, or undefined if conversion fails
|
|
53
|
+
*/
|
|
54
|
+
export function safeSchemaToJsonSchema(schema, onError) {
|
|
55
|
+
if (!schema) {
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
return schemaToJsonSchema(schema);
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
console.error("Error converting schema to JSON Schema:", error);
|
|
63
|
+
onError?.(error);
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Checks if a tool uses the new inputSchema interface (vs deprecated toolSchema).
|
|
69
|
+
* @param tool - The Tambo tool to check
|
|
70
|
+
* @returns True if the tool uses inputSchema
|
|
71
|
+
*/
|
|
72
|
+
export function hasInputSchema(tool) {
|
|
73
|
+
return "inputSchema" in tool && tool.inputSchema != null;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Retrieves the input schema for a Tambo tool using the deprecated toolSchema.
|
|
77
|
+
* For toolSchema, this extracts the args from the Zod function schema.
|
|
78
|
+
* @param tool - The Tambo tool (potentially with toolSchema)
|
|
79
|
+
* @returns The input schema (Standard Schema or JSON Schema), or undefined if not toolSchema
|
|
80
|
+
*/
|
|
81
|
+
function getArgsFromToolSchema(tool) {
|
|
82
|
+
if (looksLikeJSONSchema(tool.toolSchema)) {
|
|
83
|
+
return tool.toolSchema;
|
|
84
|
+
}
|
|
85
|
+
return getZodFunctionArgs(tool.toolSchema);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Extracts parameter specifications from JSON Schema tuple items.
|
|
89
|
+
* Supports both draft-07 (items as array) and draft 2020-12 (prefixItems).
|
|
90
|
+
* This is library-agnostic - works with Zod, Valibot, ArkType, etc.
|
|
91
|
+
* @param tupleItems - The array of JSON Schema items
|
|
92
|
+
* @returns An array of parameter specifications
|
|
93
|
+
*/
|
|
94
|
+
function extractParamsFromJsonSchemaTuple(tupleItems) {
|
|
95
|
+
return tupleItems.map((item, index) => ({
|
|
96
|
+
name: `param${index + 1}`,
|
|
97
|
+
type: typeof item.type === "string" ? item.type : "object",
|
|
98
|
+
description: item.description ?? "",
|
|
99
|
+
isRequired: true, // tuple items are positional
|
|
100
|
+
schema: item,
|
|
101
|
+
}));
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Creates a single parameter spec from an input schema.
|
|
105
|
+
* Used for the new inputSchema interface where the schema represents
|
|
106
|
+
* the shape of the single object argument to the tool function.
|
|
107
|
+
* @param schema - The input schema (JSON Schema)
|
|
108
|
+
* @returns A single parameter specification
|
|
109
|
+
*/
|
|
110
|
+
function createInputParameter(schema) {
|
|
111
|
+
return {
|
|
112
|
+
name: "input",
|
|
113
|
+
type: typeof schema.type === "string" ? schema.type : "object",
|
|
114
|
+
description: schema.description ?? "",
|
|
115
|
+
isRequired: true,
|
|
116
|
+
schema,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Extracts parameter specifications from a tool schema.
|
|
121
|
+
*
|
|
122
|
+
* For tools with **inputSchema** (new interface):
|
|
123
|
+
* - Returns a single parameter named "input" representing the object schema
|
|
124
|
+
* - The inputSchema defines the shape of the single object argument
|
|
125
|
+
*
|
|
126
|
+
* For tools with **toolSchema** (deprecated):
|
|
127
|
+
* - Extracts positional parameters from tuple/function args
|
|
128
|
+
* - Returns params named "param1", "param2", etc.
|
|
129
|
+
* @param tool - The tool containing the schema
|
|
130
|
+
* @returns An array of parameter specifications
|
|
131
|
+
*/
|
|
132
|
+
export const getParametersFromToolSchema = (tool) => {
|
|
133
|
+
// New interface: inputSchema represents the single object argument
|
|
134
|
+
if (hasInputSchema(tool)) {
|
|
135
|
+
const schema = tool.inputSchema;
|
|
136
|
+
// Convert to JSON Schema if needed
|
|
137
|
+
let jsonSchema;
|
|
138
|
+
if (looksLikeJSONSchema(schema)) {
|
|
139
|
+
jsonSchema = schema;
|
|
140
|
+
}
|
|
141
|
+
else if (isStandardSchema(schema)) {
|
|
142
|
+
jsonSchema = schemaToJsonSchema(schema);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
console.warn("Unknown inputSchema type, returning empty parameters");
|
|
146
|
+
return [];
|
|
147
|
+
}
|
|
148
|
+
return [createInputParameter(jsonSchema)];
|
|
149
|
+
}
|
|
150
|
+
// Deprecated interface: toolSchema with positional tuple args
|
|
151
|
+
const argsSchema = getArgsFromToolSchema(tool);
|
|
152
|
+
if (!argsSchema) {
|
|
153
|
+
console.warn("No toolSchema found, returning empty parameters");
|
|
154
|
+
return [];
|
|
155
|
+
}
|
|
156
|
+
// Convert to JSON Schema if needed
|
|
157
|
+
let jsonSchema;
|
|
158
|
+
// zod 3 and 4 are both compatible with StandardSchema
|
|
159
|
+
if (isZodSchema(argsSchema)) {
|
|
160
|
+
jsonSchema = handleZodSchemaToJson(argsSchema);
|
|
161
|
+
}
|
|
162
|
+
else if (isStandardSchema(argsSchema)) {
|
|
163
|
+
// uses @standard-community/standard-json for conversion
|
|
164
|
+
jsonSchema = schemaToJsonSchema(argsSchema);
|
|
165
|
+
}
|
|
166
|
+
else if (looksLikeJSONSchema(argsSchema)) {
|
|
167
|
+
// already JSON Schema
|
|
168
|
+
jsonSchema = argsSchema;
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
console.warn("Unknown toolSchema args type, returning empty parameters");
|
|
172
|
+
return [];
|
|
173
|
+
}
|
|
174
|
+
// Extract tuple items for positional params
|
|
175
|
+
if (isJsonSchemaTuple(jsonSchema)) {
|
|
176
|
+
const tupleItems = getJsonSchemaTupleItems(jsonSchema) ?? [];
|
|
177
|
+
return extractParamsFromJsonSchemaTuple(tupleItems);
|
|
178
|
+
}
|
|
179
|
+
// Fallback: wrap as single param (shouldn't normally happen for toolSchema)
|
|
180
|
+
return extractParamsFromJsonSchemaTuple([jsonSchema]);
|
|
181
|
+
};
|
|
182
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +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: 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 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 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"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.test.d.ts","sourceRoot":"","sources":["../../src/schema/schema.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { z } from "zodInternalAlias";
|
|
2
|
+
import { looksLikeJSONSchema } from "./json-schema";
|
|
3
|
+
import { isStandardSchema } from "./standard-schema";
|
|
4
|
+
describe("schema utilities", () => {
|
|
5
|
+
describe("looksLikeJSONSchema", () => {
|
|
6
|
+
it("returns true for a basic JSON Schema object", () => {
|
|
7
|
+
const jsonSchema = {
|
|
8
|
+
type: "object",
|
|
9
|
+
properties: {
|
|
10
|
+
name: { type: "string" },
|
|
11
|
+
age: { type: "integer" },
|
|
12
|
+
},
|
|
13
|
+
required: ["name"],
|
|
14
|
+
};
|
|
15
|
+
expect(looksLikeJSONSchema(jsonSchema)).toBe(true);
|
|
16
|
+
});
|
|
17
|
+
it("returns true for a union type JSON Schema", () => {
|
|
18
|
+
const jsonSchema = {
|
|
19
|
+
type: ["string", "null"],
|
|
20
|
+
};
|
|
21
|
+
expect(looksLikeJSONSchema(jsonSchema)).toBe(true);
|
|
22
|
+
});
|
|
23
|
+
it("returns false for Standard Schema validators", () => {
|
|
24
|
+
const zodSchema = z.object({
|
|
25
|
+
name: z.string(),
|
|
26
|
+
});
|
|
27
|
+
expect(isStandardSchema(zodSchema)).toBe(true);
|
|
28
|
+
expect(looksLikeJSONSchema(zodSchema)).toBe(false);
|
|
29
|
+
});
|
|
30
|
+
it("returns false for arbitrary objects that do not resemble JSON Schema", () => {
|
|
31
|
+
const notSchema = {
|
|
32
|
+
type: "foo",
|
|
33
|
+
other: "bar",
|
|
34
|
+
};
|
|
35
|
+
expect(looksLikeJSONSchema(notSchema)).toBe(false);
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=schema.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.test.js","sourceRoot":"","sources":["../../src/schema/schema.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,kBAAkB,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,UAAU,GAAgB;gBAC9B,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACxB,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;iBACzB;gBACD,QAAQ,EAAE,CAAC,MAAM,CAAC;aACnB,CAAC;YAEF,MAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,UAAU,GAAgB;gBAC9B,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;aACzB,CAAC;YAEF,MAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;gBACzB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;aACjB,CAAC,CAAC;YAEH,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;YAC9E,MAAM,SAAS,GAAG;gBAChB,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,KAAK;aACb,CAAC;YAEF,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import type { JSONSchema7 } from \"json-schema\";\nimport { z } from \"zodInternalAlias\";\nimport { looksLikeJSONSchema } from \"./json-schema\";\nimport { isStandardSchema } from \"./standard-schema\";\n\ndescribe(\"schema utilities\", () => {\n describe(\"looksLikeJSONSchema\", () => {\n it(\"returns true for a basic JSON Schema object\", () => {\n const jsonSchema: JSONSchema7 = {\n type: \"object\",\n properties: {\n name: { type: \"string\" },\n age: { type: \"integer\" },\n },\n required: [\"name\"],\n };\n\n expect(looksLikeJSONSchema(jsonSchema)).toBe(true);\n });\n\n it(\"returns true for a union type JSON Schema\", () => {\n const jsonSchema: JSONSchema7 = {\n type: [\"string\", \"null\"],\n };\n\n expect(looksLikeJSONSchema(jsonSchema)).toBe(true);\n });\n\n it(\"returns false for Standard Schema validators\", () => {\n const zodSchema = z.object({\n name: z.string(),\n });\n\n expect(isStandardSchema(zodSchema)).toBe(true);\n expect(looksLikeJSONSchema(zodSchema)).toBe(false);\n });\n\n it(\"returns false for arbitrary objects that do not resemble JSON Schema\", () => {\n const notSchema = {\n type: \"foo\",\n other: \"bar\",\n };\n\n expect(looksLikeJSONSchema(notSchema)).toBe(false);\n });\n });\n});\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
2
|
+
/**
|
|
3
|
+
* Type guard to check if an object implements the Standard Schema interface.
|
|
4
|
+
*
|
|
5
|
+
* Standard Schema compliant validators have a `~standard` property containing
|
|
6
|
+
* metadata about the schema including version, vendor, and validate function.
|
|
7
|
+
* @param obj - The object to check
|
|
8
|
+
* @returns True if the object implements StandardSchemaV1
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { z } from "zod/v4";
|
|
12
|
+
*
|
|
13
|
+
* const zodSchema = z.object({ name: z.string() });
|
|
14
|
+
* isStandardSchema(zodSchema); // true
|
|
15
|
+
*
|
|
16
|
+
* const jsonSchema = { type: "object", properties: { name: { type: "string" } } };
|
|
17
|
+
* isStandardSchema(jsonSchema); // false
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare function isStandardSchema(obj: unknown): obj is StandardSchemaV1;
|
|
21
|
+
//# sourceMappingURL=standard-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standard-schema.d.ts","sourceRoot":"","sources":["../../src/schema/standard-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAgBzD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,gBAAgB,CAEtE"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { z } from "zodInternalAlias";
|
|
2
|
+
const standardSchemaProps = z.object({
|
|
3
|
+
version: z.literal(1),
|
|
4
|
+
vendor: z.string(),
|
|
5
|
+
validate: z.function({
|
|
6
|
+
input: [z.unknown()],
|
|
7
|
+
output: z.union([z.unknown(), z.promise(z.unknown())]),
|
|
8
|
+
}),
|
|
9
|
+
});
|
|
10
|
+
const standardSchemaObject = z.object({
|
|
11
|
+
"~standard": standardSchemaProps,
|
|
12
|
+
});
|
|
13
|
+
/**
|
|
14
|
+
* Type guard to check if an object implements the Standard Schema interface.
|
|
15
|
+
*
|
|
16
|
+
* Standard Schema compliant validators have a `~standard` property containing
|
|
17
|
+
* metadata about the schema including version, vendor, and validate function.
|
|
18
|
+
* @param obj - The object to check
|
|
19
|
+
* @returns True if the object implements StandardSchemaV1
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* import { z } from "zod/v4";
|
|
23
|
+
*
|
|
24
|
+
* const zodSchema = z.object({ name: z.string() });
|
|
25
|
+
* isStandardSchema(zodSchema); // true
|
|
26
|
+
*
|
|
27
|
+
* const jsonSchema = { type: "object", properties: { name: { type: "string" } } };
|
|
28
|
+
* isStandardSchema(jsonSchema); // false
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export function isStandardSchema(obj) {
|
|
32
|
+
return standardSchemaObject.safeParse(obj).success;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=standard-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standard-schema.js","sourceRoot":"","sources":["../../src/schema/standard-schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,kBAAkB,CAAC;AAErC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC;QACnB,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;KACvD,CAAC;CACH,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,WAAW,EAAE,mBAAmB;CACjC,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,OAAO,oBAAoB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;AACrD,CAAC","sourcesContent":["import { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport { z } from \"zodInternalAlias\";\n\nconst standardSchemaProps = z.object({\n version: z.literal(1),\n vendor: z.string(),\n validate: z.function({\n input: [z.unknown()],\n output: z.union([z.unknown(), z.promise(z.unknown())]),\n }),\n});\n\nconst standardSchemaObject = z.object({\n \"~standard\": standardSchemaProps,\n});\n\n/**\n * Type guard to check if an object implements the Standard Schema interface.\n *\n * Standard Schema compliant validators have a `~standard` property containing\n * metadata about the schema including version, vendor, and validate function.\n * @param obj - The object to check\n * @returns True if the object implements StandardSchemaV1\n * @example\n * ```typescript\n * import { z } from \"zod/v4\";\n *\n * const zodSchema = z.object({ name: z.string() });\n * isStandardSchema(zodSchema); // true\n *\n * const jsonSchema = { type: \"object\", properties: { name: { type: \"string\" } } };\n * isStandardSchema(jsonSchema); // false\n * ```\n */\nexport function isStandardSchema(obj: unknown): obj is StandardSchemaV1 {\n return standardSchemaObject.safeParse(obj).success;\n}\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Asserts that a schema does not contain record types (objects with dynamic keys).
|
|
3
|
+
* Records are not serializable to JSON Schema in a way that the Tambo backend
|
|
4
|
+
* understands, so they are disallowed.
|
|
5
|
+
*
|
|
6
|
+
* This function accepts Standard Schema validators (Zod, Valibot, ArkType, etc.)
|
|
7
|
+
* or JSON Schema objects. It converts them to JSON Schema and checks for record patterns.
|
|
8
|
+
*
|
|
9
|
+
* For tool schemas that are function types, this extracts and validates the input parameters.
|
|
10
|
+
* @param schema - The schema to validate (Standard Schema or JSON Schema)
|
|
11
|
+
* @param contextName - A human-readable label echoed in the error message
|
|
12
|
+
*/
|
|
13
|
+
export declare function assertNoRecordSchema(schema: unknown, contextName?: string): void;
|
|
14
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/schema/validate.ts"],"names":[],"mappings":"AAuIA;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,OAAO,EACf,WAAW,SAAW,GACrB,IAAI,CAqCN"}
|