signalwire-sdk 3.2.0.dev91__tar.gz → 3.2.0.dev95__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.2.0.dev91/signalwire/signalwire_sdk.egg-info → signalwire_sdk-3.2.0.dev95}/PKG-INFO +1 -2
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/pyproject.toml +1 -2
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/__init__.py +78 -36
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/agent_server.py +10 -2
- signalwire_sdk-3.2.0.dev95/signalwire/signalwire/core/__init__.py +59 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/logging_config.py +24 -3
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/mixins/web_mixin.py +6 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/swml_service.py +6 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/pom/pom_tool.py +33 -14
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/relay/call.py +20 -7
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/relay/client.py +148 -10
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/relay/constants.py +8 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/__init__.py +2 -0
- signalwire_sdk-3.2.0.dev95/signalwire/signalwire/rest/_base.py +485 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/_pagination.py +23 -1
- signalwire_sdk-3.2.0.dev95/signalwire/signalwire/rest/_request_options.py +159 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/client.py +3 -1
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/addresses.py +2 -2
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/calling.py +2 -2
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/calling_resources_generated.py +348 -55
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/chat.py +2 -2
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/chat_resources_generated.py +9 -1
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/datasphere.py +2 -2
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/datasphere_resources_generated.py +55 -9
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/fabric.py +2 -2
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/fabric_resources_generated.py +296 -62
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/fax_resources_generated.py +2 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/imported_numbers.py +2 -2
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/logs.py +2 -2
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/logs_resources_generated.py +8 -2
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/lookup.py +2 -2
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/message_resources_generated.py +2 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/messages_resources_generated.py +16 -2
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/mfa.py +2 -2
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/number_groups.py +2 -2
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/phone_numbers.py +2 -2
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/project.py +2 -2
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/project_resources_generated.py +23 -4
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/projects_resources_generated.py +22 -4
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/pubsub.py +2 -2
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/pubsub_resources_generated.py +9 -1
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/queues.py +2 -2
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/recordings.py +2 -2
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/registry.py +2 -2
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/relay_rest_resources_generated.py +362 -85
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/short_codes.py +2 -2
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/sip_profile.py +2 -2
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/verified_callers.py +2 -2
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/video.py +2 -2
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/video_resources_generated.py +154 -36
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/voice_resources_generated.py +10 -2
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95/signalwire/signalwire_sdk.egg-info}/PKG-INFO +1 -2
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire_sdk.egg-info/SOURCES.txt +1 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire_sdk.egg-info/requires.txt +0 -1
- signalwire_sdk-3.2.0.dev91/signalwire/signalwire/core/__init__.py +0 -27
- signalwire_sdk-3.2.0.dev91/signalwire/signalwire/rest/_base.py +0 -251
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/LICENSE +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/README.md +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/man/sw-agent-init.1 +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/man/sw-search.1 +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/man/swaig-test.1 +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/setup.cfg +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/setup.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/agents/bedrock.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/cli/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/cli/build_search.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/cli/config.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/cli/core/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/cli/core/agent_loader.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/cli/core/argparse_helpers.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/cli/core/dynamic_config.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/cli/core/service_loader.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/cli/dokku.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/cli/execution/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/cli/execution/datamap_exec.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/cli/execution/webhook_exec.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/cli/init_project.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/cli/output/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/cli/output/output_formatter.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/cli/output/swml_dump.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/cli/simulation/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/cli/simulation/data_generation.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/cli/simulation/data_overrides.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/cli/simulation/mock_env.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/cli/swaig_test_wrapper.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/cli/test_swaig.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/cli/types.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/_agent_host.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/agent/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/agent/config/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/agent/deployment/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/agent/deployment/handlers/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/agent/prompt/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/agent/prompt/manager.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/agent/routing/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/agent/security/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/agent/swml/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/agent/tools/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/agent/tools/decorator.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/agent/tools/registry.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/agent/tools/type_inference.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/agent_base.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/auth_handler.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/config_loader.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/contexts.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/data_map.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/function_result.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/mixins/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/mixins/_mixin_host.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/mixins/ai_config_mixin.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/mixins/auth_mixin.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/mixins/mcp_server_mixin.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/mixins/prompt_mixin.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/mixins/serverless_mixin.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/mixins/skill_mixin.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/mixins/state_mixin.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/mixins/tool_mixin.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/pom_builder.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/post_prompt_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/security/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/security/security_utils.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/security/session_manager.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/security/webhook_middleware.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/security/webhook_validator.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/security_config.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/skill_base.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/skill_manager.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/swaig_actions_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/swaig_function.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/swaig_request_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/swml_builder.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/swml_handler.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/swml_renderer.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/swml_verbs_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/web.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/livewire/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/livewire/plugins.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/mcp_gateway/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/mcp_gateway/gateway_service.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/mcp_gateway/mcp_manager.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/mcp_gateway/session_manager.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/pom/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/pom/pom.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/prefabs/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/prefabs/concierge.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/prefabs/faq_bot.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/prefabs/info_gatherer.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/prefabs/receptionist.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/prefabs/survey.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/py.typed +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/relay/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/relay/event.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/relay/message.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/relay/protocol_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/call_handler.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/_client_tree_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/calling_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/chat_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/datasphere_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/fabric_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/fax_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/logs_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/message_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/messages_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/project_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/projects_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/pubsub_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/relay_rest_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/swml_webhooks_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/video_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/rest/namespaces/voice_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/schema.json +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/search/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/search/document_processor.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/search/index_builder.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/search/migration.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/search/models.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/search/pgvector_backend.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/search/query_processor.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/search/search_engine.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/search/search_service.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/README.md +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/api_ninjas_trivia/README.md +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/api_ninjas_trivia/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/api_ninjas_trivia/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/claude_skills/README.md +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/claude_skills/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/claude_skills/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/datasphere/README.md +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/datasphere/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/datasphere/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/datasphere_serverless/README.md +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/datasphere_serverless/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/datasphere_serverless/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/datetime/README.md +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/datetime/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/datetime/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/google_maps/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/google_maps/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/info_gatherer/README.md +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/info_gatherer/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/info_gatherer/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/joke/README.md +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/joke/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/joke/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/math/README.md +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/math/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/math/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/mcp_gateway/README.md +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/mcp_gateway/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/mcp_gateway/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/native_vector_search/README.md +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/native_vector_search/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/native_vector_search/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/play_background_file/README.md +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/play_background_file/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/play_background_file/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/registry.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/spider/README.md +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/spider/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/spider/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/swml_transfer/README.md +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/swml_transfer/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/swml_transfer/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/weather_api/README.md +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/weather_api/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/weather_api/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/web_search/README.md +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/web_search/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/web_search/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/web_search/skill_improved.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/web_search/skill_original.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/wikipedia_search/README.md +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/wikipedia_search/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/skills/wikipedia_search/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/utils/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/utils/pom_utils.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/utils/schema_utils.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/utils/token_generators.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/utils/url_validator.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/utils/validators.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/web/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/web/web_service.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire_sdk.egg-info/dependency_links.txt +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire_sdk.egg-info/entry_points.txt +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire_sdk.egg-info/top_level.txt +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/tests/test_examples.py +0 -0
- {signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/tests/test_mcp_integration.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: signalwire-sdk
|
|
3
|
-
Version: 3.2.0.
|
|
3
|
+
Version: 3.2.0.dev95
|
|
4
4
|
Summary: SignalWire SDK
|
|
5
5
|
Author-email: SignalWire Team <info@signalwire.com>
|
|
6
6
|
License: MIT
|
|
@@ -21,7 +21,6 @@ Requires-Dist: fastapi>=0.115.12
|
|
|
21
21
|
Requires-Dist: pydantic>=2.11.4
|
|
22
22
|
Requires-Dist: PyYAML>=6.0.2
|
|
23
23
|
Requires-Dist: Requests>=2.32.4
|
|
24
|
-
Requires-Dist: docopt>=0.6.2
|
|
25
24
|
Requires-Dist: structlog>=25.3.0
|
|
26
25
|
Requires-Dist: uvicorn>=0.34.2
|
|
27
26
|
Requires-Dist: beautifulsoup4>=4.12.3
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "signalwire-sdk"
|
|
7
|
-
version = "3.2.0.
|
|
7
|
+
version = "3.2.0.dev95"
|
|
8
8
|
description = "SignalWire SDK"
|
|
9
9
|
authors = [
|
|
10
10
|
{name = "SignalWire Team", email = "info@signalwire.com"}
|
|
@@ -28,7 +28,6 @@ dependencies = [
|
|
|
28
28
|
"pydantic>=2.11.4",
|
|
29
29
|
"PyYAML>=6.0.2",
|
|
30
30
|
"Requests>=2.32.4",
|
|
31
|
-
"docopt>=0.6.2",
|
|
32
31
|
"structlog>=25.3.0",
|
|
33
32
|
"uvicorn>=0.34.2",
|
|
34
33
|
"beautifulsoup4>=4.12.3",
|
|
@@ -14,48 +14,90 @@ A package for building AI agents using SignalWire's AI and SWML capabilities.
|
|
|
14
14
|
|
|
15
15
|
from typing import TYPE_CHECKING, Any
|
|
16
16
|
|
|
17
|
-
#
|
|
18
|
-
|
|
17
|
+
# Library-safe logging: importing signalwire installs ONLY a NullHandler on the
|
|
18
|
+
# `signalwire` namespace logger (done at logging_config module load). It does NOT
|
|
19
|
+
# configure global logging — that would hijack the host application's logging (its
|
|
20
|
+
# structlog config, its root/generic-named loggers). The app opts in to SDK log
|
|
21
|
+
# OUTPUT by calling configure_logging() explicitly; the server/CLI entry points do.
|
|
22
|
+
from .core.logging_config import configure_logging # noqa: F401 (re-exported)
|
|
19
23
|
|
|
20
24
|
if TYPE_CHECKING:
|
|
21
25
|
from signalwire.rest.client import RestClient as _RestClient
|
|
22
26
|
from signalwire.core.skill_base import SkillBase
|
|
23
27
|
from signalwire.skills.registry import SkillRegistry
|
|
24
28
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
from signalwire.
|
|
47
|
-
from signalwire.
|
|
48
|
-
from signalwire.
|
|
49
|
-
from signalwire.
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
#
|
|
58
|
-
from signalwire
|
|
29
|
+
# §6.2-python: the public symbols are LAZY at runtime (PEP 562, below) so
|
|
30
|
+
# `import signalwire` doesn't drag FastAPI/uvicorn/pydantic at import time; the
|
|
31
|
+
# eager imports here keep type checkers and IDEs fully aware of the real types.
|
|
32
|
+
from signalwire.core.agent_base import AgentBase
|
|
33
|
+
from signalwire.core.contexts import (
|
|
34
|
+
ContextBuilder,
|
|
35
|
+
Context,
|
|
36
|
+
Step,
|
|
37
|
+
GatherInfo,
|
|
38
|
+
GatherQuestion,
|
|
39
|
+
create_simple_context,
|
|
40
|
+
)
|
|
41
|
+
from signalwire.core.data_map import (
|
|
42
|
+
DataMap,
|
|
43
|
+
create_simple_api_tool,
|
|
44
|
+
create_expression_tool,
|
|
45
|
+
)
|
|
46
|
+
from signalwire.agent_server import AgentServer
|
|
47
|
+
from signalwire.core.swml_service import SWMLService
|
|
48
|
+
from signalwire.core.swml_builder import SWMLBuilder
|
|
49
|
+
from signalwire.core.function_result import FunctionResult, SwaigFunctionResult
|
|
50
|
+
from signalwire.core.swaig_function import SWAIGFunction
|
|
51
|
+
from signalwire.agents.bedrock import BedrockAgent
|
|
52
|
+
from signalwire.utils.schema_utils import SchemaValidationError
|
|
53
|
+
from signalwire.web import WebService
|
|
54
|
+
|
|
55
|
+
__version__ = "3.2.0.dev95"
|
|
56
|
+
|
|
57
|
+
# §6.2-python (owner decision: NO packaging split — one package, all deps required;
|
|
58
|
+
# IMPORT-TIME behavior only): the agent/web symbols are lazy-imported via module
|
|
59
|
+
# __getattr__ (PEP 562) so `import signalwire` no longer drags FastAPI / uvicorn /
|
|
60
|
+
# starlette / pydantic into every process — a REST-only script imports in
|
|
61
|
+
# milliseconds. First ATTRIBUTE ACCESS (signalwire.AgentBase,
|
|
62
|
+
# `from signalwire import AgentBase`) triggers the real import and caches it on the
|
|
63
|
+
# module, so the public surface is byte-identical to the old eager form.
|
|
64
|
+
_LAZY_IMPORTS: dict[str, tuple[str, str]] = {
|
|
65
|
+
"AgentBase": ("signalwire.core.agent_base", "AgentBase"),
|
|
66
|
+
"ContextBuilder": ("signalwire.core.contexts", "ContextBuilder"),
|
|
67
|
+
"Context": ("signalwire.core.contexts", "Context"),
|
|
68
|
+
"Step": ("signalwire.core.contexts", "Step"),
|
|
69
|
+
"GatherInfo": ("signalwire.core.contexts", "GatherInfo"),
|
|
70
|
+
"GatherQuestion": ("signalwire.core.contexts", "GatherQuestion"),
|
|
71
|
+
"create_simple_context": ("signalwire.core.contexts", "create_simple_context"),
|
|
72
|
+
"DataMap": ("signalwire.core.data_map", "DataMap"),
|
|
73
|
+
"create_simple_api_tool": ("signalwire.core.data_map", "create_simple_api_tool"),
|
|
74
|
+
"create_expression_tool": ("signalwire.core.data_map", "create_expression_tool"),
|
|
75
|
+
"AgentServer": ("signalwire.agent_server", "AgentServer"),
|
|
76
|
+
"SWMLService": ("signalwire.core.swml_service", "SWMLService"),
|
|
77
|
+
"SWMLBuilder": ("signalwire.core.swml_builder", "SWMLBuilder"),
|
|
78
|
+
"FunctionResult": ("signalwire.core.function_result", "FunctionResult"),
|
|
79
|
+
"SwaigFunctionResult": ("signalwire.core.function_result", "SwaigFunctionResult"),
|
|
80
|
+
"SWAIGFunction": ("signalwire.core.swaig_function", "SWAIGFunction"),
|
|
81
|
+
"BedrockAgent": ("signalwire.agents.bedrock", "BedrockAgent"),
|
|
82
|
+
"SchemaValidationError": ("signalwire.utils.schema_utils", "SchemaValidationError"),
|
|
83
|
+
"WebService": ("signalwire.web", "WebService"),
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def __getattr__(name: str) -> Any:
|
|
88
|
+
"""PEP 562 lazy attribute resolution for the public agent/web symbols."""
|
|
89
|
+
spec = _LAZY_IMPORTS.get(name)
|
|
90
|
+
if spec is None:
|
|
91
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
92
|
+
import importlib
|
|
93
|
+
|
|
94
|
+
value = getattr(importlib.import_module(spec[0]), spec[1])
|
|
95
|
+
globals()[name] = value # cache — subsequent access skips __getattr__
|
|
96
|
+
return value
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def __dir__() -> list[str]:
|
|
100
|
+
return sorted(set(globals()) | set(_LAZY_IMPORTS))
|
|
59
101
|
|
|
60
102
|
|
|
61
103
|
# Lazy import skills to avoid slow startup for CLI tools
|
{signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/agent_server.py
RENAMED
|
@@ -68,7 +68,7 @@ class AgentServer:
|
|
|
68
68
|
self.app = FastAPI(
|
|
69
69
|
title="SignalWire AI Agents",
|
|
70
70
|
description="Hosted SignalWire AI Agents",
|
|
71
|
-
version="3.2.0.
|
|
71
|
+
version="3.2.0.dev95",
|
|
72
72
|
redirect_slashes=False,
|
|
73
73
|
docs_url=None,
|
|
74
74
|
redoc_url=None,
|
|
@@ -372,7 +372,15 @@ class AgentServer:
|
|
|
372
372
|
|
|
373
373
|
# Imported lazily here so tests can patch
|
|
374
374
|
# signalwire.core.logging_config.get_execution_mode at call time.
|
|
375
|
-
from signalwire.core.logging_config import
|
|
375
|
+
from signalwire.core.logging_config import (
|
|
376
|
+
configure_logging,
|
|
377
|
+
get_execution_mode,
|
|
378
|
+
)
|
|
379
|
+
|
|
380
|
+
# Opt-in to SDK logging OUTPUT at the run entry point (import is
|
|
381
|
+
# library-safe / silent; running is where the app wants logs). This also
|
|
382
|
+
# applies the CGI-off / auto detection that configure_logging performs.
|
|
383
|
+
configure_logging()
|
|
376
384
|
|
|
377
385
|
# Detect execution mode
|
|
378
386
|
mode = get_execution_mode()
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Copyright (c) 2025 SignalWire
|
|
3
|
+
|
|
4
|
+
This file is part of the SignalWire SDK.
|
|
5
|
+
|
|
6
|
+
Licensed under the MIT License.
|
|
7
|
+
See LICENSE file in the project root for full license information.
|
|
8
|
+
|
|
9
|
+
Core components for SignalWire AI Agents
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from typing import TYPE_CHECKING, Any
|
|
13
|
+
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from signalwire.core.agent_base import AgentBase
|
|
16
|
+
from signalwire.core.function_result import FunctionResult
|
|
17
|
+
from signalwire.core.swaig_function import SWAIGFunction
|
|
18
|
+
from signalwire.core.swml_service import SWMLService
|
|
19
|
+
from signalwire.core.swml_handler import SWMLVerbHandler, VerbHandlerRegistry
|
|
20
|
+
from signalwire.core.swml_builder import SWMLBuilder
|
|
21
|
+
|
|
22
|
+
# §6.2-python: lazy (PEP 562) so importing any signalwire.core.* leaf (e.g.
|
|
23
|
+
# logging_config from the package root) doesn't drag AgentBase → FastAPI into every
|
|
24
|
+
# process. First attribute access resolves + caches; public surface unchanged.
|
|
25
|
+
_LAZY_IMPORTS: dict[str, tuple[str, str]] = {
|
|
26
|
+
"AgentBase": ("signalwire.core.agent_base", "AgentBase"),
|
|
27
|
+
"FunctionResult": ("signalwire.core.function_result", "FunctionResult"),
|
|
28
|
+
"SWAIGFunction": ("signalwire.core.swaig_function", "SWAIGFunction"),
|
|
29
|
+
"SWMLService": ("signalwire.core.swml_service", "SWMLService"),
|
|
30
|
+
"SWMLVerbHandler": ("signalwire.core.swml_handler", "SWMLVerbHandler"),
|
|
31
|
+
"VerbHandlerRegistry": ("signalwire.core.swml_handler", "VerbHandlerRegistry"),
|
|
32
|
+
"SWMLBuilder": ("signalwire.core.swml_builder", "SWMLBuilder"),
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def __getattr__(name: str) -> Any:
|
|
37
|
+
spec = _LAZY_IMPORTS.get(name)
|
|
38
|
+
if spec is None:
|
|
39
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
40
|
+
import importlib
|
|
41
|
+
|
|
42
|
+
value = getattr(importlib.import_module(spec[0]), spec[1])
|
|
43
|
+
globals()[name] = value
|
|
44
|
+
return value
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def __dir__() -> list[str]:
|
|
48
|
+
return sorted(set(globals()) | set(_LAZY_IMPORTS))
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
__all__ = [
|
|
52
|
+
"AgentBase",
|
|
53
|
+
"FunctionResult",
|
|
54
|
+
"SWAIGFunction",
|
|
55
|
+
"SWMLBuilder",
|
|
56
|
+
"SWMLService",
|
|
57
|
+
"SWMLVerbHandler",
|
|
58
|
+
"VerbHandlerRegistry",
|
|
59
|
+
]
|
|
@@ -43,6 +43,25 @@ def strip_control_chars(
|
|
|
43
43
|
_logging_configured = False
|
|
44
44
|
|
|
45
45
|
|
|
46
|
+
def _install_library_null_handler() -> None:
|
|
47
|
+
"""Attach a NullHandler to the ``signalwire`` namespace logger (the standard
|
|
48
|
+
library pattern for a well-behaved library, per the stdlib logging HOWTO).
|
|
49
|
+
|
|
50
|
+
This is the ONLY logging side effect of importing the SDK. It makes the SDK's
|
|
51
|
+
own loggers silent-by-default (no "No handlers could be found" warning) WITHOUT
|
|
52
|
+
touching the root logger, the host application's structlog config, or any
|
|
53
|
+
host-owned logger — so ``import signalwire`` never hijacks the app's logging.
|
|
54
|
+
The app opts in to SDK log OUTPUT by calling ``configure_logging()`` explicitly
|
|
55
|
+
(the server/CLI entry points do this)."""
|
|
56
|
+
sw_logger = logging.getLogger("signalwire")
|
|
57
|
+
if not any(isinstance(h, logging.NullHandler) for h in sw_logger.handlers):
|
|
58
|
+
sw_logger.addHandler(logging.NullHandler())
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
# Import-time side effect: ONLY the library NullHandler. NOT global configuration.
|
|
62
|
+
_install_library_null_handler()
|
|
63
|
+
|
|
64
|
+
|
|
46
65
|
def get_execution_mode() -> str:
|
|
47
66
|
"""
|
|
48
67
|
Determine the execution mode based on environment variables
|
|
@@ -307,7 +326,9 @@ def get_logger(name: str) -> Any:
|
|
|
307
326
|
Returns:
|
|
308
327
|
A structlog BoundLogger that supports .bind(), .info(), .debug(), etc.
|
|
309
328
|
"""
|
|
310
|
-
#
|
|
311
|
-
|
|
312
|
-
|
|
329
|
+
# Library-safe: do NOT auto-configure global logging here. Every SDK module
|
|
330
|
+
# calls get_logger() at import, so auto-configuring would hijack the host
|
|
331
|
+
# app's logging the moment any SDK submodule is imported. The SDK's own
|
|
332
|
+
# logger carries a NullHandler (installed at module load) so it's silent by
|
|
333
|
+
# default; the app opts in to SDK output via configure_logging().
|
|
313
334
|
return structlog.get_logger(name)
|
|
@@ -204,6 +204,12 @@ class WebMixin(_HostTyped): # type: ignore[misc] # _HostTyped is object at run
|
|
|
204
204
|
"""
|
|
205
205
|
import uvicorn
|
|
206
206
|
|
|
207
|
+
# Opt-in to SDK logging OUTPUT at the serve entry point (importing the SDK
|
|
208
|
+
# is library-safe / silent; running a server is where the app wants logs).
|
|
209
|
+
from signalwire.core.logging_config import configure_logging
|
|
210
|
+
|
|
211
|
+
configure_logging()
|
|
212
|
+
|
|
207
213
|
if self._app is None:
|
|
208
214
|
# Create a FastAPI app with explicit redirect_slashes=False
|
|
209
215
|
app = FastAPI(
|
{signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/core/swml_service.py
RENAMED
|
@@ -1200,6 +1200,12 @@ class SWMLService(ToolMixin):
|
|
|
1200
1200
|
"""
|
|
1201
1201
|
import uvicorn
|
|
1202
1202
|
|
|
1203
|
+
# Opt-in to SDK logging OUTPUT at the serve entry point (import is
|
|
1204
|
+
# library-safe / silent; serving is where the app wants logs).
|
|
1205
|
+
from signalwire.core.logging_config import configure_logging
|
|
1206
|
+
|
|
1207
|
+
configure_logging()
|
|
1208
|
+
|
|
1203
1209
|
# Store SSL configuration (override environment if explicitly provided)
|
|
1204
1210
|
if ssl_enabled is not None:
|
|
1205
1211
|
self.ssl_enabled = ssl_enabled
|
{signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/pom/pom_tool.py
RENAMED
|
@@ -13,11 +13,11 @@ Options:
|
|
|
13
13
|
--merge_pom=<arg> Merge another POM into a section: "<section name>:<filename>"
|
|
14
14
|
"""
|
|
15
15
|
|
|
16
|
+
import argparse
|
|
16
17
|
import sys
|
|
17
18
|
import json
|
|
18
19
|
from pathlib import Path
|
|
19
20
|
import yaml
|
|
20
|
-
from docopt import docopt
|
|
21
21
|
from signalwire.pom import PromptObjectModel
|
|
22
22
|
|
|
23
23
|
|
|
@@ -82,19 +82,38 @@ def render_pom(pom: "PromptObjectModel", output_format: str) -> str:
|
|
|
82
82
|
|
|
83
83
|
def main() -> None:
|
|
84
84
|
"""Main entry point for the POM tool."""
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
85
|
+
# §6.2-python: argparse (stdlib) replaced the unmaintained docopt — identical CLI
|
|
86
|
+
# surface (same flags/defaults/usage), one fewer dependency.
|
|
87
|
+
parser = argparse.ArgumentParser(
|
|
88
|
+
prog="pom_tool",
|
|
89
|
+
description="POM Tool - work with Prompt Object Model files",
|
|
90
|
+
)
|
|
91
|
+
parser.add_argument("input_file", help="POM file to load (JSON or YAML)")
|
|
92
|
+
parser.add_argument(
|
|
93
|
+
"--output",
|
|
94
|
+
default="md",
|
|
95
|
+
metavar="<format>",
|
|
96
|
+
choices=["md", "xml", "json", "yaml"],
|
|
97
|
+
help="Output format: md, xml, json, yaml [default: md]",
|
|
98
|
+
)
|
|
99
|
+
parser.add_argument(
|
|
100
|
+
"--outfile",
|
|
101
|
+
default=None,
|
|
102
|
+
metavar="<file>",
|
|
103
|
+
help="Output file (if not specified, prints to stdout)",
|
|
104
|
+
)
|
|
105
|
+
parser.add_argument(
|
|
106
|
+
"--merge_pom",
|
|
107
|
+
default=None,
|
|
108
|
+
metavar="<arg>",
|
|
109
|
+
help='Merge another POM into a section: "<section name>:<filename>"',
|
|
110
|
+
)
|
|
111
|
+
ns = parser.parse_args()
|
|
112
|
+
|
|
113
|
+
input_file = ns.input_file
|
|
114
|
+
output_format = ns.output
|
|
115
|
+
output_file = ns.outfile
|
|
116
|
+
merge_pom = ns.merge_pom
|
|
98
117
|
|
|
99
118
|
try:
|
|
100
119
|
# Load the POM
|
{signalwire_sdk-3.2.0.dev91 → signalwire_sdk-3.2.0.dev95}/signalwire/signalwire/relay/call.py
RENAMED
|
@@ -112,9 +112,15 @@ class Action:
|
|
|
112
112
|
)
|
|
113
113
|
|
|
114
114
|
async def wait(self, timeout: float | None = None) -> RelayEvent:
|
|
115
|
-
"""Wait for the action to complete. Returns the terminal event.
|
|
115
|
+
"""Wait for the action to complete. Returns the terminal event.
|
|
116
|
+
|
|
117
|
+
Raises ``asyncio.TimeoutError`` if ``timeout`` is exceeded. A timed-out
|
|
118
|
+
wait does NOT poison the action: ``self._done`` is shielded so the
|
|
119
|
+
``wait_for`` cancellation stops the wait, not the underlying completion
|
|
120
|
+
future — the still-pending terminal event resolves the action normally
|
|
121
|
+
and a subsequent ``wait()`` returns it (mirrors ``Message.wait``)."""
|
|
116
122
|
if timeout is not None:
|
|
117
|
-
return await asyncio.wait_for(self._done, timeout=timeout)
|
|
123
|
+
return await asyncio.wait_for(asyncio.shield(self._done), timeout=timeout)
|
|
118
124
|
return await self._done
|
|
119
125
|
|
|
120
126
|
@property
|
|
@@ -377,9 +383,14 @@ class Call:
|
|
|
377
383
|
The outer JSON-RPC method is ``"calling.<method>"`` (e.g.
|
|
378
384
|
``"calling.answer"``) with ``node_id`` and ``call_id`` in params.
|
|
379
385
|
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
386
|
+
A2 contract (the documented behavior — only "call gone" is swallowed):
|
|
387
|
+
a **404** or **410** server error means the call no longer exists, so the
|
|
388
|
+
verb is a no-op and returns ``{}`` (the caller's action can't proceed but
|
|
389
|
+
that isn't an error worth raising). **Every other non-2xx server error
|
|
390
|
+
RAISES** — the previous code swallowed ALL errors carrying a ``code``,
|
|
391
|
+
which hid real failures (auth, bad params, server faults) the developer
|
|
392
|
+
must see. The docstring/contract always promised 404/410-only; the code
|
|
393
|
+
now matches it.
|
|
383
394
|
"""
|
|
384
395
|
rpc_method = f"calling.{method}"
|
|
385
396
|
params: dict[str, Any] = {
|
|
@@ -392,11 +403,13 @@ class Call:
|
|
|
392
403
|
return await self._client.execute(rpc_method, params)
|
|
393
404
|
except Exception as exc:
|
|
394
405
|
code = getattr(exc, "code", None)
|
|
395
|
-
if code
|
|
406
|
+
if code in (404, 410):
|
|
407
|
+
# Call gone — swallow per the documented contract, return no-op.
|
|
396
408
|
logger.warning(
|
|
397
|
-
f"Call {self.call_id}
|
|
409
|
+
f"Call {self.call_id} gone during {method} (code={code}): {exc}"
|
|
398
410
|
)
|
|
399
411
|
return {}
|
|
412
|
+
# Any other server error (or a non-coded exception) propagates.
|
|
400
413
|
raise
|
|
401
414
|
|
|
402
415
|
# ------------------------------------------------------------------
|