@tambo-ai/react 0.66.1 → 0.66.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/dist/hooks/use-current-message.d.ts +2 -0
  2. package/dist/hooks/use-current-message.d.ts.map +1 -1
  3. package/dist/hooks/use-current-message.js +1 -0
  4. package/dist/hooks/use-current-message.js.map +1 -1
  5. package/dist/hooks/use-current-message.test.js +5 -0
  6. package/dist/hooks/use-current-message.test.js.map +1 -1
  7. package/dist/model/component-metadata.d.ts +2 -2
  8. package/dist/model/component-metadata.d.ts.map +1 -1
  9. package/dist/model/component-metadata.js.map +1 -1
  10. package/dist/providers/tambo-interactable-provider-partial-updates.test.js +87 -87
  11. package/dist/providers/tambo-interactable-provider-partial-updates.test.js.map +1 -1
  12. package/dist/providers/tambo-interactable-provider.d.ts.map +1 -1
  13. package/dist/providers/tambo-interactable-provider.js +46 -40
  14. package/dist/providers/tambo-interactable-provider.js.map +1 -1
  15. package/dist/providers/tambo-interactables-additional-context-edge-cases.test.js +8 -8
  16. package/dist/providers/tambo-interactables-additional-context-edge-cases.test.js.map +1 -1
  17. package/dist/providers/tambo-interactables-additional-context.test.js +10 -10
  18. package/dist/providers/tambo-interactables-additional-context.test.js.map +1 -1
  19. package/dist/providers/tambo-registry-provider.test.js +28 -18
  20. package/dist/providers/tambo-registry-provider.test.js.map +1 -1
  21. package/dist/providers/tambo-registry-schema-compat.test.js +57 -28
  22. package/dist/providers/tambo-registry-schema-compat.test.js.map +1 -1
  23. package/dist/providers/tambo-thread-provider.test.js +21 -19
  24. package/dist/providers/tambo-thread-provider.test.js.map +1 -1
  25. package/dist/schema/alias.d.ts +3 -0
  26. package/dist/schema/alias.d.ts.map +1 -0
  27. package/dist/schema/alias.js +6 -0
  28. package/dist/schema/alias.js.map +1 -0
  29. package/dist/schema/json-schema.js +29 -29
  30. package/dist/schema/json-schema.js.map +1 -1
  31. package/dist/schema/schema.d.ts.map +1 -1
  32. package/dist/schema/schema.js +20 -9
  33. package/dist/schema/schema.js.map +1 -1
  34. package/dist/schema/schema.test.js +291 -3
  35. package/dist/schema/schema.test.js.map +1 -1
  36. package/dist/schema/standard-schema.js +8 -8
  37. package/dist/schema/standard-schema.js.map +1 -1
  38. package/dist/schema/validate.test.js +31 -31
  39. package/dist/schema/validate.test.js.map +1 -1
  40. package/dist/schema/zod.d.ts +1 -1
  41. package/dist/schema/zod.d.ts.map +1 -1
  42. package/dist/schema/zod.js +25 -24
  43. package/dist/schema/zod.js.map +1 -1
  44. package/dist/util/registry-validators.d.ts.map +1 -1
  45. package/dist/util/registry-validators.js +40 -0
  46. package/dist/util/registry-validators.js.map +1 -1
  47. package/dist/util/registry-validators.test.js +69 -0
  48. package/dist/util/registry-validators.test.js.map +1 -1
  49. package/dist/util/registry.d.ts +1 -5
  50. package/dist/util/registry.d.ts.map +1 -1
  51. package/dist/util/registry.js +1 -5
  52. package/dist/util/registry.js.map +1 -1
  53. package/dist/util/registry.test.js +80 -67
  54. package/dist/util/registry.test.js.map +1 -1
  55. package/esm/hooks/use-current-message.d.ts +2 -0
  56. package/esm/hooks/use-current-message.d.ts.map +1 -1
  57. package/esm/hooks/use-current-message.js +1 -0
  58. package/esm/hooks/use-current-message.js.map +1 -1
  59. package/esm/hooks/use-current-message.test.js +5 -0
  60. package/esm/hooks/use-current-message.test.js.map +1 -1
  61. package/esm/model/component-metadata.d.ts +2 -2
  62. package/esm/model/component-metadata.d.ts.map +1 -1
  63. package/esm/model/component-metadata.js.map +1 -1
  64. package/esm/providers/tambo-interactable-provider-partial-updates.test.js +1 -1
  65. package/esm/providers/tambo-interactable-provider-partial-updates.test.js.map +1 -1
  66. package/esm/providers/tambo-interactable-provider.d.ts.map +1 -1
  67. package/esm/providers/tambo-interactable-provider.js +17 -11
  68. package/esm/providers/tambo-interactable-provider.js.map +1 -1
  69. package/esm/providers/tambo-interactables-additional-context-edge-cases.test.js +1 -1
  70. package/esm/providers/tambo-interactables-additional-context-edge-cases.test.js.map +1 -1
  71. package/esm/providers/tambo-interactables-additional-context.test.js +1 -1
  72. package/esm/providers/tambo-interactables-additional-context.test.js.map +1 -1
  73. package/esm/providers/tambo-registry-provider.test.js +16 -6
  74. package/esm/providers/tambo-registry-provider.test.js.map +1 -1
  75. package/esm/providers/tambo-registry-schema-compat.test.js +57 -28
  76. package/esm/providers/tambo-registry-schema-compat.test.js.map +1 -1
  77. package/esm/providers/tambo-thread-provider.test.js +8 -6
  78. package/esm/providers/tambo-thread-provider.test.js.map +1 -1
  79. package/esm/schema/alias.d.ts +3 -0
  80. package/esm/schema/alias.d.ts.map +1 -0
  81. package/esm/schema/alias.js +13 -0
  82. package/esm/schema/alias.js.map +1 -0
  83. package/esm/schema/json-schema.js +1 -1
  84. package/esm/schema/json-schema.js.map +1 -1
  85. package/esm/schema/schema.d.ts.map +1 -1
  86. package/esm/schema/schema.js +20 -9
  87. package/esm/schema/schema.js.map +1 -1
  88. package/esm/schema/schema.test.js +258 -3
  89. package/esm/schema/schema.test.js.map +1 -1
  90. package/esm/schema/standard-schema.js +1 -1
  91. package/esm/schema/standard-schema.js.map +1 -1
  92. package/esm/schema/validate.test.js +1 -1
  93. package/esm/schema/validate.test.js.map +1 -1
  94. package/esm/schema/zod.d.ts +1 -1
  95. package/esm/schema/zod.d.ts.map +1 -1
  96. package/esm/schema/zod.js +25 -24
  97. package/esm/schema/zod.js.map +1 -1
  98. package/esm/util/registry-validators.d.ts.map +1 -1
  99. package/esm/util/registry-validators.js +40 -0
  100. package/esm/util/registry-validators.js.map +1 -1
  101. package/esm/util/registry-validators.test.js +69 -0
  102. package/esm/util/registry-validators.test.js.map +1 -1
  103. package/esm/util/registry.d.ts +1 -5
  104. package/esm/util/registry.d.ts.map +1 -1
  105. package/esm/util/registry.js +1 -5
  106. package/esm/util/registry.js.map +1 -1
  107. package/esm/util/registry.test.js +80 -67
  108. package/esm/util/registry.test.js.map +1 -1
  109. package/package.json +1 -2
@@ -37,7 +37,7 @@ var __importStar = (this && this.__importStar) || (function () {
37
37
  Object.defineProperty(exports, "__esModule", { value: true });
38
38
  exports.useCurrentInteractablesSnapshot = exports.useTamboInteractable = exports.TamboInteractableProvider = void 0;
39
39
  const react_1 = __importStar(require("react"));
40
- const zodInternalAlias_1 = require("zodInternalAlias");
40
+ const v3_1 = require("zod/v3");
41
41
  const current_interactables_context_helper_1 = require("../context-helpers/current-interactables-context-helper");
42
42
  const validate_component_name_1 = require("../util/validate-component-name");
43
43
  const tambo_component_provider_1 = require("./tambo-component-provider");
@@ -84,20 +84,20 @@ const TamboInteractableProvider = ({ children, }) => {
84
84
  components: interactableComponents,
85
85
  };
86
86
  },
87
- inputSchema: zodInternalAlias_1.z.tuple([]),
88
- outputSchema: zodInternalAlias_1.z.object({
89
- components: zodInternalAlias_1.z.array(zodInternalAlias_1.z.object({
90
- id: zodInternalAlias_1.z.string(),
91
- name: zodInternalAlias_1.z.string(),
92
- props: zodInternalAlias_1.z.record(zodInternalAlias_1.z.string(), zodInternalAlias_1.z.any()),
93
- propsSchema: zodInternalAlias_1.z.record(zodInternalAlias_1.z.string(), zodInternalAlias_1.z.any()).optional(),
87
+ inputSchema: v3_1.z.object({}),
88
+ outputSchema: v3_1.z.object({
89
+ components: v3_1.z.array(v3_1.z.object({
90
+ id: v3_1.z.string(),
91
+ name: v3_1.z.string(),
92
+ props: v3_1.z.record(v3_1.z.string(), v3_1.z.any()),
93
+ propsSchema: v3_1.z.record(v3_1.z.string(), v3_1.z.any()).optional(),
94
94
  })),
95
95
  }),
96
96
  });
97
97
  registerTool({
98
98
  name: "get_interactable_component_by_id",
99
99
  description: "Get a specific interactable component by its ID",
100
- tool: (componentId) => {
100
+ tool: ({ componentId }) => {
101
101
  const component = interactableComponents.find((c) => c.id === componentId);
102
102
  if (!component) {
103
103
  return {
@@ -114,28 +114,30 @@ const TamboInteractableProvider = ({ children, }) => {
114
114
  },
115
115
  };
116
116
  },
117
- inputSchema: zodInternalAlias_1.z.tuple([zodInternalAlias_1.z.string()]),
118
- outputSchema: zodInternalAlias_1.z.discriminatedUnion("success", [
119
- zodInternalAlias_1.z.object({
120
- success: zodInternalAlias_1.z.literal(true),
121
- component: zodInternalAlias_1.z
117
+ inputSchema: v3_1.z.object({
118
+ componentId: v3_1.z.string().describe("The ID of the component"),
119
+ }),
120
+ outputSchema: v3_1.z.discriminatedUnion("success", [
121
+ v3_1.z.object({
122
+ success: v3_1.z.literal(true),
123
+ component: v3_1.z
122
124
  .object({
123
- id: zodInternalAlias_1.z.string(),
124
- componentName: zodInternalAlias_1.z.string(),
125
- props: zodInternalAlias_1.z.record(zodInternalAlias_1.z.string(), zodInternalAlias_1.z.any()),
125
+ id: v3_1.z.string(),
126
+ componentName: v3_1.z.string(),
127
+ props: v3_1.z.record(v3_1.z.string(), v3_1.z.any()),
126
128
  })
127
129
  .optional(),
128
130
  }),
129
- zodInternalAlias_1.z.object({
130
- success: zodInternalAlias_1.z.literal(false),
131
- error: zodInternalAlias_1.z.string(),
131
+ v3_1.z.object({
132
+ success: v3_1.z.literal(false),
133
+ error: v3_1.z.string(),
132
134
  }),
133
135
  ]),
134
136
  });
135
137
  registerTool({
136
138
  name: "remove_interactable_component",
137
139
  description: "Remove an interactable component from the system",
138
- tool: (componentId) => {
140
+ tool: ({ componentId }) => {
139
141
  const component = interactableComponents.find((c) => c.id === componentId);
140
142
  if (!component) {
141
143
  return {
@@ -154,20 +156,22 @@ const TamboInteractableProvider = ({ children, }) => {
154
156
  },
155
157
  };
156
158
  },
157
- inputSchema: zodInternalAlias_1.z.tuple([zodInternalAlias_1.z.string()]),
158
- outputSchema: zodInternalAlias_1.z.discriminatedUnion("success", [
159
- zodInternalAlias_1.z.object({
160
- success: zodInternalAlias_1.z.literal(true),
161
- componentId: zodInternalAlias_1.z.string(),
162
- removedComponent: zodInternalAlias_1.z.object({
163
- id: zodInternalAlias_1.z.string(),
164
- componentName: zodInternalAlias_1.z.string(),
165
- props: zodInternalAlias_1.z.record(zodInternalAlias_1.z.string(), zodInternalAlias_1.z.any()),
159
+ inputSchema: v3_1.z.object({
160
+ componentId: v3_1.z.string().describe("The ID of the component"),
161
+ }),
162
+ outputSchema: v3_1.z.discriminatedUnion("success", [
163
+ v3_1.z.object({
164
+ success: v3_1.z.literal(true),
165
+ componentId: v3_1.z.string(),
166
+ removedComponent: v3_1.z.object({
167
+ id: v3_1.z.string(),
168
+ componentName: v3_1.z.string(),
169
+ props: v3_1.z.record(v3_1.z.string(), v3_1.z.any()),
166
170
  }),
167
171
  }),
168
- zodInternalAlias_1.z.object({
169
- success: zodInternalAlias_1.z.literal(false),
170
- error: zodInternalAlias_1.z.string(),
172
+ v3_1.z.object({
173
+ success: v3_1.z.literal(false),
174
+ error: v3_1.z.string(),
171
175
  }),
172
176
  ]),
173
177
  });
@@ -211,18 +215,20 @@ const TamboInteractableProvider = ({ children, }) => {
211
215
  "describe" in component.propsSchema &&
212
216
  "partial" in component.propsSchema
213
217
  ? component.propsSchema.partial()
214
- : zodInternalAlias_1.z.object({});
218
+ : v3_1.z.object({});
215
219
  registerTool({
216
220
  name: `${tamboToolNamePart}${component.id}`,
217
221
  description: `Update the props of interactable component ${component.id} (${component.name}). You can provide partial props (only the props you want to change) or complete props (all props). Only the props you specify will be updated.`,
218
- tool: (componentId, newProps) => {
222
+ tool: ({ componentId, newProps }) => {
219
223
  return updateInteractableComponentProps(componentId, newProps);
220
224
  },
221
- inputSchema: zodInternalAlias_1.z.tuple([
222
- zodInternalAlias_1.z.string().describe("The ID of the interactable component to update"),
223
- schemaForArgs.describe("The props to update the component with. You can provide partial props (only the props you want to change) or complete props (all props). Only the props you specify will be updated."),
224
- ]),
225
- outputSchema: zodInternalAlias_1.z.string(),
225
+ inputSchema: v3_1.z.object({
226
+ componentId: v3_1.z
227
+ .string()
228
+ .describe("The ID of the interactable component to update"),
229
+ newProps: schemaForArgs.describe("The props to update the component with. You can provide partial props (only the props you want to change) or complete props (all props). Only the props you specify will be updated."),
230
+ }),
231
+ outputSchema: v3_1.z.string(),
226
232
  });
227
233
  }, [registerTool, updateInteractableComponentProps]);
228
234
  const addInteractableComponent = (0, react_1.useCallback)((component) => {
@@ -1 +1 @@
1
- {"version":3,"file":"tambo-interactable-provider.js","sourceRoot":"","sources":["../../src/providers/tambo-interactable-provider.tsx"],"names":[],"mappings":"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","sourcesContent":["// react-sdk/src/providers/tambo-interactable-provider.tsx\n\"use client\";\nimport React, {\n createContext,\n PropsWithChildren,\n useCallback,\n useContext,\n useEffect,\n useState,\n} from \"react\";\nimport { z } from \"zodInternalAlias\";\nimport { createInteractablesContextHelper } from \"../context-helpers/current-interactables-context-helper\";\nimport {\n TamboInteractableComponent,\n type TamboInteractableContext,\n} from \"../model/tambo-interactable\";\nimport { assertValidName } from \"../util/validate-component-name\";\nimport { useTamboComponent } from \"./tambo-component-provider\";\nimport { useTamboContextHelpers } from \"./tambo-context-helpers-provider\";\n\nconst TamboInteractableContext = createContext<TamboInteractableContext>({\n interactableComponents: [],\n addInteractableComponent: () => \"\",\n removeInteractableComponent: () => {},\n updateInteractableComponentProps: () => \"\",\n getInteractableComponent: () => undefined,\n getInteractableComponentsByName: () => [],\n clearAllInteractableComponents: () => {},\n});\n\n/**\n * The TamboInteractableProvider manages a list of components that are currently\n * interactable, allowing tambo to interact with them by updating their props. It also registers tools\n * for Tambo to perform CRUD operations on the components list.\n * @param props - The props for the TamboInteractableProvider\n * @param props.children - The children to wrap\n * @returns The TamboInteractableProvider component\n */\nexport const TamboInteractableProvider: React.FC<PropsWithChildren> = ({\n children,\n}) => {\n const [interactableComponents, setInteractableComponents] = useState<\n TamboInteractableComponent[]\n >([]);\n const { registerTool } = useTamboComponent();\n const { addContextHelper, removeContextHelper } = useTamboContextHelpers();\n\n // Create a stable context helper function\n const contextHelper = useCallback(() => {\n return createInteractablesContextHelper(() => interactableComponents)();\n }, [interactableComponents]);\n\n // Register the default interactables context helper\n useEffect(() => {\n addContextHelper(\"interactables\", contextHelper);\n\n return () => {\n removeContextHelper(\"interactables\");\n };\n }, [contextHelper, addContextHelper, removeContextHelper]);\n\n useEffect(() => {\n if (interactableComponents.length > 0) {\n registerTool({\n name: \"get_all_interactable_components\",\n description:\n \"Only use this tool if the user is asking about interactable components.Get all currently interactable components with their details including their current props. These are components that you can interact with on behalf of the user.\",\n tool: () => {\n return {\n components: interactableComponents,\n };\n },\n inputSchema: z.tuple([]),\n outputSchema: z.object({\n components: z.array(\n z.object({\n id: z.string(),\n name: z.string(),\n props: z.record(z.string(), z.any()),\n propsSchema: z.record(z.string(), z.any()).optional(),\n }),\n ),\n }),\n });\n\n registerTool({\n name: \"get_interactable_component_by_id\",\n description: \"Get a specific interactable component by its ID\",\n tool: (componentId: string) => {\n const component = interactableComponents.find(\n (c) => c.id === componentId,\n );\n\n if (!component) {\n return {\n success: false,\n error: `Component with ID ${componentId} not found`,\n } as const;\n }\n\n return {\n success: true,\n component: {\n id: component.id,\n componentName: component.name,\n props: component.props,\n },\n } as const;\n },\n inputSchema: z.tuple([z.string()]),\n outputSchema: z.discriminatedUnion(\"success\", [\n z.object({\n success: z.literal(true),\n component: z\n .object({\n id: z.string(),\n componentName: z.string(),\n props: z.record(z.string(), z.any()),\n })\n .optional(),\n }),\n z.object({\n success: z.literal(false),\n error: z.string(),\n }),\n ]),\n });\n\n registerTool({\n name: \"remove_interactable_component\",\n description: \"Remove an interactable component from the system\",\n tool: (componentId: string) => {\n const component = interactableComponents.find(\n (c) => c.id === componentId,\n );\n\n if (!component) {\n return {\n success: false,\n error: `Component with ID ${componentId} not found`,\n } as const;\n }\n\n setInteractableComponents((prev) =>\n prev.filter((c) => c.id !== componentId),\n );\n\n return {\n success: true,\n componentId,\n removedComponent: {\n id: component.id,\n componentName: component.name,\n props: component.props,\n },\n } as const;\n },\n inputSchema: z.tuple([z.string()]),\n outputSchema: z.discriminatedUnion(\"success\", [\n z.object({\n success: z.literal(true),\n componentId: z.string(),\n removedComponent: z.object({\n id: z.string(),\n componentName: z.string(),\n props: z.record(z.string(), z.any()),\n }),\n }),\n z.object({\n success: z.literal(false),\n error: z.string(),\n }),\n ]),\n });\n }\n }, [interactableComponents, registerTool]);\n\n const updateInteractableComponentProps = useCallback(\n (id: string, newProps: Record<string, any>): string => {\n if (!newProps || Object.keys(newProps).length === 0) {\n return `Warning: No props provided for component with ID ${id}.`;\n }\n\n setInteractableComponents((prev) => {\n const component = prev.find((c) => c.id === id);\n if (!component) {\n return prev;\n }\n\n // Compare props shallowly\n const propsChanged = Object.entries(newProps).some(([key, value]) => {\n return component.props[key] !== value;\n });\n\n if (!propsChanged) {\n return prev; // unchanged\n }\n\n // Apply partial update\n const updated = {\n ...component,\n props: { ...component.props, ...newProps },\n };\n\n const updatedComponents = [...prev];\n const idx = prev.findIndex((c) => c.id === id);\n updatedComponents[idx] = updated;\n\n return updatedComponents;\n });\n\n return \"Updated successfully\";\n },\n [],\n );\n\n const registerInteractableComponentUpdateTool = useCallback(\n (component: TamboInteractableComponent, maxNameLength = 60) => {\n const tamboToolNamePart = `update_component_`;\n const availableLength = maxNameLength - tamboToolNamePart.length;\n if (component.id.length > availableLength) {\n throw new Error(\n `Interactable component id ${component.id} is too long. It must be less than ${availableLength} characters.`,\n );\n }\n\n const schemaForArgs =\n typeof component.propsSchema === \"object\" &&\n \"describe\" in component.propsSchema &&\n \"partial\" in component.propsSchema\n ? (component.propsSchema as any).partial()\n : z.object({});\n\n registerTool({\n name: `${tamboToolNamePart}${component.id}`,\n description: `Update the props of interactable component ${component.id} (${component.name}). You can provide partial props (only the props you want to change) or complete props (all props). Only the props you specify will be updated.`,\n tool: (componentId: string, newProps?: any) => {\n return updateInteractableComponentProps(componentId, newProps);\n },\n inputSchema: z.tuple([\n z.string().describe(\"The ID of the interactable component to update\"),\n schemaForArgs.describe(\n \"The props to update the component with. You can provide partial props (only the props you want to change) or complete props (all props). Only the props you specify will be updated.\",\n ),\n ]),\n outputSchema: z.string(),\n });\n },\n [registerTool, updateInteractableComponentProps],\n );\n\n const addInteractableComponent = useCallback(\n (\n component: Omit<TamboInteractableComponent, \"id\" | \"createdAt\">,\n ): string => {\n // Validate component name\n assertValidName(component.name, \"component\");\n\n // Add a random part to the component name to make it unique when using multiple instances of the same component.\n const tamboGeneratedNamePart = `-${Math.random().toString(36).slice(2, 5)}`;\n const id = `${component.name}${tamboGeneratedNamePart}`;\n const newComponent: TamboInteractableComponent = {\n ...component,\n id,\n };\n\n registerInteractableComponentUpdateTool(newComponent);\n\n setInteractableComponents((prev) => {\n return [...prev, newComponent];\n });\n\n return id;\n },\n [registerInteractableComponentUpdateTool],\n );\n\n const removeInteractableComponent = useCallback((id: string) => {\n setInteractableComponents((prev) => prev.filter((c) => c.id !== id));\n }, []);\n\n const getInteractableComponent = useCallback(\n (id: string) => {\n return interactableComponents.find((c) => c.id === id);\n },\n [interactableComponents],\n );\n\n const getInteractableComponentsByName = useCallback(\n (componentName: string) => {\n return interactableComponents.filter((c) => c.name === componentName);\n },\n [interactableComponents],\n );\n\n const clearAllInteractableComponents = useCallback(() => {\n setInteractableComponents([]);\n }, []);\n\n const value: TamboInteractableContext = {\n interactableComponents,\n addInteractableComponent,\n removeInteractableComponent,\n updateInteractableComponentProps,\n getInteractableComponent,\n getInteractableComponentsByName,\n clearAllInteractableComponents,\n };\n\n return (\n <TamboInteractableContext.Provider value={value}>\n {children}\n </TamboInteractableContext.Provider>\n );\n};\n\n/**\n * The useTamboInteractable hook provides access to the interactable component\n * management functions.\n * @returns The interactable component management functions\n */\nexport const useTamboInteractable = () => {\n return useContext(TamboInteractableContext);\n};\n\n/**\n * Hook to get a cloned snapshot of the current interactables.\n * Returns a shallow copy of the array with cloned items and props to prevent\n * external mutation from affecting internal state.\n * @returns The current interactables snapshot (cloned).\n */\nexport const useCurrentInteractablesSnapshot = () => {\n const { interactableComponents } = useTamboInteractable();\n // Clone the array and each item/props to prevent mutation\n const copy = interactableComponents.map((c) => ({\n ...c,\n props: { ...c.props },\n }));\n\n return copy;\n};\n"]}
1
+ {"version":3,"file":"tambo-interactable-provider.js","sourceRoot":"","sources":["../../src/providers/tambo-interactable-provider.tsx"],"names":[],"mappings":"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","sourcesContent":["// react-sdk/src/providers/tambo-interactable-provider.tsx\n\"use client\";\nimport React, {\n createContext,\n PropsWithChildren,\n useCallback,\n useContext,\n useEffect,\n useState,\n} from \"react\";\nimport { z } from \"zod/v3\";\nimport { createInteractablesContextHelper } from \"../context-helpers/current-interactables-context-helper\";\nimport {\n TamboInteractableComponent,\n type TamboInteractableContext,\n} from \"../model/tambo-interactable\";\nimport { assertValidName } from \"../util/validate-component-name\";\nimport { useTamboComponent } from \"./tambo-component-provider\";\nimport { useTamboContextHelpers } from \"./tambo-context-helpers-provider\";\n\nconst TamboInteractableContext = createContext<TamboInteractableContext>({\n interactableComponents: [],\n addInteractableComponent: () => \"\",\n removeInteractableComponent: () => {},\n updateInteractableComponentProps: () => \"\",\n getInteractableComponent: () => undefined,\n getInteractableComponentsByName: () => [],\n clearAllInteractableComponents: () => {},\n});\n\n/**\n * The TamboInteractableProvider manages a list of components that are currently\n * interactable, allowing tambo to interact with them by updating their props. It also registers tools\n * for Tambo to perform CRUD operations on the components list.\n * @param props - The props for the TamboInteractableProvider\n * @param props.children - The children to wrap\n * @returns The TamboInteractableProvider component\n */\nexport const TamboInteractableProvider: React.FC<PropsWithChildren> = ({\n children,\n}) => {\n const [interactableComponents, setInteractableComponents] = useState<\n TamboInteractableComponent[]\n >([]);\n const { registerTool } = useTamboComponent();\n const { addContextHelper, removeContextHelper } = useTamboContextHelpers();\n\n // Create a stable context helper function\n const contextHelper = useCallback(() => {\n return createInteractablesContextHelper(() => interactableComponents)();\n }, [interactableComponents]);\n\n // Register the default interactables context helper\n useEffect(() => {\n addContextHelper(\"interactables\", contextHelper);\n\n return () => {\n removeContextHelper(\"interactables\");\n };\n }, [contextHelper, addContextHelper, removeContextHelper]);\n\n useEffect(() => {\n if (interactableComponents.length > 0) {\n registerTool({\n name: \"get_all_interactable_components\",\n description:\n \"Only use this tool if the user is asking about interactable components.Get all currently interactable components with their details including their current props. These are components that you can interact with on behalf of the user.\",\n tool: () => {\n return {\n components: interactableComponents,\n };\n },\n inputSchema: z.object({}),\n outputSchema: z.object({\n components: z.array(\n z.object({\n id: z.string(),\n name: z.string(),\n props: z.record(z.string(), z.any()),\n propsSchema: z.record(z.string(), z.any()).optional(),\n }),\n ),\n }),\n });\n\n registerTool({\n name: \"get_interactable_component_by_id\",\n description: \"Get a specific interactable component by its ID\",\n tool: ({ componentId }) => {\n const component = interactableComponents.find(\n (c) => c.id === componentId,\n );\n\n if (!component) {\n return {\n success: false,\n error: `Component with ID ${componentId} not found`,\n } as const;\n }\n\n return {\n success: true,\n component: {\n id: component.id,\n componentName: component.name,\n props: component.props,\n },\n } as const;\n },\n inputSchema: z.object({\n componentId: z.string().describe(\"The ID of the component\"),\n }),\n outputSchema: z.discriminatedUnion(\"success\", [\n z.object({\n success: z.literal(true),\n component: z\n .object({\n id: z.string(),\n componentName: z.string(),\n props: z.record(z.string(), z.any()),\n })\n .optional(),\n }),\n z.object({\n success: z.literal(false),\n error: z.string(),\n }),\n ]),\n });\n\n registerTool({\n name: \"remove_interactable_component\",\n description: \"Remove an interactable component from the system\",\n tool: ({ componentId }) => {\n const component = interactableComponents.find(\n (c) => c.id === componentId,\n );\n\n if (!component) {\n return {\n success: false,\n error: `Component with ID ${componentId} not found`,\n } as const;\n }\n\n setInteractableComponents((prev) =>\n prev.filter((c) => c.id !== componentId),\n );\n\n return {\n success: true,\n componentId,\n removedComponent: {\n id: component.id,\n componentName: component.name,\n props: component.props,\n },\n } as const;\n },\n inputSchema: z.object({\n componentId: z.string().describe(\"The ID of the component\"),\n }),\n outputSchema: z.discriminatedUnion(\"success\", [\n z.object({\n success: z.literal(true),\n componentId: z.string(),\n removedComponent: z.object({\n id: z.string(),\n componentName: z.string(),\n props: z.record(z.string(), z.any()),\n }),\n }),\n z.object({\n success: z.literal(false),\n error: z.string(),\n }),\n ]),\n });\n }\n }, [interactableComponents, registerTool]);\n\n const updateInteractableComponentProps = useCallback(\n (id: string, newProps: Record<string, any>): string => {\n if (!newProps || Object.keys(newProps).length === 0) {\n return `Warning: No props provided for component with ID ${id}.`;\n }\n\n setInteractableComponents((prev) => {\n const component = prev.find((c) => c.id === id);\n if (!component) {\n return prev;\n }\n\n // Compare props shallowly\n const propsChanged = Object.entries(newProps).some(([key, value]) => {\n return component.props[key] !== value;\n });\n\n if (!propsChanged) {\n return prev; // unchanged\n }\n\n // Apply partial update\n const updated = {\n ...component,\n props: { ...component.props, ...newProps },\n };\n\n const updatedComponents = [...prev];\n const idx = prev.findIndex((c) => c.id === id);\n updatedComponents[idx] = updated;\n\n return updatedComponents;\n });\n\n return \"Updated successfully\";\n },\n [],\n );\n\n const registerInteractableComponentUpdateTool = useCallback(\n (component: TamboInteractableComponent, maxNameLength = 60) => {\n const tamboToolNamePart = `update_component_`;\n const availableLength = maxNameLength - tamboToolNamePart.length;\n if (component.id.length > availableLength) {\n throw new Error(\n `Interactable component id ${component.id} is too long. It must be less than ${availableLength} characters.`,\n );\n }\n\n const schemaForArgs =\n typeof component.propsSchema === \"object\" &&\n \"describe\" in component.propsSchema &&\n \"partial\" in component.propsSchema\n ? (component.propsSchema as any).partial()\n : z.object({});\n\n registerTool({\n name: `${tamboToolNamePart}${component.id}`,\n description: `Update the props of interactable component ${component.id} (${component.name}). You can provide partial props (only the props you want to change) or complete props (all props). Only the props you specify will be updated.`,\n tool: ({ componentId, newProps }) => {\n return updateInteractableComponentProps(componentId, newProps);\n },\n inputSchema: z.object({\n componentId: z\n .string()\n .describe(\"The ID of the interactable component to update\"),\n newProps: schemaForArgs.describe(\n \"The props to update the component with. You can provide partial props (only the props you want to change) or complete props (all props). Only the props you specify will be updated.\",\n ),\n }),\n outputSchema: z.string(),\n });\n },\n [registerTool, updateInteractableComponentProps],\n );\n\n const addInteractableComponent = useCallback(\n (\n component: Omit<TamboInteractableComponent, \"id\" | \"createdAt\">,\n ): string => {\n // Validate component name\n assertValidName(component.name, \"component\");\n\n // Add a random part to the component name to make it unique when using multiple instances of the same component.\n const tamboGeneratedNamePart = `-${Math.random().toString(36).slice(2, 5)}`;\n const id = `${component.name}${tamboGeneratedNamePart}`;\n const newComponent: TamboInteractableComponent = {\n ...component,\n id,\n };\n\n registerInteractableComponentUpdateTool(newComponent);\n\n setInteractableComponents((prev) => {\n return [...prev, newComponent];\n });\n\n return id;\n },\n [registerInteractableComponentUpdateTool],\n );\n\n const removeInteractableComponent = useCallback((id: string) => {\n setInteractableComponents((prev) => prev.filter((c) => c.id !== id));\n }, []);\n\n const getInteractableComponent = useCallback(\n (id: string) => {\n return interactableComponents.find((c) => c.id === id);\n },\n [interactableComponents],\n );\n\n const getInteractableComponentsByName = useCallback(\n (componentName: string) => {\n return interactableComponents.filter((c) => c.name === componentName);\n },\n [interactableComponents],\n );\n\n const clearAllInteractableComponents = useCallback(() => {\n setInteractableComponents([]);\n }, []);\n\n const value: TamboInteractableContext = {\n interactableComponents,\n addInteractableComponent,\n removeInteractableComponent,\n updateInteractableComponentProps,\n getInteractableComponent,\n getInteractableComponentsByName,\n clearAllInteractableComponents,\n };\n\n return (\n <TamboInteractableContext.Provider value={value}>\n {children}\n </TamboInteractableContext.Provider>\n );\n};\n\n/**\n * The useTamboInteractable hook provides access to the interactable component\n * management functions.\n * @returns The interactable component management functions\n */\nexport const useTamboInteractable = () => {\n return useContext(TamboInteractableContext);\n};\n\n/**\n * Hook to get a cloned snapshot of the current interactables.\n * Returns a shallow copy of the array with cloned items and props to prevent\n * external mutation from affecting internal state.\n * @returns The current interactables snapshot (cloned).\n */\nexport const useCurrentInteractablesSnapshot = () => {\n const { interactableComponents } = useTamboInteractable();\n // Clone the array and each item/props to prevent mutation\n const copy = interactableComponents.map((c) => ({\n ...c,\n props: { ...c.props },\n }));\n\n return copy;\n};\n"]}
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const react_1 = require("@testing-library/react");
7
7
  const react_2 = __importDefault(require("react"));
8
- const zodInternalAlias_1 = require("zodInternalAlias");
8
+ const v4_1 = require("zod/v4");
9
9
  const with_tambo_interactable_1 = require("../hoc/with-tambo-interactable");
10
10
  const tambo_context_helpers_provider_1 = require("./tambo-context-helpers-provider");
11
11
  const tambo_interactable_provider_1 = require("./tambo-interactable-provider");
@@ -62,7 +62,7 @@ describe("Interactables AdditionalContext - Edge Cases & Advanced Scenarios", ()
62
62
  const InteractableNote = (0, with_tambo_interactable_1.withTamboInteractable)(Note, {
63
63
  componentName: "Note",
64
64
  description: "A note",
65
- propsSchema: zodInternalAlias_1.z.object({ title: zodInternalAlias_1.z.string() }),
65
+ propsSchema: v4_1.z.object({ title: v4_1.z.string() }),
66
66
  });
67
67
  let capturedContexts = [];
68
68
  const TestComponent = () => {
@@ -116,9 +116,9 @@ describe("Interactables AdditionalContext - Edge Cases & Advanced Scenarios", ()
116
116
  const InteractableCounter = (0, with_tambo_interactable_1.withTamboInteractable)(Counter, {
117
117
  componentName: "Counter",
118
118
  description: "A counter component",
119
- propsSchema: zodInternalAlias_1.z.object({
120
- count: zodInternalAlias_1.z.number(),
121
- label: zodInternalAlias_1.z.string().optional(),
119
+ propsSchema: v4_1.z.object({
120
+ count: v4_1.z.number(),
121
+ label: v4_1.z.string().optional(),
122
122
  }),
123
123
  });
124
124
  let capturedContexts = [];
@@ -174,7 +174,7 @@ describe("Interactables AdditionalContext - Edge Cases & Advanced Scenarios", ()
174
174
  const InteractableNote = (0, with_tambo_interactable_1.withTamboInteractable)(Note, {
175
175
  componentName: "Note",
176
176
  description: "A note",
177
- propsSchema: zodInternalAlias_1.z.object({ title: zodInternalAlias_1.z.string() }),
177
+ propsSchema: v4_1.z.object({ title: v4_1.z.string() }),
178
178
  });
179
179
  let outerContexts = [];
180
180
  let innerContexts = [];
@@ -239,7 +239,7 @@ describe("Interactables AdditionalContext - Edge Cases & Advanced Scenarios", ()
239
239
  const InteractableNote = (0, with_tambo_interactable_1.withTamboInteractable)(Note, {
240
240
  componentName: "Note",
241
241
  description: "A note",
242
- propsSchema: zodInternalAlias_1.z.object({ title: zodInternalAlias_1.z.string() }),
242
+ propsSchema: v4_1.z.object({ title: v4_1.z.string() }),
243
243
  });
244
244
  let capturedContexts = [];
245
245
  const TestComponent = () => {
@@ -289,7 +289,7 @@ describe("Interactables AdditionalContext - Edge Cases & Advanced Scenarios", ()
289
289
  const InteractableNote = (0, with_tambo_interactable_1.withTamboInteractable)(Note, {
290
290
  componentName: "Note",
291
291
  description: "A note",
292
- propsSchema: zodInternalAlias_1.z.object({ title: zodInternalAlias_1.z.string() }),
292
+ propsSchema: v4_1.z.object({ title: v4_1.z.string() }),
293
293
  });
294
294
  // Mock console.error to capture error logs
295
295
  const consoleSpy = jest
@@ -1 +1 @@
1
- {"version":3,"file":"tambo-interactables-additional-context-edge-cases.test.js","sourceRoot":"","sources":["../../src/providers/tambo-interactables-additional-context-edge-cases.test.tsx"],"names":[],"mappings":"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","sourcesContent":["import { render, waitFor } from \"@testing-library/react\";\nimport React from \"react\";\nimport { z } from \"zodInternalAlias\";\nimport { withTamboInteractable } from \"../hoc/with-tambo-interactable\";\nimport {\n TamboContextHelpersProvider,\n useTamboContextHelpers,\n} from \"./tambo-context-helpers-provider\";\nimport { TamboInteractableProvider } from \"./tambo-interactable-provider\";\nimport { TamboStubProvider } from \"./tambo-stubs\";\n\nfunction wrapperWithProviders(children: React.ReactNode) {\n const thread = {\n id: \"t-1\",\n projectId: \"p-1\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n messages: [],\n metadata: {},\n } as any;\n\n return (\n <TamboStubProvider\n thread={thread}\n registerTool={() => {}}\n registerTools={() => {}}\n registerComponent={() => {}}\n addToolAssociation={() => {}}\n >\n <TamboContextHelpersProvider>{children}</TamboContextHelpersProvider>\n </TamboStubProvider>\n );\n}\n\ndescribe(\"Interactables AdditionalContext - Edge Cases & Advanced Scenarios\", () => {\n test(\"handles components without propsSchema gracefully\", async () => {\n const SimpleComponent: React.FC<{ text: string }> = ({ text }) => (\n <div>{text}</div>\n );\n\n const InteractableSimpleComponent = withTamboInteractable(SimpleComponent, {\n componentName: \"SimpleComponent\",\n description: \"A component without schema\",\n // No propsSchema provided\n });\n\n let capturedContexts: any[] = [];\n const TestComponent = () => {\n const { getAdditionalContext } = useTamboContextHelpers();\n\n React.useEffect(() => {\n let mounted = true;\n void getAdditionalContext().then((contexts) => {\n if (mounted) {\n capturedContexts = contexts;\n }\n });\n return () => {\n mounted = false;\n };\n }, [getAdditionalContext]);\n\n return <div data-testid=\"ready\">ready</div>;\n };\n\n const { getByTestId } = render(\n wrapperWithProviders(\n <TamboInteractableProvider>\n <InteractableSimpleComponent text=\"test\" />\n <TestComponent />\n </TamboInteractableProvider>,\n ),\n );\n\n await waitFor(() => {\n expect(getByTestId(\"ready\")).toBeInTheDocument();\n const entry = capturedContexts.find(\n (c: any) => c.name === \"interactables\",\n );\n expect(entry).toBeDefined();\n const component = entry!.context.components[0];\n expect(component.propsSchema).toBe(\"Not specified\");\n });\n });\n\n test(\"handles component unmounting and remounting correctly\", async () => {\n const Note: React.FC<{ title: string }> = ({ title }) => <div>{title}</div>;\n const InteractableNote = withTamboInteractable(Note, {\n componentName: \"Note\",\n description: \"A note\",\n propsSchema: z.object({ title: z.string() }),\n });\n\n let capturedContexts: any[] = [];\n const TestComponent = () => {\n const { getAdditionalContext } = useTamboContextHelpers();\n\n React.useEffect(() => {\n let mounted = true;\n const interval = setInterval(() => {\n void getAdditionalContext().then((contexts) => {\n if (mounted) {\n capturedContexts = contexts;\n }\n });\n }, 50);\n return () => {\n mounted = false;\n clearInterval(interval);\n };\n }, [getAdditionalContext]);\n\n return <div data-testid=\"ready\">ready</div>;\n };\n\n const Host = () => {\n const [showNote, setShowNote] = React.useState(true);\n\n React.useEffect(() => {\n // Toggle the note on/off to test unmounting\n const timeout = setTimeout(() => setShowNote(false), 100);\n const timeout2 = setTimeout(() => setShowNote(true), 200);\n return () => {\n clearTimeout(timeout);\n clearTimeout(timeout2);\n };\n }, []);\n\n return (\n <TamboInteractableProvider>\n {showNote && <InteractableNote title=\"dynamic note\" />}\n <TestComponent />\n </TamboInteractableProvider>\n );\n };\n\n const { getByTestId } = render(wrapperWithProviders(<Host />));\n\n await waitFor(\n () => {\n expect(getByTestId(\"ready\")).toBeInTheDocument();\n },\n { timeout: 1000 },\n );\n\n // Eventually should show the note again\n await waitFor(\n () => {\n const entry = capturedContexts.find(\n (c: any) => c.name === \"interactables\",\n );\n expect(entry?.context?.components).toHaveLength(1);\n },\n { timeout: 1000 },\n );\n });\n\n test(\"context helper updates when props change from parent\", async () => {\n const Counter: React.FC<{ count: number; label?: string }> = ({\n count,\n label = \"Count\",\n }) => (\n <div>\n {label}: {count}\n </div>\n );\n\n const InteractableCounter = withTamboInteractable(Counter, {\n componentName: \"Counter\",\n description: \"A counter component\",\n propsSchema: z.object({\n count: z.number(),\n label: z.string().optional(),\n }),\n });\n\n let capturedContexts: any[] = [];\n const TestComponent = () => {\n const { getAdditionalContext } = useTamboContextHelpers();\n\n React.useEffect(() => {\n let mounted = true;\n const interval = setInterval(() => {\n void getAdditionalContext().then((contexts) => {\n if (mounted) {\n capturedContexts = contexts;\n }\n });\n }, 50);\n return () => {\n mounted = false;\n clearInterval(interval);\n };\n }, [getAdditionalContext]);\n\n return <div data-testid=\"ready\">ready</div>;\n };\n\n const Host = () => {\n const [count, setCount] = React.useState(0);\n const [label, setLabel] = React.useState(\"Items\");\n\n React.useEffect(() => {\n const timeout1 = setTimeout(() => setCount(5), 100);\n const timeout2 = setTimeout(() => setLabel(\"Updated Items\"), 200);\n return () => {\n clearTimeout(timeout1);\n clearTimeout(timeout2);\n };\n }, []);\n\n return (\n <TamboInteractableProvider>\n <InteractableCounter count={count} label={label} />\n <TestComponent />\n </TamboInteractableProvider>\n );\n };\n\n const { getByTestId } = render(wrapperWithProviders(<Host />));\n\n await waitFor(() => {\n expect(getByTestId(\"ready\")).toBeInTheDocument();\n });\n\n // Wait for updates to propagate\n await waitFor(\n () => {\n const entry = capturedContexts.find(\n (c: any) => c.name === \"interactables\",\n );\n if (entry?.context?.components?.[0]) {\n const props = entry.context.components[0].props;\n expect(props.count).toBe(5);\n expect(props.label).toBe(\"Updated Items\");\n }\n },\n { timeout: 1000 },\n );\n });\n\n test(\"multiple providers with nested context helpers work correctly\", async () => {\n const Note: React.FC<{ title: string }> = ({ title }) => <div>{title}</div>;\n const InteractableNote = withTamboInteractable(Note, {\n componentName: \"Note\",\n description: \"A note\",\n propsSchema: z.object({ title: z.string() }),\n });\n\n let outerContexts: any[] = [];\n let innerContexts: any[] = [];\n\n const OuterTestComponent = () => {\n const { getAdditionalContext } = useTamboContextHelpers();\n\n React.useEffect(() => {\n let mounted = true;\n void getAdditionalContext().then((contexts) => {\n if (mounted) {\n outerContexts = contexts;\n }\n });\n return () => {\n mounted = false;\n };\n }, [getAdditionalContext]);\n\n return <div data-testid=\"outer-ready\">outer ready</div>;\n };\n\n const InnerTestComponent = () => {\n const { getAdditionalContext } = useTamboContextHelpers();\n\n React.useEffect(() => {\n let mounted = true;\n void getAdditionalContext().then((contexts) => {\n if (mounted) {\n innerContexts = contexts;\n }\n });\n return () => {\n mounted = false;\n };\n }, [getAdditionalContext]);\n\n return <div data-testid=\"inner-ready\">inner ready</div>;\n };\n\n const { getByTestId } = render(\n wrapperWithProviders(\n <TamboInteractableProvider>\n <InteractableNote title=\"outer note\" />\n <OuterTestComponent />\n <TamboContextHelpersProvider\n contextHelpers={{\n customContext: () => ({ custom: \"inner\" }),\n }}\n >\n <TamboInteractableProvider>\n <InteractableNote title=\"inner note\" />\n <InnerTestComponent />\n </TamboInteractableProvider>\n </TamboContextHelpersProvider>\n </TamboInteractableProvider>,\n ),\n );\n\n await waitFor(() => {\n expect(getByTestId(\"outer-ready\")).toBeInTheDocument();\n expect(getByTestId(\"inner-ready\")).toBeInTheDocument();\n });\n\n await waitFor(() => {\n // Outer context should have outer note\n const outerEntry = outerContexts.find(\n (c: any) => c.name === \"interactables\",\n );\n expect(outerEntry?.context?.components).toHaveLength(1);\n expect(outerEntry?.context?.components[0]?.props?.title).toBe(\n \"outer note\",\n );\n\n // Inner context should have inner note and custom context\n const innerEntry = innerContexts.find(\n (c: any) => c.name === \"interactables\",\n );\n expect(innerEntry?.context?.components).toHaveLength(1);\n expect(innerEntry?.context?.components[0]?.props?.title).toBe(\n \"inner note\",\n );\n\n const customEntry = innerContexts.find(\n (c: any) => c.name === \"customContext\",\n );\n expect(customEntry?.context).toEqual({ custom: \"inner\" });\n });\n });\n\n test(\"provider cleanup removes helper when last provider unmounts\", async () => {\n const Note: React.FC<{ title: string }> = ({ title }) => <div>{title}</div>;\n const InteractableNote = withTamboInteractable(Note, {\n componentName: \"Note\",\n description: \"A note\",\n propsSchema: z.object({ title: z.string() }),\n });\n\n let capturedContexts: any[] = [];\n const TestComponent = () => {\n const { getAdditionalContext } = useTamboContextHelpers();\n\n React.useEffect(() => {\n let mounted = true;\n const interval = setInterval(() => {\n void getAdditionalContext().then((contexts) => {\n if (mounted) {\n capturedContexts = contexts;\n }\n });\n }, 50);\n return () => {\n mounted = false;\n clearInterval(interval);\n };\n }, [getAdditionalContext]);\n\n return <div data-testid=\"ready\">ready</div>;\n };\n\n const Host = () => {\n const [showProvider, setShowProvider] = React.useState(true);\n\n React.useEffect(() => {\n const timeout = setTimeout(() => setShowProvider(false), 200);\n return () => clearTimeout(timeout);\n }, []);\n\n return (\n <>\n {showProvider && (\n <TamboInteractableProvider>\n <InteractableNote title=\"will disappear\" />\n </TamboInteractableProvider>\n )}\n <TestComponent />\n </>\n );\n };\n\n const { getByTestId } = render(wrapperWithProviders(<Host />));\n\n // Initially should have the context\n await waitFor(() => {\n expect(getByTestId(\"ready\")).toBeInTheDocument();\n const entry = capturedContexts.find(\n (c: any) => c.name === \"interactables\",\n );\n expect(entry).toBeDefined();\n });\n\n // After provider unmounts, context should be gone\n await waitFor(\n () => {\n const entry = capturedContexts.find(\n (c: any) => c.name === \"interactables\",\n );\n expect(entry).toBeUndefined();\n },\n { timeout: 1000 },\n );\n });\n\n test(\"helper error handling doesn't crash the system\", async () => {\n const Note: React.FC<{ title: string }> = ({ title }) => <div>{title}</div>;\n const InteractableNote = withTamboInteractable(Note, {\n componentName: \"Note\",\n description: \"A note\",\n propsSchema: z.object({ title: z.string() }),\n });\n\n // Mock console.error to capture error logs\n const consoleSpy = jest\n .spyOn(console, \"error\")\n .mockImplementation(() => {});\n\n let capturedContexts: any[] = [];\n const TestComponent = () => {\n const { getAdditionalContext, addContextHelper } =\n useTamboContextHelpers();\n\n React.useEffect(() => {\n // Add a helper that throws an error\n addContextHelper(\"errorHelper\", () => {\n throw new Error(\"Test error in helper\");\n });\n }, [addContextHelper]);\n\n React.useEffect(() => {\n let mounted = true;\n getAdditionalContext()\n .then((contexts) => {\n if (mounted) {\n capturedContexts = contexts;\n }\n })\n .catch(() => {\n // Should not reach here - errors should be handled gracefully\n });\n return () => {\n mounted = false;\n };\n }, [getAdditionalContext]);\n\n return <div data-testid=\"ready\">ready</div>;\n };\n\n const { getByTestId } = render(\n wrapperWithProviders(\n <TamboInteractableProvider>\n <InteractableNote title=\"test\" />\n <TestComponent />\n </TamboInteractableProvider>,\n ),\n );\n\n await waitFor(() => {\n expect(getByTestId(\"ready\")).toBeInTheDocument();\n // Should still have the interactables context despite the error\n const entry = capturedContexts.find(\n (c: any) => c.name === \"interactables\",\n );\n expect(entry).toBeDefined();\n\n // Error helper should not be present (filtered out)\n const errorEntry = capturedContexts.find(\n (c: any) => c.name === \"errorHelper\",\n );\n expect(errorEntry).toBeUndefined();\n });\n\n consoleSpy.mockRestore();\n });\n});\n"]}
1
+ {"version":3,"file":"tambo-interactables-additional-context-edge-cases.test.js","sourceRoot":"","sources":["../../src/providers/tambo-interactables-additional-context-edge-cases.test.tsx"],"names":[],"mappings":"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","sourcesContent":["import { render, waitFor } from \"@testing-library/react\";\nimport React from \"react\";\nimport { z } from \"zod/v4\";\nimport { withTamboInteractable } from \"../hoc/with-tambo-interactable\";\nimport {\n TamboContextHelpersProvider,\n useTamboContextHelpers,\n} from \"./tambo-context-helpers-provider\";\nimport { TamboInteractableProvider } from \"./tambo-interactable-provider\";\nimport { TamboStubProvider } from \"./tambo-stubs\";\n\nfunction wrapperWithProviders(children: React.ReactNode) {\n const thread = {\n id: \"t-1\",\n projectId: \"p-1\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n messages: [],\n metadata: {},\n } as any;\n\n return (\n <TamboStubProvider\n thread={thread}\n registerTool={() => {}}\n registerTools={() => {}}\n registerComponent={() => {}}\n addToolAssociation={() => {}}\n >\n <TamboContextHelpersProvider>{children}</TamboContextHelpersProvider>\n </TamboStubProvider>\n );\n}\n\ndescribe(\"Interactables AdditionalContext - Edge Cases & Advanced Scenarios\", () => {\n test(\"handles components without propsSchema gracefully\", async () => {\n const SimpleComponent: React.FC<{ text: string }> = ({ text }) => (\n <div>{text}</div>\n );\n\n const InteractableSimpleComponent = withTamboInteractable(SimpleComponent, {\n componentName: \"SimpleComponent\",\n description: \"A component without schema\",\n // No propsSchema provided\n });\n\n let capturedContexts: any[] = [];\n const TestComponent = () => {\n const { getAdditionalContext } = useTamboContextHelpers();\n\n React.useEffect(() => {\n let mounted = true;\n void getAdditionalContext().then((contexts) => {\n if (mounted) {\n capturedContexts = contexts;\n }\n });\n return () => {\n mounted = false;\n };\n }, [getAdditionalContext]);\n\n return <div data-testid=\"ready\">ready</div>;\n };\n\n const { getByTestId } = render(\n wrapperWithProviders(\n <TamboInteractableProvider>\n <InteractableSimpleComponent text=\"test\" />\n <TestComponent />\n </TamboInteractableProvider>,\n ),\n );\n\n await waitFor(() => {\n expect(getByTestId(\"ready\")).toBeInTheDocument();\n const entry = capturedContexts.find(\n (c: any) => c.name === \"interactables\",\n );\n expect(entry).toBeDefined();\n const component = entry!.context.components[0];\n expect(component.propsSchema).toBe(\"Not specified\");\n });\n });\n\n test(\"handles component unmounting and remounting correctly\", async () => {\n const Note: React.FC<{ title: string }> = ({ title }) => <div>{title}</div>;\n const InteractableNote = withTamboInteractable(Note, {\n componentName: \"Note\",\n description: \"A note\",\n propsSchema: z.object({ title: z.string() }),\n });\n\n let capturedContexts: any[] = [];\n const TestComponent = () => {\n const { getAdditionalContext } = useTamboContextHelpers();\n\n React.useEffect(() => {\n let mounted = true;\n const interval = setInterval(() => {\n void getAdditionalContext().then((contexts) => {\n if (mounted) {\n capturedContexts = contexts;\n }\n });\n }, 50);\n return () => {\n mounted = false;\n clearInterval(interval);\n };\n }, [getAdditionalContext]);\n\n return <div data-testid=\"ready\">ready</div>;\n };\n\n const Host = () => {\n const [showNote, setShowNote] = React.useState(true);\n\n React.useEffect(() => {\n // Toggle the note on/off to test unmounting\n const timeout = setTimeout(() => setShowNote(false), 100);\n const timeout2 = setTimeout(() => setShowNote(true), 200);\n return () => {\n clearTimeout(timeout);\n clearTimeout(timeout2);\n };\n }, []);\n\n return (\n <TamboInteractableProvider>\n {showNote && <InteractableNote title=\"dynamic note\" />}\n <TestComponent />\n </TamboInteractableProvider>\n );\n };\n\n const { getByTestId } = render(wrapperWithProviders(<Host />));\n\n await waitFor(\n () => {\n expect(getByTestId(\"ready\")).toBeInTheDocument();\n },\n { timeout: 1000 },\n );\n\n // Eventually should show the note again\n await waitFor(\n () => {\n const entry = capturedContexts.find(\n (c: any) => c.name === \"interactables\",\n );\n expect(entry?.context?.components).toHaveLength(1);\n },\n { timeout: 1000 },\n );\n });\n\n test(\"context helper updates when props change from parent\", async () => {\n const Counter: React.FC<{ count: number; label?: string }> = ({\n count,\n label = \"Count\",\n }) => (\n <div>\n {label}: {count}\n </div>\n );\n\n const InteractableCounter = withTamboInteractable(Counter, {\n componentName: \"Counter\",\n description: \"A counter component\",\n propsSchema: z.object({\n count: z.number(),\n label: z.string().optional(),\n }),\n });\n\n let capturedContexts: any[] = [];\n const TestComponent = () => {\n const { getAdditionalContext } = useTamboContextHelpers();\n\n React.useEffect(() => {\n let mounted = true;\n const interval = setInterval(() => {\n void getAdditionalContext().then((contexts) => {\n if (mounted) {\n capturedContexts = contexts;\n }\n });\n }, 50);\n return () => {\n mounted = false;\n clearInterval(interval);\n };\n }, [getAdditionalContext]);\n\n return <div data-testid=\"ready\">ready</div>;\n };\n\n const Host = () => {\n const [count, setCount] = React.useState(0);\n const [label, setLabel] = React.useState(\"Items\");\n\n React.useEffect(() => {\n const timeout1 = setTimeout(() => setCount(5), 100);\n const timeout2 = setTimeout(() => setLabel(\"Updated Items\"), 200);\n return () => {\n clearTimeout(timeout1);\n clearTimeout(timeout2);\n };\n }, []);\n\n return (\n <TamboInteractableProvider>\n <InteractableCounter count={count} label={label} />\n <TestComponent />\n </TamboInteractableProvider>\n );\n };\n\n const { getByTestId } = render(wrapperWithProviders(<Host />));\n\n await waitFor(() => {\n expect(getByTestId(\"ready\")).toBeInTheDocument();\n });\n\n // Wait for updates to propagate\n await waitFor(\n () => {\n const entry = capturedContexts.find(\n (c: any) => c.name === \"interactables\",\n );\n if (entry?.context?.components?.[0]) {\n const props = entry.context.components[0].props;\n expect(props.count).toBe(5);\n expect(props.label).toBe(\"Updated Items\");\n }\n },\n { timeout: 1000 },\n );\n });\n\n test(\"multiple providers with nested context helpers work correctly\", async () => {\n const Note: React.FC<{ title: string }> = ({ title }) => <div>{title}</div>;\n const InteractableNote = withTamboInteractable(Note, {\n componentName: \"Note\",\n description: \"A note\",\n propsSchema: z.object({ title: z.string() }),\n });\n\n let outerContexts: any[] = [];\n let innerContexts: any[] = [];\n\n const OuterTestComponent = () => {\n const { getAdditionalContext } = useTamboContextHelpers();\n\n React.useEffect(() => {\n let mounted = true;\n void getAdditionalContext().then((contexts) => {\n if (mounted) {\n outerContexts = contexts;\n }\n });\n return () => {\n mounted = false;\n };\n }, [getAdditionalContext]);\n\n return <div data-testid=\"outer-ready\">outer ready</div>;\n };\n\n const InnerTestComponent = () => {\n const { getAdditionalContext } = useTamboContextHelpers();\n\n React.useEffect(() => {\n let mounted = true;\n void getAdditionalContext().then((contexts) => {\n if (mounted) {\n innerContexts = contexts;\n }\n });\n return () => {\n mounted = false;\n };\n }, [getAdditionalContext]);\n\n return <div data-testid=\"inner-ready\">inner ready</div>;\n };\n\n const { getByTestId } = render(\n wrapperWithProviders(\n <TamboInteractableProvider>\n <InteractableNote title=\"outer note\" />\n <OuterTestComponent />\n <TamboContextHelpersProvider\n contextHelpers={{\n customContext: () => ({ custom: \"inner\" }),\n }}\n >\n <TamboInteractableProvider>\n <InteractableNote title=\"inner note\" />\n <InnerTestComponent />\n </TamboInteractableProvider>\n </TamboContextHelpersProvider>\n </TamboInteractableProvider>,\n ),\n );\n\n await waitFor(() => {\n expect(getByTestId(\"outer-ready\")).toBeInTheDocument();\n expect(getByTestId(\"inner-ready\")).toBeInTheDocument();\n });\n\n await waitFor(() => {\n // Outer context should have outer note\n const outerEntry = outerContexts.find(\n (c: any) => c.name === \"interactables\",\n );\n expect(outerEntry?.context?.components).toHaveLength(1);\n expect(outerEntry?.context?.components[0]?.props?.title).toBe(\n \"outer note\",\n );\n\n // Inner context should have inner note and custom context\n const innerEntry = innerContexts.find(\n (c: any) => c.name === \"interactables\",\n );\n expect(innerEntry?.context?.components).toHaveLength(1);\n expect(innerEntry?.context?.components[0]?.props?.title).toBe(\n \"inner note\",\n );\n\n const customEntry = innerContexts.find(\n (c: any) => c.name === \"customContext\",\n );\n expect(customEntry?.context).toEqual({ custom: \"inner\" });\n });\n });\n\n test(\"provider cleanup removes helper when last provider unmounts\", async () => {\n const Note: React.FC<{ title: string }> = ({ title }) => <div>{title}</div>;\n const InteractableNote = withTamboInteractable(Note, {\n componentName: \"Note\",\n description: \"A note\",\n propsSchema: z.object({ title: z.string() }),\n });\n\n let capturedContexts: any[] = [];\n const TestComponent = () => {\n const { getAdditionalContext } = useTamboContextHelpers();\n\n React.useEffect(() => {\n let mounted = true;\n const interval = setInterval(() => {\n void getAdditionalContext().then((contexts) => {\n if (mounted) {\n capturedContexts = contexts;\n }\n });\n }, 50);\n return () => {\n mounted = false;\n clearInterval(interval);\n };\n }, [getAdditionalContext]);\n\n return <div data-testid=\"ready\">ready</div>;\n };\n\n const Host = () => {\n const [showProvider, setShowProvider] = React.useState(true);\n\n React.useEffect(() => {\n const timeout = setTimeout(() => setShowProvider(false), 200);\n return () => clearTimeout(timeout);\n }, []);\n\n return (\n <>\n {showProvider && (\n <TamboInteractableProvider>\n <InteractableNote title=\"will disappear\" />\n </TamboInteractableProvider>\n )}\n <TestComponent />\n </>\n );\n };\n\n const { getByTestId } = render(wrapperWithProviders(<Host />));\n\n // Initially should have the context\n await waitFor(() => {\n expect(getByTestId(\"ready\")).toBeInTheDocument();\n const entry = capturedContexts.find(\n (c: any) => c.name === \"interactables\",\n );\n expect(entry).toBeDefined();\n });\n\n // After provider unmounts, context should be gone\n await waitFor(\n () => {\n const entry = capturedContexts.find(\n (c: any) => c.name === \"interactables\",\n );\n expect(entry).toBeUndefined();\n },\n { timeout: 1000 },\n );\n });\n\n test(\"helper error handling doesn't crash the system\", async () => {\n const Note: React.FC<{ title: string }> = ({ title }) => <div>{title}</div>;\n const InteractableNote = withTamboInteractable(Note, {\n componentName: \"Note\",\n description: \"A note\",\n propsSchema: z.object({ title: z.string() }),\n });\n\n // Mock console.error to capture error logs\n const consoleSpy = jest\n .spyOn(console, \"error\")\n .mockImplementation(() => {});\n\n let capturedContexts: any[] = [];\n const TestComponent = () => {\n const { getAdditionalContext, addContextHelper } =\n useTamboContextHelpers();\n\n React.useEffect(() => {\n // Add a helper that throws an error\n addContextHelper(\"errorHelper\", () => {\n throw new Error(\"Test error in helper\");\n });\n }, [addContextHelper]);\n\n React.useEffect(() => {\n let mounted = true;\n getAdditionalContext()\n .then((contexts) => {\n if (mounted) {\n capturedContexts = contexts;\n }\n })\n .catch(() => {\n // Should not reach here - errors should be handled gracefully\n });\n return () => {\n mounted = false;\n };\n }, [getAdditionalContext]);\n\n return <div data-testid=\"ready\">ready</div>;\n };\n\n const { getByTestId } = render(\n wrapperWithProviders(\n <TamboInteractableProvider>\n <InteractableNote title=\"test\" />\n <TestComponent />\n </TamboInteractableProvider>,\n ),\n );\n\n await waitFor(() => {\n expect(getByTestId(\"ready\")).toBeInTheDocument();\n // Should still have the interactables context despite the error\n const entry = capturedContexts.find(\n (c: any) => c.name === \"interactables\",\n );\n expect(entry).toBeDefined();\n\n // Error helper should not be present (filtered out)\n const errorEntry = capturedContexts.find(\n (c: any) => c.name === \"errorHelper\",\n );\n expect(errorEntry).toBeUndefined();\n });\n\n consoleSpy.mockRestore();\n });\n});\n"]}
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const react_1 = require("@testing-library/react");
7
7
  const react_2 = __importDefault(require("react"));
8
- const zodInternalAlias_1 = require("zodInternalAlias");
8
+ const v4_1 = require("zod/v4");
9
9
  const with_tambo_interactable_1 = require("../hoc/with-tambo-interactable");
10
10
  const tambo_context_helpers_provider_1 = require("./tambo-context-helpers-provider");
11
11
  const tambo_interactable_provider_1 = require("./tambo-interactable-provider");
@@ -28,7 +28,7 @@ describe("Interactables AdditionalContext (provider-based)", () => {
28
28
  const InteractableNote = (0, with_tambo_interactable_1.withTamboInteractable)(Note, {
29
29
  componentName: "Note",
30
30
  description: "A note",
31
- propsSchema: zodInternalAlias_1.z.object({ title: zodInternalAlias_1.z.string() }),
31
+ propsSchema: v4_1.z.object({ title: v4_1.z.string() }),
32
32
  });
33
33
  let capturedContexts = [];
34
34
  const TestComponent = () => {
@@ -91,7 +91,7 @@ describe("Interactables AdditionalContext (provider-based)", () => {
91
91
  const InteractableNote = (0, with_tambo_interactable_1.withTamboInteractable)(Note, {
92
92
  componentName: "Note",
93
93
  description: "A simple note",
94
- propsSchema: zodInternalAlias_1.z.object({ title: zodInternalAlias_1.z.string() }),
94
+ propsSchema: v4_1.z.object({ title: v4_1.z.string() }),
95
95
  });
96
96
  let capturedContexts = [];
97
97
  const TestComponent = () => {
@@ -126,9 +126,9 @@ describe("Interactables AdditionalContext (provider-based)", () => {
126
126
  const InteractableNote = (0, with_tambo_interactable_1.withTamboInteractable)(Note, {
127
127
  componentName: "Note",
128
128
  description: "A colorful note component",
129
- propsSchema: zodInternalAlias_1.z.object({
130
- title: zodInternalAlias_1.z.string(),
131
- color: zodInternalAlias_1.z.string().optional(),
129
+ propsSchema: v4_1.z.object({
130
+ title: v4_1.z.string(),
131
+ color: v4_1.z.string().optional(),
132
132
  }),
133
133
  });
134
134
  let capturedContexts = [];
@@ -168,7 +168,7 @@ describe("Interactables AdditionalContext (provider-based)", () => {
168
168
  const InteractableNote = (0, with_tambo_interactable_1.withTamboInteractable)(Note, {
169
169
  componentName: "Note",
170
170
  description: "A note",
171
- propsSchema: zodInternalAlias_1.z.object({ title: zodInternalAlias_1.z.string() }),
171
+ propsSchema: v4_1.z.object({ title: v4_1.z.string() }),
172
172
  });
173
173
  const TestComponent = () => {
174
174
  const snapshot = (0, tambo_interactable_provider_1.useCurrentInteractablesSnapshot)();
@@ -211,12 +211,12 @@ describe("Interactables AdditionalContext (provider-based)", () => {
211
211
  const InteractableNote = (0, with_tambo_interactable_1.withTamboInteractable)(Note, {
212
212
  componentName: "Note",
213
213
  description: "A note",
214
- propsSchema: zodInternalAlias_1.z.object({ title: zodInternalAlias_1.z.string() }),
214
+ propsSchema: v4_1.z.object({ title: v4_1.z.string() }),
215
215
  });
216
216
  const InteractableCounter = (0, with_tambo_interactable_1.withTamboInteractable)(Counter, {
217
217
  componentName: "Counter",
218
218
  description: "A counter",
219
- propsSchema: zodInternalAlias_1.z.object({ count: zodInternalAlias_1.z.number() }),
219
+ propsSchema: v4_1.z.object({ count: v4_1.z.number() }),
220
220
  });
221
221
  let capturedContexts = [];
222
222
  const TestComponent = () => {
@@ -254,7 +254,7 @@ describe("Interactables AdditionalContext (provider-based)", () => {
254
254
  const InteractableNote = (0, with_tambo_interactable_1.withTamboInteractable)(Note, {
255
255
  componentName: "Note",
256
256
  description: "A note",
257
- propsSchema: zodInternalAlias_1.z.object({ title: zodInternalAlias_1.z.string() }),
257
+ propsSchema: v4_1.z.object({ title: v4_1.z.string() }),
258
258
  });
259
259
  // Create a context helpers provider with a disabled interactables helper
260
260
  const DisabledContextHelpers = ({ children, }) => (react_2.default.createElement(tambo_context_helpers_provider_1.TamboContextHelpersProvider, { contextHelpers: {