signalwire-sdk 3.2.0.dev95__tar.gz → 3.2.0.dev97__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.dev95/signalwire/signalwire_sdk.egg-info → signalwire_sdk-3.2.0.dev97}/PKG-INFO +9 -2
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/README.md +8 -1
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/pyproject.toml +14 -1
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/__init__.py +1 -1
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/agent_server.py +1 -1
- signalwire_sdk-3.2.0.dev97/signalwire/signalwire/agents/__init__.py +16 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/contexts.py +32 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/swml_renderer.py +6 -2
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/swml_service.py +24 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/utils/schema_utils.py +58 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97/signalwire/signalwire_sdk.egg-info}/PKG-INFO +9 -2
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire_sdk.egg-info/SOURCES.txt +1 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/LICENSE +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/man/sw-agent-init.1 +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/man/sw-search.1 +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/man/swaig-test.1 +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/setup.cfg +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/setup.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/agents/bedrock.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/cli/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/cli/build_search.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/cli/config.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/cli/core/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/cli/core/agent_loader.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/cli/core/argparse_helpers.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/cli/core/dynamic_config.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/cli/core/service_loader.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/cli/dokku.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/cli/execution/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/cli/execution/datamap_exec.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/cli/execution/webhook_exec.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/cli/init_project.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/cli/output/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/cli/output/output_formatter.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/cli/output/swml_dump.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/cli/simulation/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/cli/simulation/data_generation.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/cli/simulation/data_overrides.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/cli/simulation/mock_env.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/cli/swaig_test_wrapper.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/cli/test_swaig.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/cli/types.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/_agent_host.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/agent/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/agent/config/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/agent/deployment/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/agent/deployment/handlers/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/agent/prompt/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/agent/prompt/manager.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/agent/routing/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/agent/security/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/agent/swml/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/agent/tools/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/agent/tools/decorator.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/agent/tools/registry.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/agent/tools/type_inference.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/agent_base.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/auth_handler.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/config_loader.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/data_map.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/function_result.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/logging_config.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/mixins/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/mixins/_mixin_host.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/mixins/ai_config_mixin.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/mixins/auth_mixin.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/mixins/mcp_server_mixin.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/mixins/prompt_mixin.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/mixins/serverless_mixin.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/mixins/skill_mixin.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/mixins/state_mixin.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/mixins/tool_mixin.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/mixins/web_mixin.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/pom_builder.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/post_prompt_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/security/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/security/security_utils.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/security/session_manager.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/security/webhook_middleware.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/security/webhook_validator.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/security_config.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/skill_base.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/skill_manager.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/swaig_actions_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/swaig_function.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/swaig_request_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/swml_builder.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/swml_handler.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/swml_verbs_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/web.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/livewire/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/livewire/plugins.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/mcp_gateway/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/mcp_gateway/gateway_service.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/mcp_gateway/mcp_manager.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/mcp_gateway/session_manager.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/pom/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/pom/pom.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/pom/pom_tool.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/prefabs/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/prefabs/concierge.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/prefabs/faq_bot.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/prefabs/info_gatherer.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/prefabs/receptionist.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/prefabs/survey.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/py.typed +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/relay/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/relay/call.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/relay/client.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/relay/constants.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/relay/event.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/relay/message.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/relay/protocol_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/_base.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/_pagination.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/_request_options.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/call_handler.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/client.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/_client_tree_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/addresses.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/calling.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/calling_resources_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/calling_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/chat.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/chat_resources_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/chat_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/datasphere.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/datasphere_resources_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/datasphere_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/fabric.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/fabric_resources_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/fabric_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/fax_resources_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/fax_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/imported_numbers.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/logs.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/logs_resources_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/logs_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/lookup.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/message_resources_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/message_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/messages_resources_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/messages_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/mfa.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/number_groups.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/phone_numbers.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/project.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/project_resources_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/project_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/projects_resources_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/projects_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/pubsub.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/pubsub_resources_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/pubsub_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/queues.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/recordings.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/registry.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/relay_rest_resources_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/relay_rest_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/short_codes.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/sip_profile.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/swml_webhooks_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/verified_callers.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/video.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/video_resources_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/video_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/voice_resources_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/rest/namespaces/voice_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/schema.json +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/search/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/search/document_processor.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/search/index_builder.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/search/migration.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/search/models.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/search/pgvector_backend.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/search/query_processor.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/search/search_engine.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/search/search_service.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/README.md +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/api_ninjas_trivia/README.md +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/api_ninjas_trivia/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/api_ninjas_trivia/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/claude_skills/README.md +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/claude_skills/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/claude_skills/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/datasphere/README.md +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/datasphere/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/datasphere/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/datasphere_serverless/README.md +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/datasphere_serverless/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/datasphere_serverless/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/datetime/README.md +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/datetime/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/datetime/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/google_maps/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/google_maps/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/info_gatherer/README.md +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/info_gatherer/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/info_gatherer/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/joke/README.md +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/joke/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/joke/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/math/README.md +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/math/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/math/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/mcp_gateway/README.md +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/mcp_gateway/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/mcp_gateway/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/native_vector_search/README.md +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/native_vector_search/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/native_vector_search/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/play_background_file/README.md +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/play_background_file/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/play_background_file/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/registry.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/spider/README.md +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/spider/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/spider/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/swml_transfer/README.md +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/swml_transfer/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/swml_transfer/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/weather_api/README.md +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/weather_api/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/weather_api/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/web_search/README.md +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/web_search/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/web_search/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/web_search/skill_improved.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/web_search/skill_original.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/wikipedia_search/README.md +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/wikipedia_search/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/skills/wikipedia_search/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/utils/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/utils/pom_utils.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/utils/token_generators.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/utils/url_validator.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/utils/validators.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/web/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/web/web_service.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire_sdk.egg-info/dependency_links.txt +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire_sdk.egg-info/entry_points.txt +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire_sdk.egg-info/requires.txt +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire_sdk.egg-info/top_level.txt +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/tests/test_examples.py +0 -0
- {signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/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.dev97
|
|
4
4
|
Summary: SignalWire SDK
|
|
5
5
|
Author-email: SignalWire Team <info@signalwire.com>
|
|
6
6
|
License: MIT
|
|
@@ -142,6 +142,7 @@ Each agent is a self-contained microservice that generates [SWML](docs/swml_serv
|
|
|
142
142
|
from signalwire import AgentBase
|
|
143
143
|
from signalwire.core.function_result import FunctionResult
|
|
144
144
|
|
|
145
|
+
|
|
145
146
|
class MyAgent(AgentBase):
|
|
146
147
|
def __init__(self):
|
|
147
148
|
super().__init__(name="my-agent", route="/agent")
|
|
@@ -153,8 +154,10 @@ class MyAgent(AgentBase):
|
|
|
153
154
|
def get_time(self):
|
|
154
155
|
"""Get the current time"""
|
|
155
156
|
from datetime import datetime
|
|
157
|
+
|
|
156
158
|
return FunctionResult(f"The time is {datetime.now().strftime('%H:%M:%S')}")
|
|
157
159
|
|
|
160
|
+
|
|
158
161
|
if __name__ == "__main__":
|
|
159
162
|
agent = MyAgent()
|
|
160
163
|
agent.run()
|
|
@@ -213,7 +216,10 @@ Real-time call control and messaging over WebSocket. The RELAY client connects t
|
|
|
213
216
|
```python
|
|
214
217
|
from signalwire.relay import RelayClient
|
|
215
218
|
|
|
216
|
-
client = RelayClient(
|
|
219
|
+
client = RelayClient(
|
|
220
|
+
project="...", token="...", host="example.signalwire.com", contexts=["default"]
|
|
221
|
+
)
|
|
222
|
+
|
|
217
223
|
|
|
218
224
|
@client.on_call
|
|
219
225
|
async def handle(call):
|
|
@@ -222,6 +228,7 @@ async def handle(call):
|
|
|
222
228
|
await action.wait()
|
|
223
229
|
await call.hangup()
|
|
224
230
|
|
|
231
|
+
|
|
225
232
|
client.run()
|
|
226
233
|
```
|
|
227
234
|
|
|
@@ -45,6 +45,7 @@ Each agent is a self-contained microservice that generates [SWML](docs/swml_serv
|
|
|
45
45
|
from signalwire import AgentBase
|
|
46
46
|
from signalwire.core.function_result import FunctionResult
|
|
47
47
|
|
|
48
|
+
|
|
48
49
|
class MyAgent(AgentBase):
|
|
49
50
|
def __init__(self):
|
|
50
51
|
super().__init__(name="my-agent", route="/agent")
|
|
@@ -56,8 +57,10 @@ class MyAgent(AgentBase):
|
|
|
56
57
|
def get_time(self):
|
|
57
58
|
"""Get the current time"""
|
|
58
59
|
from datetime import datetime
|
|
60
|
+
|
|
59
61
|
return FunctionResult(f"The time is {datetime.now().strftime('%H:%M:%S')}")
|
|
60
62
|
|
|
63
|
+
|
|
61
64
|
if __name__ == "__main__":
|
|
62
65
|
agent = MyAgent()
|
|
63
66
|
agent.run()
|
|
@@ -116,7 +119,10 @@ Real-time call control and messaging over WebSocket. The RELAY client connects t
|
|
|
116
119
|
```python
|
|
117
120
|
from signalwire.relay import RelayClient
|
|
118
121
|
|
|
119
|
-
client = RelayClient(
|
|
122
|
+
client = RelayClient(
|
|
123
|
+
project="...", token="...", host="example.signalwire.com", contexts=["default"]
|
|
124
|
+
)
|
|
125
|
+
|
|
120
126
|
|
|
121
127
|
@client.on_call
|
|
122
128
|
async def handle(call):
|
|
@@ -125,6 +131,7 @@ async def handle(call):
|
|
|
125
131
|
await action.wait()
|
|
126
132
|
await call.hangup()
|
|
127
133
|
|
|
134
|
+
|
|
128
135
|
client.run()
|
|
129
136
|
```
|
|
130
137
|
|
|
@@ -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.dev97"
|
|
8
8
|
description = "SignalWire SDK"
|
|
9
9
|
authors = [
|
|
10
10
|
{name = "SignalWire Team", email = "info@signalwire.com"}
|
|
@@ -201,6 +201,19 @@ select = ["E4", "E7", "E9", "F", "B", "S", "C4", "PERF", "SIM", "PTH", "RET", "R
|
|
|
201
201
|
# subscript is a runtime NameError under TYPE_CHECKING). Exempt F401 here; mypy +
|
|
202
202
|
# the SIGNATURES/DRIFT gate prove these imports are real and correct.
|
|
203
203
|
"signalwire/signalwire/rest/namespaces/*.py" = ["F401"]
|
|
204
|
+
# Runnable docs — examples/, rest/examples/, relay/examples/. These are teaching
|
|
205
|
+
# programs, not shipped SDK surface, so a few production-lint rules are demo-idiomatic
|
|
206
|
+
# noise here (and are the ONLY findings that survive after autofix):
|
|
207
|
+
# E402 — a leading module docstring / "set your creds here" preamble before imports
|
|
208
|
+
# is the natural example shape (imports-not-at-top).
|
|
209
|
+
# S104 — binding 0.0.0.0 is how a demo server example says "listen on all interfaces".
|
|
210
|
+
# S106 — literal "password"/"token" kwargs are obvious placeholder creds in a snippet.
|
|
211
|
+
# S311 — non-crypto random (sample data / demo ids), never used for security here.
|
|
212
|
+
# Everything else (F401 unused imports, F541 empty f-strings, C4/B/RET/SIM/…) is a real
|
|
213
|
+
# smell and stays enforced so `examples/**` is gate-cleanable to zero.
|
|
214
|
+
"examples/**" = ["E402", "S104", "S106", "S311"]
|
|
215
|
+
"rest/examples/**" = ["E402", "S104", "S106", "S311"]
|
|
216
|
+
"relay/examples/**" = ["E402", "S104", "S106", "S311"]
|
|
204
217
|
|
|
205
218
|
[tool.ruff.lint.flake8-bugbear]
|
|
206
219
|
# FastAPI's dependency-injection idiom puts Depends()/Query()/etc. in argument
|
|
@@ -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.2.0.
|
|
55
|
+
__version__ = "3.2.0.dev97"
|
|
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
|
|
@@ -0,0 +1,16 @@
|
|
|
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
|
+
Specialized agent implementations backed by specific inference providers.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from signalwire.agents.bedrock import BedrockAgent
|
|
13
|
+
|
|
14
|
+
__all__ = [
|
|
15
|
+
"BedrockAgent",
|
|
16
|
+
]
|
{signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/contexts.py
RENAMED
|
@@ -1493,6 +1493,38 @@ class ContextBuilder:
|
|
|
1493
1493
|
f"avoid the collision."
|
|
1494
1494
|
)
|
|
1495
1495
|
|
|
1496
|
+
# Validate step set_functions([...]) whitelists against the known
|
|
1497
|
+
# tool universe. A step that whitelists a function which is neither
|
|
1498
|
+
# a registered SWAIG tool nor a reserved native tool is a DANGLING
|
|
1499
|
+
# reference: it renders a step whose active-function set silently
|
|
1500
|
+
# points at nothing (r5 F3 — get_datetime vs get_current_time).
|
|
1501
|
+
# Only enforce when a real registry is present; a contexts builder
|
|
1502
|
+
# with no agent (or a mock registry) cannot know the tool universe,
|
|
1503
|
+
# so we must not red a valid document there.
|
|
1504
|
+
if isinstance(registered, dict):
|
|
1505
|
+
known_functions = set(registered.keys()) | RESERVED_NATIVE_TOOL_NAMES
|
|
1506
|
+
for context_name, context in self._contexts.items():
|
|
1507
|
+
for step_name, step in context._steps.items():
|
|
1508
|
+
funcs = step._functions
|
|
1509
|
+
# "none" and [] are explicit disable-all — not lists of
|
|
1510
|
+
# references to resolve.
|
|
1511
|
+
if not isinstance(funcs, list):
|
|
1512
|
+
continue
|
|
1513
|
+
for fn in funcs:
|
|
1514
|
+
if fn not in known_functions:
|
|
1515
|
+
available = sorted(known_functions)
|
|
1516
|
+
raise ValueError(
|
|
1517
|
+
f"Step '{step_name}' in context "
|
|
1518
|
+
f"'{context_name}' whitelists function "
|
|
1519
|
+
f"'{fn}' via set_functions(), but no such "
|
|
1520
|
+
f"SWAIG tool is registered on the agent and "
|
|
1521
|
+
f"it is not a reserved native tool. This "
|
|
1522
|
+
f"would emit a dangling function reference. "
|
|
1523
|
+
f"Register the tool (define_tool / a skill) "
|
|
1524
|
+
f"or remove it from the step. Available: "
|
|
1525
|
+
f"{available}"
|
|
1526
|
+
)
|
|
1527
|
+
|
|
1496
1528
|
def to_dict(self) -> dict[str, Any]:
|
|
1497
1529
|
"""Convert all contexts to dictionary for SWML generation"""
|
|
1498
1530
|
self.validate()
|
|
@@ -168,9 +168,13 @@ class SwmlRenderer:
|
|
|
168
168
|
# Use the service to build the document
|
|
169
169
|
service.reset_document()
|
|
170
170
|
|
|
171
|
-
# Add a play block for the response if provided
|
|
171
|
+
# Add a play block for the response if provided. Text is played via the
|
|
172
|
+
# `say:` URL scheme — the SWML `play` verb has no `text` key (its config is
|
|
173
|
+
# PlayWithURL/PlayWithURLS, url matching `^...|say: ?.*|...$`). Emitting
|
|
174
|
+
# `{"text": ...}` produced a document the SWML schema rejects; the canonical
|
|
175
|
+
# form (mirrors SWMLBuilder.play) is `url: "say:<text>"`.
|
|
172
176
|
if response_text:
|
|
173
|
-
service.add_verb("play", {"
|
|
177
|
+
service.add_verb("play", {"url": f"say:{response_text}"})
|
|
174
178
|
|
|
175
179
|
# Add any actions that were provided
|
|
176
180
|
if actions:
|
{signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/swml_service.py
RENAMED
|
@@ -534,6 +534,22 @@ class SWMLService(ToolMixin):
|
|
|
534
534
|
handler = self.verb_registry.get_handler(verb_name)
|
|
535
535
|
assert handler is not None # noqa: S101 # type-narrowing invariant (not input validation): guaranteed by has_handler() above
|
|
536
536
|
is_valid, errors = handler.validate_config(config)
|
|
537
|
+
# A handler's validate_config carries verb-specific diagnostics
|
|
538
|
+
# (e.g. the ai verb's prompt/SWAIG shape checks) but does NOT reject
|
|
539
|
+
# unknown/misspelled TOP-LEVEL keys — so a typo'd key would slip
|
|
540
|
+
# through silently (r5 silent-drop family: ai temperatur/zzz). Add a
|
|
541
|
+
# shallow unknown-top-level-key check against the schema so a handler
|
|
542
|
+
# verb rejects stray keys like every other verb. We deliberately do
|
|
543
|
+
# NOT run the full deep schema here: the ai verb's DEEP shapes
|
|
544
|
+
# (an empty prompt.pom for a promptless agent, the SWAIG function
|
|
545
|
+
# shape) are the handler's remit and are legitimately emitted by the
|
|
546
|
+
# SDK in forms the JSON-schema's oneOf/pom rules don't all accept —
|
|
547
|
+
# full validation would false-reject valid documents. The shallow
|
|
548
|
+
# check is a no-op when validation is disabled.
|
|
549
|
+
if is_valid:
|
|
550
|
+
is_valid, errors = self.schema_utils._validate_verb_top_level_keys(
|
|
551
|
+
verb_name, config
|
|
552
|
+
)
|
|
537
553
|
else:
|
|
538
554
|
# Use schema-based validation for standard verbs
|
|
539
555
|
is_valid, errors = self.schema_utils.validate_verb(verb_name, config)
|
|
@@ -603,6 +619,14 @@ class SWMLService(ToolMixin):
|
|
|
603
619
|
handler = self.verb_registry.get_handler(verb_name)
|
|
604
620
|
assert handler is not None # noqa: S101 # type-narrowing invariant (not input validation): guaranteed by has_handler() above
|
|
605
621
|
is_valid, errors = handler.validate_config(config)
|
|
622
|
+
# See add_verb: also run the shallow unknown-top-level-key check so a
|
|
623
|
+
# handler verb rejects misspelled/unknown top-level keys (NOT the full
|
|
624
|
+
# deep schema, which would false-reject the ai verb's legitimate
|
|
625
|
+
# empty-pom / SWAIG emissions). No-op when validation is disabled.
|
|
626
|
+
if is_valid:
|
|
627
|
+
is_valid, errors = self.schema_utils._validate_verb_top_level_keys(
|
|
628
|
+
verb_name, config
|
|
629
|
+
)
|
|
606
630
|
else:
|
|
607
631
|
# Use schema-based validation for standard verbs
|
|
608
632
|
is_valid, errors = self.schema_utils.validate_verb(verb_name, config)
|
|
@@ -407,6 +407,64 @@ class SchemaUtils:
|
|
|
407
407
|
|
|
408
408
|
return len(errors) == 0, errors
|
|
409
409
|
|
|
410
|
+
def _verb_top_level_property_names(self, verb_name: str) -> set[str] | None:
|
|
411
|
+
"""Resolve the set of KNOWN top-level property names for a verb's config
|
|
412
|
+
object, following a single ``$ref`` (e.g. AI -> AIObject). Returns None
|
|
413
|
+
when the verb's config schema is not a closed object-with-properties
|
|
414
|
+
(i.e. we cannot enumerate a known-key set, so no shallow check applies)."""
|
|
415
|
+
if verb_name not in self.verbs:
|
|
416
|
+
return None
|
|
417
|
+
verb_def = self.verbs[verb_name]["definition"]
|
|
418
|
+
props = verb_def.get("properties", {})
|
|
419
|
+
body = props.get(verb_name)
|
|
420
|
+
if not isinstance(body, dict):
|
|
421
|
+
return None
|
|
422
|
+
# Follow a single $ref (AI -> AIObject) to the object that declares the
|
|
423
|
+
# verb config's own properties.
|
|
424
|
+
if "$ref" in body:
|
|
425
|
+
ref_name = body["$ref"].split("/")[-1]
|
|
426
|
+
body = self.schema.get("$defs", {}).get(ref_name, {})
|
|
427
|
+
if not isinstance(body, dict) or body.get("type") != "object":
|
|
428
|
+
return None
|
|
429
|
+
prop_map = body.get("properties")
|
|
430
|
+
if not isinstance(prop_map, dict):
|
|
431
|
+
return None
|
|
432
|
+
# Only meaningful as a closed-key check when the schema itself closes the
|
|
433
|
+
# object (additionalProperties:false or unevaluatedProperties disallowed).
|
|
434
|
+
closes = (
|
|
435
|
+
body.get("additionalProperties") is False
|
|
436
|
+
or body.get("unevaluatedProperties") is False
|
|
437
|
+
or body.get("unevaluatedProperties") == {"not": {}}
|
|
438
|
+
)
|
|
439
|
+
if not closes:
|
|
440
|
+
return None
|
|
441
|
+
return set(prop_map.keys())
|
|
442
|
+
|
|
443
|
+
def _validate_verb_top_level_keys(
|
|
444
|
+
self, verb_name: str, verb_config: dict[str, Any]
|
|
445
|
+
) -> tuple[bool, list[str]]:
|
|
446
|
+
"""Shallow strict-render check: reject unknown/misspelled TOP-LEVEL keys
|
|
447
|
+
in a verb config against the schema's known property set, WITHOUT running
|
|
448
|
+
the full deep schema (which would false-reject legitimate deep emissions
|
|
449
|
+
such as the ai verb's empty prompt.pom). Used for handler verbs (the ai
|
|
450
|
+
verb) whose deep shapes the handler owns. A no-op when validation is
|
|
451
|
+
disabled or when the verb has no enumerable closed key-set."""
|
|
452
|
+
if not self._validation_enabled:
|
|
453
|
+
return True, []
|
|
454
|
+
if verb_name not in self.verbs:
|
|
455
|
+
return False, [f"Unknown verb: {verb_name}"]
|
|
456
|
+
known = self._verb_top_level_property_names(verb_name)
|
|
457
|
+
if known is None:
|
|
458
|
+
# No enumerable closed key-set — nothing shallow to enforce.
|
|
459
|
+
return True, []
|
|
460
|
+
unknown = [k for k in verb_config if k not in known]
|
|
461
|
+
if unknown:
|
|
462
|
+
return False, [
|
|
463
|
+
f"Unknown/misspelled key(s) {sorted(unknown)} for verb "
|
|
464
|
+
f"'{verb_name}'. Known keys: {sorted(known)}"
|
|
465
|
+
]
|
|
466
|
+
return True, []
|
|
467
|
+
|
|
410
468
|
def validate_document(self, document: dict[str, Any]) -> tuple[bool, list[str]]:
|
|
411
469
|
"""
|
|
412
470
|
Validate a complete SWML document against the schema.
|
|
@@ -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.dev97
|
|
4
4
|
Summary: SignalWire SDK
|
|
5
5
|
Author-email: SignalWire Team <info@signalwire.com>
|
|
6
6
|
License: MIT
|
|
@@ -142,6 +142,7 @@ Each agent is a self-contained microservice that generates [SWML](docs/swml_serv
|
|
|
142
142
|
from signalwire import AgentBase
|
|
143
143
|
from signalwire.core.function_result import FunctionResult
|
|
144
144
|
|
|
145
|
+
|
|
145
146
|
class MyAgent(AgentBase):
|
|
146
147
|
def __init__(self):
|
|
147
148
|
super().__init__(name="my-agent", route="/agent")
|
|
@@ -153,8 +154,10 @@ class MyAgent(AgentBase):
|
|
|
153
154
|
def get_time(self):
|
|
154
155
|
"""Get the current time"""
|
|
155
156
|
from datetime import datetime
|
|
157
|
+
|
|
156
158
|
return FunctionResult(f"The time is {datetime.now().strftime('%H:%M:%S')}")
|
|
157
159
|
|
|
160
|
+
|
|
158
161
|
if __name__ == "__main__":
|
|
159
162
|
agent = MyAgent()
|
|
160
163
|
agent.run()
|
|
@@ -213,7 +216,10 @@ Real-time call control and messaging over WebSocket. The RELAY client connects t
|
|
|
213
216
|
```python
|
|
214
217
|
from signalwire.relay import RelayClient
|
|
215
218
|
|
|
216
|
-
client = RelayClient(
|
|
219
|
+
client = RelayClient(
|
|
220
|
+
project="...", token="...", host="example.signalwire.com", contexts=["default"]
|
|
221
|
+
)
|
|
222
|
+
|
|
217
223
|
|
|
218
224
|
@client.on_call
|
|
219
225
|
async def handle(call):
|
|
@@ -222,6 +228,7 @@ async def handle(call):
|
|
|
222
228
|
await action.wait()
|
|
223
229
|
await call.hangup()
|
|
224
230
|
|
|
231
|
+
|
|
225
232
|
client.run()
|
|
226
233
|
```
|
|
227
234
|
|
|
@@ -9,6 +9,7 @@ signalwire/signalwire/__init__.py
|
|
|
9
9
|
signalwire/signalwire/agent_server.py
|
|
10
10
|
signalwire/signalwire/py.typed
|
|
11
11
|
signalwire/signalwire/schema.json
|
|
12
|
+
signalwire/signalwire/agents/__init__.py
|
|
12
13
|
signalwire/signalwire/agents/bedrock.py
|
|
13
14
|
signalwire/signalwire/cli/__init__.py
|
|
14
15
|
signalwire/signalwire/cli/build_search.py
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/agents/bedrock.py
RENAMED
|
File without changes
|
{signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/cli/__init__.py
RENAMED
|
File without changes
|
{signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/cli/build_search.py
RENAMED
|
File without changes
|
{signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/cli/config.py
RENAMED
|
File without changes
|
{signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/cli/core/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/cli/dokku.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/cli/init_project.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
|
{signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/cli/test_swaig.py
RENAMED
|
File without changes
|
{signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/cli/types.py
RENAMED
|
File without changes
|
{signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/__init__.py
RENAMED
|
File without changes
|
{signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/_agent_host.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
|
{signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/agent_base.py
RENAMED
|
File without changes
|
{signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/auth_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/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
|
{signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/pom_builder.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
|
{signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/skill_base.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/swml_builder.py
RENAMED
|
File without changes
|
{signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/core/swml_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/livewire/__init__.py
RENAMED
|
File without changes
|
{signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/livewire/plugins.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/pom/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/pom/pom_tool.py
RENAMED
|
File without changes
|
{signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/prefabs/__init__.py
RENAMED
|
File without changes
|
{signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/prefabs/concierge.py
RENAMED
|
File without changes
|
{signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/prefabs/faq_bot.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/prefabs/survey.py
RENAMED
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.2.0.dev95 → signalwire_sdk-3.2.0.dev97}/signalwire/signalwire/relay/__init__.py
RENAMED
|
File without changes
|