@tambo-ai/react 1.0.3 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/context-helpers/current-interactables-context-helper.d.ts +16 -2
- package/dist/context-helpers/current-interactables-context-helper.d.ts.map +1 -1
- package/dist/context-helpers/current-interactables-context-helper.js.map +1 -1
- package/dist/context-helpers/current-interactables-context-helper.test.d.ts +2 -0
- package/dist/context-helpers/current-interactables-context-helper.test.d.ts.map +1 -0
- package/dist/context-helpers/current-interactables-context-helper.test.js +70 -0
- package/dist/context-helpers/current-interactables-context-helper.test.js.map +1 -0
- package/dist/mcp/elicitation.d.ts +3 -37
- package/dist/mcp/elicitation.d.ts.map +1 -1
- package/dist/mcp/elicitation.js +7 -24
- package/dist/mcp/elicitation.js.map +1 -1
- package/dist/mcp/index.d.ts +4 -4
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +2 -2
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/mcp-client.test.js +17 -17
- package/dist/mcp/mcp-client.test.js.map +1 -1
- package/dist/mcp/mcp-hooks.d.ts.map +1 -1
- package/dist/mcp/mcp-hooks.js +8 -5
- package/dist/mcp/mcp-hooks.js.map +1 -1
- package/dist/mcp/mcp-hooks.test.js +30 -29
- package/dist/mcp/mcp-hooks.test.js.map +1 -1
- package/dist/mcp/tambo-mcp-provider.d.ts +6 -9
- package/dist/mcp/tambo-mcp-provider.d.ts.map +1 -1
- package/dist/mcp/tambo-mcp-provider.js +9 -13
- package/dist/mcp/tambo-mcp-provider.js.map +1 -1
- package/dist/mcp/tambo-mcp-provider.test.js +26 -25
- package/dist/mcp/tambo-mcp-provider.test.js.map +1 -1
- package/dist/mcp/use-mcp-servers.test.js +2 -1
- package/dist/mcp/use-mcp-servers.test.js.map +1 -1
- package/dist/model/component-metadata.d.ts +7 -372
- package/dist/model/component-metadata.d.ts.map +1 -1
- package/dist/model/component-metadata.js.map +1 -1
- package/dist/model/validate-input.test.d.ts +2 -0
- package/dist/model/validate-input.test.d.ts.map +1 -0
- package/dist/model/validate-input.test.js +38 -0
- package/dist/model/validate-input.test.js.map +1 -0
- package/dist/providers/tambo-interactable-provider.d.ts +7 -7
- package/dist/providers/tambo-registry-provider.d.ts +1 -1
- package/dist/providers/tambo-registry-provider.d.ts.map +1 -1
- package/dist/providers/tambo-registry-provider.js.map +1 -1
- package/dist/providers/tambo-registry-schema-compat.test.js +4 -4
- package/dist/providers/tambo-registry-schema-compat.test.js.map +1 -1
- package/dist/schema/index.d.ts +2 -4
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +9 -11
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/json-schema.d.ts +1 -17
- package/dist/schema/json-schema.d.ts.map +1 -1
- package/dist/schema/json-schema.js +5 -69
- package/dist/schema/json-schema.js.map +1 -1
- package/dist/schema/schema.test.js +24 -25
- package/dist/schema/schema.test.js.map +1 -1
- package/dist/schema/standard-schema.test.js +25 -25
- package/dist/schema/standard-schema.test.js.map +1 -1
- package/dist/schema/validate.test.js +33 -33
- package/dist/schema/validate.test.js.map +1 -1
- package/dist/testing/tools.d.ts +4 -4
- package/dist/testing/tools.test.d.ts +2 -0
- package/dist/testing/tools.test.d.ts.map +1 -0
- package/dist/testing/tools.test.js +60 -0
- package/dist/testing/tools.test.js.map +1 -0
- package/dist/util/mcp-server-utils.d.ts +1 -1
- package/dist/util/mcp-server-utils.d.ts.map +1 -1
- package/dist/util/mcp-server-utils.js +4 -4
- package/dist/util/mcp-server-utils.js.map +1 -1
- package/dist/util/mcp-server-utils.test.js +27 -27
- package/dist/util/mcp-server-utils.test.js.map +1 -1
- package/dist/util/registry.js +1 -1
- package/dist/util/registry.js.map +1 -1
- package/dist/util/resource-content-resolver.js +5 -5
- package/dist/util/resource-content-resolver.js.map +1 -1
- package/dist/util/resource-content-resolver.test.js +6 -6
- package/dist/util/resource-content-resolver.test.js.map +1 -1
- package/dist/util/tool-caller.test.d.ts +2 -0
- package/dist/util/tool-caller.test.d.ts.map +1 -0
- package/dist/util/tool-caller.test.js +71 -0
- package/dist/util/tool-caller.test.js.map +1 -0
- package/dist/v1/__tests__/v1-interactables.test.js +1 -0
- package/dist/v1/__tests__/v1-interactables.test.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-auth-state.d.ts +1 -1
- package/dist/v1/hooks/use-tambo-v1-auth-state.d.ts.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-auth-state.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-component-state.js +2 -2
- package/dist/v1/hooks/use-tambo-v1-component-state.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-component-state.test.js +1 -1
- package/dist/v1/hooks/use-tambo-v1-component-state.test.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-send-message.d.ts +1 -1
- package/dist/v1/hooks/use-tambo-v1-send-message.d.ts.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-send-message.js +17 -17
- package/dist/v1/hooks/use-tambo-v1-send-message.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-send-message.test.js +1 -1
- package/dist/v1/hooks/use-tambo-v1-send-message.test.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-stream-status.js +2 -2
- package/dist/v1/hooks/use-tambo-v1-stream-status.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-stream-status.test.js +9 -5
- package/dist/v1/hooks/use-tambo-v1-stream-status.test.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-suggestions.js +2 -2
- package/dist/v1/hooks/use-tambo-v1-suggestions.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-thread-input.test.js +104 -0
- package/dist/v1/hooks/use-tambo-v1-thread-input.test.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1.d.ts +7 -6
- package/dist/v1/hooks/use-tambo-v1.d.ts.map +1 -1
- package/dist/v1/hooks/use-tambo-v1.js +2 -2
- package/dist/v1/hooks/use-tambo-v1.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1.test.js +23 -23
- package/dist/v1/hooks/use-tambo-v1.test.js.map +1 -1
- package/dist/v1/index.d.ts +6 -6
- package/dist/v1/index.d.ts.map +1 -1
- package/dist/v1/index.js +2 -2
- package/dist/v1/index.js.map +1 -1
- package/dist/v1/providers/tambo-v1-provider.d.ts +2 -1
- package/dist/v1/providers/tambo-v1-provider.d.ts.map +1 -1
- package/dist/v1/providers/tambo-v1-provider.js +2 -0
- package/dist/v1/providers/tambo-v1-provider.js.map +1 -1
- package/dist/v1/providers/tambo-v1-stream-context.d.ts +2 -2
- package/dist/v1/providers/tambo-v1-stream-context.d.ts.map +1 -1
- package/dist/v1/providers/tambo-v1-stream-context.js +9 -9
- package/dist/v1/providers/tambo-v1-stream-context.js.map +1 -1
- package/dist/v1/providers/tambo-v1-stream-context.test.js +35 -0
- package/dist/v1/providers/tambo-v1-stream-context.test.js.map +1 -1
- package/dist/v1/providers/tambo-v1-stub-provider.d.ts +1 -1
- package/dist/v1/providers/tambo-v1-stub-provider.d.ts.map +1 -1
- package/dist/v1/providers/tambo-v1-stub-provider.js +1 -1
- package/dist/v1/providers/tambo-v1-stub-provider.js.map +1 -1
- package/dist/v1/providers/tambo-v1-stub-provider.test.js.map +1 -1
- package/dist/v1/providers/tambo-v1-thread-input-provider.d.ts +1 -1
- package/dist/v1/providers/tambo-v1-thread-input-provider.d.ts.map +1 -1
- package/dist/v1/providers/tambo-v1-thread-input-provider.js +33 -17
- package/dist/v1/providers/tambo-v1-thread-input-provider.js.map +1 -1
- package/dist/v1/types/event.test.js +13 -13
- package/dist/v1/types/event.test.js.map +1 -1
- package/dist/v1/types/message.d.ts +12 -109
- package/dist/v1/types/message.d.ts.map +1 -1
- package/dist/v1/types/message.js +0 -7
- package/dist/v1/types/message.js.map +1 -1
- package/dist/v1/utils/event-accumulator.test.js +183 -184
- package/dist/v1/utils/event-accumulator.test.js.map +1 -1
- package/dist/v1/utils/json-patch.test.js +4 -4
- package/dist/v1/utils/json-patch.test.js.map +1 -1
- package/dist/v1/utils/keyed-throttle.test.js +12 -12
- package/dist/v1/utils/keyed-throttle.test.js.map +1 -1
- package/dist/v1/utils/registry-conversion.test.js +13 -13
- package/dist/v1/utils/registry-conversion.test.js.map +1 -1
- package/dist/v1/utils/stream-handler.test.js +5 -5
- package/dist/v1/utils/stream-handler.test.js.map +1 -1
- package/dist/v1/utils/tool-call-tracker.test.js +15 -9
- package/dist/v1/utils/tool-call-tracker.test.js.map +1 -1
- package/dist/v1/utils/tool-executor.test.js +25 -26
- package/dist/v1/utils/tool-executor.test.js.map +1 -1
- package/dist/v1/utils/unstrictify.test.js +16 -16
- package/dist/v1/utils/unstrictify.test.js.map +1 -1
- package/esm/context-helpers/current-interactables-context-helper.d.ts +16 -2
- package/esm/context-helpers/current-interactables-context-helper.d.ts.map +1 -1
- package/esm/context-helpers/current-interactables-context-helper.js.map +1 -1
- package/esm/context-helpers/current-interactables-context-helper.test.d.ts +2 -0
- package/esm/context-helpers/current-interactables-context-helper.test.d.ts.map +1 -0
- package/esm/context-helpers/current-interactables-context-helper.test.js +68 -0
- package/esm/context-helpers/current-interactables-context-helper.test.js.map +1 -0
- package/esm/mcp/elicitation.d.ts +3 -37
- package/esm/mcp/elicitation.d.ts.map +1 -1
- package/esm/mcp/elicitation.js +4 -24
- package/esm/mcp/elicitation.js.map +1 -1
- package/esm/mcp/index.d.ts +4 -4
- 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-client.test.js +1 -1
- package/esm/mcp/mcp-client.test.js.map +1 -1
- package/esm/mcp/mcp-hooks.d.ts.map +1 -1
- package/esm/mcp/mcp-hooks.js +4 -1
- package/esm/mcp/mcp-hooks.js.map +1 -1
- package/esm/mcp/mcp-hooks.test.js +3 -2
- package/esm/mcp/mcp-hooks.test.js.map +1 -1
- package/esm/mcp/tambo-mcp-provider.d.ts +6 -9
- package/esm/mcp/tambo-mcp-provider.d.ts.map +1 -1
- package/esm/mcp/tambo-mcp-provider.js +4 -8
- package/esm/mcp/tambo-mcp-provider.js.map +1 -1
- package/esm/mcp/tambo-mcp-provider.test.js +3 -2
- package/esm/mcp/tambo-mcp-provider.test.js.map +1 -1
- package/esm/mcp/use-mcp-servers.test.js +2 -1
- package/esm/mcp/use-mcp-servers.test.js.map +1 -1
- package/esm/model/component-metadata.d.ts +7 -372
- package/esm/model/component-metadata.d.ts.map +1 -1
- package/esm/model/component-metadata.js.map +1 -1
- package/esm/model/validate-input.test.d.ts +2 -0
- package/esm/model/validate-input.test.d.ts.map +1 -0
- package/esm/model/validate-input.test.js +36 -0
- package/esm/model/validate-input.test.js.map +1 -0
- package/esm/providers/tambo-interactable-provider.d.ts +7 -7
- package/esm/providers/tambo-registry-provider.d.ts +1 -1
- package/esm/providers/tambo-registry-provider.d.ts.map +1 -1
- package/esm/providers/tambo-registry-provider.js.map +1 -1
- package/esm/providers/tambo-registry-schema-compat.test.js +4 -4
- package/esm/providers/tambo-registry-schema-compat.test.js.map +1 -1
- package/esm/schema/index.d.ts +2 -4
- package/esm/schema/index.d.ts.map +1 -1
- package/esm/schema/index.js +2 -4
- package/esm/schema/index.js.map +1 -1
- package/esm/schema/json-schema.d.ts +1 -17
- package/esm/schema/json-schema.d.ts.map +1 -1
- package/esm/schema/json-schema.js +2 -67
- package/esm/schema/json-schema.js.map +1 -1
- package/esm/schema/schema.test.js +1 -2
- package/esm/schema/schema.test.js.map +1 -1
- package/esm/schema/standard-schema.test.js +1 -1
- package/esm/schema/standard-schema.test.js.map +1 -1
- package/esm/schema/validate.test.js +1 -1
- package/esm/schema/validate.test.js.map +1 -1
- package/esm/testing/tools.d.ts +4 -4
- package/esm/testing/tools.test.d.ts +2 -0
- package/esm/testing/tools.test.d.ts.map +1 -0
- package/esm/testing/tools.test.js +58 -0
- package/esm/testing/tools.test.js.map +1 -0
- package/esm/util/mcp-server-utils.d.ts +1 -1
- package/esm/util/mcp-server-utils.d.ts.map +1 -1
- package/esm/util/mcp-server-utils.js +1 -1
- package/esm/util/mcp-server-utils.js.map +1 -1
- package/esm/util/mcp-server-utils.test.js +1 -1
- package/esm/util/mcp-server-utils.test.js.map +1 -1
- package/esm/util/registry.js +1 -1
- package/esm/util/registry.js.map +1 -1
- package/esm/util/resource-content-resolver.js +1 -1
- package/esm/util/resource-content-resolver.js.map +1 -1
- package/esm/util/resource-content-resolver.test.js +2 -2
- package/esm/util/resource-content-resolver.test.js.map +1 -1
- package/esm/util/tool-caller.test.d.ts +2 -0
- package/esm/util/tool-caller.test.d.ts.map +1 -0
- package/esm/util/tool-caller.test.js +69 -0
- package/esm/util/tool-caller.test.js.map +1 -0
- package/esm/v1/__tests__/v1-interactables.test.js +1 -0
- package/esm/v1/__tests__/v1-interactables.test.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-auth-state.d.ts +1 -1
- package/esm/v1/hooks/use-tambo-v1-auth-state.d.ts.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-auth-state.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-component-state.js +1 -1
- package/esm/v1/hooks/use-tambo-v1-component-state.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-component-state.test.js +1 -1
- package/esm/v1/hooks/use-tambo-v1-component-state.test.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-send-message.d.ts +1 -1
- package/esm/v1/hooks/use-tambo-v1-send-message.d.ts.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-send-message.js +6 -6
- package/esm/v1/hooks/use-tambo-v1-send-message.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-send-message.test.js +1 -1
- package/esm/v1/hooks/use-tambo-v1-send-message.test.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-stream-status.js +1 -1
- package/esm/v1/hooks/use-tambo-v1-stream-status.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-stream-status.test.js +9 -5
- package/esm/v1/hooks/use-tambo-v1-stream-status.test.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-suggestions.js +1 -1
- package/esm/v1/hooks/use-tambo-v1-suggestions.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-thread-input.test.js +104 -0
- package/esm/v1/hooks/use-tambo-v1-thread-input.test.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1.d.ts +7 -6
- package/esm/v1/hooks/use-tambo-v1.d.ts.map +1 -1
- package/esm/v1/hooks/use-tambo-v1.js +1 -1
- package/esm/v1/hooks/use-tambo-v1.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1.test.js +22 -22
- package/esm/v1/hooks/use-tambo-v1.test.js.map +1 -1
- package/esm/v1/index.d.ts +6 -6
- package/esm/v1/index.d.ts.map +1 -1
- package/esm/v1/index.js +1 -1
- package/esm/v1/index.js.map +1 -1
- package/esm/v1/providers/tambo-v1-provider.d.ts +2 -1
- package/esm/v1/providers/tambo-v1-provider.d.ts.map +1 -1
- package/esm/v1/providers/tambo-v1-provider.js +2 -0
- package/esm/v1/providers/tambo-v1-provider.js.map +1 -1
- package/esm/v1/providers/tambo-v1-stream-context.d.ts +2 -2
- package/esm/v1/providers/tambo-v1-stream-context.d.ts.map +1 -1
- package/esm/v1/providers/tambo-v1-stream-context.js +1 -1
- package/esm/v1/providers/tambo-v1-stream-context.js.map +1 -1
- package/esm/v1/providers/tambo-v1-stream-context.test.js +35 -0
- package/esm/v1/providers/tambo-v1-stream-context.test.js.map +1 -1
- package/esm/v1/providers/tambo-v1-stub-provider.d.ts +1 -1
- package/esm/v1/providers/tambo-v1-stub-provider.d.ts.map +1 -1
- package/esm/v1/providers/tambo-v1-stub-provider.js +1 -1
- package/esm/v1/providers/tambo-v1-stub-provider.js.map +1 -1
- package/esm/v1/providers/tambo-v1-stub-provider.test.js.map +1 -1
- package/esm/v1/providers/tambo-v1-thread-input-provider.d.ts +1 -1
- package/esm/v1/providers/tambo-v1-thread-input-provider.d.ts.map +1 -1
- package/esm/v1/providers/tambo-v1-thread-input-provider.js +32 -16
- package/esm/v1/providers/tambo-v1-thread-input-provider.js.map +1 -1
- package/esm/v1/types/event.test.js +1 -1
- package/esm/v1/types/event.test.js.map +1 -1
- package/esm/v1/types/message.d.ts +12 -109
- package/esm/v1/types/message.d.ts.map +1 -1
- package/esm/v1/types/message.js +0 -7
- package/esm/v1/types/message.js.map +1 -1
- package/esm/v1/utils/event-accumulator.test.js +2 -3
- package/esm/v1/utils/event-accumulator.test.js.map +1 -1
- package/esm/v1/utils/json-patch.test.js +1 -1
- package/esm/v1/utils/json-patch.test.js.map +1 -1
- package/esm/v1/utils/keyed-throttle.test.js +1 -1
- package/esm/v1/utils/keyed-throttle.test.js.map +1 -1
- package/esm/v1/utils/registry-conversion.test.js +1 -1
- package/esm/v1/utils/registry-conversion.test.js.map +1 -1
- package/esm/v1/utils/stream-handler.test.js +1 -1
- package/esm/v1/utils/stream-handler.test.js.map +1 -1
- package/esm/v1/utils/tool-call-tracker.test.js +9 -3
- package/esm/v1/utils/tool-call-tracker.test.js.map +1 -1
- package/esm/v1/utils/tool-executor.test.js +1 -2
- package/esm/v1/utils/tool-executor.test.js.map +1 -1
- package/esm/v1/utils/unstrictify.test.js +1 -1
- package/esm/v1/utils/unstrictify.test.js.map +1 -1
- package/package.json +12 -15
- package/dist/mcp/mcp-client.d.ts +0 -185
- package/dist/mcp/mcp-client.d.ts.map +0 -1
- package/dist/mcp/mcp-client.js +0 -219
- package/dist/mcp/mcp-client.js.map +0 -1
- package/dist/mcp/mcp-constants.d.ts +0 -19
- package/dist/mcp/mcp-constants.d.ts.map +0 -1
- package/dist/mcp/mcp-constants.js +0 -21
- package/dist/mcp/mcp-constants.js.map +0 -1
- package/dist/model/mcp-server-info.d.ts +0 -76
- package/dist/model/mcp-server-info.d.ts.map +0 -1
- package/dist/model/mcp-server-info.js +0 -29
- package/dist/model/mcp-server-info.js.map +0 -1
- package/dist/schema/schema.d.ts +0 -49
- package/dist/schema/schema.d.ts.map +0 -1
- package/dist/schema/schema.js +0 -129
- package/dist/schema/schema.js.map +0 -1
- package/dist/schema/standard-schema.d.ts +0 -22
- package/dist/schema/standard-schema.d.ts.map +0 -1
- package/dist/schema/standard-schema.js +0 -42
- package/dist/schema/standard-schema.js.map +0 -1
- package/dist/schema/validate.d.ts +0 -14
- package/dist/schema/validate.d.ts.map +0 -1
- package/dist/schema/validate.js +0 -148
- package/dist/schema/validate.js.map +0 -1
- package/dist/v1/types/auth.d.ts +0 -24
- package/dist/v1/types/auth.d.ts.map +0 -1
- package/dist/v1/types/auth.js +0 -3
- package/dist/v1/types/auth.js.map +0 -1
- package/dist/v1/types/event.d.ts +0 -89
- package/dist/v1/types/event.d.ts.map +0 -1
- package/dist/v1/types/event.js +0 -57
- package/dist/v1/types/event.js.map +0 -1
- package/dist/v1/types/thread.d.ts +0 -58
- package/dist/v1/types/thread.d.ts.map +0 -1
- package/dist/v1/types/thread.js +0 -9
- package/dist/v1/types/thread.js.map +0 -1
- package/dist/v1/types/tool-choice.d.ts +0 -8
- package/dist/v1/types/tool-choice.d.ts.map +0 -1
- package/dist/v1/types/tool-choice.js +0 -3
- package/dist/v1/types/tool-choice.js.map +0 -1
- package/dist/v1/utils/event-accumulator.d.ts +0 -165
- package/dist/v1/utils/event-accumulator.d.ts.map +0 -1
- package/dist/v1/utils/event-accumulator.js +0 -1277
- package/dist/v1/utils/event-accumulator.js.map +0 -1
- package/dist/v1/utils/json-patch.d.ts +0 -18
- package/dist/v1/utils/json-patch.d.ts.map +0 -1
- package/dist/v1/utils/json-patch.js +0 -35
- package/dist/v1/utils/json-patch.js.map +0 -1
- package/dist/v1/utils/keyed-throttle.d.ts +0 -42
- package/dist/v1/utils/keyed-throttle.d.ts.map +0 -1
- package/dist/v1/utils/keyed-throttle.js +0 -86
- package/dist/v1/utils/keyed-throttle.js.map +0 -1
- package/dist/v1/utils/registry-conversion.d.ts +0 -53
- package/dist/v1/utils/registry-conversion.d.ts.map +0 -1
- package/dist/v1/utils/registry-conversion.js +0 -115
- package/dist/v1/utils/registry-conversion.js.map +0 -1
- package/dist/v1/utils/stream-handler.d.ts +0 -45
- package/dist/v1/utils/stream-handler.d.ts.map +0 -1
- package/dist/v1/utils/stream-handler.js +0 -47
- package/dist/v1/utils/stream-handler.js.map +0 -1
- package/dist/v1/utils/thread-utils.d.ts +0 -16
- package/dist/v1/utils/thread-utils.d.ts.map +0 -1
- package/dist/v1/utils/thread-utils.js +0 -34
- package/dist/v1/utils/thread-utils.js.map +0 -1
- package/dist/v1/utils/tool-call-tracker.d.ts +0 -73
- package/dist/v1/utils/tool-call-tracker.d.ts.map +0 -1
- package/dist/v1/utils/tool-call-tracker.js +0 -180
- package/dist/v1/utils/tool-call-tracker.js.map +0 -1
- package/dist/v1/utils/tool-executor.d.ts +0 -67
- package/dist/v1/utils/tool-executor.d.ts.map +0 -1
- package/dist/v1/utils/tool-executor.js +0 -160
- package/dist/v1/utils/tool-executor.js.map +0 -1
- package/dist/v1/utils/unstrictify.d.ts +0 -32
- package/dist/v1/utils/unstrictify.d.ts.map +0 -1
- package/dist/v1/utils/unstrictify.js +0 -159
- package/dist/v1/utils/unstrictify.js.map +0 -1
- package/esm/mcp/mcp-client.d.ts +0 -185
- package/esm/mcp/mcp-client.d.ts.map +0 -1
- package/esm/mcp/mcp-client.js +0 -216
- package/esm/mcp/mcp-client.js.map +0 -1
- package/esm/mcp/mcp-constants.d.ts +0 -19
- package/esm/mcp/mcp-constants.d.ts.map +0 -1
- package/esm/mcp/mcp-constants.js +0 -18
- package/esm/mcp/mcp-constants.js.map +0 -1
- package/esm/model/mcp-server-info.d.ts +0 -76
- package/esm/model/mcp-server-info.d.ts.map +0 -1
- package/esm/model/mcp-server-info.js +0 -25
- package/esm/model/mcp-server-info.js.map +0 -1
- package/esm/schema/schema.d.ts +0 -49
- package/esm/schema/schema.d.ts.map +0 -1
- package/esm/schema/schema.js +0 -124
- package/esm/schema/schema.js.map +0 -1
- package/esm/schema/standard-schema.d.ts +0 -22
- package/esm/schema/standard-schema.d.ts.map +0 -1
- package/esm/schema/standard-schema.js +0 -39
- package/esm/schema/standard-schema.js.map +0 -1
- package/esm/schema/validate.d.ts +0 -14
- package/esm/schema/validate.d.ts.map +0 -1
- package/esm/schema/validate.js +0 -145
- package/esm/schema/validate.js.map +0 -1
- package/esm/v1/types/auth.d.ts +0 -24
- package/esm/v1/types/auth.d.ts.map +0 -1
- package/esm/v1/types/auth.js +0 -2
- package/esm/v1/types/auth.js.map +0 -1
- package/esm/v1/types/event.d.ts +0 -89
- package/esm/v1/types/event.d.ts.map +0 -1
- package/esm/v1/types/event.js +0 -53
- package/esm/v1/types/event.js.map +0 -1
- package/esm/v1/types/thread.d.ts +0 -58
- package/esm/v1/types/thread.d.ts.map +0 -1
- package/esm/v1/types/thread.js +0 -8
- package/esm/v1/types/thread.js.map +0 -1
- package/esm/v1/types/tool-choice.d.ts +0 -8
- package/esm/v1/types/tool-choice.d.ts.map +0 -1
- package/esm/v1/types/tool-choice.js +0 -2
- package/esm/v1/types/tool-choice.js.map +0 -1
- package/esm/v1/utils/event-accumulator.d.ts +0 -165
- package/esm/v1/utils/event-accumulator.d.ts.map +0 -1
- package/esm/v1/utils/event-accumulator.js +0 -1268
- package/esm/v1/utils/event-accumulator.js.map +0 -1
- package/esm/v1/utils/json-patch.d.ts +0 -18
- package/esm/v1/utils/json-patch.d.ts.map +0 -1
- package/esm/v1/utils/json-patch.js +0 -32
- package/esm/v1/utils/json-patch.js.map +0 -1
- package/esm/v1/utils/keyed-throttle.d.ts +0 -42
- package/esm/v1/utils/keyed-throttle.d.ts.map +0 -1
- package/esm/v1/utils/keyed-throttle.js +0 -83
- package/esm/v1/utils/keyed-throttle.js.map +0 -1
- package/esm/v1/utils/registry-conversion.d.ts +0 -53
- package/esm/v1/utils/registry-conversion.d.ts.map +0 -1
- package/esm/v1/utils/registry-conversion.js +0 -109
- package/esm/v1/utils/registry-conversion.js.map +0 -1
- package/esm/v1/utils/stream-handler.d.ts +0 -45
- package/esm/v1/utils/stream-handler.d.ts.map +0 -1
- package/esm/v1/utils/stream-handler.js +0 -44
- package/esm/v1/utils/stream-handler.js.map +0 -1
- package/esm/v1/utils/thread-utils.d.ts +0 -16
- package/esm/v1/utils/thread-utils.d.ts.map +0 -1
- package/esm/v1/utils/thread-utils.js +0 -31
- package/esm/v1/utils/thread-utils.js.map +0 -1
- package/esm/v1/utils/tool-call-tracker.d.ts +0 -73
- package/esm/v1/utils/tool-call-tracker.d.ts.map +0 -1
- package/esm/v1/utils/tool-call-tracker.js +0 -176
- package/esm/v1/utils/tool-call-tracker.js.map +0 -1
- package/esm/v1/utils/tool-executor.d.ts +0 -67
- package/esm/v1/utils/tool-executor.d.ts.map +0 -1
- package/esm/v1/utils/tool-executor.js +0 -154
- package/esm/v1/utils/tool-executor.js.map +0 -1
- package/esm/v1/utils/unstrictify.d.ts +0 -32
- package/esm/v1/utils/unstrictify.d.ts.map +0 -1
- package/esm/v1/utils/unstrictify.js +0 -155
- package/esm/v1/utils/unstrictify.js.map +0 -1
|
@@ -49,7 +49,7 @@ const use_tambo_v1_auth_state_1 = require("./use-tambo-v1-auth-state");
|
|
|
49
49
|
const tambo_registry_provider_1 = require("../../providers/tambo-registry-provider");
|
|
50
50
|
const v1_component_renderer_1 = require("../components/v1-component-renderer");
|
|
51
51
|
const tambo_v1_stream_context_1 = require("../providers/tambo-v1-stream-context");
|
|
52
|
-
const
|
|
52
|
+
const client_1 = require("@tambo-ai/client");
|
|
53
53
|
/**
|
|
54
54
|
*
|
|
55
55
|
* @returns The combined Tambo context
|
|
@@ -77,7 +77,7 @@ function useTambo() {
|
|
|
77
77
|
const runId = threadState?.streaming.runId;
|
|
78
78
|
const threadId = streamState.currentThreadId;
|
|
79
79
|
// No-op if there's no active run or thread is a placeholder
|
|
80
|
-
if (!runId || (0,
|
|
80
|
+
if (!runId || (0, client_1.isPlaceholderThreadId)(threadId)) {
|
|
81
81
|
return;
|
|
82
82
|
}
|
|
83
83
|
// Optimistically update local state with RUN_ERROR event
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-tambo-v1.js","sourceRoot":"","sources":["../../../src/v1/hooks/use-tambo-v1.ts"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\n\n/**\n * useTambo - Main Hook\n *\n * Combines all contexts into a single hook for convenient access\n * to thread state, streaming status, registry, and client.\n */\n\nimport { EventType } from \"@ag-ui/core\";\nimport type TamboAI from \"@tambo-ai/typescript-sdk\";\nimport React, {\n useCallback,\n useContext,\n useMemo,\n useRef,\n type ReactElement,\n} from \"react\";\nimport {\n useTamboClient,\n useTamboQueryClient,\n} from \"../../providers/tambo-client-provider\";\nimport { useTamboConfig } from \"../providers/tambo-v1-provider\";\nimport { useTamboAuthState } from \"./use-tambo-v1-auth-state\";\nimport type { TamboAuthState } from \"../types/auth\";\nimport {\n TamboRegistryContext,\n type TamboRegistryContext as TamboRegistryContextType,\n} from \"../../providers/tambo-registry-provider\";\nimport { ComponentRenderer } from \"../components/v1-component-renderer\";\nimport {\n useStreamDispatch,\n useStreamState,\n useThreadManagement,\n type ThreadManagement,\n} from \"../providers/tambo-v1-stream-context\";\nimport type {\n Content,\n TamboToolDisplayProps,\n TamboThreadMessage,\n TamboToolUseContent,\n} from \"../types/message\";\nimport type { StreamingState } from \"../types/thread\";\nimport {\n isPlaceholderThreadId,\n type ThreadState,\n} from \"../utils/event-accumulator\";\n\n/**\n * Return type for useTambo hook\n */\nexport interface UseTamboReturn {\n /**\n * The Tambo API client instance\n */\n client: TamboAI;\n\n /**\n * Current thread state for the given threadId, or undefined if not loaded\n */\n thread: ThreadState | undefined;\n\n /**\n * Messages in the current thread\n */\n messages: TamboThreadMessage[];\n\n /**\n * Current streaming state\n */\n streamingState: StreamingState;\n\n /**\n * Whether the thread is currently streaming a response\n */\n isStreaming: boolean;\n\n /**\n * Whether the thread is waiting for the AI to start responding\n */\n isWaiting: boolean;\n\n /**\n * Whether the thread is idle (not streaming or waiting)\n */\n isIdle: boolean;\n\n /**\n * Register a component with the registry\n */\n registerComponent: TamboRegistryContextType[\"registerComponent\"];\n\n /**\n * Register a tool with the registry\n */\n registerTool: TamboRegistryContextType[\"registerTool\"];\n\n /**\n * Register multiple tools with the registry\n */\n registerTools: TamboRegistryContextType[\"registerTools\"];\n\n /**\n * The component registry (Map of name -> component definition)\n */\n componentList: TamboRegistryContextType[\"componentList\"];\n\n /**\n * The tool registry (Map of name -> tool definition)\n */\n toolRegistry: TamboRegistryContextType[\"toolRegistry\"];\n\n /**\n * Current thread ID (always available - uses \"placeholder\" for new threads)\n */\n currentThreadId: string;\n\n /**\n * Initialize a new thread in the stream context\n */\n initThread: ThreadManagement[\"initThread\"];\n\n /**\n * Switch the current active thread\n */\n switchThread: ThreadManagement[\"switchThread\"];\n\n /**\n * Start a new thread (generates a temporary ID)\n */\n startNewThread: ThreadManagement[\"startNewThread\"];\n\n /**\n * Dispatch function for stream events (advanced usage)\n */\n dispatch: ReturnType<typeof useStreamDispatch>;\n\n /**\n * Cancel the current run on this thread.\n * Optimistically updates local state and sends cancellation request to the API.\n * No-op if there's no active run or thread is a placeholder.\n */\n cancelRun: () => Promise<void>;\n\n /**\n * Current authentication state.\n * Use this to show auth-related UI or conditionally render features.\n */\n authState: TamboAuthState;\n\n /**\n * Shorthand for `authState.status === \"identified\"`.\n * When true, the SDK is ready to make API calls.\n */\n isIdentified: boolean;\n\n /**\n * Update a thread's name.\n * Useful for implementing manual thread renaming UI in history sidebars.\n * Cache invalidation is best-effort; failures will be logged and won't reject.\n * @param threadId - ID of the thread to rename\n * @param name - New name for the thread\n * @returns Promise that resolves when the update completes\n */\n updateThreadName: (threadId: string, name: string) => Promise<void>;\n}\n\n/**\n * Main hook for accessing Tambo functionality.\n *\n * Combines thread state, streaming status, registry, and client\n * into a single convenient hook.\n *\n * Messages returned include renderedComponent on component content blocks,\n * allowing direct rendering via {content.renderedComponent}.\n * @param threadId - Optional thread ID to get state for\n * @returns Combined context with thread state, messages, and utilities\n * @example\n * ```tsx\n * function ChatInterface() {\n * const {\n * thread,\n * messages,\n * isStreaming,\n * registerComponent,\n * } = useTambo('thread_123');\n *\n * return (\n * <div>\n * {messages.map(msg => <Message key={msg.id} message={msg} />)}\n * {isStreaming && <LoadingIndicator />}\n * </div>\n * );\n * }\n * ```\n */\n/**\n * Cache entry for a rendered component wrapper.\n * Stores the element and the props JSON used to create it.\n */\ninterface ComponentCacheEntry {\n element: ReactElement;\n propsJson: string;\n}\n\n/**\n *\n * @returns The combined Tambo context\n */\nexport function useTambo(): UseTamboReturn {\n const client = useTamboClient();\n const queryClient = useTamboQueryClient();\n const { userKey } = useTamboConfig();\n const streamState = useStreamState();\n const dispatch = useStreamDispatch();\n const registry = useContext(TamboRegistryContext);\n const threadManagement = useThreadManagement();\n const authState = useTamboAuthState();\n\n // Cache for rendered component wrappers - maintains stable element references\n // across renders when props haven't changed\n const componentCacheRef = useRef<Map<string, ComponentCacheEntry>>(new Map());\n\n // Get thread state for the current thread\n const threadState = streamState.threadMap[streamState.currentThreadId];\n\n // Keep a live snapshot of the threadMap for callbacks without forcing them to\n // re-create on every stream state update.\n const threadMapRef = useRef(streamState.threadMap);\n threadMapRef.current = streamState.threadMap;\n\n // Cancel the current run on this thread\n const cancelRun = useCallback(async () => {\n const runId = threadState?.streaming.runId;\n const threadId = streamState.currentThreadId;\n\n // No-op if there's no active run or thread is a placeholder\n if (!runId || isPlaceholderThreadId(threadId)) {\n return;\n }\n\n // Optimistically update local state with RUN_ERROR event\n dispatch({\n type: \"EVENT\",\n threadId,\n event: {\n type: EventType.RUN_ERROR,\n message: \"Run cancelled\",\n code: \"CANCELLED\",\n timestamp: Date.now(),\n },\n });\n\n // Call API to cancel the run\n try {\n await client.threads.runs.delete(runId, { threadId, userKey });\n } catch (error) {\n // Log but don't rethrow - local state is already updated\n console.warn(\"Failed to cancel run on server:\", error);\n }\n }, [\n client,\n userKey,\n streamState.currentThreadId,\n threadState?.streaming.runId,\n dispatch,\n ]);\n\n // Update a thread's name\n const updateThreadName = useCallback(\n async (threadId: string, name: string) => {\n await client.threads.update(threadId, { name, userKey });\n\n if (threadMapRef.current[threadId]) {\n dispatch({\n type: \"UPDATE_THREAD_NAME\",\n threadId,\n name: name,\n });\n }\n\n try {\n await Promise.all([\n queryClient.invalidateQueries({\n queryKey: [\"v1-threads\", \"list\"],\n }),\n queryClient.invalidateQueries({\n queryKey: [\"v1-threads\", threadId],\n }),\n ]);\n } catch (error) {\n console.warn(\n \"[useTambo] Failed to invalidate thread queries after rename:\",\n error,\n );\n }\n },\n [client, userKey, dispatch, queryClient],\n );\n\n // Memoize the return object to prevent unnecessary re-renders\n return useMemo(() => {\n const thread = threadState;\n const rawMessages = thread?.thread.messages ?? [];\n const streamingState: StreamingState = thread?.streaming ?? {\n status: \"idle\" as const,\n };\n\n // Build a set of tool_use IDs that have completed (have a matching tool_result)\n // We need to look across all messages since tool_result might be in a different message\n const completedToolIds = new Set<string>();\n for (const msg of rawMessages) {\n for (const content of msg.content) {\n if (content.type === \"tool_result\") {\n completedToolIds.add(content.toolUseId);\n }\n }\n }\n\n // Transform messages to add computed properties to content blocks\n const messages = rawMessages.map((message): TamboThreadMessage => {\n const transformedContent = message.content.map((content): Content => {\n // Transform tool_use content to add computed state\n if (content.type === \"tool_use\") {\n const hasCompleted = completedToolIds.has(content.id);\n const input = content.input ?? {};\n\n // Extract Tambo display props from input\n const tamboDisplayProps: TamboToolDisplayProps = {\n _tambo_statusMessage:\n typeof input._tambo_statusMessage === \"string\"\n ? input._tambo_statusMessage\n : undefined,\n _tambo_completionStatusMessage:\n typeof input._tambo_completionStatusMessage === \"string\"\n ? input._tambo_completionStatusMessage\n : undefined,\n };\n\n // Compute status message based on completion state\n const statusMessage = hasCompleted\n ? (tamboDisplayProps._tambo_completionStatusMessage ??\n `Called ${content.name}`)\n : (tamboDisplayProps._tambo_statusMessage ??\n `Calling ${content.name}`);\n\n // Filter out _tambo_* properties from input - consumers only see actual tool params\n const cleanInput: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(input)) {\n if (!key.startsWith(\"_tambo_\")) {\n cleanInput[key] = value;\n }\n }\n\n const v1Content: TamboToolUseContent = {\n ...content,\n input: cleanInput,\n hasCompleted,\n statusMessage,\n tamboDisplayProps,\n };\n return v1Content;\n }\n\n if (content.type !== \"component\") {\n return content;\n }\n\n const componentContent = content;\n const propsJson = JSON.stringify(componentContent.props ?? {});\n const cache = componentCacheRef.current;\n const cached = cache.get(componentContent.id);\n\n // Return cached element if props haven't changed\n if (cached?.propsJson === propsJson) {\n return {\n ...componentContent,\n renderedComponent: cached.element,\n };\n }\n\n // Create new wrapper element\n const element = React.createElement(ComponentRenderer, {\n key: componentContent.id,\n content: componentContent,\n threadId: streamState.currentThreadId,\n messageId: message.id,\n });\n\n // Update cache\n cache.set(componentContent.id, { element, propsJson });\n\n return {\n ...componentContent,\n renderedComponent: element,\n };\n });\n\n return {\n ...message,\n content: transformedContent,\n };\n });\n\n return {\n client,\n thread,\n messages,\n streamingState,\n isStreaming: streamingState.status === \"streaming\",\n isWaiting: streamingState.status === \"waiting\",\n isIdle: streamingState.status === \"idle\",\n registerComponent: registry.registerComponent,\n registerTool: registry.registerTool,\n registerTools: registry.registerTools,\n componentList: registry.componentList,\n toolRegistry: registry.toolRegistry,\n currentThreadId: streamState.currentThreadId,\n initThread: threadManagement.initThread,\n switchThread: threadManagement.switchThread,\n startNewThread: threadManagement.startNewThread,\n dispatch,\n cancelRun,\n authState,\n isIdentified: authState.status === \"identified\",\n updateThreadName,\n };\n }, [\n cancelRun,\n updateThreadName,\n client,\n threadState,\n registry,\n streamState.currentThreadId,\n threadManagement,\n dispatch,\n authState,\n ]);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"use-tambo-v1.js","sourceRoot":"","sources":["../../../src/v1/hooks/use-tambo-v1.ts"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\n\n/**\n * useTambo - Main Hook\n *\n * Combines all contexts into a single hook for convenient access\n * to thread state, streaming status, registry, and client.\n */\n\nimport { EventType } from \"@ag-ui/core\";\nimport type TamboAI from \"@tambo-ai/typescript-sdk\";\nimport React, {\n useCallback,\n useContext,\n useMemo,\n useRef,\n type ReactElement,\n} from \"react\";\nimport {\n useTamboClient,\n useTamboQueryClient,\n} from \"../../providers/tambo-client-provider\";\nimport { useTamboConfig } from \"../providers/tambo-v1-provider\";\nimport { useTamboAuthState } from \"./use-tambo-v1-auth-state\";\nimport type { TamboAuthState } from \"@tambo-ai/client\";\nimport {\n TamboRegistryContext,\n type TamboRegistryContext as TamboRegistryContextType,\n} from \"../../providers/tambo-registry-provider\";\nimport { ComponentRenderer } from \"../components/v1-component-renderer\";\nimport {\n useStreamDispatch,\n useStreamState,\n useThreadManagement,\n type ThreadManagement,\n} from \"../providers/tambo-v1-stream-context\";\nimport type {\n Content,\n ReactTamboThreadMessage,\n TamboToolDisplayProps,\n TamboToolUseContent,\n} from \"../types/message\";\nimport type { StreamingState } from \"@tambo-ai/client\";\nimport { isPlaceholderThreadId, type ThreadState } from \"@tambo-ai/client\";\n\n/**\n * Return type for useTambo hook\n */\nexport interface UseTamboReturn {\n /**\n * The Tambo API client instance\n */\n client: TamboAI;\n\n /**\n * Current thread state for the given threadId, or undefined if not loaded\n */\n thread: ThreadState | undefined;\n\n /**\n * Messages in the current thread.\n * Component content blocks include `renderedComponent` for direct rendering.\n */\n messages: ReactTamboThreadMessage[];\n\n /**\n * Current streaming state\n */\n streamingState: StreamingState;\n\n /**\n * Whether the thread is currently streaming a response\n */\n isStreaming: boolean;\n\n /**\n * Whether the thread is waiting for the AI to start responding\n */\n isWaiting: boolean;\n\n /**\n * Whether the thread is idle (not streaming or waiting)\n */\n isIdle: boolean;\n\n /**\n * Register a component with the registry\n */\n registerComponent: TamboRegistryContextType[\"registerComponent\"];\n\n /**\n * Register a tool with the registry\n */\n registerTool: TamboRegistryContextType[\"registerTool\"];\n\n /**\n * Register multiple tools with the registry\n */\n registerTools: TamboRegistryContextType[\"registerTools\"];\n\n /**\n * The component registry (Map of name -> component definition)\n */\n componentList: TamboRegistryContextType[\"componentList\"];\n\n /**\n * The tool registry (Map of name -> tool definition)\n */\n toolRegistry: TamboRegistryContextType[\"toolRegistry\"];\n\n /**\n * Current thread ID (always available - uses \"placeholder\" for new threads)\n */\n currentThreadId: string;\n\n /**\n * Initialize a new thread in the stream context\n */\n initThread: ThreadManagement[\"initThread\"];\n\n /**\n * Switch the current active thread\n */\n switchThread: ThreadManagement[\"switchThread\"];\n\n /**\n * Start a new thread (generates a temporary ID)\n */\n startNewThread: ThreadManagement[\"startNewThread\"];\n\n /**\n * Dispatch function for stream events (advanced usage)\n */\n dispatch: ReturnType<typeof useStreamDispatch>;\n\n /**\n * Cancel the current run on this thread.\n * Optimistically updates local state and sends cancellation request to the API.\n * No-op if there's no active run or thread is a placeholder.\n */\n cancelRun: () => Promise<void>;\n\n /**\n * Current authentication state.\n * Use this to show auth-related UI or conditionally render features.\n */\n authState: TamboAuthState;\n\n /**\n * Shorthand for `authState.status === \"identified\"`.\n * When true, the SDK is ready to make API calls.\n */\n isIdentified: boolean;\n\n /**\n * Update a thread's name.\n * Useful for implementing manual thread renaming UI in history sidebars.\n * Cache invalidation is best-effort; failures will be logged and won't reject.\n * @param threadId - ID of the thread to rename\n * @param name - New name for the thread\n * @returns Promise that resolves when the update completes\n */\n updateThreadName: (threadId: string, name: string) => Promise<void>;\n}\n\n/**\n * Main hook for accessing Tambo functionality.\n *\n * Combines thread state, streaming status, registry, and client\n * into a single convenient hook.\n *\n * Messages returned include renderedComponent on component content blocks,\n * allowing direct rendering via {content.renderedComponent}.\n * @param threadId - Optional thread ID to get state for\n * @returns Combined context with thread state, messages, and utilities\n * @example\n * ```tsx\n * function ChatInterface() {\n * const {\n * thread,\n * messages,\n * isStreaming,\n * registerComponent,\n * } = useTambo('thread_123');\n *\n * return (\n * <div>\n * {messages.map(msg => <Message key={msg.id} message={msg} />)}\n * {isStreaming && <LoadingIndicator />}\n * </div>\n * );\n * }\n * ```\n */\n/**\n * Cache entry for a rendered component wrapper.\n * Stores the element and the props JSON used to create it.\n */\ninterface ComponentCacheEntry {\n element: ReactElement;\n propsJson: string;\n}\n\n/**\n *\n * @returns The combined Tambo context\n */\nexport function useTambo(): UseTamboReturn {\n const client = useTamboClient();\n const queryClient = useTamboQueryClient();\n const { userKey } = useTamboConfig();\n const streamState = useStreamState();\n const dispatch = useStreamDispatch();\n const registry = useContext(TamboRegistryContext);\n const threadManagement = useThreadManagement();\n const authState = useTamboAuthState();\n\n // Cache for rendered component wrappers - maintains stable element references\n // across renders when props haven't changed\n const componentCacheRef = useRef<Map<string, ComponentCacheEntry>>(new Map());\n\n // Get thread state for the current thread\n const threadState = streamState.threadMap[streamState.currentThreadId];\n\n // Keep a live snapshot of the threadMap for callbacks without forcing them to\n // re-create on every stream state update.\n const threadMapRef = useRef(streamState.threadMap);\n threadMapRef.current = streamState.threadMap;\n\n // Cancel the current run on this thread\n const cancelRun = useCallback(async () => {\n const runId = threadState?.streaming.runId;\n const threadId = streamState.currentThreadId;\n\n // No-op if there's no active run or thread is a placeholder\n if (!runId || isPlaceholderThreadId(threadId)) {\n return;\n }\n\n // Optimistically update local state with RUN_ERROR event\n dispatch({\n type: \"EVENT\",\n threadId,\n event: {\n type: EventType.RUN_ERROR,\n message: \"Run cancelled\",\n code: \"CANCELLED\",\n timestamp: Date.now(),\n },\n });\n\n // Call API to cancel the run\n try {\n await client.threads.runs.delete(runId, { threadId, userKey });\n } catch (error) {\n // Log but don't rethrow - local state is already updated\n console.warn(\"Failed to cancel run on server:\", error);\n }\n }, [\n client,\n userKey,\n streamState.currentThreadId,\n threadState?.streaming.runId,\n dispatch,\n ]);\n\n // Update a thread's name\n const updateThreadName = useCallback(\n async (threadId: string, name: string) => {\n await client.threads.update(threadId, { name, userKey });\n\n if (threadMapRef.current[threadId]) {\n dispatch({\n type: \"UPDATE_THREAD_NAME\",\n threadId,\n name: name,\n });\n }\n\n try {\n await Promise.all([\n queryClient.invalidateQueries({\n queryKey: [\"v1-threads\", \"list\"],\n }),\n queryClient.invalidateQueries({\n queryKey: [\"v1-threads\", threadId],\n }),\n ]);\n } catch (error) {\n console.warn(\n \"[useTambo] Failed to invalidate thread queries after rename:\",\n error,\n );\n }\n },\n [client, userKey, dispatch, queryClient],\n );\n\n // Memoize the return object to prevent unnecessary re-renders\n return useMemo(() => {\n const thread = threadState;\n const rawMessages = thread?.thread.messages ?? [];\n const streamingState: StreamingState = thread?.streaming ?? {\n status: \"idle\" as const,\n };\n\n // Build a set of tool_use IDs that have completed (have a matching tool_result)\n // We need to look across all messages since tool_result might be in a different message\n const completedToolIds = new Set<string>();\n for (const msg of rawMessages) {\n for (const content of msg.content) {\n if (content.type === \"tool_result\") {\n completedToolIds.add(content.toolUseId);\n }\n }\n }\n\n // Transform messages to add computed properties to content blocks\n const messages = rawMessages.map((message): ReactTamboThreadMessage => {\n const transformedContent = message.content.map((content): Content => {\n // Transform tool_use content to add computed state\n if (content.type === \"tool_use\") {\n const hasCompleted = completedToolIds.has(content.id);\n const input = content.input ?? {};\n\n // Extract Tambo display props from input\n const tamboDisplayProps: TamboToolDisplayProps = {\n _tambo_statusMessage:\n typeof input._tambo_statusMessage === \"string\"\n ? input._tambo_statusMessage\n : undefined,\n _tambo_completionStatusMessage:\n typeof input._tambo_completionStatusMessage === \"string\"\n ? input._tambo_completionStatusMessage\n : undefined,\n };\n\n // Compute status message based on completion state\n const statusMessage = hasCompleted\n ? (tamboDisplayProps._tambo_completionStatusMessage ??\n `Called ${content.name}`)\n : (tamboDisplayProps._tambo_statusMessage ??\n `Calling ${content.name}`);\n\n // Filter out _tambo_* properties from input - consumers only see actual tool params\n const cleanInput: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(input)) {\n if (!key.startsWith(\"_tambo_\")) {\n cleanInput[key] = value;\n }\n }\n\n const v1Content: TamboToolUseContent = {\n ...content,\n input: cleanInput,\n hasCompleted,\n statusMessage,\n tamboDisplayProps,\n };\n return v1Content;\n }\n\n if (content.type !== \"component\") {\n return content;\n }\n\n const componentContent = content;\n const propsJson = JSON.stringify(componentContent.props ?? {});\n const cache = componentCacheRef.current;\n const cached = cache.get(componentContent.id);\n\n // Return cached element if props haven't changed\n if (cached?.propsJson === propsJson) {\n return {\n ...componentContent,\n renderedComponent: cached.element,\n };\n }\n\n // Create new wrapper element\n const element = React.createElement(ComponentRenderer, {\n key: componentContent.id,\n content: componentContent,\n threadId: streamState.currentThreadId,\n messageId: message.id,\n });\n\n // Update cache\n cache.set(componentContent.id, { element, propsJson });\n\n return {\n ...componentContent,\n renderedComponent: element,\n };\n });\n\n return {\n ...message,\n content: transformedContent,\n };\n });\n\n return {\n client,\n thread,\n messages,\n streamingState,\n isStreaming: streamingState.status === \"streaming\",\n isWaiting: streamingState.status === \"waiting\",\n isIdle: streamingState.status === \"idle\",\n registerComponent: registry.registerComponent,\n registerTool: registry.registerTool,\n registerTools: registry.registerTools,\n componentList: registry.componentList,\n toolRegistry: registry.toolRegistry,\n currentThreadId: streamState.currentThreadId,\n initThread: threadManagement.initThread,\n switchThread: threadManagement.switchThread,\n startNewThread: threadManagement.startNewThread,\n dispatch,\n cancelRun,\n authState,\n isIdentified: authState.status === \"identified\",\n updateThreadName,\n };\n }, [\n cancelRun,\n updateThreadName,\n client,\n threadState,\n registry,\n streamState.currentThreadId,\n threadManagement,\n dispatch,\n authState,\n ]);\n}\n"]}
|
|
@@ -39,7 +39,7 @@ const react_2 = __importStar(require("react"));
|
|
|
39
39
|
const tambo_client_provider_1 = require("../../providers/tambo-client-provider");
|
|
40
40
|
const tambo_registry_provider_1 = require("../../providers/tambo-registry-provider");
|
|
41
41
|
const tambo_v1_stream_context_1 = require("../providers/tambo-v1-stream-context");
|
|
42
|
-
const
|
|
42
|
+
const client_1 = require("@tambo-ai/client");
|
|
43
43
|
const use_tambo_v1_1 = require("./use-tambo-v1");
|
|
44
44
|
jest.mock("../../providers/tambo-client-provider", () => ({
|
|
45
45
|
useTamboClient: jest.fn(),
|
|
@@ -105,7 +105,7 @@ describe("useTambo", () => {
|
|
|
105
105
|
// Wrapper that uses the real reducer so state updates properly
|
|
106
106
|
function createWrapperWithRealReducer(initialState, stateRef) {
|
|
107
107
|
return function WrapperWithRealReducer({ children, }) {
|
|
108
|
-
const [state, dispatch] = (0, react_2.useReducer)(
|
|
108
|
+
const [state, dispatch] = (0, react_2.useReducer)(client_1.streamReducer, initialState);
|
|
109
109
|
if (stateRef) {
|
|
110
110
|
stateRef.current = state;
|
|
111
111
|
}
|
|
@@ -275,7 +275,7 @@ describe("useTambo", () => {
|
|
|
275
275
|
lastRunCancelled: false,
|
|
276
276
|
},
|
|
277
277
|
streaming: { status: "idle" },
|
|
278
|
-
accumulatingToolArgs:
|
|
278
|
+
accumulatingToolArgs: {},
|
|
279
279
|
},
|
|
280
280
|
},
|
|
281
281
|
currentThreadId: "thread_123",
|
|
@@ -313,7 +313,7 @@ describe("useTambo", () => {
|
|
|
313
313
|
lastRunCancelled: false,
|
|
314
314
|
},
|
|
315
315
|
streaming: { status: "idle" },
|
|
316
|
-
accumulatingToolArgs:
|
|
316
|
+
accumulatingToolArgs: {},
|
|
317
317
|
},
|
|
318
318
|
},
|
|
319
319
|
currentThreadId: "thread_123",
|
|
@@ -353,7 +353,7 @@ describe("useTambo", () => {
|
|
|
353
353
|
lastRunCancelled: false,
|
|
354
354
|
},
|
|
355
355
|
streaming: { status: "idle" },
|
|
356
|
-
accumulatingToolArgs:
|
|
356
|
+
accumulatingToolArgs: {},
|
|
357
357
|
},
|
|
358
358
|
},
|
|
359
359
|
currentThreadId: "thread_123",
|
|
@@ -390,7 +390,7 @@ describe("useTambo", () => {
|
|
|
390
390
|
lastRunCancelled: false,
|
|
391
391
|
},
|
|
392
392
|
streaming: { status: "idle" },
|
|
393
|
-
accumulatingToolArgs:
|
|
393
|
+
accumulatingToolArgs: {},
|
|
394
394
|
},
|
|
395
395
|
},
|
|
396
396
|
currentThreadId: "thread_123",
|
|
@@ -430,7 +430,7 @@ describe("useTambo", () => {
|
|
|
430
430
|
lastRunCancelled: false,
|
|
431
431
|
},
|
|
432
432
|
streaming: { status: "idle" },
|
|
433
|
-
accumulatingToolArgs:
|
|
433
|
+
accumulatingToolArgs: {},
|
|
434
434
|
},
|
|
435
435
|
},
|
|
436
436
|
currentThreadId: "thread_123",
|
|
@@ -472,7 +472,7 @@ describe("useTambo", () => {
|
|
|
472
472
|
lastRunCancelled: false,
|
|
473
473
|
},
|
|
474
474
|
streaming: { status: "idle" },
|
|
475
|
-
accumulatingToolArgs:
|
|
475
|
+
accumulatingToolArgs: {},
|
|
476
476
|
},
|
|
477
477
|
},
|
|
478
478
|
currentThreadId: "thread_123",
|
|
@@ -510,7 +510,7 @@ describe("useTambo", () => {
|
|
|
510
510
|
lastRunCancelled: false,
|
|
511
511
|
},
|
|
512
512
|
streaming: { status: "idle" },
|
|
513
|
-
accumulatingToolArgs:
|
|
513
|
+
accumulatingToolArgs: {},
|
|
514
514
|
},
|
|
515
515
|
},
|
|
516
516
|
currentThreadId: "placeholder",
|
|
@@ -553,7 +553,7 @@ describe("useTambo", () => {
|
|
|
553
553
|
lastRunCancelled: false,
|
|
554
554
|
},
|
|
555
555
|
streaming: { status: "idle" },
|
|
556
|
-
accumulatingToolArgs:
|
|
556
|
+
accumulatingToolArgs: {},
|
|
557
557
|
},
|
|
558
558
|
},
|
|
559
559
|
currentThreadId: "thread_123",
|
|
@@ -607,7 +607,7 @@ describe("useTambo", () => {
|
|
|
607
607
|
lastRunCancelled: false,
|
|
608
608
|
},
|
|
609
609
|
streaming: { status: "idle" },
|
|
610
|
-
accumulatingToolArgs:
|
|
610
|
+
accumulatingToolArgs: {},
|
|
611
611
|
},
|
|
612
612
|
},
|
|
613
613
|
currentThreadId: "thread_123",
|
|
@@ -650,7 +650,7 @@ describe("useTambo", () => {
|
|
|
650
650
|
lastRunCancelled: false,
|
|
651
651
|
},
|
|
652
652
|
streaming: { status: "idle" },
|
|
653
|
-
accumulatingToolArgs:
|
|
653
|
+
accumulatingToolArgs: {},
|
|
654
654
|
},
|
|
655
655
|
},
|
|
656
656
|
currentThreadId: "thread_123",
|
|
@@ -706,7 +706,7 @@ describe("useTambo", () => {
|
|
|
706
706
|
lastRunCancelled: false,
|
|
707
707
|
},
|
|
708
708
|
streaming: { status: "idle" },
|
|
709
|
-
accumulatingToolArgs:
|
|
709
|
+
accumulatingToolArgs: {},
|
|
710
710
|
},
|
|
711
711
|
},
|
|
712
712
|
currentThreadId: "thread_123",
|
|
@@ -751,7 +751,7 @@ describe("useTambo", () => {
|
|
|
751
751
|
lastRunCancelled: false,
|
|
752
752
|
},
|
|
753
753
|
streaming: { status: "idle" },
|
|
754
|
-
accumulatingToolArgs:
|
|
754
|
+
accumulatingToolArgs: {},
|
|
755
755
|
},
|
|
756
756
|
},
|
|
757
757
|
currentThreadId: "thread_123",
|
|
@@ -793,7 +793,7 @@ describe("useTambo", () => {
|
|
|
793
793
|
lastRunCancelled: false,
|
|
794
794
|
},
|
|
795
795
|
streaming: { status: "idle" },
|
|
796
|
-
accumulatingToolArgs:
|
|
796
|
+
accumulatingToolArgs: {},
|
|
797
797
|
},
|
|
798
798
|
},
|
|
799
799
|
currentThreadId: "thread_123",
|
|
@@ -834,7 +834,7 @@ describe("useTambo", () => {
|
|
|
834
834
|
lastRunCancelled: false,
|
|
835
835
|
},
|
|
836
836
|
streaming: { status: "idle" },
|
|
837
|
-
accumulatingToolArgs:
|
|
837
|
+
accumulatingToolArgs: {},
|
|
838
838
|
},
|
|
839
839
|
},
|
|
840
840
|
currentThreadId: "thread_123",
|
|
@@ -893,7 +893,7 @@ describe("useTambo", () => {
|
|
|
893
893
|
lastRunCancelled: false,
|
|
894
894
|
},
|
|
895
895
|
streaming: { status: "idle" },
|
|
896
|
-
accumulatingToolArgs:
|
|
896
|
+
accumulatingToolArgs: {},
|
|
897
897
|
},
|
|
898
898
|
},
|
|
899
899
|
currentThreadId: "thread_123",
|
|
@@ -925,7 +925,7 @@ describe("useTambo", () => {
|
|
|
925
925
|
lastRunCancelled: false,
|
|
926
926
|
},
|
|
927
927
|
streaming: { status: "streaming", runId: "run_456" },
|
|
928
|
-
accumulatingToolArgs:
|
|
928
|
+
accumulatingToolArgs: {},
|
|
929
929
|
},
|
|
930
930
|
},
|
|
931
931
|
currentThreadId: "thread_123",
|
|
@@ -960,7 +960,7 @@ describe("useTambo", () => {
|
|
|
960
960
|
lastRunCancelled: false,
|
|
961
961
|
},
|
|
962
962
|
streaming: { status: "idle" }, // No runId
|
|
963
|
-
accumulatingToolArgs:
|
|
963
|
+
accumulatingToolArgs: {},
|
|
964
964
|
},
|
|
965
965
|
},
|
|
966
966
|
currentThreadId: "thread_123",
|
|
@@ -993,7 +993,7 @@ describe("useTambo", () => {
|
|
|
993
993
|
lastRunCancelled: false,
|
|
994
994
|
},
|
|
995
995
|
streaming: { status: "streaming", runId: "run_123" },
|
|
996
|
-
accumulatingToolArgs:
|
|
996
|
+
accumulatingToolArgs: {},
|
|
997
997
|
},
|
|
998
998
|
},
|
|
999
999
|
currentThreadId: "placeholder",
|
|
@@ -1033,7 +1033,7 @@ describe("useTambo", () => {
|
|
|
1033
1033
|
lastRunCancelled: false,
|
|
1034
1034
|
},
|
|
1035
1035
|
streaming: { status: "streaming", runId: "run_456" },
|
|
1036
|
-
accumulatingToolArgs:
|
|
1036
|
+
accumulatingToolArgs: {},
|
|
1037
1037
|
},
|
|
1038
1038
|
},
|
|
1039
1039
|
currentThreadId: "thread_123",
|
|
@@ -1071,7 +1071,7 @@ describe("useTambo", () => {
|
|
|
1071
1071
|
name: "Old Name",
|
|
1072
1072
|
},
|
|
1073
1073
|
streaming: { status: "idle" },
|
|
1074
|
-
accumulatingToolArgs:
|
|
1074
|
+
accumulatingToolArgs: {},
|
|
1075
1075
|
},
|
|
1076
1076
|
},
|
|
1077
1077
|
currentThreadId: "thread_456",
|
|
@@ -1148,7 +1148,7 @@ describe("useTambo", () => {
|
|
|
1148
1148
|
name: "Old Name",
|
|
1149
1149
|
},
|
|
1150
1150
|
streaming: { status: "idle" },
|
|
1151
|
-
accumulatingToolArgs:
|
|
1151
|
+
accumulatingToolArgs: {},
|
|
1152
1152
|
},
|
|
1153
1153
|
},
|
|
1154
1154
|
currentThreadId: "thread_456",
|