@tambo-ai/react 0.65.2 → 0.66.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +174 -81
- package/dist/context-helpers/context-helpers-provider.test.d.ts.map +1 -0
- package/dist/context-helpers/{__tests__/context-helpers-provider.test.js → context-helpers-provider.test.js} +2 -2
- package/dist/context-helpers/context-helpers-provider.test.js.map +1 -0
- package/dist/context-helpers/context-helpers.test.d.ts.map +1 -0
- package/dist/context-helpers/{__tests__/context-helpers.test.js → context-helpers.test.js} +1 -1
- package/dist/context-helpers/context-helpers.test.js.map +1 -0
- package/{esm/providers → dist}/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-component-state.d.ts +11 -24
- package/dist/hooks/use-component-state.d.ts.map +1 -1
- package/dist/hooks/use-component-state.js +14 -5
- package/dist/hooks/use-component-state.js.map +1 -1
- package/dist/hooks/use-component-state.test.d.ts.map +1 -0
- package/dist/hooks/{__tests__/use-component-state.test.js → use-component-state.test.js} +7 -7
- package/dist/hooks/use-component-state.test.js.map +1 -0
- 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/hooks/use-message-images.test.d.ts.map +1 -0
- package/dist/hooks/{__tests__/use-message-images.test.js → use-message-images.test.js} +1 -1
- package/dist/hooks/use-message-images.test.js.map +1 -0
- package/dist/hooks/use-streaming-props.d.ts +7 -19
- package/dist/hooks/use-streaming-props.d.ts.map +1 -1
- package/dist/hooks/use-streaming-props.js +7 -19
- package/dist/hooks/use-streaming-props.js.map +1 -1
- package/dist/hooks/use-suggestions.d.ts +1 -1
- package/dist/hooks/use-suggestions.d.ts.map +1 -1
- package/dist/hooks/use-suggestions.js.map +1 -1
- package/dist/hooks/use-suggestions.test.d.ts.map +1 -0
- package/dist/hooks/{__tests__/use-suggestions.test.js → use-suggestions.test.js} +36 -29
- package/dist/hooks/use-suggestions.test.js.map +1 -0
- package/dist/hooks/use-tambo-stream-status.d.ts +9 -8
- package/dist/hooks/use-tambo-stream-status.d.ts.map +1 -1
- package/dist/hooks/use-tambo-stream-status.js +9 -8
- package/dist/hooks/use-tambo-stream-status.js.map +1 -1
- package/dist/hooks/use-tambo-stream-status.test.d.ts.map +1 -0
- package/dist/hooks/{__tests__/use-tambo-stream-status.test.js → use-tambo-stream-status.test.js} +6 -6
- package/dist/hooks/use-tambo-stream-status.test.js.map +1 -0
- package/dist/hooks/use-tambo-threads.test.d.ts.map +1 -0
- package/dist/hooks/{__tests__/use-tambo-threads.test.js → use-tambo-threads.test.js} +3 -3
- package/dist/hooks/use-tambo-threads.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/elicitation.d.ts +10 -2
- package/dist/mcp/elicitation.d.ts.map +1 -1
- package/dist/mcp/elicitation.js +19 -1
- package/dist/mcp/elicitation.js.map +1 -1
- package/dist/mcp/elicitation.test.d.ts.map +1 -0
- package/dist/mcp/{__tests__/elicitation.test.js → elicitation.test.js} +1 -1
- package/dist/mcp/elicitation.test.js.map +1 -0
- package/dist/mcp/index.d.ts +11 -2
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +11 -1
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/mcp-client.d.ts +29 -10
- package/dist/mcp/mcp-client.d.ts.map +1 -1
- package/dist/mcp/mcp-client.test.d.ts.map +1 -0
- package/dist/mcp/{__tests__/mcp-client.test.js → mcp-client.test.js} +1 -1
- package/dist/mcp/mcp-client.test.js.map +1 -0
- package/dist/mcp/mcp-hooks.d.ts +129 -25
- 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.d.ts.map +1 -0
- package/dist/mcp/{__tests__/mcp-hooks.test.js → mcp-hooks.test.js} +90 -51
- package/dist/mcp/mcp-hooks.test.js.map +1 -0
- package/dist/mcp/tambo-mcp-provider.d.ts +2 -0
- package/dist/mcp/tambo-mcp-provider.d.ts.map +1 -1
- package/dist/mcp/tambo-mcp-provider.js +60 -13
- package/dist/mcp/tambo-mcp-provider.js.map +1 -1
- package/dist/mcp/tambo-mcp-provider.test.d.ts.map +1 -0
- package/dist/mcp/{__tests__/tambo-mcp-provider.test.js → tambo-mcp-provider.test.js} +9 -25
- package/dist/mcp/tambo-mcp-provider.test.js.map +1 -0
- package/dist/mcp/use-mcp-servers.test.d.ts.map +1 -0
- package/dist/mcp/{__tests__/use-mcp-servers.test.js → use-mcp-servers.test.js} +5 -11
- package/dist/mcp/use-mcp-servers.test.js.map +1 -0
- 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/mcp-server-info.d.ts +3 -1
- package/dist/model/mcp-server-info.d.ts.map +1 -1
- package/dist/model/mcp-server-info.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/model/tambo-thread.d.ts +6 -1
- package/dist/model/tambo-thread.d.ts.map +1 -1
- package/dist/model/tambo-thread.js.map +1 -1
- package/dist/providers/hooks/use-tambo-session-token.test.d.ts.map +1 -0
- package/dist/providers/hooks/{__tests__/use-tambo-session-token.test.js → use-tambo-session-token.test.js} +1 -1
- package/dist/providers/hooks/use-tambo-session-token.test.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-client-provider.d.ts +0 -4
- package/dist/providers/tambo-client-provider.d.ts.map +1 -1
- package/dist/providers/tambo-client-provider.js +0 -3
- package/dist/providers/tambo-client-provider.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-context-attachment-provider.test.d.ts.map +1 -0
- package/dist/providers/{__tests__/tambo-context-attachment-provider.test.js → tambo-context-attachment-provider.test.js} +2 -2
- package/dist/providers/tambo-context-attachment-provider.test.js.map +1 -0
- package/dist/providers/tambo-context-helpers-provider.test.d.ts.map +1 -0
- package/dist/providers/{__tests__/tambo-context-helpers-provider.test.js → tambo-context-helpers-provider.test.js} +2 -2
- package/dist/providers/tambo-context-helpers-provider.test.js.map +1 -0
- package/dist/providers/tambo-interactable-provider-partial-updates.test.d.ts.map +1 -0
- package/dist/providers/{__tests__/tambo-interactable-provider-partial-updates.test.js → tambo-interactable-provider-partial-updates.test.js} +91 -91
- package/dist/providers/tambo-interactable-provider-partial-updates.test.js.map +1 -0
- 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.d.ts.map +1 -0
- package/dist/providers/{__tests__/tambo-interactables-additional-context-edge-cases.test.js → tambo-interactables-additional-context-edge-cases.test.js} +17 -17
- package/dist/providers/tambo-interactables-additional-context-edge-cases.test.js.map +1 -0
- package/dist/providers/tambo-interactables-additional-context.test.d.ts.map +1 -0
- package/dist/providers/{__tests__/tambo-interactables-additional-context.test.js → tambo-interactables-additional-context.test.js} +19 -19
- package/dist/providers/tambo-interactables-additional-context.test.js.map +1 -0
- package/dist/providers/tambo-mcp-token-provider.d.ts +20 -13
- package/dist/providers/tambo-mcp-token-provider.d.ts.map +1 -1
- package/dist/providers/tambo-mcp-token-provider.js +122 -10
- package/dist/providers/tambo-mcp-token-provider.js.map +1 -1
- package/dist/providers/tambo-prop-stream-provider.test.d.ts.map +1 -0
- package/dist/providers/{__tests__/tambo-prop-stream-provider.test.js → tambo-prop-stream-provider.test.js} +32 -25
- package/dist/providers/tambo-prop-stream-provider.test.js.map +1 -0
- package/dist/providers/tambo-provider.d.ts +2 -2
- package/dist/providers/tambo-provider.d.ts.map +1 -1
- package/dist/providers/tambo-provider.js +5 -7
- package/dist/providers/tambo-provider.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.d.ts.map +1 -0
- package/dist/providers/{__tests__/tambo-registry-provider.test.js → tambo-registry-provider.test.js} +153 -31
- package/dist/providers/tambo-registry-provider.test.js.map +1 -0
- 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 +9 -2
- package/dist/providers/tambo-stubs.js.map +1 -1
- package/dist/providers/tambo-stubs.test.d.ts.map +1 -0
- package/dist/providers/{__tests__/tambo-stubs.test.js → tambo-stubs.test.js} +2 -2
- package/dist/providers/tambo-stubs.test.js.map +1 -0
- package/dist/providers/tambo-thread-input-provider.d.ts +2 -1
- 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-initial-messages.test.d.ts.map +1 -0
- package/dist/providers/{__tests__/tambo-thread-provider-initial-messages.test.js → tambo-thread-provider-initial-messages.test.js} +7 -9
- package/dist/providers/tambo-thread-provider-initial-messages.test.js.map +1 -0
- package/dist/providers/tambo-thread-provider.d.ts +8 -0
- package/dist/providers/tambo-thread-provider.d.ts.map +1 -1
- package/dist/providers/tambo-thread-provider.js +82 -19
- package/dist/providers/tambo-thread-provider.js.map +1 -1
- package/dist/providers/tambo-thread-provider.test.d.ts.map +1 -0
- package/dist/providers/{__tests__/tambo-thread-provider.test.js → tambo-thread-provider.test.js} +42 -78
- package/dist/providers/tambo-thread-provider.test.js.map +1 -0
- 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 +192 -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 +135 -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/content-parts.test.d.ts.map +1 -0
- package/dist/util/{__tests__/content-parts.test.js → content-parts.test.js} +1 -1
- package/dist/util/content-parts.test.js.map +1 -0
- 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 +4 -3
- package/dist/util/message-builder.d.ts.map +1 -1
- package/dist/util/message-builder.js +83 -8
- package/dist/util/message-builder.js.map +1 -1
- package/dist/util/message-builder.test.d.ts.map +1 -0
- package/dist/util/message-builder.test.js +678 -0
- package/dist/util/message-builder.test.js.map +1 -0
- package/dist/util/query-utils.d.ts.map +1 -1
- package/dist/util/query-utils.js +49 -31
- package/dist/util/query-utils.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/context-helpers/context-helpers-provider.test.d.ts.map +1 -0
- package/esm/context-helpers/{__tests__/context-helpers-provider.test.js → context-helpers-provider.test.js} +2 -2
- package/esm/context-helpers/context-helpers-provider.test.js.map +1 -0
- package/esm/context-helpers/context-helpers.test.d.ts.map +1 -0
- package/esm/context-helpers/{__tests__/context-helpers.test.js → context-helpers.test.js} +1 -1
- package/esm/context-helpers/context-helpers.test.js.map +1 -0
- package/{dist/providers → esm}/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-component-state.d.ts +11 -24
- package/esm/hooks/use-component-state.d.ts.map +1 -1
- package/esm/hooks/use-component-state.js +14 -5
- package/esm/hooks/use-component-state.js.map +1 -1
- package/esm/hooks/use-component-state.test.d.ts.map +1 -0
- package/esm/hooks/{__tests__/use-component-state.test.js → use-component-state.test.js} +7 -7
- package/esm/hooks/use-component-state.test.js.map +1 -0
- 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/hooks/use-message-images.test.d.ts.map +1 -0
- package/esm/hooks/{__tests__/use-message-images.test.js → use-message-images.test.js} +1 -1
- package/esm/hooks/use-message-images.test.js.map +1 -0
- package/esm/hooks/use-streaming-props.d.ts +7 -19
- package/esm/hooks/use-streaming-props.d.ts.map +1 -1
- package/esm/hooks/use-streaming-props.js +7 -19
- package/esm/hooks/use-streaming-props.js.map +1 -1
- package/esm/hooks/use-suggestions.d.ts +1 -1
- package/esm/hooks/use-suggestions.d.ts.map +1 -1
- package/esm/hooks/use-suggestions.js.map +1 -1
- package/esm/hooks/use-suggestions.test.d.ts.map +1 -0
- package/esm/hooks/{__tests__/use-suggestions.test.js → use-suggestions.test.js} +36 -29
- package/esm/hooks/use-suggestions.test.js.map +1 -0
- package/esm/hooks/use-tambo-stream-status.d.ts +9 -8
- package/esm/hooks/use-tambo-stream-status.d.ts.map +1 -1
- package/esm/hooks/use-tambo-stream-status.js +9 -8
- package/esm/hooks/use-tambo-stream-status.js.map +1 -1
- package/esm/hooks/use-tambo-stream-status.test.d.ts.map +1 -0
- package/esm/hooks/{__tests__/use-tambo-stream-status.test.js → use-tambo-stream-status.test.js} +6 -6
- package/esm/hooks/use-tambo-stream-status.test.js.map +1 -0
- package/esm/hooks/use-tambo-threads.test.d.ts.map +1 -0
- package/esm/hooks/{__tests__/use-tambo-threads.test.js → use-tambo-threads.test.js} +3 -3
- package/esm/hooks/use-tambo-threads.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/elicitation.d.ts +10 -2
- package/esm/mcp/elicitation.d.ts.map +1 -1
- package/esm/mcp/elicitation.js +19 -1
- package/esm/mcp/elicitation.js.map +1 -1
- package/esm/mcp/elicitation.test.d.ts.map +1 -0
- package/esm/mcp/{__tests__/elicitation.test.js → elicitation.test.js} +1 -1
- package/esm/mcp/elicitation.test.js.map +1 -0
- package/esm/mcp/index.d.ts +11 -2
- package/esm/mcp/index.d.ts.map +1 -1
- package/esm/mcp/index.js +10 -1
- package/esm/mcp/index.js.map +1 -1
- package/esm/mcp/mcp-client.d.ts +29 -10
- package/esm/mcp/mcp-client.d.ts.map +1 -1
- package/esm/mcp/mcp-client.test.d.ts.map +1 -0
- package/esm/mcp/{__tests__/mcp-client.test.js → mcp-client.test.js} +1 -1
- package/esm/mcp/mcp-client.test.js.map +1 -0
- package/esm/mcp/mcp-hooks.d.ts +129 -25
- 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.d.ts.map +1 -0
- package/esm/mcp/{__tests__/mcp-hooks.test.js → mcp-hooks.test.js} +90 -51
- package/esm/mcp/mcp-hooks.test.js.map +1 -0
- package/esm/mcp/tambo-mcp-provider.d.ts +2 -0
- package/esm/mcp/tambo-mcp-provider.d.ts.map +1 -1
- package/esm/mcp/tambo-mcp-provider.js +60 -13
- package/esm/mcp/tambo-mcp-provider.js.map +1 -1
- package/esm/mcp/tambo-mcp-provider.test.d.ts.map +1 -0
- package/esm/mcp/{__tests__/tambo-mcp-provider.test.js → tambo-mcp-provider.test.js} +9 -25
- package/esm/mcp/tambo-mcp-provider.test.js.map +1 -0
- package/esm/mcp/use-mcp-servers.test.d.ts.map +1 -0
- package/esm/mcp/{__tests__/use-mcp-servers.test.js → use-mcp-servers.test.js} +5 -11
- package/esm/mcp/use-mcp-servers.test.js.map +1 -0
- 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/mcp-server-info.d.ts +3 -1
- package/esm/model/mcp-server-info.d.ts.map +1 -1
- package/esm/model/mcp-server-info.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/model/tambo-thread.d.ts +6 -1
- package/esm/model/tambo-thread.d.ts.map +1 -1
- package/esm/model/tambo-thread.js.map +1 -1
- package/esm/providers/hooks/use-tambo-session-token.test.d.ts.map +1 -0
- package/esm/providers/hooks/{__tests__/use-tambo-session-token.test.js → use-tambo-session-token.test.js} +1 -1
- package/esm/providers/hooks/use-tambo-session-token.test.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-client-provider.d.ts +0 -4
- package/esm/providers/tambo-client-provider.d.ts.map +1 -1
- package/esm/providers/tambo-client-provider.js +0 -3
- package/esm/providers/tambo-client-provider.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-context-attachment-provider.test.d.ts.map +1 -0
- package/esm/providers/{__tests__/tambo-context-attachment-provider.test.js → tambo-context-attachment-provider.test.js} +2 -2
- package/esm/providers/tambo-context-attachment-provider.test.js.map +1 -0
- package/esm/providers/tambo-context-helpers-provider.test.d.ts.map +1 -0
- package/esm/providers/{__tests__/tambo-context-helpers-provider.test.js → tambo-context-helpers-provider.test.js} +2 -2
- package/esm/providers/tambo-context-helpers-provider.test.js.map +1 -0
- package/esm/providers/tambo-interactable-provider-partial-updates.test.d.ts.map +1 -0
- package/esm/providers/{__tests__/tambo-interactable-provider-partial-updates.test.js → tambo-interactable-provider-partial-updates.test.js} +5 -5
- package/esm/providers/tambo-interactable-provider-partial-updates.test.js.map +1 -0
- 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.d.ts.map +1 -0
- package/esm/providers/{__tests__/tambo-interactables-additional-context-edge-cases.test.js → tambo-interactables-additional-context-edge-cases.test.js} +10 -10
- package/esm/providers/tambo-interactables-additional-context-edge-cases.test.js.map +1 -0
- package/esm/providers/tambo-interactables-additional-context.test.d.ts.map +1 -0
- package/esm/providers/{__tests__/tambo-interactables-additional-context.test.js → tambo-interactables-additional-context.test.js} +10 -10
- package/esm/providers/tambo-interactables-additional-context.test.js.map +1 -0
- package/esm/providers/tambo-mcp-token-provider.d.ts +20 -13
- package/esm/providers/tambo-mcp-token-provider.d.ts.map +1 -1
- package/esm/providers/tambo-mcp-token-provider.js +123 -11
- package/esm/providers/tambo-mcp-token-provider.js.map +1 -1
- package/esm/providers/tambo-prop-stream-provider.test.d.ts.map +1 -0
- package/esm/providers/{__tests__/tambo-prop-stream-provider.test.js → tambo-prop-stream-provider.test.js} +32 -25
- package/esm/providers/tambo-prop-stream-provider.test.js.map +1 -0
- package/esm/providers/tambo-provider.d.ts +2 -2
- package/esm/providers/tambo-provider.d.ts.map +1 -1
- package/esm/providers/tambo-provider.js +5 -7
- package/esm/providers/tambo-provider.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.d.ts.map +1 -0
- package/esm/providers/{__tests__/tambo-registry-provider.test.js → tambo-registry-provider.test.js} +149 -27
- package/esm/providers/tambo-registry-provider.test.js.map +1 -0
- 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 +9 -2
- package/esm/providers/tambo-stubs.js.map +1 -1
- package/esm/providers/tambo-stubs.test.d.ts.map +1 -0
- package/esm/providers/{__tests__/tambo-stubs.test.js → tambo-stubs.test.js} +2 -2
- package/esm/providers/tambo-stubs.test.js.map +1 -0
- package/esm/providers/tambo-thread-input-provider.d.ts +2 -1
- 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-initial-messages.test.d.ts.map +1 -0
- package/esm/providers/{__tests__/tambo-thread-provider-initial-messages.test.js → tambo-thread-provider-initial-messages.test.js} +7 -9
- package/esm/providers/tambo-thread-provider-initial-messages.test.js.map +1 -0
- package/esm/providers/tambo-thread-provider.d.ts +8 -0
- package/esm/providers/tambo-thread-provider.d.ts.map +1 -1
- package/esm/providers/tambo-thread-provider.js +82 -19
- package/esm/providers/tambo-thread-provider.js.map +1 -1
- package/esm/providers/tambo-thread-provider.test.d.ts.map +1 -0
- package/esm/providers/{__tests__/tambo-thread-provider.test.js → tambo-thread-provider.test.js} +34 -70
- package/esm/providers/tambo-thread-provider.test.js.map +1 -0
- 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 +185 -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 +124 -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/content-parts.test.d.ts.map +1 -0
- package/esm/util/{__tests__/content-parts.test.js → content-parts.test.js} +1 -1
- package/esm/util/content-parts.test.js.map +1 -0
- 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 +4 -3
- package/esm/util/message-builder.d.ts.map +1 -1
- package/esm/util/message-builder.js +83 -8
- package/esm/util/message-builder.js.map +1 -1
- package/esm/util/message-builder.test.d.ts.map +1 -0
- package/esm/util/message-builder.test.js +676 -0
- package/esm/util/message-builder.test.js.map +1 -0
- package/esm/util/query-utils.d.ts.map +1 -1
- package/esm/util/query-utils.js +49 -31
- package/esm/util/query-utils.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 +30 -11
- package/dist/__tests__/util/validate-zod-schema.test.d.ts +0 -2
- package/dist/__tests__/util/validate-zod-schema.test.d.ts.map +0 -1
- package/dist/__tests__/util/validate-zod-schema.test.js +0 -96
- package/dist/__tests__/util/validate-zod-schema.test.js.map +0 -1
- package/dist/context-helpers/__tests__/context-helpers-provider.test.d.ts.map +0 -1
- package/dist/context-helpers/__tests__/context-helpers-provider.test.js.map +0 -1
- package/dist/context-helpers/__tests__/context-helpers.test.d.ts.map +0 -1
- package/dist/context-helpers/__tests__/context-helpers.test.js.map +0 -1
- package/dist/hooks/__tests__/use-component-state.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/use-component-state.test.js.map +0 -1
- package/dist/hooks/__tests__/use-message-images.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/use-message-images.test.js.map +0 -1
- package/dist/hooks/__tests__/use-suggestions.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/use-suggestions.test.js.map +0 -1
- package/dist/hooks/__tests__/use-tambo-stream-status.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/use-tambo-stream-status.test.js.map +0 -1
- package/dist/hooks/__tests__/use-tambo-threads.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/use-tambo-threads.test.js.map +0 -1
- package/dist/mcp/__tests__/elicitation.test.d.ts.map +0 -1
- package/dist/mcp/__tests__/elicitation.test.js.map +0 -1
- package/dist/mcp/__tests__/mcp-client.test.d.ts.map +0 -1
- package/dist/mcp/__tests__/mcp-client.test.js.map +0 -1
- package/dist/mcp/__tests__/mcp-hooks.test.d.ts.map +0 -1
- package/dist/mcp/__tests__/mcp-hooks.test.js.map +0 -1
- package/dist/mcp/__tests__/tambo-mcp-provider.test.d.ts.map +0 -1
- package/dist/mcp/__tests__/tambo-mcp-provider.test.js.map +0 -1
- package/dist/mcp/__tests__/use-mcp-servers.test.d.ts.map +0 -1
- package/dist/mcp/__tests__/use-mcp-servers.test.js.map +0 -1
- package/dist/providers/__tests__/tambo-context-attachment-provider.test.d.ts.map +0 -1
- package/dist/providers/__tests__/tambo-context-attachment-provider.test.js.map +0 -1
- package/dist/providers/__tests__/tambo-context-helpers-provider.test.d.ts.map +0 -1
- package/dist/providers/__tests__/tambo-context-helpers-provider.test.js.map +0 -1
- package/dist/providers/__tests__/tambo-interactable-provider-partial-updates.test.d.ts.map +0 -1
- package/dist/providers/__tests__/tambo-interactable-provider-partial-updates.test.js.map +0 -1
- package/dist/providers/__tests__/tambo-interactables-additional-context-edge-cases.test.d.ts.map +0 -1
- package/dist/providers/__tests__/tambo-interactables-additional-context-edge-cases.test.js.map +0 -1
- package/dist/providers/__tests__/tambo-interactables-additional-context.test.d.ts.map +0 -1
- package/dist/providers/__tests__/tambo-interactables-additional-context.test.js.map +0 -1
- package/dist/providers/__tests__/tambo-prop-stream-provider.test.d.ts.map +0 -1
- package/dist/providers/__tests__/tambo-prop-stream-provider.test.js.map +0 -1
- package/dist/providers/__tests__/tambo-registry-provider.test.d.ts.map +0 -1
- package/dist/providers/__tests__/tambo-registry-provider.test.js.map +0 -1
- package/dist/providers/__tests__/tambo-stubs.test.d.ts.map +0 -1
- package/dist/providers/__tests__/tambo-stubs.test.js.map +0 -1
- package/dist/providers/__tests__/tambo-thread-provider-initial-messages.test.d.ts.map +0 -1
- package/dist/providers/__tests__/tambo-thread-provider-initial-messages.test.js.map +0 -1
- package/dist/providers/__tests__/tambo-thread-provider.test.d.ts.map +0 -1
- package/dist/providers/__tests__/tambo-thread-provider.test.js.map +0 -1
- 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/providers/hooks/__tests__/use-tambo-session-token.test.d.ts.map +0 -1
- package/dist/providers/hooks/__tests__/use-tambo-session-token.test.js.map +0 -1
- package/dist/util/__tests__/content-parts.test.d.ts.map +0 -1
- package/dist/util/__tests__/content-parts.test.js.map +0 -1
- package/dist/util/__tests__/message-builder.test.d.ts.map +0 -1
- package/dist/util/__tests__/message-builder.test.js +0 -191
- package/dist/util/__tests__/message-builder.test.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/esm/__tests__/util/validate-zod-schema.test.d.ts +0 -2
- package/esm/__tests__/util/validate-zod-schema.test.d.ts.map +0 -1
- package/esm/__tests__/util/validate-zod-schema.test.js +0 -94
- package/esm/__tests__/util/validate-zod-schema.test.js.map +0 -1
- package/esm/context-helpers/__tests__/context-helpers-provider.test.d.ts.map +0 -1
- package/esm/context-helpers/__tests__/context-helpers-provider.test.js.map +0 -1
- package/esm/context-helpers/__tests__/context-helpers.test.d.ts.map +0 -1
- package/esm/context-helpers/__tests__/context-helpers.test.js.map +0 -1
- package/esm/hooks/__tests__/use-component-state.test.d.ts.map +0 -1
- package/esm/hooks/__tests__/use-component-state.test.js.map +0 -1
- package/esm/hooks/__tests__/use-message-images.test.d.ts.map +0 -1
- package/esm/hooks/__tests__/use-message-images.test.js.map +0 -1
- package/esm/hooks/__tests__/use-suggestions.test.d.ts.map +0 -1
- package/esm/hooks/__tests__/use-suggestions.test.js.map +0 -1
- package/esm/hooks/__tests__/use-tambo-stream-status.test.d.ts.map +0 -1
- package/esm/hooks/__tests__/use-tambo-stream-status.test.js.map +0 -1
- package/esm/hooks/__tests__/use-tambo-threads.test.d.ts.map +0 -1
- package/esm/hooks/__tests__/use-tambo-threads.test.js.map +0 -1
- package/esm/mcp/__tests__/elicitation.test.d.ts.map +0 -1
- package/esm/mcp/__tests__/elicitation.test.js.map +0 -1
- package/esm/mcp/__tests__/mcp-client.test.d.ts.map +0 -1
- package/esm/mcp/__tests__/mcp-client.test.js.map +0 -1
- package/esm/mcp/__tests__/mcp-hooks.test.d.ts.map +0 -1
- package/esm/mcp/__tests__/mcp-hooks.test.js.map +0 -1
- package/esm/mcp/__tests__/tambo-mcp-provider.test.d.ts.map +0 -1
- package/esm/mcp/__tests__/tambo-mcp-provider.test.js.map +0 -1
- package/esm/mcp/__tests__/use-mcp-servers.test.d.ts.map +0 -1
- package/esm/mcp/__tests__/use-mcp-servers.test.js.map +0 -1
- package/esm/providers/__tests__/tambo-context-attachment-provider.test.d.ts.map +0 -1
- package/esm/providers/__tests__/tambo-context-attachment-provider.test.js.map +0 -1
- package/esm/providers/__tests__/tambo-context-helpers-provider.test.d.ts.map +0 -1
- package/esm/providers/__tests__/tambo-context-helpers-provider.test.js.map +0 -1
- package/esm/providers/__tests__/tambo-interactable-provider-partial-updates.test.d.ts.map +0 -1
- package/esm/providers/__tests__/tambo-interactable-provider-partial-updates.test.js.map +0 -1
- package/esm/providers/__tests__/tambo-interactables-additional-context-edge-cases.test.d.ts.map +0 -1
- package/esm/providers/__tests__/tambo-interactables-additional-context-edge-cases.test.js.map +0 -1
- package/esm/providers/__tests__/tambo-interactables-additional-context.test.d.ts.map +0 -1
- package/esm/providers/__tests__/tambo-interactables-additional-context.test.js.map +0 -1
- package/esm/providers/__tests__/tambo-prop-stream-provider.test.d.ts.map +0 -1
- package/esm/providers/__tests__/tambo-prop-stream-provider.test.js.map +0 -1
- package/esm/providers/__tests__/tambo-registry-provider.test.d.ts.map +0 -1
- package/esm/providers/__tests__/tambo-registry-provider.test.js.map +0 -1
- package/esm/providers/__tests__/tambo-stubs.test.d.ts.map +0 -1
- package/esm/providers/__tests__/tambo-stubs.test.js.map +0 -1
- package/esm/providers/__tests__/tambo-thread-provider-initial-messages.test.d.ts.map +0 -1
- package/esm/providers/__tests__/tambo-thread-provider-initial-messages.test.js.map +0 -1
- package/esm/providers/__tests__/tambo-thread-provider.test.d.ts.map +0 -1
- package/esm/providers/__tests__/tambo-thread-provider.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/providers/hooks/__tests__/use-tambo-session-token.test.d.ts.map +0 -1
- package/esm/providers/hooks/__tests__/use-tambo-session-token.test.js.map +0 -1
- package/esm/util/__tests__/content-parts.test.d.ts.map +0 -1
- package/esm/util/__tests__/content-parts.test.js.map +0 -1
- package/esm/util/__tests__/message-builder.test.d.ts.map +0 -1
- package/esm/util/__tests__/message-builder.test.js +0 -189
- package/esm/util/__tests__/message-builder.test.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/dist/context-helpers/{__tests__/context-helpers-provider.test.d.ts → context-helpers-provider.test.d.ts} +0 -0
- /package/dist/context-helpers/{__tests__/context-helpers.test.d.ts → context-helpers.test.d.ts} +0 -0
- /package/dist/hooks/{__tests__/use-component-state.test.d.ts → use-component-state.test.d.ts} +0 -0
- /package/dist/hooks/{__tests__/use-message-images.test.d.ts → use-message-images.test.d.ts} +0 -0
- /package/dist/hooks/{__tests__/use-suggestions.test.d.ts → use-suggestions.test.d.ts} +0 -0
- /package/dist/hooks/{__tests__/use-tambo-stream-status.test.d.ts → use-tambo-stream-status.test.d.ts} +0 -0
- /package/dist/hooks/{__tests__/use-tambo-threads.test.d.ts → use-tambo-threads.test.d.ts} +0 -0
- /package/dist/mcp/{__tests__/elicitation.test.d.ts → elicitation.test.d.ts} +0 -0
- /package/dist/mcp/{__tests__/mcp-client.test.d.ts → mcp-client.test.d.ts} +0 -0
- /package/dist/mcp/{__tests__/mcp-hooks.test.d.ts → mcp-hooks.test.d.ts} +0 -0
- /package/dist/mcp/{__tests__/tambo-mcp-provider.test.d.ts → tambo-mcp-provider.test.d.ts} +0 -0
- /package/dist/mcp/{__tests__/use-mcp-servers.test.d.ts → use-mcp-servers.test.d.ts} +0 -0
- /package/dist/providers/hooks/{__tests__/use-tambo-session-token.test.d.ts → use-tambo-session-token.test.d.ts} +0 -0
- /package/dist/providers/{__tests__/tambo-context-attachment-provider.test.d.ts → tambo-context-attachment-provider.test.d.ts} +0 -0
- /package/dist/providers/{__tests__/tambo-context-helpers-provider.test.d.ts → tambo-context-helpers-provider.test.d.ts} +0 -0
- /package/dist/providers/{__tests__/tambo-interactable-provider-partial-updates.test.d.ts → tambo-interactable-provider-partial-updates.test.d.ts} +0 -0
- /package/dist/providers/{__tests__/tambo-interactables-additional-context-edge-cases.test.d.ts → tambo-interactables-additional-context-edge-cases.test.d.ts} +0 -0
- /package/dist/providers/{__tests__/tambo-interactables-additional-context.test.d.ts → tambo-interactables-additional-context.test.d.ts} +0 -0
- /package/dist/providers/{__tests__/tambo-prop-stream-provider.test.d.ts → tambo-prop-stream-provider.test.d.ts} +0 -0
- /package/dist/providers/{__tests__/tambo-registry-provider.test.d.ts → tambo-registry-provider.test.d.ts} +0 -0
- /package/dist/providers/{__tests__/tambo-stubs.test.d.ts → tambo-stubs.test.d.ts} +0 -0
- /package/dist/providers/{__tests__/tambo-thread-provider-initial-messages.test.d.ts → tambo-thread-provider-initial-messages.test.d.ts} +0 -0
- /package/dist/providers/{__tests__/tambo-thread-provider.test.d.ts → tambo-thread-provider.test.d.ts} +0 -0
- /package/dist/util/{__tests__/content-parts.test.d.ts → content-parts.test.d.ts} +0 -0
- /package/dist/util/{__tests__/message-builder.test.d.ts → message-builder.test.d.ts} +0 -0
- /package/esm/context-helpers/{__tests__/context-helpers-provider.test.d.ts → context-helpers-provider.test.d.ts} +0 -0
- /package/esm/context-helpers/{__tests__/context-helpers.test.d.ts → context-helpers.test.d.ts} +0 -0
- /package/esm/hooks/{__tests__/use-component-state.test.d.ts → use-component-state.test.d.ts} +0 -0
- /package/esm/hooks/{__tests__/use-message-images.test.d.ts → use-message-images.test.d.ts} +0 -0
- /package/esm/hooks/{__tests__/use-suggestions.test.d.ts → use-suggestions.test.d.ts} +0 -0
- /package/esm/hooks/{__tests__/use-tambo-stream-status.test.d.ts → use-tambo-stream-status.test.d.ts} +0 -0
- /package/esm/hooks/{__tests__/use-tambo-threads.test.d.ts → use-tambo-threads.test.d.ts} +0 -0
- /package/esm/mcp/{__tests__/elicitation.test.d.ts → elicitation.test.d.ts} +0 -0
- /package/esm/mcp/{__tests__/mcp-client.test.d.ts → mcp-client.test.d.ts} +0 -0
- /package/esm/mcp/{__tests__/mcp-hooks.test.d.ts → mcp-hooks.test.d.ts} +0 -0
- /package/esm/mcp/{__tests__/tambo-mcp-provider.test.d.ts → tambo-mcp-provider.test.d.ts} +0 -0
- /package/esm/mcp/{__tests__/use-mcp-servers.test.d.ts → use-mcp-servers.test.d.ts} +0 -0
- /package/esm/providers/hooks/{__tests__/use-tambo-session-token.test.d.ts → use-tambo-session-token.test.d.ts} +0 -0
- /package/esm/providers/{__tests__/tambo-context-attachment-provider.test.d.ts → tambo-context-attachment-provider.test.d.ts} +0 -0
- /package/esm/providers/{__tests__/tambo-context-helpers-provider.test.d.ts → tambo-context-helpers-provider.test.d.ts} +0 -0
- /package/esm/providers/{__tests__/tambo-interactable-provider-partial-updates.test.d.ts → tambo-interactable-provider-partial-updates.test.d.ts} +0 -0
- /package/esm/providers/{__tests__/tambo-interactables-additional-context-edge-cases.test.d.ts → tambo-interactables-additional-context-edge-cases.test.d.ts} +0 -0
- /package/esm/providers/{__tests__/tambo-interactables-additional-context.test.d.ts → tambo-interactables-additional-context.test.d.ts} +0 -0
- /package/esm/providers/{__tests__/tambo-prop-stream-provider.test.d.ts → tambo-prop-stream-provider.test.d.ts} +0 -0
- /package/esm/providers/{__tests__/tambo-registry-provider.test.d.ts → tambo-registry-provider.test.d.ts} +0 -0
- /package/esm/providers/{__tests__/tambo-stubs.test.d.ts → tambo-stubs.test.d.ts} +0 -0
- /package/esm/providers/{__tests__/tambo-thread-provider-initial-messages.test.d.ts → tambo-thread-provider-initial-messages.test.d.ts} +0 -0
- /package/esm/providers/{__tests__/tambo-thread-provider.test.d.ts → tambo-thread-provider.test.d.ts} +0 -0
- /package/esm/util/{__tests__/content-parts.test.d.ts → content-parts.test.d.ts} +0 -0
- /package/esm/util/{__tests__/message-builder.test.d.ts → message-builder.test.d.ts} +0 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const zodInternalAlias_1 = require("zodInternalAlias");
|
|
4
|
+
const validate_1 = require("./validate");
|
|
5
|
+
describe("assertNoRecordSchema", () => {
|
|
6
|
+
it("should allow valid schemas without records", () => {
|
|
7
|
+
const schema = zodInternalAlias_1.z.object({
|
|
8
|
+
name: zodInternalAlias_1.z.string(),
|
|
9
|
+
age: zodInternalAlias_1.z.number(),
|
|
10
|
+
tags: zodInternalAlias_1.z.array(zodInternalAlias_1.z.string()),
|
|
11
|
+
address: zodInternalAlias_1.z.object({
|
|
12
|
+
street: zodInternalAlias_1.z.string(),
|
|
13
|
+
city: zodInternalAlias_1.z.string(),
|
|
14
|
+
}),
|
|
15
|
+
});
|
|
16
|
+
expect(() => (0, validate_1.assertNoRecordSchema)(schema)).not.toThrow();
|
|
17
|
+
});
|
|
18
|
+
it("should throw when encountering a record at root level", () => {
|
|
19
|
+
const schema = zodInternalAlias_1.z.record(zodInternalAlias_1.z.string(), zodInternalAlias_1.z.string());
|
|
20
|
+
expect(() => (0, validate_1.assertNoRecordSchema)(schema)).toThrow('Record types (objects with dynamic keys) are not supported in schema. Found at path "(root)". Replace it with an object using explicit keys.');
|
|
21
|
+
});
|
|
22
|
+
it("should throw when encountering a nested record", () => {
|
|
23
|
+
const schema = zodInternalAlias_1.z.object({
|
|
24
|
+
name: zodInternalAlias_1.z.string(),
|
|
25
|
+
metadata: zodInternalAlias_1.z.record(zodInternalAlias_1.z.string(), zodInternalAlias_1.z.string()),
|
|
26
|
+
});
|
|
27
|
+
expect(() => (0, validate_1.assertNoRecordSchema)(schema)).toThrow('Record types (objects with dynamic keys) are not supported in schema. Found at path "metadata". Replace it with an object using explicit keys.');
|
|
28
|
+
});
|
|
29
|
+
it("should throw when encountering a record in an array", () => {
|
|
30
|
+
const schema = zodInternalAlias_1.z.object({
|
|
31
|
+
items: zodInternalAlias_1.z.array(zodInternalAlias_1.z.record(zodInternalAlias_1.z.string(), zodInternalAlias_1.z.string())),
|
|
32
|
+
});
|
|
33
|
+
expect(() => (0, validate_1.assertNoRecordSchema)(schema)).toThrow('Record types (objects with dynamic keys) are not supported in schema. Found at path "items.[]". Replace it with an object using explicit keys.');
|
|
34
|
+
});
|
|
35
|
+
it("should throw when encountering a record in a union", () => {
|
|
36
|
+
const schema = zodInternalAlias_1.z.union([zodInternalAlias_1.z.string(), zodInternalAlias_1.z.record(zodInternalAlias_1.z.string(), zodInternalAlias_1.z.number())]);
|
|
37
|
+
expect(() => (0, validate_1.assertNoRecordSchema)(schema)).toThrow('Record types (objects with dynamic keys) are not supported in schema. Found at path "|1". Replace it with an object using explicit keys.');
|
|
38
|
+
});
|
|
39
|
+
it("should throw when encountering a record in an intersection", () => {
|
|
40
|
+
const schema = zodInternalAlias_1.z.intersection(zodInternalAlias_1.z.object({ name: zodInternalAlias_1.z.string() }), zodInternalAlias_1.z.object({ metadata: zodInternalAlias_1.z.record(zodInternalAlias_1.z.string(), zodInternalAlias_1.z.string()) }));
|
|
41
|
+
expect(() => (0, validate_1.assertNoRecordSchema)(schema)).toThrow(/Record types \(objects with dynamic keys\) are not supported in schema\. Found at path "(&1\.)?metadata"\. Replace it with an object using explicit keys\./);
|
|
42
|
+
});
|
|
43
|
+
it("should throw when encountering a record in a discriminated union", () => {
|
|
44
|
+
const schema = zodInternalAlias_1.z.discriminatedUnion("type", [
|
|
45
|
+
zodInternalAlias_1.z.object({ type: zodInternalAlias_1.z.literal("string"), value: zodInternalAlias_1.z.string() }),
|
|
46
|
+
zodInternalAlias_1.z.object({
|
|
47
|
+
type: zodInternalAlias_1.z.literal("record"),
|
|
48
|
+
value: zodInternalAlias_1.z.record(zodInternalAlias_1.z.string(), zodInternalAlias_1.z.number()),
|
|
49
|
+
}),
|
|
50
|
+
]);
|
|
51
|
+
expect(() => (0, validate_1.assertNoRecordSchema)(schema)).toThrow(/Record types \(objects with dynamic keys\) are not supported in schema\. Found at path "\|1\.value"\. Replace it with an object using explicit keys\./);
|
|
52
|
+
});
|
|
53
|
+
it("should throw when encountering a record in an optional field", () => {
|
|
54
|
+
const schema = zodInternalAlias_1.z.object({
|
|
55
|
+
optional: zodInternalAlias_1.z.optional(zodInternalAlias_1.z.record(zodInternalAlias_1.z.string(), zodInternalAlias_1.z.string())),
|
|
56
|
+
});
|
|
57
|
+
expect(() => (0, validate_1.assertNoRecordSchema)(schema)).toThrow('Record types (objects with dynamic keys) are not supported in schema. Found at path "optional". Replace it with an object using explicit keys.');
|
|
58
|
+
});
|
|
59
|
+
it("should throw when encountering a record in a nullable field", () => {
|
|
60
|
+
const schema = zodInternalAlias_1.z.object({
|
|
61
|
+
nullable: zodInternalAlias_1.z.nullable(zodInternalAlias_1.z.record(zodInternalAlias_1.z.string(), zodInternalAlias_1.z.string())),
|
|
62
|
+
});
|
|
63
|
+
// Nullable creates a oneOf in JSON Schema, so the path includes the union index
|
|
64
|
+
expect(() => (0, validate_1.assertNoRecordSchema)(schema)).toThrow(/Record types \(objects with dynamic keys\) are not supported in schema\. Found at path "nullable(\.\|0)?"\. Replace it with an object using explicit keys\./);
|
|
65
|
+
});
|
|
66
|
+
it("should throw when encountering a record in a tuple", () => {
|
|
67
|
+
const schema = zodInternalAlias_1.z.tuple([zodInternalAlias_1.z.string(), zodInternalAlias_1.z.record(zodInternalAlias_1.z.string(), zodInternalAlias_1.z.number())]);
|
|
68
|
+
expect(() => (0, validate_1.assertNoRecordSchema)(schema)).toThrow('Record types (objects with dynamic keys) are not supported in schema. Found at path "1". Replace it with an object using explicit keys.');
|
|
69
|
+
});
|
|
70
|
+
it("should use custom context name in error message", () => {
|
|
71
|
+
const schema = zodInternalAlias_1.z.record(zodInternalAlias_1.z.string(), zodInternalAlias_1.z.string());
|
|
72
|
+
expect(() => (0, validate_1.assertNoRecordSchema)(schema, "mySchema")).toThrow('Record types (objects with dynamic keys) are not supported in mySchema. Found at path "(root)". Replace it with an object using explicit keys.');
|
|
73
|
+
});
|
|
74
|
+
it("should handle ZodLazy schemas", () => {
|
|
75
|
+
const schema = zodInternalAlias_1.z.lazy(() => zodInternalAlias_1.z.record(zodInternalAlias_1.z.string(), zodInternalAlias_1.z.string()));
|
|
76
|
+
expect(() => (0, validate_1.assertNoRecordSchema)(schema)).toThrow('Record types (objects with dynamic keys) are not supported in schema. Found at path "(root)". Replace it with an object using explicit keys.');
|
|
77
|
+
});
|
|
78
|
+
it("should allow z.function() with valid arguments", () => {
|
|
79
|
+
const schema = zodInternalAlias_1.z.function({
|
|
80
|
+
input: [zodInternalAlias_1.z.string(), zodInternalAlias_1.z.number()],
|
|
81
|
+
output: zodInternalAlias_1.z.string(),
|
|
82
|
+
});
|
|
83
|
+
// Function schemas can't be converted to JSON Schema directly,
|
|
84
|
+
// so they should not throw (validation happens on the extracted parameters)
|
|
85
|
+
expect(() => (0, validate_1.assertNoRecordSchema)(schema)).not.toThrow();
|
|
86
|
+
});
|
|
87
|
+
it("should allow JSON Schema without records", () => {
|
|
88
|
+
const jsonSchema = {
|
|
89
|
+
type: "object",
|
|
90
|
+
properties: {
|
|
91
|
+
name: { type: "string" },
|
|
92
|
+
age: { type: "number" },
|
|
93
|
+
},
|
|
94
|
+
required: ["name"],
|
|
95
|
+
};
|
|
96
|
+
expect(() => (0, validate_1.assertNoRecordSchema)(jsonSchema)).not.toThrow();
|
|
97
|
+
});
|
|
98
|
+
it("should throw when JSON Schema has record pattern", () => {
|
|
99
|
+
const jsonSchema = {
|
|
100
|
+
type: "object",
|
|
101
|
+
additionalProperties: { type: "string" },
|
|
102
|
+
};
|
|
103
|
+
expect(() => (0, validate_1.assertNoRecordSchema)(jsonSchema)).toThrow('Record types (objects with dynamic keys) are not supported in schema. Found at path "(root)". Replace it with an object using explicit keys.');
|
|
104
|
+
});
|
|
105
|
+
it("should treat JSON Schema with properties and additionalProperties as a record", () => {
|
|
106
|
+
const jsonSchema = {
|
|
107
|
+
type: "object",
|
|
108
|
+
properties: {
|
|
109
|
+
id: { type: "string" },
|
|
110
|
+
},
|
|
111
|
+
additionalProperties: { type: "number" },
|
|
112
|
+
};
|
|
113
|
+
expect(() => (0, validate_1.assertNoRecordSchema)(jsonSchema)).toThrow('Record types (objects with dynamic keys) are not supported in schema. Found at path "(root)". Replace it with an object using explicit keys.');
|
|
114
|
+
});
|
|
115
|
+
it("should throw when nested JSON Schema has record pattern", () => {
|
|
116
|
+
const jsonSchema = {
|
|
117
|
+
type: "object",
|
|
118
|
+
properties: {
|
|
119
|
+
metadata: {
|
|
120
|
+
type: "object",
|
|
121
|
+
additionalProperties: { type: "string" },
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
expect(() => (0, validate_1.assertNoRecordSchema)(jsonSchema)).toThrow('Record types (objects with dynamic keys) are not supported in schema. Found at path "metadata". Replace it with an object using explicit keys.');
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
//# sourceMappingURL=validate.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.test.js","sourceRoot":"","sources":["../../src/schema/validate.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zodInternalAlias\";\nimport { assertNoRecordSchema } from \"./validate\";\n\ndescribe(\"assertNoRecordSchema\", () => {\n it(\"should allow valid schemas without records\", () => {\n const schema = z.object({\n name: z.string(),\n age: z.number(),\n tags: z.array(z.string()),\n address: z.object({\n street: z.string(),\n city: z.string(),\n }),\n });\n\n expect(() => assertNoRecordSchema(schema)).not.toThrow();\n });\n\n it(\"should throw when encountering a record at root level\", () => {\n const schema = z.record(z.string(), z.string());\n\n expect(() => assertNoRecordSchema(schema)).toThrow(\n 'Record types (objects with dynamic keys) are not supported in schema. Found at path \"(root)\". Replace it with an object using explicit keys.',\n );\n });\n\n it(\"should throw when encountering a nested record\", () => {\n const schema = z.object({\n name: z.string(),\n metadata: z.record(z.string(), z.string()),\n });\n\n expect(() => assertNoRecordSchema(schema)).toThrow(\n 'Record types (objects with dynamic keys) are not supported in schema. Found at path \"metadata\". Replace it with an object using explicit keys.',\n );\n });\n\n it(\"should throw when encountering a record in an array\", () => {\n const schema = z.object({\n items: z.array(z.record(z.string(), z.string())),\n });\n\n expect(() => assertNoRecordSchema(schema)).toThrow(\n 'Record types (objects with dynamic keys) are not supported in schema. Found at path \"items.[]\". Replace it with an object using explicit keys.',\n );\n });\n\n it(\"should throw when encountering a record in a union\", () => {\n const schema = z.union([z.string(), z.record(z.string(), z.number())]);\n\n expect(() => assertNoRecordSchema(schema)).toThrow(\n 'Record types (objects with dynamic keys) are not supported in schema. Found at path \"|1\". Replace it with an object using explicit keys.',\n );\n });\n\n it(\"should throw when encountering a record in an intersection\", () => {\n const schema = z.intersection(\n z.object({ name: z.string() }),\n z.object({ metadata: z.record(z.string(), z.string()) }),\n );\n\n expect(() => assertNoRecordSchema(schema)).toThrow(\n /Record types \\(objects with dynamic keys\\) are not supported in schema\\. Found at path \"(&1\\.)?metadata\"\\. Replace it with an object using explicit keys\\./,\n );\n });\n\n it(\"should throw when encountering a record in a discriminated union\", () => {\n const schema = z.discriminatedUnion(\"type\", [\n z.object({ type: z.literal(\"string\"), value: z.string() }),\n z.object({\n type: z.literal(\"record\"),\n value: z.record(z.string(), z.number()),\n }),\n ]);\n\n expect(() => assertNoRecordSchema(schema)).toThrow(\n /Record types \\(objects with dynamic keys\\) are not supported in schema\\. Found at path \"\\|1\\.value\"\\. Replace it with an object using explicit keys\\./,\n );\n });\n\n it(\"should throw when encountering a record in an optional field\", () => {\n const schema = z.object({\n optional: z.optional(z.record(z.string(), z.string())),\n });\n\n expect(() => assertNoRecordSchema(schema)).toThrow(\n 'Record types (objects with dynamic keys) are not supported in schema. Found at path \"optional\". Replace it with an object using explicit keys.',\n );\n });\n\n it(\"should throw when encountering a record in a nullable field\", () => {\n const schema = z.object({\n nullable: z.nullable(z.record(z.string(), z.string())),\n });\n\n // Nullable creates a oneOf in JSON Schema, so the path includes the union index\n expect(() => assertNoRecordSchema(schema)).toThrow(\n /Record types \\(objects with dynamic keys\\) are not supported in schema\\. Found at path \"nullable(\\.\\|0)?\"\\. Replace it with an object using explicit keys\\./,\n );\n });\n\n it(\"should throw when encountering a record in a tuple\", () => {\n const schema = z.tuple([z.string(), z.record(z.string(), z.number())]);\n\n expect(() => assertNoRecordSchema(schema)).toThrow(\n 'Record types (objects with dynamic keys) are not supported in schema. Found at path \"1\". Replace it with an object using explicit keys.',\n );\n });\n\n it(\"should use custom context name in error message\", () => {\n const schema = z.record(z.string(), z.string());\n\n expect(() => assertNoRecordSchema(schema, \"mySchema\")).toThrow(\n 'Record types (objects with dynamic keys) are not supported in mySchema. Found at path \"(root)\". Replace it with an object using explicit keys.',\n );\n });\n\n it(\"should handle ZodLazy schemas\", () => {\n const schema = z.lazy(() => z.record(z.string(), z.string()));\n\n expect(() => assertNoRecordSchema(schema)).toThrow(\n 'Record types (objects with dynamic keys) are not supported in schema. Found at path \"(root)\". Replace it with an object using explicit keys.',\n );\n });\n\n it(\"should allow z.function() with valid arguments\", () => {\n const schema = z.function({\n input: [z.string(), z.number()],\n output: z.string(),\n });\n\n // Function schemas can't be converted to JSON Schema directly,\n // so they should not throw (validation happens on the extracted parameters)\n expect(() => assertNoRecordSchema(schema)).not.toThrow();\n });\n\n it(\"should allow JSON Schema without records\", () => {\n const jsonSchema = {\n type: \"object\" as const,\n properties: {\n name: { type: \"string\" as const },\n age: { type: \"number\" as const },\n },\n required: [\"name\"],\n };\n\n expect(() => assertNoRecordSchema(jsonSchema)).not.toThrow();\n });\n\n it(\"should throw when JSON Schema has record pattern\", () => {\n const jsonSchema = {\n type: \"object\" as const,\n additionalProperties: { type: \"string\" as const },\n };\n\n expect(() => assertNoRecordSchema(jsonSchema)).toThrow(\n 'Record types (objects with dynamic keys) are not supported in schema. Found at path \"(root)\". Replace it with an object using explicit keys.',\n );\n });\n\n it(\"should treat JSON Schema with properties and additionalProperties as a record\", () => {\n const jsonSchema = {\n type: \"object\" as const,\n properties: {\n id: { type: \"string\" as const },\n },\n additionalProperties: { type: \"number\" as const },\n };\n\n expect(() => assertNoRecordSchema(jsonSchema)).toThrow(\n 'Record types (objects with dynamic keys) are not supported in schema. Found at path \"(root)\". Replace it with an object using explicit keys.',\n );\n });\n\n it(\"should throw when nested JSON Schema has record pattern\", () => {\n const jsonSchema = {\n type: \"object\" as const,\n properties: {\n metadata: {\n type: \"object\" as const,\n additionalProperties: { type: \"string\" as const },\n },\n },\n };\n\n expect(() => assertNoRecordSchema(jsonSchema)).toThrow(\n 'Record types (objects with dynamic keys) are not supported in schema. Found at path \"metadata\". Replace it with an object using explicit keys.',\n );\n });\n});\n"]}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { ZodFunction, ZodTuple, ZodTupleItems, ZodType, ZodTypeAny } from "zod/v3";
|
|
2
|
+
import { $ZodFunction, $ZodType } from "zod/v4/core";
|
|
3
|
+
/**
|
|
4
|
+
* @returns True if the schema is a Zod 3 function schema
|
|
5
|
+
*/
|
|
6
|
+
export declare function isZod3FunctionSchema(schema: unknown): schema is ZodFunction<ZodTuple<ZodTupleItems, any>, ZodTypeAny>;
|
|
7
|
+
/**
|
|
8
|
+
* @returns True if the schema is a Zod 4 function schema
|
|
9
|
+
*/
|
|
10
|
+
export declare function isZod4FunctionSchema(schema: unknown): schema is $ZodFunction;
|
|
11
|
+
/**
|
|
12
|
+
* Checks if a schema is a Zod function schema (Zod 3 or Zod 4).
|
|
13
|
+
* @param schema - The schema to check
|
|
14
|
+
* @returns True if the schema is a Zod function schema
|
|
15
|
+
*/
|
|
16
|
+
export declare function isZodFunctionSchema(schema: unknown): schema is ZodFunction<ZodTuple<ZodTupleItems, any>, ZodTypeAny> | $ZodFunction<import("zod/v4/core").$ZodFunctionArgs, import("zod/v4/core").$ZodFunctionOut>;
|
|
17
|
+
/**
|
|
18
|
+
* Extracts the args schema from a Zod 3 function schema.
|
|
19
|
+
* @param schema - The Zod 3 function schema
|
|
20
|
+
* @returns The args schema, or undefined if not a Zod 3 function schema
|
|
21
|
+
*/
|
|
22
|
+
export declare function getZodFunctionArgs(schema: unknown): any;
|
|
23
|
+
/**
|
|
24
|
+
* Extracts the return schema from a Zod 3 or Zod 4 function schema.
|
|
25
|
+
* @param schema - The Zod function schema
|
|
26
|
+
* @returns The return schema, or undefined if not a Zod function schema
|
|
27
|
+
*/
|
|
28
|
+
export declare function getZodFunctionReturns(schema: unknown): any;
|
|
29
|
+
/**
|
|
30
|
+
* Handles conversion of Zod schemas to JSON Schema.
|
|
31
|
+
* Supports both Zod 3 (via zod-to-json-schema) and Zod 4 (native).
|
|
32
|
+
* @param schema - The Zod schema to convert
|
|
33
|
+
* @returns The JSON Schema representation
|
|
34
|
+
*/
|
|
35
|
+
export declare function handleZodSchemaToJson(schema: unknown): any;
|
|
36
|
+
/**
|
|
37
|
+
* Checks if a schema is probably a Zod 3 schema.
|
|
38
|
+
* @param schema - The schema to check
|
|
39
|
+
* @returns True if the schema looks like a Zod 3 schema
|
|
40
|
+
*/
|
|
41
|
+
export declare function isZod3Schema(schema: unknown): schema is ZodType;
|
|
42
|
+
/**
|
|
43
|
+
* Detects if a schema is Zod 4 by checking for def.type property.
|
|
44
|
+
* Zod 4 uses `def.type` with lowercase type names like "object", "string".
|
|
45
|
+
* @returns True if the schema appears to be Zod 4 style
|
|
46
|
+
*/
|
|
47
|
+
export declare function isZod4Schema(schema: unknown): schema is $ZodType;
|
|
48
|
+
/**
|
|
49
|
+
* Checks if a schema is a Zod schema
|
|
50
|
+
* @param schema - The schema to check
|
|
51
|
+
* @returns True if the schema is a Zod schema
|
|
52
|
+
*/
|
|
53
|
+
export declare function isZodSchema(schema: unknown): ReturnType<typeof isZod3Schema> | ReturnType<typeof isZod4Schema>;
|
|
54
|
+
//# sourceMappingURL=zod.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zod.d.ts","sourceRoot":"","sources":["../../src/schema/zod.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,QAAQ,EACR,aAAa,EACb,OAAO,EACP,UAAU,EACX,MAAM,QAAQ,CAAC;AAChB,OAAO,EACL,YAAY,EACZ,QAAQ,EAET,MAAM,aAAa,CAAC;AAGrB;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,OAAO,GACd,MAAM,IAAI,WAAW,CAAC,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC,EAAE,UAAU,CAAC,CAMjE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,YAAY,CAO5E;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,iKAElD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,OAWjD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,OAWpD;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,OAkBpD;AAaD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,OAAO,CAE/D;AAUD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,QAAQ,CAEhE;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,OAAO,GACd,UAAU,CAAC,OAAO,YAAY,CAAC,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAEnE"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isZod3FunctionSchema = isZod3FunctionSchema;
|
|
4
|
+
exports.isZod4FunctionSchema = isZod4FunctionSchema;
|
|
5
|
+
exports.isZodFunctionSchema = isZodFunctionSchema;
|
|
6
|
+
exports.getZodFunctionArgs = getZodFunctionArgs;
|
|
7
|
+
exports.getZodFunctionReturns = getZodFunctionReturns;
|
|
8
|
+
exports.handleZodSchemaToJson = handleZodSchemaToJson;
|
|
9
|
+
exports.isZod3Schema = isZod3Schema;
|
|
10
|
+
exports.isZod4Schema = isZod4Schema;
|
|
11
|
+
exports.isZodSchema = isZodSchema;
|
|
12
|
+
const core_1 = require("zod/v4/core");
|
|
13
|
+
const zodInternalAlias_1 = require("zodInternalAlias");
|
|
14
|
+
/**
|
|
15
|
+
* @returns True if the schema is a Zod 3 function schema
|
|
16
|
+
*/
|
|
17
|
+
function isZod3FunctionSchema(schema) {
|
|
18
|
+
if (!isZod3Schema(schema)) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
return "typeName" in schema._def && schema._def.typeName === "ZodFunction";
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* @returns True if the schema is a Zod 4 function schema
|
|
25
|
+
*/
|
|
26
|
+
function isZod4FunctionSchema(schema) {
|
|
27
|
+
if (!isZod4Schema(schema)) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
// @ts-expect-error -- Error in Zod types for v3 vs v4
|
|
31
|
+
return "def" in schema && schema._zod.def.type === "function";
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Checks if a schema is a Zod function schema (Zod 3 or Zod 4).
|
|
35
|
+
* @param schema - The schema to check
|
|
36
|
+
* @returns True if the schema is a Zod function schema
|
|
37
|
+
*/
|
|
38
|
+
function isZodFunctionSchema(schema) {
|
|
39
|
+
return isZod3FunctionSchema(schema) || isZod4FunctionSchema(schema);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Extracts the args schema from a Zod 3 function schema.
|
|
43
|
+
* @param schema - The Zod 3 function schema
|
|
44
|
+
* @returns The args schema, or undefined if not a Zod 3 function schema
|
|
45
|
+
*/
|
|
46
|
+
function getZodFunctionArgs(schema) {
|
|
47
|
+
if (isZod3FunctionSchema(schema)) {
|
|
48
|
+
return schema._def.args;
|
|
49
|
+
}
|
|
50
|
+
if (isZod4FunctionSchema(schema)) {
|
|
51
|
+
// @ts-expect-error -- Error in Zod types for v3 vs v4
|
|
52
|
+
return schema._zod.def.input;
|
|
53
|
+
}
|
|
54
|
+
throw new Error("Unable to determine parameters from zod function schema");
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Extracts the return schema from a Zod 3 or Zod 4 function schema.
|
|
58
|
+
* @param schema - The Zod function schema
|
|
59
|
+
* @returns The return schema, or undefined if not a Zod function schema
|
|
60
|
+
*/
|
|
61
|
+
function getZodFunctionReturns(schema) {
|
|
62
|
+
if (isZod3FunctionSchema(schema)) {
|
|
63
|
+
return schema._def.returns;
|
|
64
|
+
}
|
|
65
|
+
if (isZod4FunctionSchema(schema)) {
|
|
66
|
+
// @ts-expect-error -- Error in Zod types for v3 vs v4
|
|
67
|
+
return schema._zod.def.output;
|
|
68
|
+
}
|
|
69
|
+
throw new Error("Unable to determine return type from zod function schema");
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Handles conversion of Zod schemas to JSON Schema.
|
|
73
|
+
* Supports both Zod 3 (via zod-to-json-schema) and Zod 4 (native).
|
|
74
|
+
* @param schema - The Zod schema to convert
|
|
75
|
+
* @returns The JSON Schema representation
|
|
76
|
+
*/
|
|
77
|
+
function handleZodSchemaToJson(schema) {
|
|
78
|
+
// Detect Zod 4 by checking for def.type
|
|
79
|
+
if (isZod4Schema(schema))
|
|
80
|
+
return (0, core_1.toJSONSchema)(schema);
|
|
81
|
+
try {
|
|
82
|
+
// Dynamic require for optional peer dependency
|
|
83
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports -- need require because zod-to-json-schema may be missing
|
|
84
|
+
const { zodToJsonSchema } = require("zod-to-json-schema");
|
|
85
|
+
return zodToJsonSchema(schema);
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
throw new Error("Zod 3 requires 'zod-to-json-schema' package for JSON Schema conversion. " +
|
|
89
|
+
"Install it with: npm install zod-to-json-schema", {
|
|
90
|
+
cause: error,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Zod 3 schemas have _def with typeName and ~standard with vendor "zod"
|
|
95
|
+
// Use looseObject to allow any _def shape (different for each type)
|
|
96
|
+
const zod3SchemaType = zodInternalAlias_1.z.object({
|
|
97
|
+
_def: zodInternalAlias_1.z.looseObject({
|
|
98
|
+
typeName: zodInternalAlias_1.z.string().optional(),
|
|
99
|
+
}),
|
|
100
|
+
"~standard": zodInternalAlias_1.z.looseObject({
|
|
101
|
+
vendor: zodInternalAlias_1.z.literal("zod"),
|
|
102
|
+
}),
|
|
103
|
+
});
|
|
104
|
+
/**
|
|
105
|
+
* Checks if a schema is probably a Zod 3 schema.
|
|
106
|
+
* @param schema - The schema to check
|
|
107
|
+
* @returns True if the schema looks like a Zod 3 schema
|
|
108
|
+
*/
|
|
109
|
+
function isZod3Schema(schema) {
|
|
110
|
+
return zod3SchemaType.safeParse(schema).success;
|
|
111
|
+
}
|
|
112
|
+
const zod4SchemaType = zodInternalAlias_1.z.object({
|
|
113
|
+
def: zodInternalAlias_1.z.object(),
|
|
114
|
+
_zod: zodInternalAlias_1.z.looseObject({
|
|
115
|
+
def: zodInternalAlias_1.z.looseObject({}),
|
|
116
|
+
}),
|
|
117
|
+
"~standard": zodInternalAlias_1.z.looseObject({}),
|
|
118
|
+
});
|
|
119
|
+
/**
|
|
120
|
+
* Detects if a schema is Zod 4 by checking for def.type property.
|
|
121
|
+
* Zod 4 uses `def.type` with lowercase type names like "object", "string".
|
|
122
|
+
* @returns True if the schema appears to be Zod 4 style
|
|
123
|
+
*/
|
|
124
|
+
function isZod4Schema(schema) {
|
|
125
|
+
return zod4SchemaType.safeParse(schema).success;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Checks if a schema is a Zod schema
|
|
129
|
+
* @param schema - The schema to check
|
|
130
|
+
* @returns True if the schema is a Zod schema
|
|
131
|
+
*/
|
|
132
|
+
function isZodSchema(schema) {
|
|
133
|
+
return isZod3Schema(schema) || isZod4Schema(schema);
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=zod.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zod.js","sourceRoot":"","sources":["../../src/schema/zod.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ZodFunction,\n ZodTuple,\n ZodTupleItems,\n ZodType,\n ZodTypeAny,\n} from \"zod/v3\";\nimport {\n $ZodFunction,\n $ZodType,\n toJSONSchema as zod4ToJSONSchema,\n} from \"zod/v4/core\";\nimport { z } from \"zodInternalAlias\";\n\n/**\n * @returns True if the schema is a Zod 3 function schema\n */\nexport function isZod3FunctionSchema(\n schema: unknown,\n): schema is ZodFunction<ZodTuple<ZodTupleItems, any>, ZodTypeAny> {\n if (!isZod3Schema(schema)) {\n return false;\n }\n\n return \"typeName\" in schema._def && schema._def.typeName === \"ZodFunction\";\n}\n\n/**\n * @returns True if the schema is a Zod 4 function schema\n */\nexport function isZod4FunctionSchema(schema: unknown): schema is $ZodFunction {\n if (!isZod4Schema(schema)) {\n return false;\n }\n\n // @ts-expect-error -- Error in Zod types for v3 vs v4\n return \"def\" in schema && schema._zod.def.type === \"function\";\n}\n\n/**\n * Checks if a schema is a Zod function schema (Zod 3 or Zod 4).\n * @param schema - The schema to check\n * @returns True if the schema is a Zod function schema\n */\nexport function isZodFunctionSchema(schema: unknown) {\n return isZod3FunctionSchema(schema) || isZod4FunctionSchema(schema);\n}\n\n/**\n * Extracts the args schema from a Zod 3 function schema.\n * @param schema - The Zod 3 function schema\n * @returns The args schema, or undefined if not a Zod 3 function schema\n */\nexport function getZodFunctionArgs(schema: unknown) {\n if (isZod3FunctionSchema(schema)) {\n return schema._def.args;\n }\n\n if (isZod4FunctionSchema(schema)) {\n // @ts-expect-error -- Error in Zod types for v3 vs v4\n return schema._zod.def.input;\n }\n\n throw new Error(\"Unable to determine parameters from zod function schema\");\n}\n\n/**\n * Extracts the return schema from a Zod 3 or Zod 4 function schema.\n * @param schema - The Zod function schema\n * @returns The return schema, or undefined if not a Zod function schema\n */\nexport function getZodFunctionReturns(schema: unknown) {\n if (isZod3FunctionSchema(schema)) {\n return schema._def.returns;\n }\n\n if (isZod4FunctionSchema(schema)) {\n // @ts-expect-error -- Error in Zod types for v3 vs v4\n return schema._zod.def.output;\n }\n\n throw new Error(\"Unable to determine return type from zod function schema\");\n}\n\n/**\n * Handles conversion of Zod schemas to JSON Schema.\n * Supports both Zod 3 (via zod-to-json-schema) and Zod 4 (native).\n * @param schema - The Zod schema to convert\n * @returns The JSON Schema representation\n */\nexport function handleZodSchemaToJson(schema: unknown) {\n // Detect Zod 4 by checking for def.type\n if (isZod4Schema(schema)) return zod4ToJSONSchema(schema);\n\n try {\n // Dynamic require for optional peer dependency\n // eslint-disable-next-line @typescript-eslint/no-require-imports -- need require because zod-to-json-schema may be missing\n const { zodToJsonSchema } = require(\"zod-to-json-schema\");\n return zodToJsonSchema(schema);\n } catch (error) {\n throw new Error(\n \"Zod 3 requires 'zod-to-json-schema' package for JSON Schema conversion. \" +\n \"Install it with: npm install zod-to-json-schema\",\n {\n cause: error,\n },\n );\n }\n}\n\n// Zod 3 schemas have _def with typeName and ~standard with vendor \"zod\"\n// Use looseObject to allow any _def shape (different for each type)\nconst zod3SchemaType = z.object({\n _def: z.looseObject({\n typeName: z.string().optional(),\n }),\n \"~standard\": z.looseObject({\n vendor: z.literal(\"zod\"),\n }),\n});\n\n/**\n * Checks if a schema is probably a Zod 3 schema.\n * @param schema - The schema to check\n * @returns True if the schema looks like a Zod 3 schema\n */\nexport function isZod3Schema(schema: unknown): schema is ZodType {\n return zod3SchemaType.safeParse(schema).success;\n}\n\nconst zod4SchemaType = z.object({\n def: z.object(),\n _zod: z.looseObject({\n def: z.looseObject({}),\n }),\n \"~standard\": z.looseObject({}),\n});\n\n/**\n * Detects if a schema is Zod 4 by checking for def.type property.\n * Zod 4 uses `def.type` with lowercase type names like \"object\", \"string\".\n * @returns True if the schema appears to be Zod 4 style\n */\nexport function isZod4Schema(schema: unknown): schema is $ZodType {\n return zod4SchemaType.safeParse(schema).success;\n}\n\n/**\n * Checks if a schema is a Zod schema\n * @param schema - The schema to check\n * @returns True if the schema is a Zod schema\n */\nexport function isZodSchema(\n schema: unknown,\n): ReturnType<typeof isZod3Schema> | ReturnType<typeof isZod4Schema> {\n return isZod3Schema(schema) || isZod4Schema(schema);\n}\n"]}
|
package/dist/testing/tools.d.ts
CHANGED
|
@@ -1,25 +1,39 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TamboToolWithToolSchema } from "../model/component-metadata";
|
|
2
|
+
import { TamboComponent, TamboTool } from "../providers";
|
|
2
3
|
/**
|
|
3
|
-
* Serializes the registry for testing purposes
|
|
4
|
+
* Serializes the registry for testing purposes.
|
|
5
|
+
* Converts Standard Schema validators to JSON Schema format.
|
|
6
|
+
* Uses the same logic as production code via mapTamboToolToContextTool.
|
|
4
7
|
* @param mockRegistry - The registry to serialize
|
|
5
|
-
* @returns The serialized registry
|
|
8
|
+
* @returns The serialized registry with JSON Schema representations
|
|
6
9
|
*/
|
|
7
10
|
export declare function serializeRegistry(mockRegistry: TamboComponent[]): {
|
|
8
|
-
props: import("
|
|
9
|
-
|
|
10
|
-
definitions?: {
|
|
11
|
-
[key: string]: import("zod-to-json-schema").JsonSchema7Type;
|
|
12
|
-
} | undefined;
|
|
13
|
-
};
|
|
14
|
-
contextTools: {
|
|
15
|
-
parameters: any;
|
|
16
|
-
name: string;
|
|
17
|
-
description: string;
|
|
18
|
-
transformToContent?: ((result: any) => Promise<import("@tambo-ai/typescript-sdk/resources/beta").ChatCompletionContentPart[]> | import("@tambo-ai/typescript-sdk/resources/beta").ChatCompletionContentPart[]) | undefined;
|
|
19
|
-
}[] | undefined;
|
|
11
|
+
props: import("json-schema").JSONSchema7 | undefined;
|
|
12
|
+
contextTools: import("../model/component-metadata").ComponentContextToolMetadata[] | undefined;
|
|
20
13
|
name: string;
|
|
21
14
|
description: string;
|
|
22
15
|
propsDefinition?: any;
|
|
23
16
|
loadingComponent?: import("react").ComponentType<any>;
|
|
24
17
|
}[];
|
|
18
|
+
interface CreateMockToolOptions {
|
|
19
|
+
inputSchema: TamboTool["inputSchema"];
|
|
20
|
+
outputSchema?: TamboTool["outputSchema"];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Creates a mock TamboTool with the given input schema for testing purposes.
|
|
24
|
+
* Accepts either an inputSchema directly or an options object with inputSchema and outputSchema.
|
|
25
|
+
* @param schemaOrOptions - The input schema or options object
|
|
26
|
+
* @returns A mock TamboTool instance
|
|
27
|
+
* @internal
|
|
28
|
+
*/
|
|
29
|
+
export declare function createMockTool(schemaOrOptions: TamboTool["inputSchema"] | CreateMockToolOptions): TamboTool;
|
|
30
|
+
/**
|
|
31
|
+
* Creates a mock TamboToolWithToolSchema for testing purposes.
|
|
32
|
+
* Does NOT adapt to inputSchema format - preserves the deprecated toolSchema interface.
|
|
33
|
+
* @param toolSchema - The tool schema for the tool
|
|
34
|
+
* @returns A mock TamboToolWithToolSchema instance (NOT adapted)
|
|
35
|
+
* @internal
|
|
36
|
+
*/
|
|
37
|
+
export declare function createMockToolWithToolSchema(toolSchema: TamboToolWithToolSchema["toolSchema"]): TamboToolWithToolSchema;
|
|
38
|
+
export {};
|
|
25
39
|
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/testing/tools.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/testing/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAOzD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,cAAc,EAAE;;;;;;;IAiB/D;AAED,UAAU,qBAAqB;IAC7B,WAAW,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;IACtC,YAAY,CAAC,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;CAC1C;AAGD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,eAAe,EAAE,SAAS,CAAC,aAAa,CAAC,GAAG,qBAAqB,GAChE,SAAS,CAiCX;AAGD;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,uBAAuB,CAAC,YAAY,CAAC,GAChD,uBAAuB,CAOzB"}
|
package/dist/testing/tools.js
CHANGED
|
@@ -1,31 +1,76 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.serializeRegistry = serializeRegistry;
|
|
7
|
-
|
|
4
|
+
exports.createMockTool = createMockTool;
|
|
5
|
+
exports.createMockToolWithToolSchema = createMockToolWithToolSchema;
|
|
6
|
+
const schema_1 = require("../schema");
|
|
7
|
+
const registry_1 = require("../util/registry");
|
|
8
8
|
/**
|
|
9
|
-
* Serializes the registry for testing purposes
|
|
9
|
+
* Serializes the registry for testing purposes.
|
|
10
|
+
* Converts Standard Schema validators to JSON Schema format.
|
|
11
|
+
* Uses the same logic as production code via mapTamboToolToContextTool.
|
|
10
12
|
* @param mockRegistry - The registry to serialize
|
|
11
|
-
* @returns The serialized registry
|
|
13
|
+
* @returns The serialized registry with JSON Schema representations
|
|
12
14
|
*/
|
|
13
15
|
function serializeRegistry(mockRegistry) {
|
|
14
16
|
return mockRegistry.map(({ component: _component, propsSchema, associatedTools, ...componentEntry }) => ({
|
|
15
17
|
...componentEntry,
|
|
16
|
-
props: (0,
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
.parameters()
|
|
21
|
-
.items.map((p, index) => ({
|
|
22
|
-
name: `param${index + 1}`,
|
|
23
|
-
schema: (0, zod_to_json_schema_1.default)(p),
|
|
24
|
-
isRequired: true,
|
|
25
|
-
description: p.description,
|
|
26
|
-
type: (0, zod_to_json_schema_1.default)(p).type,
|
|
27
|
-
})),
|
|
28
|
-
})),
|
|
18
|
+
props: (0, schema_1.isStandardSchema)(propsSchema)
|
|
19
|
+
? (0, schema_1.safeSchemaToJsonSchema)(propsSchema)
|
|
20
|
+
: propsSchema,
|
|
21
|
+
contextTools: associatedTools?.map((tool) => (0, registry_1.mapTamboToolToContextTool)((0, registry_1.adaptToolFromFnSchema)(tool))),
|
|
29
22
|
}));
|
|
30
23
|
}
|
|
24
|
+
// Helper to create a minimal TamboTool for testing
|
|
25
|
+
/**
|
|
26
|
+
* Creates a mock TamboTool with the given input schema for testing purposes.
|
|
27
|
+
* Accepts either an inputSchema directly or an options object with inputSchema and outputSchema.
|
|
28
|
+
* @param schemaOrOptions - The input schema or options object
|
|
29
|
+
* @returns A mock TamboTool instance
|
|
30
|
+
* @internal
|
|
31
|
+
*/
|
|
32
|
+
function createMockTool(schemaOrOptions) {
|
|
33
|
+
// Check if options object was passed
|
|
34
|
+
const hasInputSchemaProperty = (obj) => {
|
|
35
|
+
return (typeof obj === "object" &&
|
|
36
|
+
obj !== null &&
|
|
37
|
+
"inputSchema" in obj &&
|
|
38
|
+
obj.inputSchema != null);
|
|
39
|
+
};
|
|
40
|
+
if (hasInputSchemaProperty(schemaOrOptions)) {
|
|
41
|
+
return {
|
|
42
|
+
name: "mockTool",
|
|
43
|
+
description: "A mock tool for testing",
|
|
44
|
+
tool: jest.fn().mockImplementation(() => { }),
|
|
45
|
+
inputSchema: schemaOrOptions.inputSchema,
|
|
46
|
+
outputSchema: schemaOrOptions.outputSchema ?? {
|
|
47
|
+
type: "object",
|
|
48
|
+
properties: {},
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
name: "mockTool",
|
|
54
|
+
description: "A mock tool for testing",
|
|
55
|
+
tool: jest.fn().mockImplementation(() => { }),
|
|
56
|
+
inputSchema: schemaOrOptions,
|
|
57
|
+
outputSchema: { type: "object", properties: {} },
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
// Helper to create a minimal TamboTool for testing -- uses toolSchema field as function instead of inputSchema
|
|
61
|
+
/**
|
|
62
|
+
* Creates a mock TamboToolWithToolSchema for testing purposes.
|
|
63
|
+
* Does NOT adapt to inputSchema format - preserves the deprecated toolSchema interface.
|
|
64
|
+
* @param toolSchema - The tool schema for the tool
|
|
65
|
+
* @returns A mock TamboToolWithToolSchema instance (NOT adapted)
|
|
66
|
+
* @internal
|
|
67
|
+
*/
|
|
68
|
+
function createMockToolWithToolSchema(toolSchema) {
|
|
69
|
+
return {
|
|
70
|
+
name: "testTool",
|
|
71
|
+
description: "A test tool",
|
|
72
|
+
tool: jest.fn().mockImplementation(() => { }),
|
|
73
|
+
toolSchema,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
31
76
|
//# sourceMappingURL=tools.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/testing/tools.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/testing/tools.ts"],"names":[],"mappings":";;AAeA,8CAiBC;AAeD,wCAmCC;AAUD,oEASC;AAnGD,sCAAqE;AACrE,+CAG0B;AAE1B;;;;;;GAMG;AACH,SAAgB,iBAAiB,CAAC,YAA8B;IAC9D,OAAO,YAAY,CAAC,GAAG,CACrB,CAAC,EACC,SAAS,EAAE,UAAU,EACrB,WAAW,EACX,eAAe,EACf,GAAG,cAAc,EAClB,EAAE,EAAE,CAAC,CAAC;QACL,GAAG,cAAc;QACjB,KAAK,EAAE,IAAA,yBAAgB,EAAC,WAAW,CAAC;YAClC,CAAC,CAAC,IAAA,+BAAsB,EAAC,WAAW,CAAC;YACrC,CAAC,CAAC,WAAW;QACf,YAAY,EAAE,eAAe,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC1C,IAAA,oCAAyB,EAAC,IAAA,gCAAqB,EAAC,IAAI,CAAC,CAAC,CACvD;KACF,CAAC,CACH,CAAC;AACJ,CAAC;AAOD,mDAAmD;AACnD;;;;;;GAMG;AACH,SAAgB,cAAc,CAC5B,eAAiE;IAEjE,qCAAqC;IACrC,MAAM,sBAAsB,GAAG,CAC7B,GAAY,EACkB,EAAE;QAChC,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ;YACvB,GAAG,KAAK,IAAI;YACZ,aAAa,IAAI,GAAG;YACpB,GAAG,CAAC,WAAW,IAAI,IAAI,CACxB,CAAC;IACJ,CAAC,CAAC;IAEF,IAAI,sBAAsB,CAAC,eAAe,CAAC,EAAE,CAAC;QAC5C,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,yBAAyB;YACtC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;YAC5C,WAAW,EAAE,eAAe,CAAC,WAAW;YACxC,YAAY,EAAE,eAAe,CAAC,YAAY,IAAI;gBAC5C,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE;aACf;SACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,yBAAyB;QACtC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;QAC5C,WAAW,EAAE,eAAe;QAC5B,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;KACjD,CAAC;AACJ,CAAC;AAED,+GAA+G;AAC/G;;;;;;GAMG;AACH,SAAgB,4BAA4B,CAC1C,UAAiD;IAEjD,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,aAAa;QAC1B,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;QAC5C,UAAU;KACX,CAAC;AACJ,CAAC","sourcesContent":["import { TamboToolWithToolSchema } from \"../model/component-metadata\";\nimport { TamboComponent, TamboTool } from \"../providers\";\nimport { isStandardSchema, safeSchemaToJsonSchema } from \"../schema\";\nimport {\n adaptToolFromFnSchema,\n mapTamboToolToContextTool,\n} from \"../util/registry\";\n\n/**\n * Serializes the registry for testing purposes.\n * Converts Standard Schema validators to JSON Schema format.\n * Uses the same logic as production code via mapTamboToolToContextTool.\n * @param mockRegistry - The registry to serialize\n * @returns The serialized registry with JSON Schema representations\n */\nexport function serializeRegistry(mockRegistry: TamboComponent[]) {\n return mockRegistry.map(\n ({\n component: _component,\n propsSchema,\n associatedTools,\n ...componentEntry\n }) => ({\n ...componentEntry,\n props: isStandardSchema(propsSchema)\n ? safeSchemaToJsonSchema(propsSchema)\n : propsSchema,\n contextTools: associatedTools?.map((tool) =>\n mapTamboToolToContextTool(adaptToolFromFnSchema(tool)),\n ),\n }),\n );\n}\n\ninterface CreateMockToolOptions {\n inputSchema: TamboTool[\"inputSchema\"];\n outputSchema?: TamboTool[\"outputSchema\"];\n}\n\n// Helper to create a minimal TamboTool for testing\n/**\n * Creates a mock TamboTool with the given input schema for testing purposes.\n * Accepts either an inputSchema directly or an options object with inputSchema and outputSchema.\n * @param schemaOrOptions - The input schema or options object\n * @returns A mock TamboTool instance\n * @internal\n */\nexport function createMockTool(\n schemaOrOptions: TamboTool[\"inputSchema\"] | CreateMockToolOptions,\n): TamboTool {\n // Check if options object was passed\n const hasInputSchemaProperty = (\n obj: unknown,\n ): obj is CreateMockToolOptions => {\n return (\n typeof obj === \"object\" &&\n obj !== null &&\n \"inputSchema\" in obj &&\n obj.inputSchema != null\n );\n };\n\n if (hasInputSchemaProperty(schemaOrOptions)) {\n return {\n name: \"mockTool\",\n description: \"A mock tool for testing\",\n tool: jest.fn().mockImplementation(() => {}),\n inputSchema: schemaOrOptions.inputSchema,\n outputSchema: schemaOrOptions.outputSchema ?? {\n type: \"object\",\n properties: {},\n },\n };\n }\n\n return {\n name: \"mockTool\",\n description: \"A mock tool for testing\",\n tool: jest.fn().mockImplementation(() => {}),\n inputSchema: schemaOrOptions,\n outputSchema: { type: \"object\", properties: {} },\n };\n}\n\n// Helper to create a minimal TamboTool for testing -- uses toolSchema field as function instead of inputSchema\n/**\n * Creates a mock TamboToolWithToolSchema for testing purposes.\n * Does NOT adapt to inputSchema format - preserves the deprecated toolSchema interface.\n * @param toolSchema - The tool schema for the tool\n * @returns A mock TamboToolWithToolSchema instance (NOT adapted)\n * @internal\n */\nexport function createMockToolWithToolSchema(\n toolSchema: TamboToolWithToolSchema[\"toolSchema\"],\n): TamboToolWithToolSchema {\n return {\n name: \"testTool\",\n description: \"A test tool\",\n tool: jest.fn().mockImplementation(() => {}),\n toolSchema,\n };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-parts.test.d.ts","sourceRoot":"","sources":["../../src/util/content-parts.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const content_parts_1 = require("
|
|
3
|
+
const content_parts_1 = require("./content-parts");
|
|
4
4
|
describe("content-parts type guards", () => {
|
|
5
5
|
it("returns true for a valid text content part array", () => {
|
|
6
6
|
const parts = [{ type: "text", text: "hello" }];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-parts.test.js","sourceRoot":"","sources":["../../src/util/content-parts.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { isContentPartArray, isContentPart, toText } from \"./content-parts\";\n\ndescribe(\"content-parts type guards\", () => {\n it(\"returns true for a valid text content part array\", () => {\n const parts = [{ type: \"text\", text: \"hello\" }];\n expect(isContentPartArray(parts)).toBe(true);\n });\n\n it(\"returns true for a valid image_url content part array\", () => {\n const parts = [\n { type: \"image_url\", image_url: { url: \"data:image/png;base64,abc\" } },\n ];\n expect(isContentPartArray(parts)).toBe(true);\n });\n\n it(\"returns false for non-object array elements\", () => {\n const parts = [\"text\", 123, null];\n expect(isContentPartArray(parts as any)).toBe(false);\n });\n\n it(\"returns false when elements are objects without string type\", () => {\n const parts = [{}, { type: 42 }, { type: undefined }];\n expect(isContentPartArray(parts as any)).toBe(false);\n });\n\n it(\"isContentPart narrows a single part\", () => {\n const val: unknown = { type: \"text\", text: \"hi\" };\n if (!isContentPart(val)) {\n throw new Error(\"should be content part\");\n }\n // runtime spot-check\n expect(val.type).toBe(\"text\");\n });\n\n it(\"returns false for non-array inputs\", () => {\n expect(isContentPartArray({})).toBe(false);\n expect(isContentPartArray(null)).toBe(false);\n expect(isContentPartArray(undefined)).toBe(false);\n expect(isContentPartArray(\"foo\")).toBe(false);\n });\n\n it(\"toText safely stringifies values and never throws\", () => {\n expect(toText(\"hello\")).toBe(\"hello\");\n expect(toText(42)).toBe(\"42\");\n const circular: any = { a: 1 };\n circular.self = circular;\n // Should not throw for circular structures\n expect(() => toText(circular)).not.toThrow();\n expect(typeof toText(undefined)).toBe(\"string\");\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-component.d.ts","sourceRoot":"","sources":["../../src/util/generate-component.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"generate-component.d.ts","sourceRoot":"","sources":["../../src/util/generate-component.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,0BAA0B,CAAC;AAI/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAI1E;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAC3C,aAAa,EAAE,iBAAiB,GAC/B,kBAAkB,CAqCpB"}
|
|
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.renderComponentIntoMessage = renderComponentIntoMessage;
|
|
7
7
|
const partial_json_1 = require("partial-json");
|
|
8
8
|
const react_1 = __importDefault(require("react"));
|
|
9
|
-
const zod_1 = require("zod");
|
|
10
9
|
const use_current_message_1 = require("../hooks/use-current-message");
|
|
10
|
+
const schema_1 = require("../schema");
|
|
11
11
|
const registry_1 = require("../util/registry");
|
|
12
12
|
/**
|
|
13
13
|
* Generate a message that has a component rendered into it, if the message
|
|
@@ -22,8 +22,8 @@ function renderComponentIntoMessage(message, componentList) {
|
|
|
22
22
|
}
|
|
23
23
|
const parsedProps = (0, partial_json_1.parse)(JSON.stringify(message.component.props));
|
|
24
24
|
const registeredComponent = (0, registry_1.getComponentFromRegistry)(message.component.componentName, componentList);
|
|
25
|
-
const validatedProps = registeredComponent.props
|
|
26
|
-
? registeredComponent.props.
|
|
25
|
+
const validatedProps = (0, schema_1.isStandardSchema)(registeredComponent.props)
|
|
26
|
+
? registeredComponent.props["~standard"].validate(parsedProps)
|
|
27
27
|
: parsedProps;
|
|
28
28
|
const renderedComponent = react_1.default.createElement(registeredComponent.component, validatedProps);
|
|
29
29
|
// Create the full message object first so we can pass it to the provider
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-component.js","sourceRoot":"","sources":["../../src/util/generate-component.ts"],"names":[],"mappings":";;;;;AAgBA,
|
|
1
|
+
{"version":3,"file":"generate-component.js","sourceRoot":"","sources":["../../src/util/generate-component.ts"],"names":[],"mappings":";;;;;AAgBA,gEAwCC;AAvDD,+CAAqC;AACrC,kDAA0B;AAC1B,sEAA4E;AAG5E,sCAA6C;AAC7C,+CAA4D;AAE5D;;;;;;GAMG;AACH,SAAgB,0BAA0B,CACxC,OAA2C,EAC3C,aAAgC;IAEhC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,aAAa,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,WAAW,GAAG,IAAA,oBAAK,EAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IACnE,MAAM,mBAAmB,GAAG,IAAA,mCAAwB,EAClD,OAAO,CAAC,SAAS,CAAC,aAAa,EAC/B,aAAa,CACd,CAAC;IAEF,MAAM,cAAc,GAAG,IAAA,yBAAgB,EAAC,mBAAmB,CAAC,KAAK,CAAC;QAChE,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC9D,CAAC,CAAC,WAAW,CAAC;IAEhB,MAAM,iBAAiB,GAAG,eAAK,CAAC,aAAa,CAC3C,mBAAmB,CAAC,SAAS,EAC7B,cAAc,CACf,CAAC;IAEF,yEAAyE;IACzE,MAAM,WAAW,GAAuB;QACtC,GAAG,OAAO;QACV,SAAS,EAAE;YACT,GAAG,OAAO,CAAC,SAAS;YACpB,KAAK,EAAE,cAAc;SACtB;KACF,CAAC;IAEF,MAAM,gBAAgB,GAAG,IAAA,kDAA4B,EACnD,iBAAiB,EACjB,WAAW,CACZ,CAAC;IAEF,OAAO;QACL,GAAG,WAAW;QACd,iBAAiB,EAAE,gBAAgB;KACpC,CAAC;AACJ,CAAC","sourcesContent":["import TamboAI from \"@tambo-ai/typescript-sdk\";\nimport { parse } from \"partial-json\";\nimport React from \"react\";\nimport { wrapWithTamboMessageProvider } from \"../hooks/use-current-message\";\nimport { ComponentRegistry } from \"../model/component-metadata\";\nimport { TamboThreadMessage } from \"../model/generate-component-response\";\nimport { isStandardSchema } from \"../schema\";\nimport { getComponentFromRegistry } from \"../util/registry\";\n\n/**\n * Generate a message that has a component rendered into it, if the message\n * came with one.\n * @param message - The message that may contain a component\n * @param componentList - the list of available components\n * @returns The updated message with the component rendered into it\n */\nexport function renderComponentIntoMessage(\n message: TamboAI.Beta.Threads.ThreadMessage,\n componentList: ComponentRegistry,\n): TamboThreadMessage {\n if (!message.component?.componentName) {\n throw new Error(\"Component not found\");\n }\n const parsedProps = parse(JSON.stringify(message.component.props));\n const registeredComponent = getComponentFromRegistry(\n message.component.componentName,\n componentList,\n );\n\n const validatedProps = isStandardSchema(registeredComponent.props)\n ? registeredComponent.props[\"~standard\"].validate(parsedProps)\n : parsedProps;\n\n const renderedComponent = React.createElement(\n registeredComponent.component,\n validatedProps,\n );\n\n // Create the full message object first so we can pass it to the provider\n const fullMessage: TamboThreadMessage = {\n ...message,\n component: {\n ...message.component,\n props: validatedProps,\n },\n };\n\n const wrappedComponent = wrapWithTamboMessageProvider(\n renderedComponent,\n fullMessage,\n );\n\n return {\n ...fullMessage,\n renderedComponent: wrappedComponent,\n };\n}\n"]}
|