signalwire-sdk 3.4.2.dev114__tar.gz → 3.4.3.dev115__tar.gz
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.
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/PKG-INFO +1 -1
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/pyproject.toml +1 -1
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/__init__.py +1 -1
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/agent_server.py +1 -1
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/ai_chat/gateway.py +84 -1
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire_sdk.egg-info/PKG-INFO +1 -1
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/LICENSE +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/README.md +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/man/sw-agent-init.1 +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/man/sw-search.1 +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/man/swaig-test.1 +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/setup.cfg +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/setup.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/agents/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/agents/bedrock.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/ai_chat/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/ai_chat/client.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/ai_chat/handoff.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/cli/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/cli/build_search.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/cli/config.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/cli/core/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/cli/core/agent_loader.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/cli/core/argparse_helpers.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/cli/core/dynamic_config.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/cli/core/service_loader.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/cli/dokku.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/cli/execution/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/cli/execution/datamap_exec.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/cli/execution/webhook_exec.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/cli/init_project.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/cli/output/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/cli/output/output_formatter.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/cli/output/swml_dump.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/cli/simulation/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/cli/simulation/data_generation.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/cli/simulation/data_overrides.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/cli/simulation/mock_env.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/cli/swaig_test_wrapper.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/cli/test_swaig.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/cli/types.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/_agent_host.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/agent/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/agent/config/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/agent/deployment/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/agent/deployment/handlers/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/agent/prompt/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/agent/prompt/manager.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/agent/routing/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/agent/security/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/agent/swml/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/agent/tools/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/agent/tools/decorator.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/agent/tools/registry.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/agent/tools/type_inference.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/agent_base.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/auth_handler.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/capabilities.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/config_loader.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/contexts.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/data_map.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/function_result.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/logging_config.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/mixins/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/mixins/_mixin_host.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/mixins/ai_config_mixin.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/mixins/auth_mixin.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/mixins/mcp_server_mixin.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/mixins/prompt_mixin.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/mixins/serverless_mixin.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/mixins/skill_mixin.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/mixins/state_mixin.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/mixins/tool_mixin.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/mixins/web_mixin.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/pom_builder.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/post_prompt.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/post_prompt_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/security/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/security/security_utils.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/security/session_manager.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/security/webhook_middleware.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/security/webhook_validator.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/security_config.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/skill_base.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/skill_manager.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/swaig_actions_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/swaig_function.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/swaig_request_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/swml_builder.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/swml_handler.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/swml_renderer.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/swml_service.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/swml_verbs_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/web.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/livewire/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/livewire/plugins.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/mcp_gateway/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/mcp_gateway/gateway_service.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/mcp_gateway/mcp_manager.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/mcp_gateway/session_manager.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/pom/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/pom/pom.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/pom/pom_tool.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/prefabs/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/prefabs/concierge.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/prefabs/faq_bot.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/prefabs/info_gatherer.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/prefabs/receptionist.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/prefabs/survey.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/py.typed +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/relay/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/relay/call.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/relay/client.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/relay/constants.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/relay/event.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/relay/message.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/relay/protocol_types_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/_base.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/_pagination.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/_request_options.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/call_handler.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/client.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/_client_tree_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/addresses.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/calling.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/calling_resources_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/calling_types_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/chat.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/chat_resources_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/chat_types_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/datasphere.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/datasphere_resources_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/datasphere_types_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/fabric.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/fabric_resources_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/fabric_types_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/fax_resources_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/fax_types_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/imported_numbers.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/logs.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/logs_resources_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/logs_types_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/lookup.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/message_resources_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/message_types_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/messages_resources_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/messages_types_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/mfa.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/number_groups.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/phone_numbers.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/project.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/project_resources_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/project_types_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/projects_resources_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/projects_types_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/pubsub.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/pubsub_resources_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/pubsub_types_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/queues.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/recordings.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/registry.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/relay_rest_resources_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/relay_rest_types_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/short_codes.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/sip_profile.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/swml_webhooks_types_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/verified_callers.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/video.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/video_resources_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/video_types_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/voice_resources_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/namespaces/voice_types_generated.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/schema.json +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/search/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/search/document_processor.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/search/index_builder.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/search/migration.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/search/models.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/search/pgvector_backend.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/search/query_processor.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/search/search_engine.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/search/search_service.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/README.md +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/api_ninjas_trivia/README.md +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/api_ninjas_trivia/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/api_ninjas_trivia/skill.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/claude_skills/README.md +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/claude_skills/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/claude_skills/skill.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/datasphere/README.md +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/datasphere/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/datasphere/skill.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/datasphere_serverless/README.md +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/datasphere_serverless/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/datasphere_serverless/skill.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/datetime/README.md +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/datetime/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/datetime/skill.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/google_maps/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/google_maps/skill.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/info_gatherer/README.md +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/info_gatherer/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/info_gatherer/skill.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/joke/README.md +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/joke/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/joke/skill.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/math/README.md +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/math/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/math/skill.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/mcp_gateway/README.md +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/mcp_gateway/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/mcp_gateway/skill.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/native_vector_search/README.md +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/native_vector_search/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/native_vector_search/skill.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/play_background_file/README.md +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/play_background_file/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/play_background_file/skill.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/registry.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/spider/README.md +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/spider/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/spider/skill.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/swml_transfer/README.md +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/swml_transfer/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/swml_transfer/skill.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/weather_api/README.md +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/weather_api/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/weather_api/skill.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/web_search/README.md +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/web_search/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/web_search/skill.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/web_search/skill_improved.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/web_search/skill_original.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/wikipedia_search/README.md +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/wikipedia_search/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/skills/wikipedia_search/skill.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/utils/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/utils/pom_utils.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/utils/schema_utils.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/utils/token_generators.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/utils/url_validator.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/utils/validators.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/web/__init__.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/web/web_service.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire_sdk.egg-info/SOURCES.txt +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire_sdk.egg-info/dependency_links.txt +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire_sdk.egg-info/entry_points.txt +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire_sdk.egg-info/requires.txt +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire_sdk.egg-info/top_level.txt +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/tests/test_examples.py +0 -0
- {signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/tests/test_mcp_integration.py +0 -0
{signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/__init__.py
RENAMED
|
@@ -52,7 +52,7 @@ if TYPE_CHECKING:
|
|
|
52
52
|
from signalwire.utils.schema_utils import SchemaValidationError
|
|
53
53
|
from signalwire.web import WebService
|
|
54
54
|
|
|
55
|
-
__version__ = "3.4.
|
|
55
|
+
__version__ = "3.4.3.dev115"
|
|
56
56
|
|
|
57
57
|
# §6.2-python (owner decision: NO packaging split — one package, all deps required;
|
|
58
58
|
# IMPORT-TIME behavior only): the agent/web symbols are lazy-imported via module
|
{signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/ai_chat/gateway.py
RENAMED
|
@@ -48,11 +48,35 @@ The origin allowlist is a second layer, and an honest description of it is:
|
|
|
48
48
|
it stops a key pasted into someone else's page, because a browser will send
|
|
49
49
|
their origin and we refuse it. It does not stop anyone using curl. Treat it
|
|
50
50
|
as leak containment, not access control.
|
|
51
|
+
|
|
52
|
+
## What the browser may volunteer
|
|
53
|
+
|
|
54
|
+
Exactly one field is forwarded rather than overwritten: ``user_meta_data``,
|
|
55
|
+
the page context a widget collects about itself (url, title, referrer,
|
|
56
|
+
locale, viewport). It exists so a chat agent can tailor its greeting the way
|
|
57
|
+
a voice agent already does from dial-time ``userVariables`` — same data, same
|
|
58
|
+
shape, different transport — and it reaches the agent's config request as
|
|
59
|
+
``params.user_meta_data``.
|
|
60
|
+
|
|
61
|
+
The service reads it when it *creates* a conversation, which is the ``start``
|
|
62
|
+
call or whichever ``chat`` auto-creates. An already-open conversation does not
|
|
63
|
+
re-fetch its config, so metadata sent on later turns is accepted and goes
|
|
64
|
+
nowhere. Send it every turn regardless — that is what guarantees the creating
|
|
65
|
+
turn carries it — but do not design as though the agent sees a visitor move
|
|
66
|
+
between pages mid-conversation. It does not.
|
|
67
|
+
|
|
68
|
+
It is browser-authored, so treat it as a visitor's *claim* about themselves
|
|
69
|
+
and never as authority; a page can put anything in it, including text aimed
|
|
70
|
+
at your prompt. The gateway bounds it (``MAX_USER_METADATA_BYTES``) and keeps
|
|
71
|
+
it nested under its own key, so it cannot collide with the conversation id or
|
|
72
|
+
``config_url`` the gateway owns — but it cannot vouch for the contents, and
|
|
73
|
+
neither can you.
|
|
51
74
|
"""
|
|
52
75
|
|
|
53
76
|
import base64
|
|
54
77
|
import hashlib
|
|
55
78
|
import hmac
|
|
79
|
+
import json
|
|
56
80
|
import os
|
|
57
81
|
import secrets
|
|
58
82
|
import time
|
|
@@ -82,6 +106,12 @@ _LOCAL_HOSTS = frozenset({"localhost", "127.0.0.1", "::1", "[::1]"})
|
|
|
82
106
|
|
|
83
107
|
ALLOWED_METHODS = frozenset({"start", "chat", "log", "end"})
|
|
84
108
|
|
|
109
|
+
# Bound on the browser-volunteered `user_meta_data` bag, serialized. The real
|
|
110
|
+
# payload a widget sends is one to two KB, so this is invisible to anything
|
|
111
|
+
# honest; without it a page rides every turn with unbounded bytes into a
|
|
112
|
+
# metered service on the project's tab.
|
|
113
|
+
MAX_USER_METADATA_BYTES = 8 * 1024
|
|
114
|
+
|
|
85
115
|
# Roles a browser may see. `chat_log` returns the WHOLE conversation as the
|
|
86
116
|
# service holds it — the substituted system prompt, tool calls, tool results.
|
|
87
117
|
# The system prompt is the developer's own content and the tool traffic is
|
|
@@ -399,6 +429,36 @@ class ChatGateway:
|
|
|
399
429
|
|
|
400
430
|
# ── The proxied call ─────────────────────────────────────────────
|
|
401
431
|
|
|
432
|
+
def read_user_metadata(self, body: dict[str, Any]) -> dict[str, Any] | None:
|
|
433
|
+
"""Validate the page context a browser volunteered, or None.
|
|
434
|
+
|
|
435
|
+
The only field the gateway forwards instead of overwriting, so it is
|
|
436
|
+
the only one that needs a shape and a size. Absent, null and empty all
|
|
437
|
+
collapse to None — an empty bag upstream is noise, not information.
|
|
438
|
+
|
|
439
|
+
Raises:
|
|
440
|
+
GatewayRejection: 400 if it is not a JSON object, 413 if it
|
|
441
|
+
exceeds :data:`MAX_USER_METADATA_BYTES` serialized.
|
|
442
|
+
"""
|
|
443
|
+
raw = body.get("user_meta_data")
|
|
444
|
+
if raw is None:
|
|
445
|
+
return None
|
|
446
|
+
if not isinstance(raw, dict):
|
|
447
|
+
raise GatewayRejection(400, "user_meta_data must be an object")
|
|
448
|
+
if not raw:
|
|
449
|
+
return None
|
|
450
|
+
try:
|
|
451
|
+
encoded = json.dumps(raw, separators=(",", ":")).encode()
|
|
452
|
+
except (TypeError, ValueError):
|
|
453
|
+
# prepare() is public, so this can be reached with a dict that
|
|
454
|
+
# never went through request.json() and holds something unsendable.
|
|
455
|
+
raise GatewayRejection(
|
|
456
|
+
400, "user_meta_data must be JSON-serializable"
|
|
457
|
+
) from None
|
|
458
|
+
if len(encoded) > MAX_USER_METADATA_BYTES:
|
|
459
|
+
raise GatewayRejection(413, "user_meta_data too large")
|
|
460
|
+
return raw
|
|
461
|
+
|
|
402
462
|
def prepare(
|
|
403
463
|
self, body: dict[str, Any], *, origin: str | None, key: str | None
|
|
404
464
|
) -> tuple[str, dict[str, Any], str | None]:
|
|
@@ -411,6 +471,9 @@ class ChatGateway:
|
|
|
411
471
|
Everything the browser could use to widen its own access is either
|
|
412
472
|
rejected or overwritten here: the method must be one of two, the
|
|
413
473
|
conversation comes from a signed handle, and ``config_url`` is ours.
|
|
474
|
+
The single exception is ``user_meta_data``, which is forwarded — see
|
|
475
|
+
:meth:`read_user_metadata` and the module docstring for why that is
|
|
476
|
+
narrow enough to be safe and what it still does not vouch for.
|
|
414
477
|
"""
|
|
415
478
|
self.check_key(key)
|
|
416
479
|
self.check_origin(origin)
|
|
@@ -419,6 +482,11 @@ class ChatGateway:
|
|
|
419
482
|
if method not in ALLOWED_METHODS:
|
|
420
483
|
raise GatewayRejection(400, "method not allowed")
|
|
421
484
|
|
|
485
|
+
# Read before minting so a malformed bag costs the caller nothing —
|
|
486
|
+
# rejecting after _charge_mint() would burn a conversation slot on a
|
|
487
|
+
# request that never reaches the service.
|
|
488
|
+
user_metadata = self.read_user_metadata(body)
|
|
489
|
+
|
|
422
490
|
handle = body.get("handle")
|
|
423
491
|
minted = None
|
|
424
492
|
if handle:
|
|
@@ -450,6 +518,8 @@ class ChatGateway:
|
|
|
450
518
|
}
|
|
451
519
|
if self.conversation_timeout:
|
|
452
520
|
params["conversation_timeout"] = self.conversation_timeout
|
|
521
|
+
if user_metadata:
|
|
522
|
+
params["user_meta_data"] = user_metadata
|
|
453
523
|
return "create_conversation", params, minted
|
|
454
524
|
|
|
455
525
|
message = body.get("message")
|
|
@@ -470,6 +540,17 @@ class ChatGateway:
|
|
|
470
540
|
# by a first message would silently get the service default instead.
|
|
471
541
|
if self.conversation_timeout:
|
|
472
542
|
chat_params["conversation_timeout"] = self.conversation_timeout
|
|
543
|
+
# On every chat, because any chat may be the one that creates: the
|
|
544
|
+
# service auto-creates from this method when the conversation does not
|
|
545
|
+
# exist yet, and that is the only moment it reads the bag.
|
|
546
|
+
#
|
|
547
|
+
# Verified against the service, because the natural assumption is
|
|
548
|
+
# wrong: an existing conversation is NOT re-fetched, so metadata sent
|
|
549
|
+
# on later turns is accepted and discarded. Sending it anyway costs a
|
|
550
|
+
# bounded field and means the creating turn is never the one that
|
|
551
|
+
# missed — do not read it as the agent tracking a visitor's movement.
|
|
552
|
+
if user_metadata:
|
|
553
|
+
chat_params["user_meta_data"] = user_metadata
|
|
473
554
|
return "chat", chat_params, minted
|
|
474
555
|
|
|
475
556
|
# ── FastAPI surface ──────────────────────────────────────────────
|
|
@@ -477,7 +558,8 @@ class ChatGateway:
|
|
|
477
558
|
def router(self) -> "APIRouter":
|
|
478
559
|
"""An ``APIRouter`` exposing this gateway.
|
|
479
560
|
|
|
480
|
-
``POST /`` takes
|
|
561
|
+
``POST /`` takes
|
|
562
|
+
``{"method": "chat"|"end", "handle"?, "message"?, "user_meta_data"?}``
|
|
481
563
|
with the key in ``Authorization: Bearer``. A chat streams the
|
|
482
564
|
service's JSON-RPC response body through **unbuffered** — the service
|
|
483
565
|
pads slow turns with keepalive whitespace so proxies do not sever the
|
|
@@ -547,6 +629,7 @@ class ChatGateway:
|
|
|
547
629
|
params["id"],
|
|
548
630
|
config_url=params["config_url"],
|
|
549
631
|
timeout=params.get("conversation_timeout"),
|
|
632
|
+
user_metadata=params.get("user_meta_data"),
|
|
550
633
|
)
|
|
551
634
|
if minted:
|
|
552
635
|
cors["X-Chat-Handle"] = minted
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/agents/__init__.py
RENAMED
|
File without changes
|
{signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/agents/bedrock.py
RENAMED
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/ai_chat/client.py
RENAMED
|
File without changes
|
{signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/ai_chat/handoff.py
RENAMED
|
File without changes
|
{signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/cli/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/cli/config.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/cli/dokku.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/cli/test_swaig.py
RENAMED
|
File without changes
|
{signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/cli/types.py
RENAMED
|
File without changes
|
{signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/agent_base.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/contexts.py
RENAMED
|
File without changes
|
{signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/data_map.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/skill_base.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/core/web.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/pom/__init__.py
RENAMED
|
File without changes
|
{signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/pom/pom.py
RENAMED
|
File without changes
|
{signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/pom/pom_tool.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/prefabs/faq_bot.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/prefabs/survey.py
RENAMED
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/relay/__init__.py
RENAMED
|
File without changes
|
{signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/relay/call.py
RENAMED
|
File without changes
|
{signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/relay/client.py
RENAMED
|
File without changes
|
{signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/relay/constants.py
RENAMED
|
File without changes
|
{signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/relay/event.py
RENAMED
|
File without changes
|
{signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/relay/message.py
RENAMED
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/__init__.py
RENAMED
|
File without changes
|
{signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/_base.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.4.2.dev114 → signalwire_sdk-3.4.3.dev115}/signalwire/signalwire/rest/client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|