@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
|
@@ -34,22 +34,28 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
};
|
|
35
35
|
})();
|
|
36
36
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
-
exports.useTamboCurrentMessage = exports.TamboMessageProvider = void 0;
|
|
37
|
+
exports.useTamboCurrentComponent = exports.useTamboCurrentMessage = exports.TamboMessageProvider = void 0;
|
|
38
38
|
exports.wrapWithTamboMessageProvider = wrapWithTamboMessageProvider;
|
|
39
39
|
const react_1 = __importStar(require("react"));
|
|
40
40
|
const TamboMessageContext = (0, react_1.createContext)(null);
|
|
41
41
|
/**
|
|
42
|
-
* Wraps all components, so that they can find what message they are in
|
|
42
|
+
* Wraps all components, so that they can find what message they are in.
|
|
43
|
+
* Also supports optional interactable metadata for components wrapped with withInteractable.
|
|
43
44
|
* @param props - props for the TamboMessageProvider
|
|
44
45
|
* @param props.children - The children to wrap
|
|
45
46
|
* @param props.message - The message object
|
|
47
|
+
* @param props.interactableMetadata - Optional interactable component metadata
|
|
46
48
|
* @returns The wrapped component
|
|
47
49
|
*/
|
|
48
|
-
const TamboMessageProvider = ({ children, message }) => {
|
|
50
|
+
const TamboMessageProvider = ({ children, message, interactableMetadata, }) => {
|
|
51
|
+
// Merge interactable metadata into message if provided
|
|
52
|
+
const enhancedMessage = interactableMetadata
|
|
53
|
+
? { ...message, interactableMetadata }
|
|
54
|
+
: message;
|
|
49
55
|
// Use a unique key={...} to force a re-render when the message changes - this
|
|
50
56
|
// make sure that if the rendered component is swapped into a tree (like if
|
|
51
57
|
// you always show the last rendered component) then the state/etc is correct
|
|
52
|
-
return (react_1.default.createElement(TamboMessageContext.Provider, { value:
|
|
58
|
+
return (react_1.default.createElement(TamboMessageContext.Provider, { value: enhancedMessage, key: message.id }, children));
|
|
53
59
|
};
|
|
54
60
|
exports.TamboMessageProvider = TamboMessageProvider;
|
|
55
61
|
/**
|
|
@@ -57,10 +63,11 @@ exports.TamboMessageProvider = TamboMessageProvider;
|
|
|
57
63
|
* to be used outside of a TSX file
|
|
58
64
|
* @param children - The children to wrap
|
|
59
65
|
* @param message - The message object
|
|
66
|
+
* @param interactableMetadata - Optional interactable metadata
|
|
60
67
|
* @returns The wrapped component
|
|
61
68
|
*/
|
|
62
|
-
function wrapWithTamboMessageProvider(children, message) {
|
|
63
|
-
return (react_1.default.createElement(exports.TamboMessageProvider, { message: message }, children));
|
|
69
|
+
function wrapWithTamboMessageProvider(children, message, interactableMetadata) {
|
|
70
|
+
return (react_1.default.createElement(exports.TamboMessageProvider, { message: message, interactableMetadata: interactableMetadata }, children));
|
|
64
71
|
}
|
|
65
72
|
/**
|
|
66
73
|
* Hook used inside a component wrapped with TamboMessageProvider, to get
|
|
@@ -75,4 +82,41 @@ const useTamboCurrentMessage = () => {
|
|
|
75
82
|
return message;
|
|
76
83
|
};
|
|
77
84
|
exports.useTamboCurrentMessage = useTamboCurrentMessage;
|
|
85
|
+
/**
|
|
86
|
+
* Hook to access the current component information from the message context.
|
|
87
|
+
* Provides a unified interface for both AI-generated and interactable components.
|
|
88
|
+
*
|
|
89
|
+
* **Use this hook when you need component metadata regardless of the context.**
|
|
90
|
+
* @returns Component info including name, props, and interactable metadata if available, or null if used outside TamboMessageProvider
|
|
91
|
+
* @example
|
|
92
|
+
* ```tsx
|
|
93
|
+
* function MyInlineEditor() {
|
|
94
|
+
* const component = useTamboCurrentComponent();
|
|
95
|
+
*
|
|
96
|
+
* if (!component) return null; // Not inside a component
|
|
97
|
+
*
|
|
98
|
+
* return (
|
|
99
|
+
* <div>
|
|
100
|
+
* Editing: {component.componentName}
|
|
101
|
+
* {component.interactableId && <span>ID: {component.interactableId}</span>}
|
|
102
|
+
* </div>
|
|
103
|
+
* );
|
|
104
|
+
* }
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
const useTamboCurrentComponent = () => {
|
|
108
|
+
const message = (0, react_1.useContext)(TamboMessageContext);
|
|
109
|
+
if (!message) {
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
componentName: message.interactableMetadata?.componentName ??
|
|
114
|
+
message.component?.componentName ??
|
|
115
|
+
undefined,
|
|
116
|
+
props: message.component?.props,
|
|
117
|
+
interactableId: message.interactableMetadata?.id ?? undefined,
|
|
118
|
+
description: message.interactableMetadata?.description ?? undefined,
|
|
119
|
+
};
|
|
120
|
+
};
|
|
121
|
+
exports.useTamboCurrentComponent = useTamboCurrentComponent;
|
|
78
122
|
//# sourceMappingURL=use-current-message.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-current-message.js","sourceRoot":"","sources":["../../src/hooks/use-current-message.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"use-current-message.js","sourceRoot":"","sources":["../../src/hooks/use-current-message.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqDb,oEAaC;AAjED,+CAAyD;AAMzD,MAAM,mBAAmB,GAAG,IAAA,qBAAa,EAA4B,IAAI,CAAC,CAAC;AAS3E;;;;;;;;GAQG;AACI,MAAM,oBAAoB,GAAwC,CAAC,EACxE,QAAQ,EACR,OAAO,EACP,oBAAoB,GACrB,EAAE,EAAE;IACH,uDAAuD;IACvD,MAAM,eAAe,GAAuB,oBAAoB;QAC9D,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,oBAAoB,EAAE;QACtC,CAAC,CAAC,OAAO,CAAC;IAEZ,8EAA8E;IAC9E,2EAA2E;IAC3E,6EAA6E;IAC7E,OAAO,CACL,8BAAC,mBAAmB,CAAC,QAAQ,IAAC,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,IAClE,QAAQ,CACoB,CAChC,CAAC;AACJ,CAAC,CAAC;AAlBW,QAAA,oBAAoB,wBAkB/B;AAEF;;;;;;;GAOG;AACH,SAAgB,4BAA4B,CAC1C,QAAyB,EACzB,OAA2B,EAC3B,oBAA2C;IAE3C,OAAO,CACL,8BAAC,4BAAoB,IACnB,OAAO,EAAE,OAAO,EAChB,oBAAoB,EAAE,oBAAoB,IAEzC,QAAQ,CACY,CACxB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACI,MAAM,sBAAsB,GAAG,GAAG,EAAE;IACzC,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,mBAAmB,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AARW,QAAA,sBAAsB,0BAQjC;AAiBF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACI,MAAM,wBAAwB,GAAG,GAAiC,EAAE;IACzE,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,mBAAmB,CAAC,CAAC;IAEhD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,aAAa,EACX,OAAO,CAAC,oBAAoB,EAAE,aAAa;YAC3C,OAAO,CAAC,SAAS,EAAE,aAAa;YAChC,SAAS;QACX,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,KAAwC;QAClE,cAAc,EAAE,OAAO,CAAC,oBAAoB,EAAE,EAAE,IAAI,SAAS;QAC7D,WAAW,EAAE,OAAO,CAAC,oBAAoB,EAAE,WAAW,IAAI,SAAS;KACpE,CAAC;AACJ,CAAC,CAAC;AAhBW,QAAA,wBAAwB,4BAgBnC","sourcesContent":["\"use client\";\nimport React, { createContext, useContext } from \"react\";\nimport {\n InteractableMetadata,\n TamboThreadMessage,\n} from \"../model/generate-component-response\";\n\nconst TamboMessageContext = createContext<TamboThreadMessage | null>(null);\n\nexport interface TamboMessageProviderProps {\n children: React.ReactNode;\n message: TamboThreadMessage;\n /** Optional interactable metadata for components wrapped with withInteractable */\n interactableMetadata?: InteractableMetadata;\n}\n\n/**\n * Wraps all components, so that they can find what message they are in.\n * Also supports optional interactable metadata for components wrapped with withInteractable.\n * @param props - props for the TamboMessageProvider\n * @param props.children - The children to wrap\n * @param props.message - The message object\n * @param props.interactableMetadata - Optional interactable component metadata\n * @returns The wrapped component\n */\nexport const TamboMessageProvider: React.FC<TamboMessageProviderProps> = ({\n children,\n message,\n interactableMetadata,\n}) => {\n // Merge interactable metadata into message if provided\n const enhancedMessage: TamboThreadMessage = interactableMetadata\n ? { ...message, interactableMetadata }\n : message;\n\n // Use a unique key={...} to force a re-render when the message changes - this\n // make sure that if the rendered component is swapped into a tree (like if\n // you always show the last rendered component) then the state/etc is correct\n return (\n <TamboMessageContext.Provider value={enhancedMessage} key={message.id}>\n {children}\n </TamboMessageContext.Provider>\n );\n};\n\n/**\n * Wraps a component with a TamboMessageProvider - this allows the provider\n * to be used outside of a TSX file\n * @param children - The children to wrap\n * @param message - The message object\n * @param interactableMetadata - Optional interactable metadata\n * @returns The wrapped component\n */\nexport function wrapWithTamboMessageProvider(\n children: React.ReactNode,\n message: TamboThreadMessage,\n interactableMetadata?: InteractableMetadata,\n) {\n return (\n <TamboMessageProvider\n message={message}\n interactableMetadata={interactableMetadata}\n >\n {children}\n </TamboMessageProvider>\n );\n}\n\n/**\n * Hook used inside a component wrapped with TamboMessageProvider, to get\n * the current message.\n * @returns The current message that is used to render the component\n */\nexport const useTamboCurrentMessage = () => {\n const message = useContext(TamboMessageContext);\n if (!message) {\n throw new Error(\n \"useTamboCurrentMessage must be used within a TamboMessageProvider\",\n );\n }\n return message;\n};\n\n/**\n * Component info extracted from the current message and interactable context.\n * Provides a unified interface for accessing component metadata.\n */\nexport interface TamboCurrentComponent {\n /** Component name from the message */\n componentName?: string;\n /** Component props from the message */\n props?: Record<string, any>;\n /** Interactable ID (only present for components wrapped with withInteractable) */\n interactableId?: string;\n /** Description (only present for components wrapped with withInteractable) */\n description?: string;\n}\n\n/**\n * Hook to access the current component information from the message context.\n * Provides a unified interface for both AI-generated and interactable components.\n *\n * **Use this hook when you need component metadata regardless of the context.**\n * @returns Component info including name, props, and interactable metadata if available, or null if used outside TamboMessageProvider\n * @example\n * ```tsx\n * function MyInlineEditor() {\n * const component = useTamboCurrentComponent();\n *\n * if (!component) return null; // Not inside a component\n *\n * return (\n * <div>\n * Editing: {component.componentName}\n * {component.interactableId && <span>ID: {component.interactableId}</span>}\n * </div>\n * );\n * }\n * ```\n */\nexport const useTamboCurrentComponent = (): TamboCurrentComponent | null => {\n const message = useContext(TamboMessageContext);\n\n if (!message) {\n return null;\n }\n\n return {\n componentName:\n message.interactableMetadata?.componentName ??\n message.component?.componentName ??\n undefined,\n props: message.component?.props as Record<string, any> | undefined,\n interactableId: message.interactableMetadata?.id ?? undefined,\n description: message.interactableMetadata?.description ?? undefined,\n };\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-current-message.test.d.ts","sourceRoot":"","sources":["../../src/hooks/use-current-message.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const react_1 = require("@testing-library/react");
|
|
7
|
+
const react_2 = __importDefault(require("react"));
|
|
8
|
+
const use_current_message_1 = require("./use-current-message");
|
|
9
|
+
describe("TamboMessageProvider", () => {
|
|
10
|
+
const createMockMessage = (overrides = {}) => ({
|
|
11
|
+
id: "test-message-id",
|
|
12
|
+
threadId: "test-thread-id",
|
|
13
|
+
componentState: {},
|
|
14
|
+
content: [{ type: "text", text: "Test message" }],
|
|
15
|
+
createdAt: new Date().toISOString(),
|
|
16
|
+
role: "assistant",
|
|
17
|
+
...overrides,
|
|
18
|
+
});
|
|
19
|
+
it("should provide message context to children", () => {
|
|
20
|
+
const message = createMockMessage();
|
|
21
|
+
const TestComponent = () => {
|
|
22
|
+
const currentMessage = (0, use_current_message_1.useTamboCurrentMessage)();
|
|
23
|
+
return react_2.default.createElement("div", null, currentMessage.id);
|
|
24
|
+
};
|
|
25
|
+
(0, react_1.render)(react_2.default.createElement(use_current_message_1.TamboMessageProvider, { message: message },
|
|
26
|
+
react_2.default.createElement(TestComponent, null)));
|
|
27
|
+
expect(react_1.screen.getByText("test-message-id")).toBeInTheDocument();
|
|
28
|
+
});
|
|
29
|
+
it("should merge interactable metadata into message", () => {
|
|
30
|
+
const message = createMockMessage();
|
|
31
|
+
const interactableMetadata = {
|
|
32
|
+
id: "interactable-123",
|
|
33
|
+
componentName: "TestComponent",
|
|
34
|
+
description: "Test description",
|
|
35
|
+
};
|
|
36
|
+
const TestComponent = () => {
|
|
37
|
+
const currentMessage = (0, use_current_message_1.useTamboCurrentMessage)();
|
|
38
|
+
return (react_2.default.createElement("div", null,
|
|
39
|
+
react_2.default.createElement("span", { "data-testid": "message-id" }, currentMessage.id),
|
|
40
|
+
react_2.default.createElement("span", { "data-testid": "interactable-id" }, currentMessage.interactableMetadata?.id)));
|
|
41
|
+
};
|
|
42
|
+
(0, react_1.render)(react_2.default.createElement(use_current_message_1.TamboMessageProvider, { message: message, interactableMetadata: interactableMetadata },
|
|
43
|
+
react_2.default.createElement(TestComponent, null)));
|
|
44
|
+
expect(react_1.screen.getByTestId("message-id")).toHaveTextContent("test-message-id");
|
|
45
|
+
expect(react_1.screen.getByTestId("interactable-id")).toHaveTextContent("interactable-123");
|
|
46
|
+
});
|
|
47
|
+
it("should work without interactable metadata", () => {
|
|
48
|
+
const message = createMockMessage();
|
|
49
|
+
const TestComponent = () => {
|
|
50
|
+
const currentMessage = (0, use_current_message_1.useTamboCurrentMessage)();
|
|
51
|
+
return (react_2.default.createElement("div", null,
|
|
52
|
+
react_2.default.createElement("span", { "data-testid": "has-metadata" }, currentMessage.interactableMetadata ? "yes" : "no")));
|
|
53
|
+
};
|
|
54
|
+
(0, react_1.render)(react_2.default.createElement(use_current_message_1.TamboMessageProvider, { message: message },
|
|
55
|
+
react_2.default.createElement(TestComponent, null)));
|
|
56
|
+
expect(react_1.screen.getByTestId("has-metadata")).toHaveTextContent("no");
|
|
57
|
+
});
|
|
58
|
+
it("should use message.id as key for re-renders", () => {
|
|
59
|
+
const message1 = createMockMessage({ id: "message-1" });
|
|
60
|
+
const message2 = createMockMessage({ id: "message-2" });
|
|
61
|
+
let renderCount = 0;
|
|
62
|
+
const TestComponent = () => {
|
|
63
|
+
renderCount++;
|
|
64
|
+
const currentMessage = (0, use_current_message_1.useTamboCurrentMessage)();
|
|
65
|
+
return react_2.default.createElement("div", null, currentMessage.id);
|
|
66
|
+
};
|
|
67
|
+
const { rerender } = (0, react_1.render)(react_2.default.createElement(use_current_message_1.TamboMessageProvider, { message: message1 },
|
|
68
|
+
react_2.default.createElement(TestComponent, null)));
|
|
69
|
+
expect(renderCount).toBe(1);
|
|
70
|
+
expect(react_1.screen.getByText("message-1")).toBeInTheDocument();
|
|
71
|
+
// Change to new message - should force re-render due to key change
|
|
72
|
+
rerender(react_2.default.createElement(use_current_message_1.TamboMessageProvider, { message: message2 },
|
|
73
|
+
react_2.default.createElement(TestComponent, null)));
|
|
74
|
+
expect(renderCount).toBe(2);
|
|
75
|
+
expect(react_1.screen.getByText("message-2")).toBeInTheDocument();
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
describe("useTamboCurrentMessage", () => {
|
|
79
|
+
const createMockMessage = (overrides = {}) => ({
|
|
80
|
+
id: "test-message-id",
|
|
81
|
+
threadId: "test-thread-id",
|
|
82
|
+
componentState: {},
|
|
83
|
+
content: [{ type: "text", text: "Test message" }],
|
|
84
|
+
createdAt: new Date().toISOString(),
|
|
85
|
+
role: "assistant",
|
|
86
|
+
...overrides,
|
|
87
|
+
});
|
|
88
|
+
it("should throw error when used outside TamboMessageProvider", () => {
|
|
89
|
+
// Suppress console.error for this test
|
|
90
|
+
const consoleSpy = jest.spyOn(console, "error").mockImplementation();
|
|
91
|
+
expect(() => {
|
|
92
|
+
(0, react_1.renderHook)(() => (0, use_current_message_1.useTamboCurrentMessage)());
|
|
93
|
+
}).toThrow("useTamboCurrentMessage must be used within a TamboMessageProvider");
|
|
94
|
+
consoleSpy.mockRestore();
|
|
95
|
+
});
|
|
96
|
+
it("should return the current message", () => {
|
|
97
|
+
const message = createMockMessage();
|
|
98
|
+
const wrapper = ({ children }) => (react_2.default.createElement(use_current_message_1.TamboMessageProvider, { message: message }, children));
|
|
99
|
+
const { result } = (0, react_1.renderHook)(() => (0, use_current_message_1.useTamboCurrentMessage)(), { wrapper });
|
|
100
|
+
expect(result.current).toEqual(expect.objectContaining({
|
|
101
|
+
id: "test-message-id",
|
|
102
|
+
threadId: "test-thread-id",
|
|
103
|
+
}));
|
|
104
|
+
});
|
|
105
|
+
it("should return message with interactable metadata when provided", () => {
|
|
106
|
+
const message = createMockMessage();
|
|
107
|
+
const interactableMetadata = {
|
|
108
|
+
id: "interactable-123",
|
|
109
|
+
componentName: "TestComponent",
|
|
110
|
+
description: "Test description",
|
|
111
|
+
};
|
|
112
|
+
const wrapper = ({ children }) => (react_2.default.createElement(use_current_message_1.TamboMessageProvider, { message: message, interactableMetadata: interactableMetadata }, children));
|
|
113
|
+
const { result } = (0, react_1.renderHook)(() => (0, use_current_message_1.useTamboCurrentMessage)(), { wrapper });
|
|
114
|
+
expect(result.current.interactableMetadata).toEqual(interactableMetadata);
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
describe("useTamboCurrentComponent", () => {
|
|
118
|
+
const createMockMessage = (overrides = {}) => ({
|
|
119
|
+
id: "test-message-id",
|
|
120
|
+
threadId: "test-thread-id",
|
|
121
|
+
componentState: {},
|
|
122
|
+
content: [{ type: "text", text: "Test message" }],
|
|
123
|
+
createdAt: new Date().toISOString(),
|
|
124
|
+
role: "assistant",
|
|
125
|
+
...overrides,
|
|
126
|
+
});
|
|
127
|
+
it("should return null when used outside TamboMessageProvider", () => {
|
|
128
|
+
const { result } = (0, react_1.renderHook)(() => (0, use_current_message_1.useTamboCurrentComponent)());
|
|
129
|
+
expect(result.current).toBeNull();
|
|
130
|
+
});
|
|
131
|
+
it("should return component info from message.component", () => {
|
|
132
|
+
const message = createMockMessage({
|
|
133
|
+
component: {
|
|
134
|
+
componentName: "WeatherCard",
|
|
135
|
+
componentState: {},
|
|
136
|
+
message: "",
|
|
137
|
+
props: {
|
|
138
|
+
city: "San Francisco",
|
|
139
|
+
temperature: 72,
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
});
|
|
143
|
+
const wrapper = ({ children }) => (react_2.default.createElement(use_current_message_1.TamboMessageProvider, { message: message }, children));
|
|
144
|
+
const { result } = (0, react_1.renderHook)(() => (0, use_current_message_1.useTamboCurrentComponent)(), {
|
|
145
|
+
wrapper,
|
|
146
|
+
});
|
|
147
|
+
expect(result.current).toEqual({
|
|
148
|
+
componentName: "WeatherCard",
|
|
149
|
+
props: {
|
|
150
|
+
city: "San Francisco",
|
|
151
|
+
temperature: 72,
|
|
152
|
+
},
|
|
153
|
+
interactableId: undefined,
|
|
154
|
+
description: undefined,
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
it("should return interactable metadata when provided", () => {
|
|
158
|
+
const message = createMockMessage({
|
|
159
|
+
component: {
|
|
160
|
+
componentName: "WeatherCard",
|
|
161
|
+
componentState: {},
|
|
162
|
+
message: "",
|
|
163
|
+
props: {
|
|
164
|
+
city: "San Francisco",
|
|
165
|
+
temperature: 72,
|
|
166
|
+
},
|
|
167
|
+
},
|
|
168
|
+
});
|
|
169
|
+
const interactableMetadata = {
|
|
170
|
+
id: "interactable-456",
|
|
171
|
+
componentName: "WeatherCard",
|
|
172
|
+
description: "Shows current weather",
|
|
173
|
+
};
|
|
174
|
+
const wrapper = ({ children }) => (react_2.default.createElement(use_current_message_1.TamboMessageProvider, { message: message, interactableMetadata: interactableMetadata }, children));
|
|
175
|
+
const { result } = (0, react_1.renderHook)(() => (0, use_current_message_1.useTamboCurrentComponent)(), {
|
|
176
|
+
wrapper,
|
|
177
|
+
});
|
|
178
|
+
expect(result.current).toEqual({
|
|
179
|
+
componentName: "WeatherCard",
|
|
180
|
+
props: {
|
|
181
|
+
city: "San Francisco",
|
|
182
|
+
temperature: 72,
|
|
183
|
+
},
|
|
184
|
+
interactableId: "interactable-456",
|
|
185
|
+
description: "Shows current weather",
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
it("should prioritize interactableMetadata.componentName over message.component.componentName", () => {
|
|
189
|
+
const message = createMockMessage({
|
|
190
|
+
component: {
|
|
191
|
+
componentName: "OldComponentName",
|
|
192
|
+
componentState: {},
|
|
193
|
+
message: "",
|
|
194
|
+
props: {},
|
|
195
|
+
},
|
|
196
|
+
});
|
|
197
|
+
const interactableMetadata = {
|
|
198
|
+
id: "interactable-789",
|
|
199
|
+
componentName: "NewComponentName",
|
|
200
|
+
description: "New description",
|
|
201
|
+
};
|
|
202
|
+
const wrapper = ({ children }) => (react_2.default.createElement(use_current_message_1.TamboMessageProvider, { message: message, interactableMetadata: interactableMetadata }, children));
|
|
203
|
+
const { result } = (0, react_1.renderHook)(() => (0, use_current_message_1.useTamboCurrentComponent)(), {
|
|
204
|
+
wrapper,
|
|
205
|
+
});
|
|
206
|
+
expect(result.current?.componentName).toBe("NewComponentName");
|
|
207
|
+
});
|
|
208
|
+
it("should handle message with only interactable metadata (no component)", () => {
|
|
209
|
+
const message = createMockMessage(); // No component field
|
|
210
|
+
const interactableMetadata = {
|
|
211
|
+
id: "interactable-only",
|
|
212
|
+
componentName: "InteractableComponent",
|
|
213
|
+
description: "Interactable only",
|
|
214
|
+
};
|
|
215
|
+
const wrapper = ({ children }) => (react_2.default.createElement(use_current_message_1.TamboMessageProvider, { message: message, interactableMetadata: interactableMetadata }, children));
|
|
216
|
+
const { result } = (0, react_1.renderHook)(() => (0, use_current_message_1.useTamboCurrentComponent)(), {
|
|
217
|
+
wrapper,
|
|
218
|
+
});
|
|
219
|
+
expect(result.current).toEqual({
|
|
220
|
+
componentName: "InteractableComponent",
|
|
221
|
+
props: undefined,
|
|
222
|
+
interactableId: "interactable-only",
|
|
223
|
+
description: "Interactable only",
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
it("should handle message with component but no interactable metadata", () => {
|
|
227
|
+
const message = createMockMessage({
|
|
228
|
+
component: {
|
|
229
|
+
componentName: "SimpleComponent",
|
|
230
|
+
componentState: {},
|
|
231
|
+
message: "",
|
|
232
|
+
props: {
|
|
233
|
+
title: "Hello",
|
|
234
|
+
},
|
|
235
|
+
},
|
|
236
|
+
});
|
|
237
|
+
const wrapper = ({ children }) => (react_2.default.createElement(use_current_message_1.TamboMessageProvider, { message: message }, children));
|
|
238
|
+
const { result } = (0, react_1.renderHook)(() => (0, use_current_message_1.useTamboCurrentComponent)(), {
|
|
239
|
+
wrapper,
|
|
240
|
+
});
|
|
241
|
+
expect(result.current).toEqual({
|
|
242
|
+
componentName: "SimpleComponent",
|
|
243
|
+
props: {
|
|
244
|
+
title: "Hello",
|
|
245
|
+
},
|
|
246
|
+
interactableId: undefined,
|
|
247
|
+
description: undefined,
|
|
248
|
+
});
|
|
249
|
+
});
|
|
250
|
+
it("should return undefined for all fields when message has neither component nor interactable metadata", () => {
|
|
251
|
+
const message = createMockMessage(); // Minimal message with no component or interactable data
|
|
252
|
+
const wrapper = ({ children }) => (react_2.default.createElement(use_current_message_1.TamboMessageProvider, { message: message }, children));
|
|
253
|
+
const { result } = (0, react_1.renderHook)(() => (0, use_current_message_1.useTamboCurrentComponent)(), {
|
|
254
|
+
wrapper,
|
|
255
|
+
});
|
|
256
|
+
expect(result.current).toEqual({
|
|
257
|
+
componentName: undefined,
|
|
258
|
+
props: undefined,
|
|
259
|
+
interactableId: undefined,
|
|
260
|
+
description: undefined,
|
|
261
|
+
});
|
|
262
|
+
});
|
|
263
|
+
});
|
|
264
|
+
//# sourceMappingURL=use-current-message.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-current-message.test.js","sourceRoot":"","sources":["../../src/hooks/use-current-message.test.tsx"],"names":[],"mappings":"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","sourcesContent":["import { render, renderHook, screen } from \"@testing-library/react\";\nimport React from \"react\";\nimport {\n InteractableMetadata,\n TamboThreadMessage,\n} from \"../model/generate-component-response\";\nimport {\n TamboMessageProvider,\n useTamboCurrentComponent,\n useTamboCurrentMessage,\n} from \"./use-current-message\";\n\ndescribe(\"TamboMessageProvider\", () => {\n const createMockMessage = (\n overrides: Partial<TamboThreadMessage> = {},\n ): TamboThreadMessage => ({\n id: \"test-message-id\",\n threadId: \"test-thread-id\",\n componentState: {},\n content: [{ type: \"text\", text: \"Test message\" }],\n createdAt: new Date().toISOString(),\n role: \"assistant\",\n ...overrides,\n });\n\n it(\"should provide message context to children\", () => {\n const message = createMockMessage();\n\n const TestComponent = () => {\n const currentMessage = useTamboCurrentMessage();\n return <div>{currentMessage.id}</div>;\n };\n\n render(\n <TamboMessageProvider message={message}>\n <TestComponent />\n </TamboMessageProvider>,\n );\n\n expect(screen.getByText(\"test-message-id\")).toBeInTheDocument();\n });\n\n it(\"should merge interactable metadata into message\", () => {\n const message = createMockMessage();\n const interactableMetadata: InteractableMetadata = {\n id: \"interactable-123\",\n componentName: \"TestComponent\",\n description: \"Test description\",\n };\n\n const TestComponent = () => {\n const currentMessage = useTamboCurrentMessage();\n return (\n <div>\n <span data-testid=\"message-id\">{currentMessage.id}</span>\n <span data-testid=\"interactable-id\">\n {currentMessage.interactableMetadata?.id}\n </span>\n </div>\n );\n };\n\n render(\n <TamboMessageProvider\n message={message}\n interactableMetadata={interactableMetadata}\n >\n <TestComponent />\n </TamboMessageProvider>,\n );\n\n expect(screen.getByTestId(\"message-id\")).toHaveTextContent(\n \"test-message-id\",\n );\n expect(screen.getByTestId(\"interactable-id\")).toHaveTextContent(\n \"interactable-123\",\n );\n });\n\n it(\"should work without interactable metadata\", () => {\n const message = createMockMessage();\n\n const TestComponent = () => {\n const currentMessage = useTamboCurrentMessage();\n return (\n <div>\n <span data-testid=\"has-metadata\">\n {currentMessage.interactableMetadata ? \"yes\" : \"no\"}\n </span>\n </div>\n );\n };\n\n render(\n <TamboMessageProvider message={message}>\n <TestComponent />\n </TamboMessageProvider>,\n );\n\n expect(screen.getByTestId(\"has-metadata\")).toHaveTextContent(\"no\");\n });\n\n it(\"should use message.id as key for re-renders\", () => {\n const message1 = createMockMessage({ id: \"message-1\" });\n const message2 = createMockMessage({ id: \"message-2\" });\n\n let renderCount = 0;\n const TestComponent = () => {\n renderCount++;\n const currentMessage = useTamboCurrentMessage();\n return <div>{currentMessage.id}</div>;\n };\n\n const { rerender } = render(\n <TamboMessageProvider message={message1}>\n <TestComponent />\n </TamboMessageProvider>,\n );\n\n expect(renderCount).toBe(1);\n expect(screen.getByText(\"message-1\")).toBeInTheDocument();\n\n // Change to new message - should force re-render due to key change\n rerender(\n <TamboMessageProvider message={message2}>\n <TestComponent />\n </TamboMessageProvider>,\n );\n\n expect(renderCount).toBe(2);\n expect(screen.getByText(\"message-2\")).toBeInTheDocument();\n });\n});\n\ndescribe(\"useTamboCurrentMessage\", () => {\n const createMockMessage = (\n overrides: Partial<TamboThreadMessage> = {},\n ): TamboThreadMessage => ({\n id: \"test-message-id\",\n threadId: \"test-thread-id\",\n componentState: {},\n content: [{ type: \"text\", text: \"Test message\" }],\n createdAt: new Date().toISOString(),\n role: \"assistant\",\n ...overrides,\n });\n\n it(\"should throw error when used outside TamboMessageProvider\", () => {\n // Suppress console.error for this test\n const consoleSpy = jest.spyOn(console, \"error\").mockImplementation();\n\n expect(() => {\n renderHook(() => useTamboCurrentMessage());\n }).toThrow(\n \"useTamboCurrentMessage must be used within a TamboMessageProvider\",\n );\n\n consoleSpy.mockRestore();\n });\n\n it(\"should return the current message\", () => {\n const message = createMockMessage();\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboMessageProvider message={message}>{children}</TamboMessageProvider>\n );\n\n const { result } = renderHook(() => useTamboCurrentMessage(), { wrapper });\n\n expect(result.current).toEqual(\n expect.objectContaining({\n id: \"test-message-id\",\n threadId: \"test-thread-id\",\n }),\n );\n });\n\n it(\"should return message with interactable metadata when provided\", () => {\n const message = createMockMessage();\n const interactableMetadata: InteractableMetadata = {\n id: \"interactable-123\",\n componentName: \"TestComponent\",\n description: \"Test description\",\n };\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboMessageProvider\n message={message}\n interactableMetadata={interactableMetadata}\n >\n {children}\n </TamboMessageProvider>\n );\n\n const { result } = renderHook(() => useTamboCurrentMessage(), { wrapper });\n\n expect(result.current.interactableMetadata).toEqual(interactableMetadata);\n });\n});\n\ndescribe(\"useTamboCurrentComponent\", () => {\n const createMockMessage = (\n overrides: Partial<TamboThreadMessage> = {},\n ): TamboThreadMessage => ({\n id: \"test-message-id\",\n threadId: \"test-thread-id\",\n componentState: {},\n content: [{ type: \"text\", text: \"Test message\" }],\n createdAt: new Date().toISOString(),\n role: \"assistant\",\n ...overrides,\n });\n\n it(\"should return null when used outside TamboMessageProvider\", () => {\n const { result } = renderHook(() => useTamboCurrentComponent());\n\n expect(result.current).toBeNull();\n });\n\n it(\"should return component info from message.component\", () => {\n const message = createMockMessage({\n component: {\n componentName: \"WeatherCard\",\n componentState: {},\n message: \"\",\n props: {\n city: \"San Francisco\",\n temperature: 72,\n },\n },\n });\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboMessageProvider message={message}>{children}</TamboMessageProvider>\n );\n\n const { result } = renderHook(() => useTamboCurrentComponent(), {\n wrapper,\n });\n\n expect(result.current).toEqual({\n componentName: \"WeatherCard\",\n props: {\n city: \"San Francisco\",\n temperature: 72,\n },\n interactableId: undefined,\n description: undefined,\n });\n });\n\n it(\"should return interactable metadata when provided\", () => {\n const message = createMockMessage({\n component: {\n componentName: \"WeatherCard\",\n componentState: {},\n message: \"\",\n props: {\n city: \"San Francisco\",\n temperature: 72,\n },\n },\n });\n\n const interactableMetadata: InteractableMetadata = {\n id: \"interactable-456\",\n componentName: \"WeatherCard\",\n description: \"Shows current weather\",\n };\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboMessageProvider\n message={message}\n interactableMetadata={interactableMetadata}\n >\n {children}\n </TamboMessageProvider>\n );\n\n const { result } = renderHook(() => useTamboCurrentComponent(), {\n wrapper,\n });\n\n expect(result.current).toEqual({\n componentName: \"WeatherCard\",\n props: {\n city: \"San Francisco\",\n temperature: 72,\n },\n interactableId: \"interactable-456\",\n description: \"Shows current weather\",\n });\n });\n\n it(\"should prioritize interactableMetadata.componentName over message.component.componentName\", () => {\n const message = createMockMessage({\n component: {\n componentName: \"OldComponentName\",\n componentState: {},\n message: \"\",\n props: {},\n },\n });\n\n const interactableMetadata: InteractableMetadata = {\n id: \"interactable-789\",\n componentName: \"NewComponentName\",\n description: \"New description\",\n };\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboMessageProvider\n message={message}\n interactableMetadata={interactableMetadata}\n >\n {children}\n </TamboMessageProvider>\n );\n\n const { result } = renderHook(() => useTamboCurrentComponent(), {\n wrapper,\n });\n\n expect(result.current?.componentName).toBe(\"NewComponentName\");\n });\n\n it(\"should handle message with only interactable metadata (no component)\", () => {\n const message = createMockMessage(); // No component field\n\n const interactableMetadata: InteractableMetadata = {\n id: \"interactable-only\",\n componentName: \"InteractableComponent\",\n description: \"Interactable only\",\n };\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboMessageProvider\n message={message}\n interactableMetadata={interactableMetadata}\n >\n {children}\n </TamboMessageProvider>\n );\n\n const { result } = renderHook(() => useTamboCurrentComponent(), {\n wrapper,\n });\n\n expect(result.current).toEqual({\n componentName: \"InteractableComponent\",\n props: undefined,\n interactableId: \"interactable-only\",\n description: \"Interactable only\",\n });\n });\n\n it(\"should handle message with component but no interactable metadata\", () => {\n const message = createMockMessage({\n component: {\n componentName: \"SimpleComponent\",\n componentState: {},\n message: \"\",\n props: {\n title: \"Hello\",\n },\n },\n });\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboMessageProvider message={message}>{children}</TamboMessageProvider>\n );\n\n const { result } = renderHook(() => useTamboCurrentComponent(), {\n wrapper,\n });\n\n expect(result.current).toEqual({\n componentName: \"SimpleComponent\",\n props: {\n title: \"Hello\",\n },\n interactableId: undefined,\n description: undefined,\n });\n });\n\n it(\"should return undefined for all fields when message has neither component nor interactable metadata\", () => {\n const message = createMockMessage(); // Minimal message with no component or interactable data\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboMessageProvider message={message}>{children}</TamboMessageProvider>\n );\n\n const { result } = renderHook(() => useTamboCurrentComponent(), {\n wrapper,\n });\n\n expect(result.current).toEqual({\n componentName: undefined,\n props: undefined,\n interactableId: undefined,\n description: undefined,\n });\n });\n});\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,24 +1,26 @@
|
|
|
1
1
|
/** Exports for the library. Only publically available exports are re-exported here. Anything not exported here is not supported and may change or break at any time. */
|
|
2
2
|
export { useTamboComponentState } from "./hooks/use-component-state";
|
|
3
|
-
export { TamboMessageProvider, useTamboCurrentMessage, } from "./hooks/use-current-message";
|
|
3
|
+
export { TamboMessageProvider, useTamboCurrentComponent, useTamboCurrentMessage, type TamboCurrentComponent, } from "./hooks/use-current-message";
|
|
4
4
|
export { useMessageImages, type StagedImage } from "./hooks/use-message-images";
|
|
5
5
|
export { useTamboStreamingProps } from "./hooks/use-streaming-props";
|
|
6
6
|
export * from "./hooks/use-suggestions";
|
|
7
7
|
export { useTamboStreamStatus, type PropStatus, type StreamStatus, } from "./hooks/use-tambo-stream-status";
|
|
8
8
|
export { useTamboVoice } from "./hooks/use-tambo-voice";
|
|
9
|
-
export { TamboClientProvider, TamboComponentProvider, TamboContextAttachmentProvider, TamboContextHelpersProvider, TamboPropStreamProvider, TamboProvider, TamboRegistryProvider, TamboStubProvider, TamboThreadInputProvider, TamboThreadProvider, useIsTamboTokenUpdating, useTambo, useTamboClient, useTamboContextAttachment, useTamboContextHelpers, useTamboGenerationStage, useTamboMcpServerInfos, useTamboStream, useTamboThread, useTamboThreadInput, type ContextAttachment, type ContextAttachmentState, type ContextHelperData, type TamboComponent, type TamboContextAttachmentProviderProps, type TamboContextHelpersContextProps, type TamboContextHelpersProviderProps, type TamboRegistryContext, type TamboStubProviderProps, type TamboThreadInputContextProps, type TamboThreadProviderProps, } from "./providers";
|
|
9
|
+
export { TamboClientProvider, TamboComponentProvider, TamboContextAttachmentProvider, TamboContextHelpersProvider, TamboPropStreamProvider, TamboProvider, TamboRegistryProvider, TamboStubProvider, TamboThreadInputProvider, TamboThreadProvider, useIsTamboTokenUpdating, useTambo, useTamboClient, useTamboContextAttachment, useTamboContextHelpers, useTamboGenerationStage, useTamboMcpServerInfos, useTamboStream, useTamboThread, useTamboThreadInput, type ContextAttachment, type ContextAttachmentState, type ContextHelperData, type RegisterToolFn, type RegisterToolsFn, type TamboComponent, type TamboContextAttachmentProviderProps, type TamboContextHelpersContextProps, type TamboContextHelpersProviderProps, type TamboRegistryContext, type TamboStubProviderProps, type TamboThreadInputContextProps, type TamboThreadProviderProps, } from "./providers";
|
|
10
10
|
export type { APIError, RateLimitError, TamboAIError, } from "@tambo-ai/typescript-sdk";
|
|
11
11
|
export type { Suggestion, SuggestionGenerateParams, SuggestionGenerateResponse, SuggestionListResponse, } from "@tambo-ai/typescript-sdk/resources/beta/threads/suggestions";
|
|
12
|
+
export { withTamboInteractable as withInteractable, type InteractableConfig, type WithTamboInteractableProps, } from "./hoc/with-tambo-interactable";
|
|
12
13
|
export { useTamboThreadList } from "./hooks/use-tambo-threads";
|
|
13
|
-
export { type ComponentContextToolMetadata, type ComponentRegistry, type ParameterSpec, type RegisteredComponent, type TamboTool, } from "./model/component-metadata";
|
|
14
|
-
export { GenerationStage, type TamboThreadMessage, } from "./model/generate-component-response";
|
|
15
|
-
export { type TamboThread } from "./model/tambo-thread";
|
|
16
|
-
export { type InitialTamboThreadMessage } from "./providers/tambo-thread-provider";
|
|
14
|
+
export { type ComponentContextToolMetadata, type ComponentRegistry, type ParameterSpec, type RegisteredComponent, type TamboToolBase as TamboTool, } from "./model/component-metadata";
|
|
15
|
+
export { GenerationStage, type InteractableMetadata, type TamboThreadMessage, } from "./model/generate-component-response";
|
|
17
16
|
export type { TamboInteractableComponent as InteractableComponent, TamboInteractableContext, } from "./model/tambo-interactable";
|
|
18
|
-
export {
|
|
17
|
+
export { type TamboThread } from "./model/tambo-thread";
|
|
19
18
|
export { useCurrentInteractablesSnapshot, useTamboInteractable, } from "./providers/tambo-interactable-provider";
|
|
19
|
+
export { type InitialTamboThreadMessage } from "./providers/tambo-thread-provider";
|
|
20
|
+
export { defineTool } from "./util/registry";
|
|
20
21
|
export { currentPageContextHelper, currentTimeContextHelper, } from "./context-helpers";
|
|
21
22
|
export type { AdditionalContext, ContextHelperFn, ContextHelpers, } from "./context-helpers";
|
|
22
|
-
export type { McpServerInfo, NormalizedMcpServerInfo, } from "./model/mcp-server-info";
|
|
23
23
|
export { MCPTransport } from "./model/mcp-server-info";
|
|
24
|
+
export type { McpServerInfo, NormalizedMcpServerInfo, } from "./model/mcp-server-info";
|
|
25
|
+
export type { ListResourceItem, ReadResourceResult, ResourceSource, } from "./model/resource-info";
|
|
24
26
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wKAAwK;AAExK,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EACL,oBAAoB,EACpB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wKAAwK;AAExK,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,sBAAsB,EACtB,KAAK,qBAAqB,GAC3B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,KAAK,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,cAAc,yBAAyB,CAAC;AACxC,OAAO,EACL,oBAAoB,EACpB,KAAK,UAAU,EACf,KAAK,YAAY,GAClB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGxD,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,8BAA8B,EAC9B,2BAA2B,EAC3B,uBAAuB,EACvB,aAAa,EACb,qBAAqB,EACrB,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,EACnB,uBAAuB,EACvB,QAAQ,EACR,cAAc,EACd,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,mCAAmC,EACxC,KAAK,+BAA+B,EACpC,KAAK,gCAAgC,EACrC,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,4BAA4B,EACjC,KAAK,wBAAwB,GAC9B,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,QAAQ,EACR,cAAc,EACd,YAAY,GACb,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,UAAU,EACV,wBAAwB,EACxB,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,6DAA6D,CAAC;AACrE,OAAO,EACL,qBAAqB,IAAI,gBAAgB,EACzC,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,GAChC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EACL,KAAK,4BAA4B,EACjC,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EAOxB,KAAK,aAAa,IAAI,SAAS,GAChC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,GACxB,MAAM,qCAAqC,CAAC;AAC7C,YAAY,EACV,0BAA0B,IAAI,qBAAqB,EACnD,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,+BAA+B,EAC/B,oBAAoB,GACrB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,EACL,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,cAAc,GACf,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,YAAY,EACV,aAAa,EACb,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AAGjC,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,GACf,MAAM,uBAAuB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -15,11 +15,12 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
16
16
|
};
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.MCPTransport = exports.currentTimeContextHelper = exports.currentPageContextHelper = exports.
|
|
18
|
+
exports.MCPTransport = exports.currentTimeContextHelper = exports.currentPageContextHelper = exports.defineTool = exports.useTamboInteractable = exports.useCurrentInteractablesSnapshot = exports.GenerationStage = exports.useTamboThreadList = exports.withInteractable = exports.useTamboThreadInput = exports.useTamboThread = exports.useTamboStream = exports.useTamboMcpServerInfos = exports.useTamboGenerationStage = exports.useTamboContextHelpers = exports.useTamboContextAttachment = exports.useTamboClient = exports.useTambo = exports.useIsTamboTokenUpdating = exports.TamboThreadProvider = exports.TamboThreadInputProvider = exports.TamboStubProvider = exports.TamboRegistryProvider = exports.TamboProvider = exports.TamboPropStreamProvider = exports.TamboContextHelpersProvider = exports.TamboContextAttachmentProvider = exports.TamboComponentProvider = exports.TamboClientProvider = exports.useTamboVoice = exports.useTamboStreamStatus = exports.useTamboStreamingProps = exports.useMessageImages = exports.useTamboCurrentMessage = exports.useTamboCurrentComponent = exports.TamboMessageProvider = exports.useTamboComponentState = void 0;
|
|
19
19
|
var use_component_state_1 = require("./hooks/use-component-state");
|
|
20
20
|
Object.defineProperty(exports, "useTamboComponentState", { enumerable: true, get: function () { return use_component_state_1.useTamboComponentState; } });
|
|
21
21
|
var use_current_message_1 = require("./hooks/use-current-message");
|
|
22
22
|
Object.defineProperty(exports, "TamboMessageProvider", { enumerable: true, get: function () { return use_current_message_1.TamboMessageProvider; } });
|
|
23
|
+
Object.defineProperty(exports, "useTamboCurrentComponent", { enumerable: true, get: function () { return use_current_message_1.useTamboCurrentComponent; } });
|
|
23
24
|
Object.defineProperty(exports, "useTamboCurrentMessage", { enumerable: true, get: function () { return use_current_message_1.useTamboCurrentMessage; } });
|
|
24
25
|
var use_message_images_1 = require("./hooks/use-message-images");
|
|
25
26
|
Object.defineProperty(exports, "useMessageImages", { enumerable: true, get: function () { return use_message_images_1.useMessageImages; } });
|
|
@@ -52,19 +53,22 @@ Object.defineProperty(exports, "useTamboMcpServerInfos", { enumerable: true, get
|
|
|
52
53
|
Object.defineProperty(exports, "useTamboStream", { enumerable: true, get: function () { return providers_1.useTamboStream; } });
|
|
53
54
|
Object.defineProperty(exports, "useTamboThread", { enumerable: true, get: function () { return providers_1.useTamboThread; } });
|
|
54
55
|
Object.defineProperty(exports, "useTamboThreadInput", { enumerable: true, get: function () { return providers_1.useTamboThreadInput; } });
|
|
56
|
+
var with_tambo_interactable_1 = require("./hoc/with-tambo-interactable");
|
|
57
|
+
Object.defineProperty(exports, "withInteractable", { enumerable: true, get: function () { return with_tambo_interactable_1.withTamboInteractable; } });
|
|
55
58
|
var use_tambo_threads_1 = require("./hooks/use-tambo-threads");
|
|
56
59
|
Object.defineProperty(exports, "useTamboThreadList", { enumerable: true, get: function () { return use_tambo_threads_1.useTamboThreadList; } });
|
|
57
60
|
var generate_component_response_1 = require("./model/generate-component-response");
|
|
58
61
|
Object.defineProperty(exports, "GenerationStage", { enumerable: true, get: function () { return generate_component_response_1.GenerationStage; } });
|
|
59
|
-
var with_tambo_interactable_1 = require("./providers/hoc/with-tambo-interactable");
|
|
60
|
-
Object.defineProperty(exports, "withInteractable", { enumerable: true, get: function () { return with_tambo_interactable_1.withTamboInteractable; } });
|
|
61
62
|
var tambo_interactable_provider_1 = require("./providers/tambo-interactable-provider");
|
|
62
63
|
Object.defineProperty(exports, "useCurrentInteractablesSnapshot", { enumerable: true, get: function () { return tambo_interactable_provider_1.useCurrentInteractablesSnapshot; } });
|
|
63
64
|
Object.defineProperty(exports, "useTamboInteractable", { enumerable: true, get: function () { return tambo_interactable_provider_1.useTamboInteractable; } });
|
|
65
|
+
var registry_1 = require("./util/registry");
|
|
66
|
+
Object.defineProperty(exports, "defineTool", { enumerable: true, get: function () { return registry_1.defineTool; } });
|
|
64
67
|
// Context helpers exports
|
|
65
68
|
var context_helpers_1 = require("./context-helpers");
|
|
66
69
|
Object.defineProperty(exports, "currentPageContextHelper", { enumerable: true, get: function () { return context_helpers_1.currentPageContextHelper; } });
|
|
67
70
|
Object.defineProperty(exports, "currentTimeContextHelper", { enumerable: true, get: function () { return context_helpers_1.currentTimeContextHelper; } });
|
|
71
|
+
// MCP server metadata types (used by TamboProvider / registry / MCP provider)
|
|
68
72
|
var mcp_server_info_1 = require("./model/mcp-server-info");
|
|
69
73
|
Object.defineProperty(exports, "MCPTransport", { enumerable: true, get: function () { return mcp_server_info_1.MCPTransport; } });
|
|
70
74
|
// Note: Full MCP exports like TamboMcpProvider are available separately in the
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,wKAAwK;;;;;;;;;;;;;;;;;AAExK,mEAAqE;AAA5D,6HAAA,sBAAsB,OAAA;AAC/B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,wKAAwK;;;;;;;;;;;;;;;;;AAExK,mEAAqE;AAA5D,6HAAA,sBAAsB,OAAA;AAC/B,mEAKqC;AAJnC,2HAAA,oBAAoB,OAAA;AACpB,+HAAA,wBAAwB,OAAA;AACxB,6HAAA,sBAAsB,OAAA;AAGxB,iEAAgF;AAAvE,sHAAA,gBAAgB,OAAA;AACzB,mEAAqE;AAA5D,6HAAA,sBAAsB,OAAA;AAC/B,0DAAwC;AACxC,2EAIyC;AAHvC,+HAAA,oBAAoB,OAAA;AAItB,2DAAwD;AAA/C,gHAAA,aAAa,OAAA;AAEtB,gCAAgC;AAChC,yCAkCqB;AAjCnB,gHAAA,mBAAmB,OAAA;AACnB,mHAAA,sBAAsB,OAAA;AACtB,2HAAA,8BAA8B,OAAA;AAC9B,wHAAA,2BAA2B,OAAA;AAC3B,oHAAA,uBAAuB,OAAA;AACvB,0GAAA,aAAa,OAAA;AACb,kHAAA,qBAAqB,OAAA;AACrB,8GAAA,iBAAiB,OAAA;AACjB,qHAAA,wBAAwB,OAAA;AACxB,gHAAA,mBAAmB,OAAA;AACnB,oHAAA,uBAAuB,OAAA;AACvB,qGAAA,QAAQ,OAAA;AACR,2GAAA,cAAc,OAAA;AACd,sHAAA,yBAAyB,OAAA;AACzB,mHAAA,sBAAsB,OAAA;AACtB,oHAAA,uBAAuB,OAAA;AACvB,mHAAA,sBAAsB,OAAA;AACtB,2GAAA,cAAc,OAAA;AACd,2GAAA,cAAc,OAAA;AACd,gHAAA,mBAAmB,OAAA;AA4BrB,yEAIuC;AAHrC,2HAAA,qBAAqB,OAAoB;AAI3C,+DAA+D;AAAtD,uHAAA,kBAAkB,OAAA;AAc3B,mFAI6C;AAH3C,8HAAA,eAAe,OAAA;AASjB,uFAGiD;AAF/C,8IAAA,+BAA+B,OAAA;AAC/B,mIAAA,oBAAoB,OAAA;AAGtB,4CAA6C;AAApC,sGAAA,UAAU,OAAA;AAEnB,0BAA0B;AAC1B,qDAG2B;AAFzB,2HAAA,wBAAwB,OAAA;AACxB,2HAAA,wBAAwB,OAAA;AAQ1B,8EAA8E;AAC9E,2DAAuD;AAA9C,+GAAA,YAAY,OAAA;AAarB,+EAA+E;AAC/E,8BAA8B","sourcesContent":["/** Exports for the library. Only publically available exports are re-exported here. Anything not exported here is not supported and may change or break at any time. */\n\nexport { useTamboComponentState } from \"./hooks/use-component-state\";\nexport {\n TamboMessageProvider,\n useTamboCurrentComponent,\n useTamboCurrentMessage,\n type TamboCurrentComponent,\n} from \"./hooks/use-current-message\";\nexport { useMessageImages, type StagedImage } from \"./hooks/use-message-images\";\nexport { useTamboStreamingProps } from \"./hooks/use-streaming-props\";\nexport * from \"./hooks/use-suggestions\";\nexport {\n useTamboStreamStatus,\n type PropStatus,\n type StreamStatus,\n} from \"./hooks/use-tambo-stream-status\";\nexport { useTamboVoice } from \"./hooks/use-tambo-voice\";\n\n// Re-export provider components\nexport {\n TamboClientProvider,\n TamboComponentProvider,\n TamboContextAttachmentProvider,\n TamboContextHelpersProvider,\n TamboPropStreamProvider,\n TamboProvider,\n TamboRegistryProvider,\n TamboStubProvider,\n TamboThreadInputProvider,\n TamboThreadProvider,\n useIsTamboTokenUpdating,\n useTambo,\n useTamboClient,\n useTamboContextAttachment,\n useTamboContextHelpers,\n useTamboGenerationStage,\n useTamboMcpServerInfos,\n useTamboStream,\n useTamboThread,\n useTamboThreadInput,\n type ContextAttachment,\n type ContextAttachmentState,\n type ContextHelperData,\n type RegisterToolFn,\n type RegisterToolsFn,\n type TamboComponent,\n type TamboContextAttachmentProviderProps,\n type TamboContextHelpersContextProps,\n type TamboContextHelpersProviderProps,\n type TamboRegistryContext,\n type TamboStubProviderProps,\n type TamboThreadInputContextProps,\n type TamboThreadProviderProps,\n} from \"./providers\";\n\n// Re-export types from Tambo Node SDK\nexport type {\n APIError,\n RateLimitError,\n TamboAIError,\n} from \"@tambo-ai/typescript-sdk\";\nexport type {\n Suggestion,\n SuggestionGenerateParams,\n SuggestionGenerateResponse,\n SuggestionListResponse,\n} from \"@tambo-ai/typescript-sdk/resources/beta/threads/suggestions\";\nexport {\n withTamboInteractable as withInteractable,\n type InteractableConfig,\n type WithTamboInteractableProps,\n} from \"./hoc/with-tambo-interactable\";\nexport { useTamboThreadList } from \"./hooks/use-tambo-threads\";\nexport {\n type ComponentContextToolMetadata,\n type ComponentRegistry,\n type ParameterSpec,\n type RegisteredComponent,\n /*\n * NOTE(lachieh): TamboToolBase is used as a wrapper around current TamboTool\n * and the deprecated TamboToolWithToolSchema to allow both to be used while\n * supporting the migration to a single TamboTool type.\n * TamboToolWithToolSchema should be removed in a future release.\n */\n type TamboToolBase as TamboTool,\n} from \"./model/component-metadata\";\nexport {\n GenerationStage,\n type InteractableMetadata,\n type TamboThreadMessage,\n} from \"./model/generate-component-response\";\nexport type {\n TamboInteractableComponent as InteractableComponent,\n TamboInteractableContext,\n} from \"./model/tambo-interactable\";\nexport { type TamboThread } from \"./model/tambo-thread\";\nexport {\n useCurrentInteractablesSnapshot,\n useTamboInteractable,\n} from \"./providers/tambo-interactable-provider\";\nexport { type InitialTamboThreadMessage } from \"./providers/tambo-thread-provider\";\nexport { defineTool } from \"./util/registry\";\n\n// Context helpers exports\nexport {\n currentPageContextHelper,\n currentTimeContextHelper,\n} from \"./context-helpers\";\nexport type {\n AdditionalContext,\n ContextHelperFn,\n ContextHelpers,\n} from \"./context-helpers\";\n\n// MCP server metadata types (used by TamboProvider / registry / MCP provider)\nexport { MCPTransport } from \"./model/mcp-server-info\";\nexport type {\n McpServerInfo,\n NormalizedMcpServerInfo,\n} from \"./model/mcp-server-info\";\n\n// Resource types for registry resource registration\nexport type {\n ListResourceItem,\n ReadResourceResult,\n ResourceSource,\n} from \"./model/resource-info\";\n\n// Note: Full MCP exports like TamboMcpProvider are available separately in the\n// @tambo-ai/react/mcp package\n"]}
|
package/dist/mcp/index.d.ts
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
export { MCPTransport } from "./mcp-client";
|
|
11
11
|
export type { MCPElicitationHandler, MCPHandlers, MCPSamplingHandler, } from "./mcp-client";
|
|
12
12
|
export type { ElicitationRequestedSchema, PrimitiveSchemaDefinition, TamboElicitationRequest, TamboElicitationResponse, } from "./elicitation";
|
|
13
|
-
export { useTamboMcpPrompt, useTamboMcpPromptList, useTamboMcpResource, useTamboMcpResourceList, } from "./mcp-hooks";
|
|
13
|
+
export { useTamboMcpPrompt, useTamboMcpPromptList, useTamboMcpResource, useTamboMcpResourceList, isMcpResourceEntry, } from "./mcp-hooks";
|
|
14
14
|
export type { ListPromptEntry, ListPromptItem, ListResourceEntry, ListResourceItem, } from "./mcp-hooks";
|
|
15
15
|
export { TamboMcpProvider, useTamboMcpElicitation, useTamboMcpServers, useTamboElicitationContext, type ConnectedMcpServer, type FailedMcpServer, type McpServer, type ProviderMCPHandlers, } from "./tambo-mcp-provider";
|
|
16
16
|
export type { McpServerInfo, NormalizedMcpServerInfo, } from "../model/mcp-server-info";
|
package/dist/mcp/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EACV,qBAAqB,EACrB,WAAW,EACX,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,0BAA0B,EAC1B,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EACV,qBAAqB,EACrB,WAAW,EACX,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,0BAA0B,EAC1B,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,EAClB,0BAA0B,EAC1B,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,mBAAmB,GACzB,MAAM,sBAAsB,CAAC;AAG9B,YAAY,EACV,aAAa,EACb,uBAAuB,GACxB,MAAM,0BAA0B,CAAC"}
|
package/dist/mcp/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useTamboElicitationContext = exports.useTamboMcpServers = exports.useTamboMcpElicitation = exports.TamboMcpProvider = exports.useTamboMcpResourceList = exports.useTamboMcpResource = exports.useTamboMcpPromptList = exports.useTamboMcpPrompt = exports.MCPTransport = void 0;
|
|
3
|
+
exports.useTamboElicitationContext = exports.useTamboMcpServers = exports.useTamboMcpElicitation = exports.TamboMcpProvider = exports.isMcpResourceEntry = exports.useTamboMcpResourceList = exports.useTamboMcpResource = exports.useTamboMcpPromptList = exports.useTamboMcpPrompt = exports.MCPTransport = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* Entry point for MCP (Model Context Protocol) support in the React SDK.
|
|
6
6
|
*
|
|
@@ -17,6 +17,7 @@ Object.defineProperty(exports, "useTamboMcpPrompt", { enumerable: true, get: fun
|
|
|
17
17
|
Object.defineProperty(exports, "useTamboMcpPromptList", { enumerable: true, get: function () { return mcp_hooks_1.useTamboMcpPromptList; } });
|
|
18
18
|
Object.defineProperty(exports, "useTamboMcpResource", { enumerable: true, get: function () { return mcp_hooks_1.useTamboMcpResource; } });
|
|
19
19
|
Object.defineProperty(exports, "useTamboMcpResourceList", { enumerable: true, get: function () { return mcp_hooks_1.useTamboMcpResourceList; } });
|
|
20
|
+
Object.defineProperty(exports, "isMcpResourceEntry", { enumerable: true, get: function () { return mcp_hooks_1.isMcpResourceEntry; } });
|
|
20
21
|
var tambo_mcp_provider_1 = require("./tambo-mcp-provider");
|
|
21
22
|
Object.defineProperty(exports, "TamboMcpProvider", { enumerable: true, get: function () { return tambo_mcp_provider_1.TamboMcpProvider; } });
|
|
22
23
|
Object.defineProperty(exports, "useTamboMcpElicitation", { enumerable: true, get: function () { return tambo_mcp_provider_1.useTamboMcpElicitation; } });
|
package/dist/mcp/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;GAQG;AACH,2CAA4C;AAAnC,0GAAA,YAAY,OAAA;AAYrB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;GAQG;AACH,2CAA4C;AAAnC,0GAAA,YAAY,OAAA;AAYrB,yCAMqB;AALnB,8GAAA,iBAAiB,OAAA;AACjB,kHAAA,qBAAqB,OAAA;AACrB,gHAAA,mBAAmB,OAAA;AACnB,oHAAA,uBAAuB,OAAA;AACvB,+GAAA,kBAAkB,OAAA;AAQpB,2DAS8B;AAR5B,sHAAA,gBAAgB,OAAA;AAChB,4HAAA,sBAAsB,OAAA;AACtB,wHAAA,kBAAkB,OAAA;AAClB,gIAAA,0BAA0B,OAAA","sourcesContent":["/**\n * Entry point for MCP (Model Context Protocol) support in the React SDK.\n *\n * Note: Importing from `@tambo-ai/react/mcp` requires installing the optional\n * peer dependencies `@modelcontextprotocol/sdk`, `zod`, and `zod-to-json-schema`\n * in your application. They are marked as optional so apps that do not use MCP\n * do not need to include them. See the React SDK README for the recommended\n * version ranges.\n */\nexport { MCPTransport } from \"./mcp-client\";\nexport type {\n MCPElicitationHandler,\n MCPHandlers,\n MCPSamplingHandler,\n} from \"./mcp-client\";\nexport type {\n ElicitationRequestedSchema,\n PrimitiveSchemaDefinition,\n TamboElicitationRequest,\n TamboElicitationResponse,\n} from \"./elicitation\";\nexport {\n useTamboMcpPrompt,\n useTamboMcpPromptList,\n useTamboMcpResource,\n useTamboMcpResourceList,\n isMcpResourceEntry,\n} from \"./mcp-hooks\";\nexport type {\n ListPromptEntry,\n ListPromptItem,\n ListResourceEntry,\n ListResourceItem,\n} from \"./mcp-hooks\";\nexport {\n TamboMcpProvider,\n useTamboMcpElicitation,\n useTamboMcpServers,\n useTamboElicitationContext,\n type ConnectedMcpServer,\n type FailedMcpServer,\n type McpServer,\n type ProviderMCPHandlers,\n} from \"./tambo-mcp-provider\";\n\n// Public MCP server metadata types\nexport type {\n McpServerInfo,\n NormalizedMcpServerInfo,\n} from \"../model/mcp-server-info\";\n"]}
|