@tambo-ai/react 0.65.3 → 0.66.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +120 -20
- package/dist/{providers/hoc → hoc}/with-tambo-interactable.d.ts +2 -2
- package/dist/hoc/with-tambo-interactable.d.ts.map +1 -0
- package/dist/{providers/hoc → hoc}/with-tambo-interactable.js +29 -2
- package/dist/hoc/with-tambo-interactable.js.map +1 -0
- package/dist/hoc/with-tambo-interactable.test.d.ts +2 -0
- package/dist/hoc/with-tambo-interactable.test.d.ts.map +1 -0
- package/dist/hoc/with-tambo-interactable.test.js +192 -0
- package/dist/hoc/with-tambo-interactable.test.js.map +1 -0
- package/dist/hooks/index.d.ts +1 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +2 -1
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/use-current-message.d.ts +51 -7
- package/dist/hooks/use-current-message.d.ts.map +1 -1
- package/dist/hooks/use-current-message.js +50 -6
- package/dist/hooks/use-current-message.js.map +1 -1
- package/dist/hooks/use-current-message.test.d.ts +2 -0
- package/dist/hooks/use-current-message.test.d.ts.map +1 -0
- package/dist/hooks/use-current-message.test.js +264 -0
- package/dist/hooks/use-current-message.test.js.map +1 -0
- package/dist/index.d.ts +10 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/dist/mcp/index.d.ts +1 -1
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +2 -1
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/mcp-hooks.d.ts +77 -6
- package/dist/mcp/mcp-hooks.d.ts.map +1 -1
- package/dist/mcp/mcp-hooks.js +104 -40
- package/dist/mcp/mcp-hooks.js.map +1 -1
- package/dist/mcp/mcp-hooks.test.js +83 -18
- package/dist/mcp/mcp-hooks.test.js.map +1 -1
- package/dist/mcp/tambo-mcp-provider.d.ts.map +1 -1
- package/dist/mcp/tambo-mcp-provider.js +2 -1
- package/dist/mcp/tambo-mcp-provider.js.map +1 -1
- package/dist/model/component-metadata.d.ts +444 -14
- package/dist/model/component-metadata.d.ts.map +1 -1
- package/dist/model/component-metadata.js.map +1 -1
- package/dist/model/generate-component-response.d.ts +12 -1
- package/dist/model/generate-component-response.d.ts.map +1 -1
- package/dist/model/generate-component-response.js.map +1 -1
- package/dist/model/resource-info.d.ts +55 -0
- package/dist/model/resource-info.d.ts.map +1 -0
- package/dist/model/resource-info.js +3 -0
- package/dist/model/resource-info.js.map +1 -0
- package/dist/providers/index.d.ts +1 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/tambo-component-provider.d.ts +4 -4
- package/dist/providers/tambo-component-provider.d.ts.map +1 -1
- package/dist/providers/tambo-component-provider.js.map +1 -1
- package/dist/providers/tambo-interactable-provider-partial-updates.test.js +87 -87
- package/dist/providers/tambo-interactable-provider-partial-updates.test.js.map +1 -1
- package/dist/providers/tambo-interactable-provider.d.ts +2 -3
- package/dist/providers/tambo-interactable-provider.d.ts.map +1 -1
- package/dist/providers/tambo-interactable-provider.js +47 -41
- package/dist/providers/tambo-interactable-provider.js.map +1 -1
- package/dist/providers/tambo-interactables-additional-context-edge-cases.test.js +9 -9
- package/dist/providers/tambo-interactables-additional-context-edge-cases.test.js.map +1 -1
- package/dist/providers/tambo-interactables-additional-context.test.js +11 -11
- package/dist/providers/tambo-interactables-additional-context.test.js.map +1 -1
- package/dist/providers/tambo-registry-provider.d.ts +28 -7
- package/dist/providers/tambo-registry-provider.d.ts.map +1 -1
- package/dist/providers/tambo-registry-provider.js +70 -181
- package/dist/providers/tambo-registry-provider.js.map +1 -1
- package/dist/providers/tambo-registry-provider.test.js +152 -30
- package/dist/providers/tambo-registry-provider.test.js.map +1 -1
- package/dist/providers/tambo-registry-schema-compat.test.d.ts +2 -0
- package/dist/providers/tambo-registry-schema-compat.test.d.ts.map +1 -0
- package/dist/providers/tambo-registry-schema-compat.test.js +616 -0
- package/dist/providers/tambo-registry-schema-compat.test.js.map +1 -0
- package/dist/providers/tambo-stubs.d.ts +2 -2
- package/dist/providers/tambo-stubs.d.ts.map +1 -1
- package/dist/providers/tambo-stubs.js +5 -0
- package/dist/providers/tambo-stubs.js.map +1 -1
- package/dist/providers/tambo-thread-input-provider.d.ts +1 -0
- package/dist/providers/tambo-thread-input-provider.d.ts.map +1 -1
- package/dist/providers/tambo-thread-input-provider.js +3 -3
- package/dist/providers/tambo-thread-input-provider.js.map +1 -1
- package/dist/providers/tambo-thread-provider.d.ts.map +1 -1
- package/dist/providers/tambo-thread-provider.js.map +1 -1
- package/dist/providers/tambo-thread-provider.test.js +32 -36
- package/dist/providers/tambo-thread-provider.test.js.map +1 -1
- package/dist/schema/index.d.ts +6 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +18 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/json-schema.d.ts +35 -0
- package/dist/schema/json-schema.d.ts.map +1 -0
- package/dist/schema/json-schema.js +103 -0
- package/dist/schema/json-schema.js.map +1 -0
- package/dist/schema/schema.d.ts +66 -0
- package/dist/schema/schema.d.ts.map +1 -0
- package/dist/schema/schema.js +189 -0
- package/dist/schema/schema.js.map +1 -0
- package/dist/schema/schema.test.d.ts +2 -0
- package/dist/schema/schema.test.d.ts.map +1 -0
- package/dist/schema/schema.test.js +41 -0
- package/dist/schema/schema.test.js.map +1 -0
- package/dist/schema/standard-schema.d.ts +21 -0
- package/dist/schema/standard-schema.d.ts.map +1 -0
- package/dist/schema/standard-schema.js +37 -0
- package/dist/schema/standard-schema.js.map +1 -0
- package/dist/schema/validate.d.ts +14 -0
- package/dist/schema/validate.d.ts.map +1 -0
- package/dist/schema/validate.js +148 -0
- package/dist/schema/validate.js.map +1 -0
- package/dist/schema/validate.test.d.ts +2 -0
- package/dist/schema/validate.test.d.ts.map +1 -0
- package/dist/schema/validate.test.js +128 -0
- package/dist/schema/validate.test.js.map +1 -0
- package/dist/schema/zod.d.ts +54 -0
- package/dist/schema/zod.d.ts.map +1 -0
- package/dist/schema/zod.js +147 -0
- package/dist/schema/zod.js.map +1 -0
- package/dist/testing/tools.d.ts +29 -15
- package/dist/testing/tools.d.ts.map +1 -1
- package/dist/testing/tools.js +64 -19
- package/dist/testing/tools.js.map +1 -1
- package/dist/util/generate-component.d.ts.map +1 -1
- package/dist/util/generate-component.js +3 -3
- package/dist/util/generate-component.js.map +1 -1
- package/dist/util/mcp-server-utils.d.ts +23 -0
- package/dist/util/mcp-server-utils.d.ts.map +1 -0
- package/dist/util/mcp-server-utils.js +107 -0
- package/dist/util/mcp-server-utils.js.map +1 -0
- package/dist/util/mcp-server-utils.test.d.ts +2 -0
- package/dist/util/mcp-server-utils.test.d.ts.map +1 -0
- package/dist/util/mcp-server-utils.test.js +287 -0
- package/dist/util/mcp-server-utils.test.js.map +1 -0
- package/dist/util/message-builder.d.ts +2 -1
- package/dist/util/message-builder.d.ts.map +1 -1
- package/dist/util/message-builder.js +54 -36
- package/dist/util/message-builder.js.map +1 -1
- package/dist/util/message-builder.test.js +500 -13
- package/dist/util/message-builder.test.js.map +1 -1
- package/dist/util/registry-validators.d.ts +26 -0
- package/dist/util/registry-validators.d.ts.map +1 -0
- package/dist/util/registry-validators.js +105 -0
- package/dist/util/registry-validators.js.map +1 -0
- package/dist/util/registry-validators.test.d.ts +2 -0
- package/dist/util/registry-validators.test.d.ts.map +1 -0
- package/dist/util/registry-validators.test.js +235 -0
- package/dist/util/registry-validators.test.js.map +1 -0
- package/dist/util/registry.d.ts +35 -7
- package/dist/util/registry.d.ts.map +1 -1
- package/dist/util/registry.js +60 -77
- package/dist/util/registry.js.map +1 -1
- package/dist/util/registry.test.d.ts +2 -0
- package/dist/util/registry.test.d.ts.map +1 -0
- package/dist/util/registry.test.js +204 -0
- package/dist/util/registry.test.js.map +1 -0
- package/dist/util/resource-validators.d.ts +16 -0
- package/dist/util/resource-validators.d.ts.map +1 -0
- package/dist/util/resource-validators.js +34 -0
- package/dist/util/resource-validators.js.map +1 -0
- package/dist/util/tool-caller.d.ts +2 -2
- package/dist/util/tool-caller.d.ts.map +1 -1
- package/dist/util/tool-caller.js +12 -4
- package/dist/util/tool-caller.js.map +1 -1
- package/esm/{providers/hoc → hoc}/with-tambo-interactable.d.ts +2 -2
- package/esm/hoc/with-tambo-interactable.d.ts.map +1 -0
- package/esm/{providers/hoc → hoc}/with-tambo-interactable.js +29 -2
- package/esm/hoc/with-tambo-interactable.js.map +1 -0
- package/esm/hoc/with-tambo-interactable.test.d.ts +2 -0
- package/esm/hoc/with-tambo-interactable.test.d.ts.map +1 -0
- package/esm/hoc/with-tambo-interactable.test.js +187 -0
- package/esm/hoc/with-tambo-interactable.test.js.map +1 -0
- package/esm/hooks/index.d.ts +1 -1
- package/esm/hooks/index.d.ts.map +1 -1
- package/esm/hooks/index.js +1 -1
- package/esm/hooks/index.js.map +1 -1
- package/esm/hooks/use-current-message.d.ts +51 -7
- package/esm/hooks/use-current-message.d.ts.map +1 -1
- package/esm/hooks/use-current-message.js +48 -5
- package/esm/hooks/use-current-message.js.map +1 -1
- package/esm/hooks/use-current-message.test.d.ts +2 -0
- package/esm/hooks/use-current-message.test.d.ts.map +1 -0
- package/esm/hooks/use-current-message.test.js +259 -0
- package/esm/hooks/use-current-message.test.js.map +1 -0
- package/esm/index.d.ts +10 -8
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +4 -2
- package/esm/index.js.map +1 -1
- package/esm/mcp/index.d.ts +1 -1
- package/esm/mcp/index.d.ts.map +1 -1
- package/esm/mcp/index.js +1 -1
- package/esm/mcp/index.js.map +1 -1
- package/esm/mcp/mcp-hooks.d.ts +77 -6
- package/esm/mcp/mcp-hooks.d.ts.map +1 -1
- package/esm/mcp/mcp-hooks.js +103 -40
- package/esm/mcp/mcp-hooks.js.map +1 -1
- package/esm/mcp/mcp-hooks.test.js +84 -19
- package/esm/mcp/mcp-hooks.test.js.map +1 -1
- package/esm/mcp/tambo-mcp-provider.d.ts.map +1 -1
- package/esm/mcp/tambo-mcp-provider.js +2 -1
- package/esm/mcp/tambo-mcp-provider.js.map +1 -1
- package/esm/model/component-metadata.d.ts +444 -14
- package/esm/model/component-metadata.d.ts.map +1 -1
- package/esm/model/component-metadata.js.map +1 -1
- package/esm/model/generate-component-response.d.ts +12 -1
- package/esm/model/generate-component-response.d.ts.map +1 -1
- package/esm/model/generate-component-response.js.map +1 -1
- package/esm/model/resource-info.d.ts +55 -0
- package/esm/model/resource-info.d.ts.map +1 -0
- package/esm/model/resource-info.js +2 -0
- package/esm/model/resource-info.js.map +1 -0
- package/esm/providers/index.d.ts +1 -1
- package/esm/providers/index.d.ts.map +1 -1
- package/esm/providers/index.js.map +1 -1
- package/esm/providers/tambo-component-provider.d.ts +4 -4
- package/esm/providers/tambo-component-provider.d.ts.map +1 -1
- package/esm/providers/tambo-component-provider.js.map +1 -1
- package/esm/providers/tambo-interactable-provider-partial-updates.test.js +1 -1
- package/esm/providers/tambo-interactable-provider-partial-updates.test.js.map +1 -1
- package/esm/providers/tambo-interactable-provider.d.ts +2 -3
- package/esm/providers/tambo-interactable-provider.d.ts.map +1 -1
- package/esm/providers/tambo-interactable-provider.js +44 -38
- package/esm/providers/tambo-interactable-provider.js.map +1 -1
- package/esm/providers/tambo-interactables-additional-context-edge-cases.test.js +3 -3
- package/esm/providers/tambo-interactables-additional-context-edge-cases.test.js.map +1 -1
- package/esm/providers/tambo-interactables-additional-context.test.js +3 -3
- package/esm/providers/tambo-interactables-additional-context.test.js.map +1 -1
- package/esm/providers/tambo-registry-provider.d.ts +28 -7
- package/esm/providers/tambo-registry-provider.d.ts.map +1 -1
- package/esm/providers/tambo-registry-provider.js +67 -175
- package/esm/providers/tambo-registry-provider.js.map +1 -1
- package/esm/providers/tambo-registry-provider.test.js +148 -26
- package/esm/providers/tambo-registry-provider.test.js.map +1 -1
- package/esm/providers/tambo-registry-schema-compat.test.d.ts +2 -0
- package/esm/providers/tambo-registry-schema-compat.test.d.ts.map +1 -0
- package/esm/providers/tambo-registry-schema-compat.test.js +578 -0
- package/esm/providers/tambo-registry-schema-compat.test.js.map +1 -0
- package/esm/providers/tambo-stubs.d.ts +2 -2
- package/esm/providers/tambo-stubs.d.ts.map +1 -1
- package/esm/providers/tambo-stubs.js +5 -0
- package/esm/providers/tambo-stubs.js.map +1 -1
- package/esm/providers/tambo-thread-input-provider.d.ts +1 -0
- package/esm/providers/tambo-thread-input-provider.d.ts.map +1 -1
- package/esm/providers/tambo-thread-input-provider.js +3 -3
- package/esm/providers/tambo-thread-input-provider.js.map +1 -1
- package/esm/providers/tambo-thread-provider.d.ts.map +1 -1
- package/esm/providers/tambo-thread-provider.js.map +1 -1
- package/esm/providers/tambo-thread-provider.test.js +24 -28
- package/esm/providers/tambo-thread-provider.test.js.map +1 -1
- package/esm/schema/index.d.ts +6 -0
- package/esm/schema/index.d.ts.map +1 -0
- package/esm/schema/index.js +6 -0
- package/esm/schema/index.js.map +1 -0
- package/esm/schema/json-schema.d.ts +35 -0
- package/esm/schema/json-schema.d.ts.map +1 -0
- package/esm/schema/json-schema.js +98 -0
- package/esm/schema/json-schema.js.map +1 -0
- package/esm/schema/schema.d.ts +66 -0
- package/esm/schema/schema.d.ts.map +1 -0
- package/esm/schema/schema.js +182 -0
- package/esm/schema/schema.js.map +1 -0
- package/esm/schema/schema.test.d.ts +2 -0
- package/esm/schema/schema.test.d.ts.map +1 -0
- package/esm/schema/schema.test.js +39 -0
- package/esm/schema/schema.test.js.map +1 -0
- package/esm/schema/standard-schema.d.ts +21 -0
- package/esm/schema/standard-schema.d.ts.map +1 -0
- package/esm/schema/standard-schema.js +34 -0
- package/esm/schema/standard-schema.js.map +1 -0
- package/esm/schema/validate.d.ts +14 -0
- package/esm/schema/validate.d.ts.map +1 -0
- package/esm/schema/validate.js +145 -0
- package/esm/schema/validate.js.map +1 -0
- package/esm/schema/validate.test.d.ts +2 -0
- package/esm/schema/validate.test.d.ts.map +1 -0
- package/esm/schema/validate.test.js +126 -0
- package/esm/schema/validate.test.js.map +1 -0
- package/esm/schema/zod.d.ts +54 -0
- package/esm/schema/zod.d.ts.map +1 -0
- package/esm/schema/zod.js +136 -0
- package/esm/schema/zod.js.map +1 -0
- package/esm/testing/tools.d.ts +29 -15
- package/esm/testing/tools.d.ts.map +1 -1
- package/esm/testing/tools.js +62 -16
- package/esm/testing/tools.js.map +1 -1
- package/esm/util/generate-component.d.ts.map +1 -1
- package/esm/util/generate-component.js +3 -3
- package/esm/util/generate-component.js.map +1 -1
- package/esm/util/mcp-server-utils.d.ts +23 -0
- package/esm/util/mcp-server-utils.d.ts.map +1 -0
- package/esm/util/mcp-server-utils.js +102 -0
- package/esm/util/mcp-server-utils.js.map +1 -0
- package/esm/util/mcp-server-utils.test.d.ts +2 -0
- package/esm/util/mcp-server-utils.test.d.ts.map +1 -0
- package/esm/util/mcp-server-utils.test.js +285 -0
- package/esm/util/mcp-server-utils.test.js.map +1 -0
- package/esm/util/message-builder.d.ts +2 -1
- package/esm/util/message-builder.d.ts.map +1 -1
- package/esm/util/message-builder.js +54 -36
- package/esm/util/message-builder.js.map +1 -1
- package/esm/util/message-builder.test.js +500 -13
- package/esm/util/message-builder.test.js.map +1 -1
- package/esm/util/registry-validators.d.ts +26 -0
- package/esm/util/registry-validators.d.ts.map +1 -0
- package/esm/util/registry-validators.js +100 -0
- package/esm/util/registry-validators.js.map +1 -0
- package/esm/util/registry-validators.test.d.ts +2 -0
- package/esm/util/registry-validators.test.d.ts.map +1 -0
- package/esm/util/registry-validators.test.js +233 -0
- package/esm/util/registry-validators.test.js.map +1 -0
- package/esm/util/registry.d.ts +35 -7
- package/esm/util/registry.d.ts.map +1 -1
- package/esm/util/registry.js +57 -73
- package/esm/util/registry.js.map +1 -1
- package/esm/util/registry.test.d.ts +2 -0
- package/esm/util/registry.test.d.ts.map +1 -0
- package/esm/util/registry.test.js +169 -0
- package/esm/util/registry.test.js.map +1 -0
- package/esm/util/resource-validators.d.ts +16 -0
- package/esm/util/resource-validators.d.ts.map +1 -0
- package/esm/util/resource-validators.js +30 -0
- package/esm/util/resource-validators.js.map +1 -0
- package/esm/util/tool-caller.d.ts +2 -2
- package/esm/util/tool-caller.d.ts.map +1 -1
- package/esm/util/tool-caller.js +12 -4
- package/esm/util/tool-caller.js.map +1 -1
- package/package.json +13 -8
- package/dist/providers/hoc/with-tambo-interactable.d.ts.map +0 -1
- package/dist/providers/hoc/with-tambo-interactable.js.map +0 -1
- package/dist/util/validate-zod-schema.d.ts +0 -10
- package/dist/util/validate-zod-schema.d.ts.map +0 -1
- package/dist/util/validate-zod-schema.js +0 -100
- package/dist/util/validate-zod-schema.js.map +0 -1
- package/dist/util/validate-zod-schema.test.d.ts +0 -2
- package/dist/util/validate-zod-schema.test.d.ts.map +0 -1
- package/dist/util/validate-zod-schema.test.js +0 -96
- package/dist/util/validate-zod-schema.test.js.map +0 -1
- package/esm/providers/hoc/with-tambo-interactable.d.ts.map +0 -1
- package/esm/providers/hoc/with-tambo-interactable.js.map +0 -1
- package/esm/util/validate-zod-schema.d.ts +0 -10
- package/esm/util/validate-zod-schema.d.ts.map +0 -1
- package/esm/util/validate-zod-schema.js +0 -97
- package/esm/util/validate-zod-schema.js.map +0 -1
- package/esm/util/validate-zod-schema.test.d.ts +0 -2
- package/esm/util/validate-zod-schema.test.d.ts.map +0 -1
- package/esm/util/validate-zod-schema.test.js +0 -94
- package/esm/util/validate-zod-schema.test.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/util/registry.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/util/registry.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,0BAA0B,CAAC;AAC/C,OAAO,EACL,4BAA4B,EAC5B,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,SAAS,EACT,qBAAqB,EACrB,iBAAiB,EACjB,uBAAuB,EACxB,MAAM,6BAA6B,CAAC;AASrC;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,GACjC,mBAAmB,iBAAiB,EACpC,cAAc,iBAAiB,EAC/B,kBAAkB,qBAAqB,KACtC,OAAO,CAAC,kBAAkB,EAuB5B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAC/B,cAAc,iBAAiB,EAC/B,kBAAkB,qBAAqB,KACtC,CAAC,SAAS,GAAG,uBAAuB,CAAC,EAKvC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,GACnC,WAAW,mBAAmB,KAC7B,OAYF,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,SAAS,GAAG,uBAAuB,GACxC,SAAS,CAYX;AAED;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,GACnC,eAAe,MAAM,EACrB,mBAAmB,iBAAiB,KACnC,mBAUF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,GACpC,MAAM,SAAS,GAAG,uBAAuB,KACxC,4BAQF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,UAAU,EAAE,YAExB,CAAC"}
|
package/dist/util/registry.js
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
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
|
-
exports.mapTamboToolToContextTool = exports.getComponentFromRegistry = exports.convertPropsToJsonSchema = exports.getUnassociatedTools = exports.getAvailableComponents = void 0;
|
|
7
|
-
|
|
3
|
+
exports.defineTool = exports.mapTamboToolToContextTool = exports.getComponentFromRegistry = exports.convertPropsToJsonSchema = exports.getUnassociatedTools = exports.getAvailableComponents = void 0;
|
|
4
|
+
exports.adaptToolFromFnSchema = adaptToolFromFnSchema;
|
|
5
|
+
const schema_1 = require("../schema");
|
|
8
6
|
/**
|
|
9
7
|
* Get all the available components from the component registry
|
|
10
8
|
* @param componentRegistry - The component registry
|
|
@@ -16,14 +14,14 @@ const getAvailableComponents = (componentRegistry, toolRegistry, toolAssociation
|
|
|
16
14
|
const availableComponents = [];
|
|
17
15
|
for (const [name, componentEntry] of Object.entries(componentRegistry)) {
|
|
18
16
|
const associatedToolNames = toolAssociations[name] || [];
|
|
19
|
-
const contextTools =
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
17
|
+
const contextTools = associatedToolNames
|
|
18
|
+
.map((toolName) => {
|
|
19
|
+
const tool = toolRegistry[toolName];
|
|
20
|
+
if (!tool)
|
|
21
|
+
return null;
|
|
22
|
+
return (0, exports.mapTamboToolToContextTool)(tool);
|
|
23
|
+
})
|
|
24
|
+
.filter((tool) => tool !== null);
|
|
27
25
|
availableComponents.push({
|
|
28
26
|
name: componentEntry.name,
|
|
29
27
|
description: componentEntry.description,
|
|
@@ -48,22 +46,39 @@ const getUnassociatedTools = (toolRegistry, toolAssociations) => {
|
|
|
48
46
|
};
|
|
49
47
|
exports.getUnassociatedTools = getUnassociatedTools;
|
|
50
48
|
/**
|
|
51
|
-
* Helper function to convert component props from
|
|
49
|
+
* Helper function to convert component props from Standard Schema or JSON Schema
|
|
52
50
|
* @param component - The component to convert
|
|
53
|
-
* @returns The converted props
|
|
51
|
+
* @returns The converted props as JSON Schema
|
|
54
52
|
*/
|
|
55
53
|
const convertPropsToJsonSchema = (component) => {
|
|
56
54
|
if (!component.props) {
|
|
57
55
|
return component.props;
|
|
58
56
|
}
|
|
59
|
-
// Check if props is a
|
|
60
|
-
if (
|
|
61
|
-
|
|
62
|
-
return (0, zod_to_json_schema_1.default)(component.props);
|
|
57
|
+
// Check if props is a Standard Schema (Zod, Valibot, ArkType, etc.)
|
|
58
|
+
if ((0, schema_1.isStandardSchema)(component.props)) {
|
|
59
|
+
return (0, schema_1.schemaToJsonSchema)(component.props);
|
|
63
60
|
}
|
|
61
|
+
// Already JSON Schema or unknown format - return as-is
|
|
64
62
|
return component.props;
|
|
65
63
|
};
|
|
66
64
|
exports.convertPropsToJsonSchema = convertPropsToJsonSchema;
|
|
65
|
+
/**
|
|
66
|
+
* Adapt a Tambo tool defined with function schema to a standard Tambo tool
|
|
67
|
+
* @param tool - The Tambo tool with function schema
|
|
68
|
+
* @returns The adapted Tambo tool
|
|
69
|
+
*/
|
|
70
|
+
function adaptToolFromFnSchema(tool) {
|
|
71
|
+
if (!("toolSchema" in tool)) {
|
|
72
|
+
return tool;
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
name: tool.name,
|
|
76
|
+
description: tool.description,
|
|
77
|
+
tool: tool.tool,
|
|
78
|
+
inputSchema: (0, schema_1.getZodFunctionArgs)(tool.toolSchema),
|
|
79
|
+
outputSchema: (0, schema_1.getZodFunctionReturns)(tool.toolSchema),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
67
82
|
/**
|
|
68
83
|
* Get a component by name from the component registry
|
|
69
84
|
* @param componentName - The name of the component to get
|
|
@@ -80,11 +95,11 @@ const getComponentFromRegistry = (componentName, componentRegistry) => {
|
|
|
80
95
|
exports.getComponentFromRegistry = getComponentFromRegistry;
|
|
81
96
|
/**
|
|
82
97
|
* Map a Tambo tool to a context tool
|
|
83
|
-
* @param tool - The tool to map
|
|
98
|
+
* @param tool - The tool to map (supports both new inputSchema and deprecated toolSchema interfaces)
|
|
84
99
|
* @returns The context tool
|
|
85
100
|
*/
|
|
86
101
|
const mapTamboToolToContextTool = (tool) => {
|
|
87
|
-
const parameters =
|
|
102
|
+
const parameters = (0, schema_1.getParametersFromToolSchema)(tool);
|
|
88
103
|
return {
|
|
89
104
|
name: tool.name,
|
|
90
105
|
description: tool.description,
|
|
@@ -92,61 +107,29 @@ const mapTamboToolToContextTool = (tool) => {
|
|
|
92
107
|
};
|
|
93
108
|
};
|
|
94
109
|
exports.mapTamboToolToContextTool = mapTamboToolToContextTool;
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
const description = param.description ?? "";
|
|
119
|
-
const isRequired = !param.isOptional();
|
|
120
|
-
const schema = (0, zod_to_json_schema_1.default)(param);
|
|
121
|
-
return {
|
|
122
|
-
name,
|
|
123
|
-
type,
|
|
124
|
-
description,
|
|
125
|
-
isRequired,
|
|
126
|
-
schema,
|
|
127
|
-
};
|
|
128
|
-
});
|
|
129
|
-
};
|
|
130
|
-
const getZodBaseType = (schema) => {
|
|
131
|
-
const typeName = schema._def.typeName;
|
|
132
|
-
switch (typeName) {
|
|
133
|
-
case "ZodString":
|
|
134
|
-
return "string";
|
|
135
|
-
case "ZodNumber":
|
|
136
|
-
return "number";
|
|
137
|
-
case "ZodBoolean":
|
|
138
|
-
return "boolean";
|
|
139
|
-
case "ZodArray":
|
|
140
|
-
return "array";
|
|
141
|
-
case "ZodEnum":
|
|
142
|
-
return "enum";
|
|
143
|
-
case "ZodDate":
|
|
144
|
-
return "date";
|
|
145
|
-
case "ZodObject":
|
|
146
|
-
return "object";
|
|
147
|
-
default:
|
|
148
|
-
console.warn("falling back to string for", typeName);
|
|
149
|
-
return "string";
|
|
150
|
-
}
|
|
110
|
+
/**
|
|
111
|
+
* Provides type safety for defining a Tambo Tool.
|
|
112
|
+
*
|
|
113
|
+
* Tambo uses the [standard-schema.dev](https://standard-schema.dev) spec which means you can use any Standard Schema
|
|
114
|
+
* compliant validator (Zod, Valibot, ArkType, etc.). This ensures the tool function args and output types are correctly
|
|
115
|
+
* inferred from the provided schemas.
|
|
116
|
+
* @example
|
|
117
|
+
* ```typescript
|
|
118
|
+
* import { z } from "zod/v4";
|
|
119
|
+
*
|
|
120
|
+
* const myTool = defineTamboTool({
|
|
121
|
+
* inputSchema: z.tuple([z.string()]),
|
|
122
|
+
* outputSchema: z.number(),
|
|
123
|
+
* tool: yourToolFunction,
|
|
124
|
+
* // ^-- (input: [string]) => number | Promise<number>
|
|
125
|
+
* // Types are inferred from and must match inputSchema/outputSchema definitions
|
|
126
|
+
* });
|
|
127
|
+
* ```
|
|
128
|
+
* @param tool The tool definition to register
|
|
129
|
+
* @returns The registered tool definition
|
|
130
|
+
*/
|
|
131
|
+
const defineTool = (tool) => {
|
|
132
|
+
return tool;
|
|
151
133
|
};
|
|
134
|
+
exports.defineTool = defineTool;
|
|
152
135
|
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/util/registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/util/registry.ts"],"names":[],"mappings":"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","sourcesContent":["import TamboAI from \"@tambo-ai/typescript-sdk\";\nimport {\n ComponentContextToolMetadata,\n ComponentRegistry,\n DefineToolFn,\n RegisteredComponent,\n TamboTool,\n TamboToolAssociations,\n TamboToolRegistry,\n TamboToolWithToolSchema,\n} from \"../model/component-metadata\";\nimport {\n getParametersFromToolSchema,\n getZodFunctionArgs,\n getZodFunctionReturns,\n isStandardSchema,\n schemaToJsonSchema,\n} from \"../schema\";\n\n/**\n * Get all the available components from the component registry\n * @param componentRegistry - The component registry\n * @param toolRegistry - The tool registry\n * @param toolAssociations - The tool associations\n * @returns The available components\n */\nexport const getAvailableComponents = (\n componentRegistry: ComponentRegistry,\n toolRegistry: TamboToolRegistry,\n toolAssociations: TamboToolAssociations,\n): TamboAI.AvailableComponent[] => {\n const availableComponents: TamboAI.AvailableComponent[] = [];\n\n for (const [name, componentEntry] of Object.entries(componentRegistry)) {\n const associatedToolNames = toolAssociations[name] || [];\n\n const contextTools = associatedToolNames\n .map((toolName) => {\n const tool = toolRegistry[toolName];\n if (!tool) return null;\n return mapTamboToolToContextTool(tool);\n })\n .filter((tool): tool is ComponentContextToolMetadata => tool !== null);\n\n availableComponents.push({\n name: componentEntry.name,\n description: componentEntry.description,\n props: componentEntry.props,\n contextTools,\n });\n }\n\n return availableComponents;\n};\n\n/**\n * Get tools from tool registry that are not associated with any component\n * @param toolRegistry - The tool registry\n * @param toolAssociations - The tool associations\n * @returns The tools that are not associated with any component\n */\nexport const getUnassociatedTools = (\n toolRegistry: TamboToolRegistry,\n toolAssociations: TamboToolAssociations,\n): (TamboTool | TamboToolWithToolSchema)[] => {\n return Object.values(toolRegistry).filter((tool) => {\n // Check if the tool's name appears in any of the tool association arrays\n return !Object.values(toolAssociations).flat().includes(tool.name);\n });\n};\n\n/**\n * Helper function to convert component props from Standard Schema or JSON Schema\n * @param component - The component to convert\n * @returns The converted props as JSON Schema\n */\nexport const convertPropsToJsonSchema = (\n component: RegisteredComponent,\n): unknown => {\n if (!component.props) {\n return component.props;\n }\n\n // Check if props is a Standard Schema (Zod, Valibot, ArkType, etc.)\n if (isStandardSchema(component.props)) {\n return schemaToJsonSchema(component.props);\n }\n\n // Already JSON Schema or unknown format - return as-is\n return component.props;\n};\n\n/**\n * Adapt a Tambo tool defined with function schema to a standard Tambo tool\n * @param tool - The Tambo tool with function schema\n * @returns The adapted Tambo tool\n */\nexport function adaptToolFromFnSchema(\n tool: TamboTool | TamboToolWithToolSchema,\n): TamboTool {\n if (!(\"toolSchema\" in tool)) {\n return tool;\n }\n\n return {\n name: tool.name,\n description: tool.description,\n tool: tool.tool,\n inputSchema: getZodFunctionArgs(tool.toolSchema),\n outputSchema: getZodFunctionReturns(tool.toolSchema),\n };\n}\n\n/**\n * Get a component by name from the component registry\n * @param componentName - The name of the component to get\n * @param componentRegistry - The component registry\n * @returns The component registration information\n */\nexport const getComponentFromRegistry = (\n componentName: string,\n componentRegistry: ComponentRegistry,\n): RegisteredComponent => {\n const componentEntry = componentRegistry[componentName];\n\n if (!componentEntry) {\n throw new Error(\n `Tambo tried to use Component ${componentName}, but it was not found.`,\n );\n }\n\n return componentEntry;\n};\n\n/**\n * Map a Tambo tool to a context tool\n * @param tool - The tool to map (supports both new inputSchema and deprecated toolSchema interfaces)\n * @returns The context tool\n */\nexport const mapTamboToolToContextTool = (\n tool: TamboTool | TamboToolWithToolSchema,\n): ComponentContextToolMetadata => {\n const parameters = getParametersFromToolSchema(tool);\n\n return {\n name: tool.name,\n description: tool.description,\n parameters,\n };\n};\n\n/**\n * Provides type safety for defining a Tambo Tool.\n *\n * Tambo uses the [standard-schema.dev](https://standard-schema.dev) spec which means you can use any Standard Schema\n * compliant validator (Zod, Valibot, ArkType, etc.). This ensures the tool function args and output types are correctly\n * inferred from the provided schemas.\n * @example\n * ```typescript\n * import { z } from \"zod/v4\";\n *\n * const myTool = defineTamboTool({\n * inputSchema: z.tuple([z.string()]),\n * outputSchema: z.number(),\n * tool: yourToolFunction,\n * // ^-- (input: [string]) => number | Promise<number>\n * // Types are inferred from and must match inputSchema/outputSchema definitions\n * });\n * ```\n * @param tool The tool definition to register\n * @returns The registered tool definition\n */\nexport const defineTool: DefineToolFn = (tool: any) => {\n return tool;\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.test.d.ts","sourceRoot":"","sources":["../../src/util/registry.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const v = __importStar(require("valibot"));
|
|
37
|
+
const z3 = __importStar(require("zod/v3"));
|
|
38
|
+
const z4 = __importStar(require("zod/v4"));
|
|
39
|
+
const tools_1 = require("../testing/tools");
|
|
40
|
+
const registry_1 = require("./registry");
|
|
41
|
+
describe("getParametersFromToolSchema (via mapTamboToolToContextTool)", () => {
|
|
42
|
+
describe("Deprecated toolSchema interface (Zod function schemas)", () => {
|
|
43
|
+
it("should handle tool with toolSchema", () => {
|
|
44
|
+
const tool = (0, tools_1.createMockToolWithToolSchema)(z3.function().args(z3.string().describe("The name")).returns(z3.void()));
|
|
45
|
+
const result = (0, registry_1.mapTamboToolToContextTool)(tool);
|
|
46
|
+
// Should have at least one parameter (either extracted or wrapped)
|
|
47
|
+
expect(result.parameters.length).toBeGreaterThanOrEqual(1);
|
|
48
|
+
expect(result.name).toBe("testTool");
|
|
49
|
+
expect(result.description).toBe("A test tool");
|
|
50
|
+
});
|
|
51
|
+
it("should handle toolSchema with multiple args", () => {
|
|
52
|
+
const tool = (0, tools_1.createMockToolWithToolSchema)(z3
|
|
53
|
+
.function()
|
|
54
|
+
.args(z3.string().describe("First name"), z3.number().describe("Age"), z3.boolean().describe("Is active"))
|
|
55
|
+
.returns(z3.void()));
|
|
56
|
+
const result = (0, registry_1.mapTamboToolToContextTool)(tool);
|
|
57
|
+
// Should have parameters (extraction depends on JSON Schema conversion)
|
|
58
|
+
expect(result.parameters.length).toBeGreaterThanOrEqual(1);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
describe("New inputSchema interface (object schemas)", () => {
|
|
62
|
+
describe("Zod 4 object schemas", () => {
|
|
63
|
+
it("should return single input param with object schema", () => {
|
|
64
|
+
const tool = (0, tools_1.createMockTool)({
|
|
65
|
+
inputSchema: z4.object({
|
|
66
|
+
name: z4.string().describe("User name"),
|
|
67
|
+
age: z4.number().describe("User age"),
|
|
68
|
+
}),
|
|
69
|
+
outputSchema: z4.boolean(),
|
|
70
|
+
});
|
|
71
|
+
const result = (0, registry_1.mapTamboToolToContextTool)(tool);
|
|
72
|
+
expect(result.parameters).toHaveLength(1);
|
|
73
|
+
expect(result.parameters[0].name).toBe("input");
|
|
74
|
+
expect(result.parameters[0].type).toBe("object");
|
|
75
|
+
expect(result.parameters).toMatchSnapshot();
|
|
76
|
+
});
|
|
77
|
+
it("should handle complex nested objects", () => {
|
|
78
|
+
const tool = (0, tools_1.createMockTool)({
|
|
79
|
+
inputSchema: z4.object({
|
|
80
|
+
point: z4.object({ x: z4.number(), y: z4.number() }),
|
|
81
|
+
tags: z4.array(z4.string()),
|
|
82
|
+
color: z4.enum(["red", "green", "blue"]),
|
|
83
|
+
}),
|
|
84
|
+
outputSchema: z4.void(),
|
|
85
|
+
});
|
|
86
|
+
const result = (0, registry_1.mapTamboToolToContextTool)(tool);
|
|
87
|
+
expect(result.parameters).toHaveLength(1);
|
|
88
|
+
expect(result.parameters[0].name).toBe("input");
|
|
89
|
+
expect(result.parameters).toMatchSnapshot();
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
describe("Zod 3 object schemas", () => {
|
|
93
|
+
it("should return single input param with object schema", () => {
|
|
94
|
+
const tool = (0, tools_1.createMockTool)({
|
|
95
|
+
inputSchema: z3.object({
|
|
96
|
+
name: z3.string(),
|
|
97
|
+
age: z3.number(),
|
|
98
|
+
}),
|
|
99
|
+
outputSchema: z3.boolean(),
|
|
100
|
+
});
|
|
101
|
+
const result = (0, registry_1.mapTamboToolToContextTool)(tool);
|
|
102
|
+
expect(result.parameters).toHaveLength(1);
|
|
103
|
+
expect(result.parameters[0].name).toBe("input");
|
|
104
|
+
expect(result.parameters).toMatchSnapshot();
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
describe("Valibot object schemas", () => {
|
|
108
|
+
it("should return single input param with object schema", () => {
|
|
109
|
+
const tool = (0, tools_1.createMockTool)({
|
|
110
|
+
inputSchema: v.object({
|
|
111
|
+
name: v.string(),
|
|
112
|
+
age: v.number(),
|
|
113
|
+
}),
|
|
114
|
+
outputSchema: v.boolean(),
|
|
115
|
+
});
|
|
116
|
+
const result = (0, registry_1.mapTamboToolToContextTool)(tool);
|
|
117
|
+
expect(result.parameters).toHaveLength(1);
|
|
118
|
+
expect(result.parameters[0].name).toBe("input");
|
|
119
|
+
expect(result.parameters).toMatchSnapshot();
|
|
120
|
+
});
|
|
121
|
+
it("should handle complex nested objects", () => {
|
|
122
|
+
const tool = (0, tools_1.createMockTool)({
|
|
123
|
+
inputSchema: v.object({
|
|
124
|
+
point: v.pipe(v.object({ x: v.number(), y: v.number() }), v.description("Point")),
|
|
125
|
+
tags: v.array(v.string()),
|
|
126
|
+
color: v.picklist(["red", "green", "blue"]),
|
|
127
|
+
}),
|
|
128
|
+
outputSchema: v.undefined(),
|
|
129
|
+
});
|
|
130
|
+
const result = (0, registry_1.mapTamboToolToContextTool)(tool);
|
|
131
|
+
expect(result.parameters).toHaveLength(1);
|
|
132
|
+
expect(result.parameters[0].name).toBe("input");
|
|
133
|
+
expect(result.parameters).toMatchSnapshot();
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
describe("JSON Schema object schemas", () => {
|
|
137
|
+
it("should return single input param with object schema", () => {
|
|
138
|
+
const schema = {
|
|
139
|
+
type: "object",
|
|
140
|
+
properties: {
|
|
141
|
+
name: { type: "string" },
|
|
142
|
+
age: { type: "number" },
|
|
143
|
+
},
|
|
144
|
+
required: ["name"],
|
|
145
|
+
description: "User data",
|
|
146
|
+
};
|
|
147
|
+
const tool = (0, tools_1.createMockTool)({ inputSchema: schema, outputSchema: {} });
|
|
148
|
+
const result = (0, registry_1.mapTamboToolToContextTool)(tool);
|
|
149
|
+
expect(result.parameters).toHaveLength(1);
|
|
150
|
+
expect(result.parameters[0].name).toBe("input");
|
|
151
|
+
expect(result.parameters[0].type).toBe("object");
|
|
152
|
+
expect(result.parameters[0].description).toBe("User data");
|
|
153
|
+
expect(result.parameters).toMatchSnapshot();
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
describe("Direct schema (shorthand for inputSchema)", () => {
|
|
158
|
+
it("should accept Zod 4 object schema directly", () => {
|
|
159
|
+
const tool = (0, tools_1.createMockTool)(z4.object({
|
|
160
|
+
name: z4.string(),
|
|
161
|
+
age: z4.number(),
|
|
162
|
+
}));
|
|
163
|
+
const result = (0, registry_1.mapTamboToolToContextTool)(tool);
|
|
164
|
+
expect(result.parameters).toHaveLength(1);
|
|
165
|
+
expect(result.parameters[0].name).toBe("input");
|
|
166
|
+
expect(result.parameters).toMatchSnapshot();
|
|
167
|
+
});
|
|
168
|
+
it("should accept Zod 3 object schema directly", () => {
|
|
169
|
+
const tool = (0, tools_1.createMockTool)(z3.object({
|
|
170
|
+
name: z3.string(),
|
|
171
|
+
age: z3.number(),
|
|
172
|
+
}));
|
|
173
|
+
const result = (0, registry_1.mapTamboToolToContextTool)(tool);
|
|
174
|
+
expect(result.parameters).toHaveLength(1);
|
|
175
|
+
expect(result.parameters[0].name).toBe("input");
|
|
176
|
+
expect(result.parameters).toMatchSnapshot();
|
|
177
|
+
});
|
|
178
|
+
it("should accept Valibot object schema directly", () => {
|
|
179
|
+
const tool = (0, tools_1.createMockTool)(v.object({
|
|
180
|
+
name: v.string(),
|
|
181
|
+
age: v.number(),
|
|
182
|
+
}));
|
|
183
|
+
const result = (0, registry_1.mapTamboToolToContextTool)(tool);
|
|
184
|
+
expect(result.parameters).toHaveLength(1);
|
|
185
|
+
expect(result.parameters[0].name).toBe("input");
|
|
186
|
+
expect(result.parameters).toMatchSnapshot();
|
|
187
|
+
});
|
|
188
|
+
it("should accept JSON Schema object directly", () => {
|
|
189
|
+
const schema = {
|
|
190
|
+
type: "object",
|
|
191
|
+
properties: {
|
|
192
|
+
name: { type: "string" },
|
|
193
|
+
age: { type: "number" },
|
|
194
|
+
},
|
|
195
|
+
};
|
|
196
|
+
const tool = (0, tools_1.createMockTool)(schema);
|
|
197
|
+
const result = (0, registry_1.mapTamboToolToContextTool)(tool);
|
|
198
|
+
expect(result.parameters).toHaveLength(1);
|
|
199
|
+
expect(result.parameters[0].name).toBe("input");
|
|
200
|
+
expect(result.parameters).toMatchSnapshot();
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
//# sourceMappingURL=registry.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.test.js","sourceRoot":"","sources":["../../src/util/registry.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Tests for getParametersFromToolSchema via mapTamboToolToContextTool.\n *\n * These tests verify that tool schemas are correctly converted to parameter specifications:\n *\n * **New interface (inputSchema)**:\n * - inputSchema should be an object schema (Zod object, Valibot object, JSON Schema object)\n * - Returns a single \"input\" parameter representing the full object schema\n * - Tool function receives single object argument: tool({ name: \"...\", age: 30 })\n *\n * **Deprecated interface (toolSchema)**:\n * - toolSchema uses z.function().args(...) pattern\n * - Returns positional parameters: param1, param2, etc.\n * - Tool function receives spread arguments: tool(value1, value2)\n */\nimport type { JSONSchema7 } from \"json-schema\";\nimport * as v from \"valibot\";\nimport * as z3 from \"zod/v3\";\nimport * as z4 from \"zod/v4\";\nimport { createMockTool, createMockToolWithToolSchema } from \"../testing/tools\";\nimport { mapTamboToolToContextTool } from \"./registry\";\n\ndescribe(\"getParametersFromToolSchema (via mapTamboToolToContextTool)\", () => {\n describe(\"Deprecated toolSchema interface (Zod function schemas)\", () => {\n it(\"should handle tool with toolSchema\", () => {\n const tool = createMockToolWithToolSchema(\n z3.function().args(z3.string().describe(\"The name\")).returns(z3.void()),\n );\n const result = mapTamboToolToContextTool(tool);\n // Should have at least one parameter (either extracted or wrapped)\n expect(result.parameters.length).toBeGreaterThanOrEqual(1);\n expect(result.name).toBe(\"testTool\");\n expect(result.description).toBe(\"A test tool\");\n });\n\n it(\"should handle toolSchema with multiple args\", () => {\n const tool = createMockToolWithToolSchema(\n z3\n .function()\n .args(\n z3.string().describe(\"First name\"),\n z3.number().describe(\"Age\"),\n z3.boolean().describe(\"Is active\"),\n )\n .returns(z3.void()),\n );\n const result = mapTamboToolToContextTool(tool);\n // Should have parameters (extraction depends on JSON Schema conversion)\n expect(result.parameters.length).toBeGreaterThanOrEqual(1);\n });\n });\n\n describe(\"New inputSchema interface (object schemas)\", () => {\n describe(\"Zod 4 object schemas\", () => {\n it(\"should return single input param with object schema\", () => {\n const tool = createMockTool({\n inputSchema: z4.object({\n name: z4.string().describe(\"User name\"),\n age: z4.number().describe(\"User age\"),\n }),\n outputSchema: z4.boolean(),\n });\n const result = mapTamboToolToContextTool(tool);\n expect(result.parameters).toHaveLength(1);\n expect(result.parameters[0].name).toBe(\"input\");\n expect(result.parameters[0].type).toBe(\"object\");\n expect(result.parameters).toMatchSnapshot();\n });\n\n it(\"should handle complex nested objects\", () => {\n const tool = createMockTool({\n inputSchema: z4.object({\n point: z4.object({ x: z4.number(), y: z4.number() }),\n tags: z4.array(z4.string()),\n color: z4.enum([\"red\", \"green\", \"blue\"]),\n }),\n outputSchema: z4.void(),\n });\n const result = mapTamboToolToContextTool(tool);\n expect(result.parameters).toHaveLength(1);\n expect(result.parameters[0].name).toBe(\"input\");\n expect(result.parameters).toMatchSnapshot();\n });\n });\n\n describe(\"Zod 3 object schemas\", () => {\n it(\"should return single input param with object schema\", () => {\n const tool = createMockTool({\n inputSchema: z3.object({\n name: z3.string(),\n age: z3.number(),\n }),\n outputSchema: z3.boolean(),\n });\n const result = mapTamboToolToContextTool(tool);\n expect(result.parameters).toHaveLength(1);\n expect(result.parameters[0].name).toBe(\"input\");\n expect(result.parameters).toMatchSnapshot();\n });\n });\n\n describe(\"Valibot object schemas\", () => {\n it(\"should return single input param with object schema\", () => {\n const tool = createMockTool({\n inputSchema: v.object({\n name: v.string(),\n age: v.number(),\n }),\n outputSchema: v.boolean(),\n });\n const result = mapTamboToolToContextTool(tool);\n expect(result.parameters).toHaveLength(1);\n expect(result.parameters[0].name).toBe(\"input\");\n expect(result.parameters).toMatchSnapshot();\n });\n\n it(\"should handle complex nested objects\", () => {\n const tool = createMockTool({\n inputSchema: v.object({\n point: v.pipe(\n v.object({ x: v.number(), y: v.number() }),\n v.description(\"Point\"),\n ),\n tags: v.array(v.string()),\n color: v.picklist([\"red\", \"green\", \"blue\"]),\n }),\n outputSchema: v.undefined(),\n });\n const result = mapTamboToolToContextTool(tool);\n expect(result.parameters).toHaveLength(1);\n expect(result.parameters[0].name).toBe(\"input\");\n expect(result.parameters).toMatchSnapshot();\n });\n });\n\n describe(\"JSON Schema object schemas\", () => {\n it(\"should return single input param with object schema\", () => {\n const schema: JSONSchema7 = {\n type: \"object\",\n properties: {\n name: { type: \"string\" },\n age: { type: \"number\" },\n },\n required: [\"name\"],\n description: \"User data\",\n };\n const tool = createMockTool({ inputSchema: schema, outputSchema: {} });\n const result = mapTamboToolToContextTool(tool);\n expect(result.parameters).toHaveLength(1);\n expect(result.parameters[0].name).toBe(\"input\");\n expect(result.parameters[0].type).toBe(\"object\");\n expect(result.parameters[0].description).toBe(\"User data\");\n expect(result.parameters).toMatchSnapshot();\n });\n });\n });\n\n describe(\"Direct schema (shorthand for inputSchema)\", () => {\n it(\"should accept Zod 4 object schema directly\", () => {\n const tool = createMockTool(\n z4.object({\n name: z4.string(),\n age: z4.number(),\n }),\n );\n const result = mapTamboToolToContextTool(tool);\n expect(result.parameters).toHaveLength(1);\n expect(result.parameters[0].name).toBe(\"input\");\n expect(result.parameters).toMatchSnapshot();\n });\n\n it(\"should accept Zod 3 object schema directly\", () => {\n const tool = createMockTool(\n z3.object({\n name: z3.string(),\n age: z3.number(),\n }),\n );\n const result = mapTamboToolToContextTool(tool);\n expect(result.parameters).toHaveLength(1);\n expect(result.parameters[0].name).toBe(\"input\");\n expect(result.parameters).toMatchSnapshot();\n });\n\n it(\"should accept Valibot object schema directly\", () => {\n const tool = createMockTool(\n v.object({\n name: v.string(),\n age: v.number(),\n }),\n );\n const result = mapTamboToolToContextTool(tool);\n expect(result.parameters).toHaveLength(1);\n expect(result.parameters[0].name).toBe(\"input\");\n expect(result.parameters).toMatchSnapshot();\n });\n\n it(\"should accept JSON Schema object directly\", () => {\n const schema: JSONSchema7 = {\n type: \"object\",\n properties: {\n name: { type: \"string\" },\n age: { type: \"number\" },\n },\n };\n const tool = createMockTool(schema);\n const result = mapTamboToolToContextTool(tool);\n expect(result.parameters).toHaveLength(1);\n expect(result.parameters[0].name).toBe(\"input\");\n expect(result.parameters).toMatchSnapshot();\n });\n });\n});\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ListResourceItem, ResourceSource } from "../model/resource-info";
|
|
2
|
+
/**
|
|
3
|
+
* Validates that a ResourceSource has both listResources and getResource defined,
|
|
4
|
+
* or neither defined. You cannot provide one without the other.
|
|
5
|
+
* @param listResources - The listResources function (or undefined)
|
|
6
|
+
* @param getResource - The getResource function (or undefined)
|
|
7
|
+
* @throws {Error} if only one of the functions is provided
|
|
8
|
+
*/
|
|
9
|
+
export declare function validateResourceSource(listResources: ResourceSource["listResources"] | undefined, getResource: ResourceSource["getResource"] | undefined): void;
|
|
10
|
+
/**
|
|
11
|
+
* Validates that a resource has the required fields.
|
|
12
|
+
* @param resource - The resource to validate
|
|
13
|
+
* @throws {Error} if the resource is missing required fields
|
|
14
|
+
*/
|
|
15
|
+
export declare function validateResource(resource: ListResourceItem): void;
|
|
16
|
+
//# sourceMappingURL=resource-validators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-validators.d.ts","sourceRoot":"","sources":["../../src/util/resource-validators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE/E;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,aAAa,EAAE,cAAc,CAAC,eAAe,CAAC,GAAG,SAAS,EAC1D,WAAW,EAAE,cAAc,CAAC,aAAa,CAAC,GAAG,SAAS,GACrD,IAAI,CAWN;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAUjE"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateResourceSource = validateResourceSource;
|
|
4
|
+
exports.validateResource = validateResource;
|
|
5
|
+
/**
|
|
6
|
+
* Validates that a ResourceSource has both listResources and getResource defined,
|
|
7
|
+
* or neither defined. You cannot provide one without the other.
|
|
8
|
+
* @param listResources - The listResources function (or undefined)
|
|
9
|
+
* @param getResource - The getResource function (or undefined)
|
|
10
|
+
* @throws {Error} if only one of the functions is provided
|
|
11
|
+
*/
|
|
12
|
+
function validateResourceSource(listResources, getResource) {
|
|
13
|
+
const hasListResources = listResources != null;
|
|
14
|
+
const hasGetResource = getResource != null;
|
|
15
|
+
if (hasListResources !== hasGetResource) {
|
|
16
|
+
throw new Error("Both listResources and getResource must be provided together, or neither should be provided. " +
|
|
17
|
+
`Got: listResources=${hasListResources ? "defined" : "undefined"}, ` +
|
|
18
|
+
`getResource=${hasGetResource ? "defined" : "undefined"}`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Validates that a resource has the required fields.
|
|
23
|
+
* @param resource - The resource to validate
|
|
24
|
+
* @throws {Error} if the resource is missing required fields
|
|
25
|
+
*/
|
|
26
|
+
function validateResource(resource) {
|
|
27
|
+
if (!resource.uri) {
|
|
28
|
+
throw new Error("Resource must have a 'uri' field");
|
|
29
|
+
}
|
|
30
|
+
if (!resource.name) {
|
|
31
|
+
throw new Error(`Resource with URI '${resource.uri}' must have a 'name' field`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=resource-validators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-validators.js","sourceRoot":"","sources":["../../src/util/resource-validators.ts"],"names":[],"mappings":";;AASA,wDAcC;AAOD,4CAUC;AAtCD;;;;;;GAMG;AACH,SAAgB,sBAAsB,CACpC,aAA0D,EAC1D,WAAsD;IAEtD,MAAM,gBAAgB,GAAG,aAAa,IAAI,IAAI,CAAC;IAC/C,MAAM,cAAc,GAAG,WAAW,IAAI,IAAI,CAAC;IAE3C,IAAI,gBAAgB,KAAK,cAAc,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CACb,+FAA+F;YAC7F,sBAAsB,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,IAAI;YACpE,eAAe,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,CAC5D,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,QAA0B;IACzD,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACb,sBAAsB,QAAQ,CAAC,GAAG,4BAA4B,CAC/D,CAAC;IACJ,CAAC;AACH,CAAC","sourcesContent":["import type { ListResourceItem, ResourceSource } from \"../model/resource-info\";\n\n/**\n * Validates that a ResourceSource has both listResources and getResource defined,\n * or neither defined. You cannot provide one without the other.\n * @param listResources - The listResources function (or undefined)\n * @param getResource - The getResource function (or undefined)\n * @throws {Error} if only one of the functions is provided\n */\nexport function validateResourceSource(\n listResources: ResourceSource[\"listResources\"] | undefined,\n getResource: ResourceSource[\"getResource\"] | undefined,\n): void {\n const hasListResources = listResources != null;\n const hasGetResource = getResource != null;\n\n if (hasListResources !== hasGetResource) {\n throw new Error(\n \"Both listResources and getResource must be provided together, or neither should be provided. \" +\n `Got: listResources=${hasListResources ? \"defined\" : \"undefined\"}, ` +\n `getResource=${hasGetResource ? \"defined\" : \"undefined\"}`,\n );\n }\n}\n\n/**\n * Validates that a resource has the required fields.\n * @param resource - The resource to validate\n * @throws {Error} if the resource is missing required fields\n */\nexport function validateResource(resource: ListResourceItem): void {\n if (!resource.uri) {\n throw new Error(\"Resource must have a 'uri' field\");\n }\n\n if (!resource.name) {\n throw new Error(\n `Resource with URI '${resource.uri}' must have a 'name' field`,\n );\n }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import TamboAI from "@tambo-ai/typescript-sdk";
|
|
2
|
-
import { TamboTool, TamboToolRegistry } from "../model/component-metadata";
|
|
2
|
+
import { TamboTool, TamboToolRegistry, TamboToolWithToolSchema } from "../model/component-metadata";
|
|
3
3
|
/**
|
|
4
4
|
* Process a message from the thread, invoking the appropriate tool and returning the result.
|
|
5
5
|
* @param message - The message to handle
|
|
@@ -9,6 +9,6 @@ import { TamboTool, TamboToolRegistry } from "../model/component-metadata";
|
|
|
9
9
|
export declare const handleToolCall: (message: TamboAI.Beta.Threads.ThreadMessage, toolRegistry: TamboToolRegistry, onCallUnregisteredTool?: (toolName: string, args: TamboAI.ToolCallParameter[]) => Promise<string>) => Promise<{
|
|
10
10
|
result: unknown;
|
|
11
11
|
error?: string;
|
|
12
|
-
tamboTool?: TamboTool;
|
|
12
|
+
tamboTool?: TamboTool | TamboToolWithToolSchema;
|
|
13
13
|
}>;
|
|
14
14
|
//# sourceMappingURL=tool-caller.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-caller.d.ts","sourceRoot":"","sources":["../../src/util/tool-caller.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,0BAA0B,CAAC;AAC/C,OAAO,EAEL,SAAS,EACT,iBAAiB,
|
|
1
|
+
{"version":3,"file":"tool-caller.d.ts","sourceRoot":"","sources":["../../src/util/tool-caller.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,0BAA0B,CAAC;AAC/C,OAAO,EAEL,SAAS,EACT,iBAAiB,EACjB,uBAAuB,EACxB,MAAM,6BAA6B,CAAC;AAIrC;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GACzB,SAAS,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAC3C,cAAc,iBAAiB,EAC/B,yBAAyB,CACvB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,CAAC,iBAAiB,EAAE,KAC9B,OAAO,CAAC,MAAM,CAAC,KACnB,OAAO,CAAC;IACT,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,SAAS,GAAG,uBAAuB,CAAC;CACjD,CAmCA,CAAC"}
|
package/dist/util/tool-caller.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.handleToolCall = void 0;
|
|
4
|
+
const schema_1 = require("../schema");
|
|
4
5
|
const registry_1 = require("./registry");
|
|
5
6
|
/**
|
|
6
7
|
* Process a message from the thread, invoking the appropriate tool and returning the result.
|
|
@@ -24,7 +25,7 @@ const handleToolCall = async (message, toolRegistry, onCallUnregisteredTool) =>
|
|
|
24
25
|
throw new Error(`Tool ${message.toolCallRequest.toolName} not found in registry`);
|
|
25
26
|
}
|
|
26
27
|
return {
|
|
27
|
-
result: await runToolChoice(message.toolCallRequest, tool),
|
|
28
|
+
result: await runToolChoice(message.toolCallRequest, tool, tamboTool),
|
|
28
29
|
tamboTool,
|
|
29
30
|
};
|
|
30
31
|
}
|
|
@@ -51,9 +52,16 @@ const findTool = (toolName, toolRegistry) => {
|
|
|
51
52
|
tamboTool: registryTool,
|
|
52
53
|
};
|
|
53
54
|
};
|
|
54
|
-
const runToolChoice = async (toolCallRequest, tool) => {
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
const runToolChoice = async (toolCallRequest, tool, tamboTool) => {
|
|
56
|
+
const parameters = toolCallRequest.parameters ?? [];
|
|
57
|
+
// New interface (inputSchema): pass single object argument
|
|
58
|
+
if ((0, schema_1.hasInputSchema)(tamboTool)) {
|
|
59
|
+
// Reconstruct the object from parameter name-value pairs
|
|
60
|
+
const inputObject = Object.fromEntries(parameters.map((param) => [param.parameterName, param.parameterValue]));
|
|
61
|
+
return await tool.getComponentContext(inputObject);
|
|
62
|
+
}
|
|
63
|
+
// Deprecated interface (toolSchema): spread positional arguments
|
|
64
|
+
const parameterValues = parameters.map((param) => param.parameterValue);
|
|
57
65
|
return await tool.getComponentContext(...parameterValues);
|
|
58
66
|
};
|
|
59
67
|
//# sourceMappingURL=tool-caller.js.map
|