signalwire-sdk 3.7.1.dev128__tar.gz → 3.7.1.dev130__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.
Files changed (468) hide show
  1. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/CHANGELOG.md +25 -0
  2. {signalwire_sdk-3.7.1.dev128/signalwire/signalwire_sdk.egg-info → signalwire_sdk-3.7.1.dev130}/PKG-INFO +1 -1
  3. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/docs/agent_guide.md +120 -2
  4. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/docs/api_reference.md +50 -1
  5. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/pyproject.toml +1 -1
  6. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/__init__.py +1 -1
  7. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/agent_server.py +1 -1
  8. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/cli/pydocs/_topics.py +15 -1
  9. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/agent_base.py +115 -0
  10. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/mixins/web_mixin.py +14 -0
  11. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130/signalwire/signalwire_sdk.egg-info}/PKG-INFO +1 -1
  12. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/LICENSE +0 -0
  13. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/MANIFEST.in +0 -0
  14. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/README.md +0 -0
  15. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/docs/ai_chat_gateway.md +0 -0
  16. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/docs/architecture.md +0 -0
  17. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/docs/bedrock_agent.md +0 -0
  18. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/docs/cli_guide.md +0 -0
  19. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/docs/cloud_functions_guide.md +0 -0
  20. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/docs/configuration.md +0 -0
  21. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/docs/contexts_guide.md +0 -0
  22. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/docs/datamap_guide.md +0 -0
  23. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/docs/developer_pain_points.md +0 -0
  24. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/docs/llm_parameters.md +0 -0
  25. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/docs/mcp_gateway_reference.md +0 -0
  26. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/docs/mcp_integration.md +0 -0
  27. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/docs/pgi_agent_guide.md +0 -0
  28. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/docs/programmatically_governed_inference.md +0 -0
  29. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/docs/sdk_features.md +0 -0
  30. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/docs/search_deployment.md +0 -0
  31. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/docs/search_indexing.md +0 -0
  32. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/docs/search_integration.md +0 -0
  33. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/docs/search_overview.md +0 -0
  34. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/docs/search_troubleshooting.md +0 -0
  35. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/docs/security.md +0 -0
  36. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/docs/skills_parameter_schema.md +0 -0
  37. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/docs/skills_system.md +0 -0
  38. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/docs/swaig_reference.md +0 -0
  39. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/docs/swml_service_guide.md +0 -0
  40. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/docs/third_party_skills.md +0 -0
  41. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/docs/web_service.md +0 -0
  42. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/Dockerfile.flexible +0 -0
  43. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/Dockerfile.k8s +0 -0
  44. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/README.md +0 -0
  45. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/advanced_datamap_demo.py +0 -0
  46. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/auto_vivified_example.py +0 -0
  47. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/basic_swml_service.py +0 -0
  48. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/bedrock_agent_run.py +0 -0
  49. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/bedrock_agent_test.py +0 -0
  50. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/bedrock_server_test.py +0 -0
  51. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/bedrock_with_skills.py +0 -0
  52. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/call_flow_and_actions_demo.py +0 -0
  53. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/comprehensive_dynamic_agent.py +0 -0
  54. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/concierge_agent_example.py +0 -0
  55. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/contexts_demo.py +0 -0
  56. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/custom_path_agent.py +0 -0
  57. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/data_map_demo.py +0 -0
  58. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/datasphere_multi_instance_demo.py +0 -0
  59. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/datasphere_serverless_demo.py +0 -0
  60. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/datasphere_serverless_env_demo.py +0 -0
  61. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/datasphere_webhook_env_demo.py +0 -0
  62. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/declarative_agent.py +0 -0
  63. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/dynamic_info_gatherer_example.py +0 -0
  64. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/dynamic_swml_service.py +0 -0
  65. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/faq_bot_agent.py +0 -0
  66. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/gather_info_demo.py +0 -0
  67. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/gather_per_question_functions_demo.py +0 -0
  68. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/info_gatherer_example.py +0 -0
  69. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/joke_agent.py +0 -0
  70. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/joke_skill_demo.py +0 -0
  71. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/k8s-deployment.yaml +0 -0
  72. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/kubernetes_ready_agent.py +0 -0
  73. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/lambda_agent.py +0 -0
  74. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/llm_params_demo.py +0 -0
  75. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/mcp_agent.py +0 -0
  76. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/mcp_gateway_demo.py +0 -0
  77. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/multi_agent_server.py +0 -0
  78. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/multi_endpoint_agent.py +0 -0
  79. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/pgvector_search_agent.py +0 -0
  80. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/quickstart_agent.py +0 -0
  81. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/quickstart_relay.py +0 -0
  82. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/quickstart_rest.py +0 -0
  83. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/receptionist_agent_example.py +0 -0
  84. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/record_call_example.py +0 -0
  85. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/relay_answer_and_welcome.py +0 -0
  86. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/room_and_sip_example.py +0 -0
  87. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/search_server_standalone.py +0 -0
  88. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/search_with_custom_formatter.py +0 -0
  89. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/session_and_state_demo.py +0 -0
  90. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/sigmond_native_search.py +0 -0
  91. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/sigmond_remote_search.py +0 -0
  92. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/sigmond_simple.py +0 -0
  93. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/simple_agent.py +0 -0
  94. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/simple_dynamic_agent.py +0 -0
  95. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/simple_dynamic_enhanced.py +0 -0
  96. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/simple_static_agent.py +0 -0
  97. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/skills_demo.py +0 -0
  98. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/static_files/file.txt +0 -0
  99. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/static_files/static_files/file.txt +0 -0
  100. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/step_function_inheritance_demo.py +0 -0
  101. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/survey_agent_example.py +0 -0
  102. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/swaig_features_agent.py +0 -0
  103. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/swml_service_example.py +0 -0
  104. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/swml_service_routing_example.py +0 -0
  105. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/swmlservice_ai_sidecar.py +0 -0
  106. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/swmlservice_swaig_standalone.py +0 -0
  107. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/tap_example.py +0 -0
  108. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/web_search_agent.py +0 -0
  109. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/web_search_multi_instance_demo.py +0 -0
  110. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/examples/wikipedia_demo.py +0 -0
  111. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/livewire/README.md +0 -0
  112. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/livewire/docs/migration-guide.md +0 -0
  113. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/livewire/examples/livewire_basic_agent.py +0 -0
  114. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/livewire/examples/livewire_handoff.py +0 -0
  115. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/livewire/examples/livewire_multi_tool.py +0 -0
  116. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/man/sw-agent-init.1 +0 -0
  117. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/man/sw-pydocs.1 +0 -0
  118. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/man/sw-search.1 +0 -0
  119. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/man/swaig-test.1 +0 -0
  120. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/mcp/swml-schema-search/README.md +0 -0
  121. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/mcp/swml-schema-search/swml_schema_mcp.py +0 -0
  122. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/mcp_gateway/.env.example +0 -0
  123. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/mcp_gateway/.gitignore +0 -0
  124. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/mcp_gateway/Dockerfile +0 -0
  125. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/mcp_gateway/README.md +0 -0
  126. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/mcp_gateway/certs/.gitignore +0 -0
  127. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/mcp_gateway/docker-compose.yml +0 -0
  128. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/mcp_gateway/examples/generate_cert.sh +0 -0
  129. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/mcp_gateway/mcp-docker.sh +0 -0
  130. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/mcp_gateway/sample_config.json +0 -0
  131. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/mcp_gateway/test/test_agent.py +0 -0
  132. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/mcp_gateway/test/test_gateway.sh +0 -0
  133. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/mcp_gateway/test/todo_mcp.py +0 -0
  134. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/relay/README.md +0 -0
  135. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/relay/docs/call-methods.md +0 -0
  136. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/relay/docs/client-reference.md +0 -0
  137. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/relay/docs/events.md +0 -0
  138. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/relay/docs/getting-started.md +0 -0
  139. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/relay/docs/messaging.md +0 -0
  140. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/relay/examples/relay_answer_and_welcome.py +0 -0
  141. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/relay/examples/relay_dial_and_play.py +0 -0
  142. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/relay/examples/relay_ivr_connect.py +0 -0
  143. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/rest/README.md +0 -0
  144. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/rest/docs/calling.md +0 -0
  145. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/rest/docs/client-reference.md +0 -0
  146. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/rest/docs/fabric.md +0 -0
  147. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/rest/docs/getting-started.md +0 -0
  148. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/rest/docs/namespaces.md +0 -0
  149. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/rest/examples/rest_10dlc_registration.py +0 -0
  150. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/rest/examples/rest_bind_phone_to_swml_webhook.py +0 -0
  151. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/rest/examples/rest_calling_ivr_and_ai.py +0 -0
  152. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/rest/examples/rest_calling_play_and_record.py +0 -0
  153. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/rest/examples/rest_datasphere_search.py +0 -0
  154. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/rest/examples/rest_fabric_conferences_and_routing.py +0 -0
  155. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/rest/examples/rest_fabric_subscribers_and_sip.py +0 -0
  156. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/rest/examples/rest_fabric_swml_and_callflows.py +0 -0
  157. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/rest/examples/rest_manage_resources.py +0 -0
  158. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/rest/examples/rest_phone_number_management.py +0 -0
  159. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/rest/examples/rest_queues_mfa_and_recordings.py +0 -0
  160. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/rest/examples/rest_video_rooms.py +0 -0
  161. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/setup.cfg +0 -0
  162. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/setup.py +0 -0
  163. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/AGENTS.md +0 -0
  164. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/__main__.py +0 -0
  165. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/agents/__init__.py +0 -0
  166. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/agents/bedrock.py +0 -0
  167. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/ai_chat/__init__.py +0 -0
  168. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/ai_chat/client.py +0 -0
  169. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/ai_chat/gateway.py +0 -0
  170. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/ai_chat/handoff.py +0 -0
  171. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/cli/__init__.py +0 -0
  172. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/cli/build_search.py +0 -0
  173. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/cli/config.py +0 -0
  174. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/cli/core/__init__.py +0 -0
  175. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/cli/core/agent_loader.py +0 -0
  176. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/cli/core/argparse_helpers.py +0 -0
  177. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/cli/core/dynamic_config.py +0 -0
  178. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/cli/core/service_loader.py +0 -0
  179. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/cli/dokku.py +0 -0
  180. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/cli/execution/__init__.py +0 -0
  181. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/cli/execution/datamap_exec.py +0 -0
  182. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/cli/execution/webhook_exec.py +0 -0
  183. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/cli/init_project.py +0 -0
  184. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/cli/output/__init__.py +0 -0
  185. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/cli/output/output_formatter.py +0 -0
  186. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/cli/output/swml_dump.py +0 -0
  187. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/cli/pydocs/__init__.py +0 -0
  188. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/cli/pydocs/_agents_note.py +0 -0
  189. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/cli/pydocs/_api.py +0 -0
  190. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/cli/pydocs/_bundle.py +0 -0
  191. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/cli/pydocs/_files.py +0 -0
  192. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/cli/pydocs/_render.py +0 -0
  193. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/cli/simulation/__init__.py +0 -0
  194. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/cli/simulation/data_generation.py +0 -0
  195. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/cli/simulation/data_overrides.py +0 -0
  196. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/cli/simulation/mock_env.py +0 -0
  197. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/cli/swaig_test_wrapper.py +0 -0
  198. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/cli/test_swaig.py +0 -0
  199. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/cli/types.py +0 -0
  200. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/__init__.py +0 -0
  201. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/_agent_host.py +0 -0
  202. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/_sync_handlers.py +0 -0
  203. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/agent/__init__.py +0 -0
  204. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/agent/config/__init__.py +0 -0
  205. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/agent/deployment/__init__.py +0 -0
  206. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/agent/deployment/handlers/__init__.py +0 -0
  207. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/agent/prompt/__init__.py +0 -0
  208. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/agent/prompt/manager.py +0 -0
  209. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/agent/routing/__init__.py +0 -0
  210. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/agent/security/__init__.py +0 -0
  211. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/agent/swml/__init__.py +0 -0
  212. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/agent/tools/__init__.py +0 -0
  213. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/agent/tools/decorator.py +0 -0
  214. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/agent/tools/registry.py +0 -0
  215. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/agent/tools/type_inference.py +0 -0
  216. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/auth_handler.py +0 -0
  217. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/capabilities.py +0 -0
  218. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/config_loader.py +0 -0
  219. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/contexts.py +0 -0
  220. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/data_map.py +0 -0
  221. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/function_result.py +0 -0
  222. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/logging_config.py +0 -0
  223. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/mixins/__init__.py +0 -0
  224. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/mixins/_mixin_host.py +0 -0
  225. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/mixins/ai_config_mixin.py +0 -0
  226. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/mixins/auth_mixin.py +0 -0
  227. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/mixins/mcp_server_mixin.py +0 -0
  228. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/mixins/prompt_mixin.py +0 -0
  229. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/mixins/serverless_mixin.py +0 -0
  230. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/mixins/skill_mixin.py +0 -0
  231. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/mixins/state_mixin.py +0 -0
  232. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/mixins/tool_mixin.py +0 -0
  233. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/pom_builder.py +0 -0
  234. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/post_prompt.py +0 -0
  235. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/post_prompt_generated.py +0 -0
  236. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/security/__init__.py +0 -0
  237. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/security/security_utils.py +0 -0
  238. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/security/session_manager.py +0 -0
  239. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/security/webhook_middleware.py +0 -0
  240. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/security/webhook_validator.py +0 -0
  241. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/security_config.py +0 -0
  242. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/semantic_gate.py +0 -0
  243. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/skill_base.py +0 -0
  244. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/skill_manager.py +0 -0
  245. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/swaig_actions_generated.py +0 -0
  246. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/swaig_function.py +0 -0
  247. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/swaig_request_generated.py +0 -0
  248. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/swml_builder.py +0 -0
  249. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/swml_handler.py +0 -0
  250. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/swml_renderer.py +0 -0
  251. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/swml_service.py +0 -0
  252. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/swml_verbs_generated.py +0 -0
  253. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/core/web.py +0 -0
  254. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/livewire/__init__.py +0 -0
  255. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/livewire/plugins.py +0 -0
  256. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/llms.txt +0 -0
  257. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/mcp_gateway/__init__.py +0 -0
  258. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/mcp_gateway/gateway_service.py +0 -0
  259. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/mcp_gateway/mcp_manager.py +0 -0
  260. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/mcp_gateway/session_manager.py +0 -0
  261. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/pom/__init__.py +0 -0
  262. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/pom/pom.py +0 -0
  263. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/pom/pom_tool.py +0 -0
  264. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/prefabs/__init__.py +0 -0
  265. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/prefabs/concierge.py +0 -0
  266. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/prefabs/faq_bot.py +0 -0
  267. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/prefabs/info_gatherer.py +0 -0
  268. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/prefabs/receptionist.py +0 -0
  269. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/prefabs/survey.py +0 -0
  270. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/py.typed +0 -0
  271. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/relay/__init__.py +0 -0
  272. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/relay/call.py +0 -0
  273. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/relay/client.py +0 -0
  274. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/relay/constants.py +0 -0
  275. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/relay/event.py +0 -0
  276. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/relay/message.py +0 -0
  277. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/relay/protocol_types_generated.py +0 -0
  278. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/__init__.py +0 -0
  279. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/_base.py +0 -0
  280. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/_pagination.py +0 -0
  281. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/_request_options.py +0 -0
  282. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/call_handler.py +0 -0
  283. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/client.py +0 -0
  284. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/__init__.py +0 -0
  285. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/_client_tree_generated.py +0 -0
  286. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/addresses.py +0 -0
  287. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/calling.py +0 -0
  288. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/calling_resources_generated.py +0 -0
  289. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/calling_types_generated.py +0 -0
  290. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/chat.py +0 -0
  291. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/chat_resources_generated.py +0 -0
  292. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/chat_types_generated.py +0 -0
  293. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/datasphere.py +0 -0
  294. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/datasphere_resources_generated.py +0 -0
  295. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/datasphere_types_generated.py +0 -0
  296. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/fabric.py +0 -0
  297. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/fabric_resources_generated.py +0 -0
  298. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/fabric_types_generated.py +0 -0
  299. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/fax_resources_generated.py +0 -0
  300. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/fax_types_generated.py +0 -0
  301. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/imported_numbers.py +0 -0
  302. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/logs.py +0 -0
  303. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/logs_resources_generated.py +0 -0
  304. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/logs_types_generated.py +0 -0
  305. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/lookup.py +0 -0
  306. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/message_resources_generated.py +0 -0
  307. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/message_types_generated.py +0 -0
  308. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/messages_resources_generated.py +0 -0
  309. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/messages_types_generated.py +0 -0
  310. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/mfa.py +0 -0
  311. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/number_groups.py +0 -0
  312. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/phone_numbers.py +0 -0
  313. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/project.py +0 -0
  314. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/project_resources_generated.py +0 -0
  315. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/project_types_generated.py +0 -0
  316. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/projects_resources_generated.py +0 -0
  317. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/projects_types_generated.py +0 -0
  318. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/pubsub.py +0 -0
  319. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/pubsub_resources_generated.py +0 -0
  320. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/pubsub_types_generated.py +0 -0
  321. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/queues.py +0 -0
  322. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/recordings.py +0 -0
  323. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/registry.py +0 -0
  324. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/relay_rest_resources_generated.py +0 -0
  325. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/relay_rest_types_generated.py +0 -0
  326. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/short_codes.py +0 -0
  327. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/sip_profile.py +0 -0
  328. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/swml_webhooks_types_generated.py +0 -0
  329. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/verified_callers.py +0 -0
  330. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/video.py +0 -0
  331. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/video_resources_generated.py +0 -0
  332. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/video_types_generated.py +0 -0
  333. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/voice_resources_generated.py +0 -0
  334. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/rest/namespaces/voice_types_generated.py +0 -0
  335. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/schema.json +0 -0
  336. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/search/__init__.py +0 -0
  337. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/search/document_processor.py +0 -0
  338. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/search/index_builder.py +0 -0
  339. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/search/migration.py +0 -0
  340. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/search/models.py +0 -0
  341. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/search/pgvector_backend.py +0 -0
  342. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/search/query_processor.py +0 -0
  343. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/search/search_engine.py +0 -0
  344. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/search/search_service.py +0 -0
  345. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/README.md +0 -0
  346. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/__init__.py +0 -0
  347. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/api_ninjas_trivia/README.md +0 -0
  348. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/api_ninjas_trivia/__init__.py +0 -0
  349. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/api_ninjas_trivia/skill.py +0 -0
  350. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/claude_skills/README.md +0 -0
  351. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/claude_skills/__init__.py +0 -0
  352. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/claude_skills/skill.py +0 -0
  353. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/datasphere/README.md +0 -0
  354. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/datasphere/__init__.py +0 -0
  355. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/datasphere/skill.py +0 -0
  356. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/datasphere_serverless/README.md +0 -0
  357. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/datasphere_serverless/__init__.py +0 -0
  358. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/datasphere_serverless/skill.py +0 -0
  359. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/datetime/README.md +0 -0
  360. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/datetime/__init__.py +0 -0
  361. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/datetime/skill.py +0 -0
  362. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/google_maps/__init__.py +0 -0
  363. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/google_maps/skill.py +0 -0
  364. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/info_gatherer/README.md +0 -0
  365. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/info_gatherer/__init__.py +0 -0
  366. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/info_gatherer/skill.py +0 -0
  367. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/joke/README.md +0 -0
  368. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/joke/__init__.py +0 -0
  369. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/joke/skill.py +0 -0
  370. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/math/README.md +0 -0
  371. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/math/__init__.py +0 -0
  372. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/math/skill.py +0 -0
  373. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/mcp_gateway/README.md +0 -0
  374. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/mcp_gateway/__init__.py +0 -0
  375. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/mcp_gateway/skill.py +0 -0
  376. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/native_vector_search/README.md +0 -0
  377. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/native_vector_search/__init__.py +0 -0
  378. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/native_vector_search/skill.py +0 -0
  379. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/play_background_file/README.md +0 -0
  380. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/play_background_file/__init__.py +0 -0
  381. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/play_background_file/skill.py +0 -0
  382. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/registry.py +0 -0
  383. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/spider/README.md +0 -0
  384. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/spider/__init__.py +0 -0
  385. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/spider/skill.py +0 -0
  386. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/swml_transfer/README.md +0 -0
  387. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/swml_transfer/__init__.py +0 -0
  388. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/swml_transfer/skill.py +0 -0
  389. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/weather_api/README.md +0 -0
  390. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/weather_api/__init__.py +0 -0
  391. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/weather_api/skill.py +0 -0
  392. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/web_search/README.md +0 -0
  393. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/web_search/__init__.py +0 -0
  394. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/web_search/skill.py +0 -0
  395. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/web_search/skill_improved.py +0 -0
  396. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/web_search/skill_original.py +0 -0
  397. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/wikipedia_search/README.md +0 -0
  398. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/wikipedia_search/__init__.py +0 -0
  399. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/skills/wikipedia_search/skill.py +0 -0
  400. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/utils/__init__.py +0 -0
  401. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/utils/pom_utils.py +0 -0
  402. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/utils/schema_utils.py +0 -0
  403. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/utils/token_generators.py +0 -0
  404. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/utils/url_validator.py +0 -0
  405. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/utils/validators.py +0 -0
  406. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/web/__init__.py +0 -0
  407. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire/web/web_service.py +0 -0
  408. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire_sdk.egg-info/SOURCES.txt +0 -0
  409. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire_sdk.egg-info/dependency_links.txt +0 -0
  410. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire_sdk.egg-info/entry_points.txt +0 -0
  411. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire_sdk.egg-info/requires.txt +0 -0
  412. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/signalwire/signalwire_sdk.egg-info/top_level.txt +0 -0
  413. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tests/test_examples.py +0 -0
  414. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tests/test_mcp_integration.py +0 -0
  415. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/fred/.env.example +0 -0
  416. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/fred/Dockerfile +0 -0
  417. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/fred/Dockerfile.multi +0 -0
  418. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/fred/docker-compose.yml +0 -0
  419. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/fred/fred.py +0 -0
  420. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/fred/fred.sh +0 -0
  421. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/fred/requirements.txt +0 -0
  422. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/fred/tutorial/01-introduction.md +0 -0
  423. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/fred/tutorial/02-setup.md +0 -0
  424. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/fred/tutorial/03-basic-agent.md +0 -0
  425. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/fred/tutorial/04-wikipedia-skill.md +0 -0
  426. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/fred/tutorial/05-custom-functions.md +0 -0
  427. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/fred/tutorial/06-running-testing.md +0 -0
  428. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/fred/tutorial/README.md +0 -0
  429. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/fred/tutorial/appendix-complete-code.md +0 -0
  430. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/fred/tutorial/appendix-docker-deployment.md +0 -0
  431. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/full-guardrails-agent/.env.example +0 -0
  432. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/full-guardrails-agent/.gitignore +0 -0
  433. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/full-guardrails-agent/Dockerfile +0 -0
  434. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/full-guardrails-agent/check_docs.py +0 -0
  435. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/full-guardrails-agent/handlers.py +0 -0
  436. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/full-guardrails-agent/penny.py +0 -0
  437. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/full-guardrails-agent/penny.sh +0 -0
  438. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/full-guardrails-agent/requirements.txt +0 -0
  439. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/full-guardrails-agent/reservations.py +0 -0
  440. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/full-guardrails-agent/test_penny.py +0 -0
  441. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/full-guardrails-agent/tutorial/01-why-guardrails.md +0 -0
  442. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/full-guardrails-agent/tutorial/02-design-first.md +0 -0
  443. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/full-guardrails-agent/tutorial/03-rules-first.md +0 -0
  444. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/full-guardrails-agent/tutorial/04-the-shell.md +0 -0
  445. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/full-guardrails-agent/tutorial/05-steps-and-scoping.md +0 -0
  446. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/full-guardrails-agent/tutorial/06-tools-that-decide.md +0 -0
  447. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/full-guardrails-agent/tutorial/07-gather-and-projection.md +0 -0
  448. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/full-guardrails-agent/tutorial/08-the-verification-gate.md +0 -0
  449. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/full-guardrails-agent/tutorial/09-people-and-endings.md +0 -0
  450. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/full-guardrails-agent/tutorial/10-testing-and-running.md +0 -0
  451. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/full-guardrails-agent/tutorial/README.md +0 -0
  452. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/full-guardrails-agent/tutorial/appendix-complete-code.md +0 -0
  453. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/full-guardrails-agent/tutorial/appendix-deployment.md +0 -0
  454. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/full-guardrails-agent/tutorial/appendix-technique-map.md +0 -0
  455. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/full-guardrails-agent/workflow.py +0 -0
  456. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/multi_agents/README.md +0 -0
  457. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/multi_agents/lesson1_first_agent.md +0 -0
  458. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/multi_agents/lesson2_knowledge_bases.md +0 -0
  459. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/multi_agents/lesson3_multi_agent_systems.md +0 -0
  460. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/multi_agents/lesson4_advanced_features.md +0 -0
  461. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/multi_agents/lesson5_extending_agents.md +0 -0
  462. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/multi_agents/pc_builder.py +0 -0
  463. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/multi_agents/sales_agent.py +0 -0
  464. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/multi_agents/sales_agent_with_search.py +0 -0
  465. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/multi_agents/sales_knowledge.md +0 -0
  466. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/multi_agents/sales_knowledge.swsearch +0 -0
  467. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/multi_agents/support_knowledge.md +0 -0
  468. {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev130}/tutorial/multi_agents/support_knowledge.swsearch +0 -0
@@ -1,5 +1,30 @@
1
1
  # Changelog
2
2
 
3
+ ## [Unreleased]
4
+
5
+ ### Added
6
+ - `AgentBase.on_call_start()` registers handlers that run when the call
7
+ starts, before the AI's first turn: the counterpart of `on_call_end()`. It
8
+ wraps the platform's reserved `startup_hook` function. A handler receives
9
+ the SWAIG request and may return a `FunctionResult`: its actions run at
10
+ once, and its response text is added to the conversation as a system
11
+ message the model reads before it speaks, except on an OpenAI Realtime
12
+ agent, which drops the text. Handlers run in registration order, and an
13
+ exception is logged, not raised.
14
+
15
+ ### Documentation
16
+ - How to reject a call from the per-call configuration callback
17
+ (`add_per_call_config()`): build the agent with `play` and `hangup`
18
+ post-answer verbs and no tools, and have the callback add the tools and
19
+ call `clear_post_answer_verbs()` only for a call it accepts. A callback
20
+ that fails leaves the call rejected. See "Rejecting a Call" in
21
+ `docs/agent_guide.md`.
22
+ - The SWAIG function webhook timeout: the platform waits up to 30 seconds to
23
+ connect and 120 seconds for a tool's reply, and sends the request again, up
24
+ to 3 times, after a failed or timed-out request or a 5xx. The caller hears
25
+ nothing meanwhile, so tools should answer quickly and send late results into the call with
26
+ `rest.calling.ai_message()`. See "Slow tools and the webhook timeout" in
27
+ `docs/agent_guide.md`.
3
28
  ## [3.7.1] - 2026-10-13
4
29
 
5
30
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: signalwire-sdk
3
- Version: 3.7.1.dev128
3
+ Version: 3.7.1.dev130
4
4
  Summary: SignalWire SDK for AI voice agents, live call control (RELAY) and REST. Run sw-pydocs for its documentation.
5
5
  Author-email: SignalWire Team <info@signalwire.com>
6
6
  License: MIT
@@ -346,6 +346,47 @@ An `on_swml_request` override still runs on the event loop, because it can chang
346
346
 
347
347
  Set `SWML_SYNC_HANDLERS_INLINE=true` to run synchronous handlers and callbacks on the event loop instead, one at a time, as earlier releases did. The serverless entry points call handlers directly, as before.
348
348
 
349
+ #### Slow tools and the webhook timeout
350
+
351
+ SignalWire waits up to 30 seconds to connect to a SWAIG function's webhook and up to 120 seconds for its reply. When a request fails, times out or gets an error response (5xx), it sends the same request again, up to 3 more times, a second apart. So a slow or failing tool can run more than once, and the caller hears nothing from it in the meantime.
352
+
353
+ Answer within a few seconds. When the work takes longer, start it in the background, return at once with a reply that tells the model the result is on its way, and send the result into the call when it's ready with the REST API's `calling.ai_message` (`rest.calling.ai_message()` on a `RestClient`):
354
+
355
+ <!-- snippet: no-run illustrative fragment (`slow_order_lookup` is your own helper; sends a live REST request) -->
356
+ ```python
357
+ import threading
358
+
359
+ from signalwire import AgentBase, FunctionResult, RestClient
360
+
361
+ rest = RestClient() # SIGNALWIRE_PROJECT_ID, SIGNALWIRE_API_TOKEN, SIGNALWIRE_SPACE
362
+
363
+
364
+ class OrderAgent(AgentBase):
365
+ @AgentBase.tool(
366
+ name="check_order",
367
+ description="Look up an order's shipping status",
368
+ parameters={"order_id": {"type": "string", "description": "The order number"}},
369
+ )
370
+ def check_order(self, args, raw_data):
371
+ call_id = raw_data.get("call_id")
372
+ order_id = args.get("order_id")
373
+
374
+ def finish():
375
+ status = slow_order_lookup(order_id) # may take 30 seconds
376
+ rest.calling.ai_message(
377
+ call_id,
378
+ role="system",
379
+ message_text=f"Order {order_id} status: {status}. Tell the caller.",
380
+ )
381
+
382
+ threading.Thread(target=finish, daemon=True).start()
383
+ return FunctionResult(
384
+ "The lookup has started. Tell the caller you're checking and will have it shortly."
385
+ )
386
+ ```
387
+
388
+ The message goes into the AI session as the given role (`system`, `user` or `assistant`); `system` keeps the result from reading as something the caller said. Because a request can arrive twice, make tools safe to run twice: for example, key work that's already running by `call_id` and arguments, and join it instead of starting it again. A DataMap function's webhook has its own limits; see [Network Timeout and Retry Logic](datamap_guide.md#132-network-timeout-and-retry-logic) in the DataMap guide.
389
+
349
390
  ### 2. External Webhook Functions
350
391
 
351
392
  External webhook functions allow you to delegate function execution to external services instead of handling them locally. This is useful when you want to:
@@ -1926,6 +1967,53 @@ class MyAgent(AgentBase):
1926
1967
  agent.set_global_data(config)
1927
1968
  ```
1928
1969
 
1970
+ #### Rejecting a Call
1971
+
1972
+ The callback can't refuse the request, but it can decide what the call does. To turn away a call the agent shouldn't take, such as one whose caller can't be verified, build the agent so that by default the call hears a message and hangs up, and have the callback undo that only for a call it accepts:
1973
+
1974
+ 1. In the constructor, add `play` and `hangup` with `add_post_answer_verb()`. They run after the call is answered and before the `ai` verb, so a call that keeps them hangs up before the AI starts. Define no tools on the agent itself.
1975
+ 2. In the callback, for an accepted call, add the tools and other configuration to the request's copy, then call `clear_post_answer_verbs()` last.
1976
+
1977
+ This fails closed. The callback changes only the request's copy, so the next call starts from the goodbye again. If the callback raises, the SDK logs the error and renders the copy as it stands, and since clearing the verbs is the last step, a failure before it leaves the goodbye in place.
1978
+
1979
+ The callback runs for every request the call makes: the SWML fetch, and again for each tool call and the post-prompt summary. Only the SWML fetch carries the caller's data, such as the `userVariables` a browser or app client sends with `dial()`; a tool call carries the `call_id` and `global_data`, and `global_data` comes from the call, so it proves nothing. Verify on the SWML fetch, remember the `call_id` (`body["call"]["call_id"]` there, `body["call_id"]` on later requests), and check that on later requests, so a tool call from a call you didn't verify finds no tool to run.
1980
+
1981
+ <!-- snippet: no-run illustrative fragment (`signature_is_valid` is your own check) -->
1982
+ ```python
1983
+ from signalwire import AgentBase, FunctionResult
1984
+ from signalwire.core.capabilities import user_variables
1985
+
1986
+
1987
+ class GatedAgent(AgentBase):
1988
+ def __init__(self):
1989
+ super().__init__(name="gated", route="/")
1990
+ # Callbacks run in worker threads; a set's add and `in` are safe there.
1991
+ # With more than one process, keep this in a shared store instead.
1992
+ self._verified: set[str] = set()
1993
+ self.prompt_add_section("Role", body="You are a helpful assistant.")
1994
+ # Fail closed: every call gets this unless configure() accepts it.
1995
+ self.add_post_answer_verb("play", {"url": "say:Sorry, this call can't be verified. Goodbye."})
1996
+ self.add_post_answer_verb("hangup", {})
1997
+ self.add_per_call_config(self.configure)
1998
+
1999
+ def configure(self, query_params, body_params, headers, agent):
2000
+ call = body_params.get("call")
2001
+ if isinstance(call, dict): # the SWML fetch that starts the call
2002
+ call_id = call.get("call_id")
2003
+ if call_id and signature_is_valid(user_variables(body_params)):
2004
+ self._verified.add(call_id)
2005
+ else: # a tool call or the summary
2006
+ call_id = body_params.get("call_id")
2007
+ if call_id not in self._verified:
2008
+ return # stays a goodbye with no tools
2009
+ agent.define_tool(
2010
+ "lookup", "Look up an account", {}, lambda args, raw: FunctionResult("...")
2011
+ )
2012
+ agent.clear_post_answer_verbs() # last: a failure above leaves the goodbye
2013
+ ```
2014
+
2015
+ Since the call never reaches the `ai` verb, no tool, `on_call_start` or `on_call_end` handler runs for a rejected call. Forget a verified `call_id` when the call ends (in `on_call_end`, for example) or after a time limit.
2016
+
1929
2017
  #### Error Handling
1930
2018
 
1931
2019
  1. **Graceful Degradation**: fall back to a default configuration if the custom one fails.
@@ -2044,9 +2132,39 @@ These hooks are particularly useful for:
2044
2132
  - Cleaning up temporary resources
2045
2133
  - Saving session data for analytics
2046
2134
 
2135
+ #### `on_call_start` and `on_call_end`
2136
+
2137
+ `on_call_start()` and `on_call_end()` register handlers for the two hooks. Each can be used as a decorator or called directly, takes any number of handlers that run in registration order, and logs a handler's exception instead of raising it, so one failing handler doesn't stop the others.
2138
+
2139
+ <!-- snippet: no-run illustrative fragment (`lookup_caller` and `archive` are your own helpers) -->
2140
+ ```python
2141
+ from signalwire import AgentBase, FunctionResult
2142
+
2143
+ agent = AgentBase(name="my-agent")
2144
+
2145
+ @agent.on_call_start
2146
+ def load_caller(raw_data):
2147
+ caller = lookup_caller(raw_data.get("caller_id_num"))
2148
+ result = FunctionResult(f"The caller is {caller.name}, a {caller.tier} customer.")
2149
+ return result.update_global_data({"customer_id": caller.id})
2150
+
2151
+ @agent.on_call_end
2152
+ def save_call(call_log, raw_data):
2153
+ archive(raw_data.get("call_id"), call_log)
2154
+ ```
2155
+
2156
+ An `on_call_start` handler receives the SWAIG request (`call_id`, `global_data`, `caller_id_num` and the rest) and may return a `FunctionResult` or `None`. The platform runs the hook once, after the call is answered and before the AI's first turn, and uses its reply:
2157
+
2158
+ - The actions run at once, such as `update_global_data()` to give the call data before the conversation starts. Several handlers' actions run in registration order. `post_process` isn't used.
2159
+ - The response text is added to the conversation as a system message, so the model reads it before it speaks. Several handlers' texts are joined, one per line. Only a plain string response is used. An OpenAI Realtime agent runs the actions but drops the text, so put what its first greeting needs in the prompt from a per-call configuration callback instead.
2160
+
2161
+ The platform waits for the hook before the AI starts, so a slow handler delays the greeting; keep it short (see [Slow tools and the webhook timeout](#slow-tools-and-the-webhook-timeout)).
2162
+
2163
+ An `on_call_end` handler receives the conversation (`call_log`) and the SWAIG request. Registering one turns on `swaig_post_conversation`, without which the hook carries no transcript. Its return value is ignored.
2164
+
2047
2165
  #### Implementation
2048
2166
 
2049
- To implement lifecycle hooks, define them as regular SWAIG functions with these specific names.
2167
+ To write a hook yourself instead, define a SWAIG function with the reserved name. Use one or the other for each hook: `on_call_start()` and `on_call_end()` define `startup_hook` and `hangup_hook` themselves.
2050
2168
 
2051
2169
  > **Note:** The SDK does not ship built-in session storage. The `update_state`,
2052
2170
  > `get_state`, and `delete_state` methods in the following example are
@@ -2165,7 +2283,7 @@ def hangup_hook(self, args, raw_data):
2165
2283
  2. **Error Handling**: Always implement proper error handling in hooks - failures shouldn't crash the voice session
2166
2284
  3. **Timing**: `startup_hook` is called before the AI starts speaking to the caller
2167
2285
  4. **Session Data**: Any data you need to persist across the session should be stored in external storage (Redis, database, etc.)
2168
- 5. **Return Values**: Both hooks must return a `FunctionResult` object
2286
+ 5. **Return Values**: Both hooks must return a `FunctionResult` object. The `startup_hook`'s actions run and its response text is added to the conversation as a system message (except on an OpenAI Realtime agent, which drops the text); the `hangup_hook`'s response is unused, since the call is over
2169
2287
 
2170
2288
  ### SIP Routing
2171
2289
 
@@ -720,7 +720,7 @@ agent.register_swaig_function(weather_tool.to_swaig_function())
720
720
 
721
721
  ### Session Lifecycle Hooks
722
722
 
723
- SignalWire AI agents support special SWAIG functions that are automatically called at specific points in the conversation lifecycle:
723
+ SignalWire AI agents support special SWAIG functions that are automatically called at specific points in the conversation lifecycle. `on_call_start()` and `on_call_end()` (see [Event Handlers](#event-handlers)) define them for you; to write one yourself, use the reserved name:
724
724
 
725
725
  ##### `startup_hook`
726
726
  Called when a new conversation/call begins.
@@ -1376,6 +1376,55 @@ class MyAgent(AgentBase):
1376
1376
  print(f"Raw summary: {raw_text}")
1377
1377
  ```
1378
1378
 
1379
+ ##### `on_call_start`
1380
+
1381
+ Register a handler that runs when the call starts, before the AI's first turn. Use as a decorator or call directly; handlers run in registration order. Wraps the platform's reserved `startup_hook` function.
1382
+
1383
+ <!-- snippet: no-compile signature-illustration -->
1384
+ ```python
1385
+ def on_call_start(
1386
+ handler: Callable[[Dict[str, Any]], Optional[FunctionResult]]
1387
+ ) -> Callable[[Dict[str, Any]], Optional[FunctionResult]]
1388
+ ```
1389
+
1390
+ The handler receives `raw_data`, the SWAIG request (`call_id`, `global_data`, `caller_id_num` and the rest), and may return a `FunctionResult` or `None`:
1391
+ - Its actions run at once, in registration order across handlers. `post_process` isn't used.
1392
+ - Its response text is added to the conversation as a system message the model reads before it speaks. Several handlers' texts are joined, one per line. Only a plain string response is used. An OpenAI Realtime agent runs the actions but drops the text, so put what its first greeting needs in the prompt from a per-call configuration callback instead.
1393
+
1394
+ An exception is logged, not raised, and that handler's result is dropped. The platform waits for the hook before the AI starts, so keep the handler short.
1395
+
1396
+ **Usage:**
1397
+ ```python
1398
+ agent = AgentBase("my_agent")
1399
+
1400
+ @agent.on_call_start
1401
+ def greet_by_name(raw_data):
1402
+ name = raw_data.get("caller_id_name") or "the caller"
1403
+ return FunctionResult(f"The caller's name is {name}.")
1404
+ ```
1405
+
1406
+ ##### `on_call_end`
1407
+
1408
+ Register a handler that runs when the call ends, with the conversation. Use as a decorator or call directly; handlers run in registration order. Wraps the platform's reserved `hangup_hook` function, and turns on `swaig_post_conversation` so the hook carries the transcript.
1409
+
1410
+ <!-- snippet: no-compile signature-illustration -->
1411
+ ```python
1412
+ def on_call_end(
1413
+ handler: Callable[[List[Dict[str, Any]], Dict[str, Any]], None]
1414
+ ) -> Callable[[List[Dict[str, Any]], Dict[str, Any]], None]
1415
+ ```
1416
+
1417
+ The handler receives `call_log` (the conversation) and `raw_data` (the SWAIG request). Its return value is ignored, and an exception is logged, not raised.
1418
+
1419
+ **Usage:**
1420
+ ```python
1421
+ agent = AgentBase("my_agent")
1422
+
1423
+ @agent.on_call_end
1424
+ def log_length(call_log, raw_data):
1425
+ print(f"Call {raw_data.get('call_id')} ended after {len(call_log)} entries")
1426
+ ```
1427
+
1379
1428
  ##### `on_debug_event`
1380
1429
 
1381
1430
  Register a handler for debug webhook events. Use as a decorator. Requires `enable_debug_events()` to be called first.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "signalwire-sdk"
7
- version = "3.7.1.dev128"
7
+ version = "3.7.1.dev130"
8
8
  description = "SignalWire SDK for AI voice agents, live call control (RELAY) and REST. Run sw-pydocs for its documentation."
9
9
  authors = [
10
10
  {name = "SignalWire Team", email = "info@signalwire.com"}
@@ -59,7 +59,7 @@ if TYPE_CHECKING:
59
59
  from signalwire.utils.schema_utils import SchemaValidationError
60
60
  from signalwire.web import WebService
61
61
 
62
- __version__ = "3.7.1.dev128"
62
+ __version__ = "3.7.1.dev130"
63
63
 
64
64
  # §6.2-python (owner decision: NO packaging split — one package, all deps required;
65
65
  # IMPORT-TIME behavior only): the agent/web symbols are lazy-imported via module
@@ -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.7.1.dev128",
71
+ version="3.7.1.dev130",
72
72
  redirect_slashes=False,
73
73
  docs_url=None,
74
74
  redoc_url=None,
@@ -135,7 +135,13 @@ Per-call configuration: `set_dynamic_config_callback()` configures a copy of
135
135
  the agent for each request, from its query parameters, body and headers, for
136
136
  per-tenant prompts, voices and tools. The callback runs in a worker thread,
137
137
  at the same time as other calls' callbacks. Don't keep per-caller state on the
138
- shared agent instance.
138
+ shared agent instance. To turn a call away, build the agent with `play` and
139
+ `hangup` post-answer verbs and no tools, and have the callback add the tools
140
+ and call `clear_post_answer_verbs()` only for a call it accepts.
141
+
142
+ Call start and end: `on_call_start()` runs handlers before the AI's first
143
+ turn, and their `FunctionResult` text and actions reach the call;
144
+ `on_call_end()` runs handlers with the transcript when the call ends.
139
145
 
140
146
  Configuration precedence: constructor arguments, then the config file, then
141
147
  environment variables, then defaults.
@@ -175,6 +181,9 @@ environment variables, then defaults.
175
181
  "signalwire.AgentBase.set_dynamic_config_callback",
176
182
  "signalwire.AgentBase.get_app",
177
183
  "signalwire.AgentBase.on_summary",
184
+ "signalwire.AgentBase.on_call_start",
185
+ "signalwire.AgentBase.on_call_end",
186
+ "signalwire.AgentBase.add_per_call_config",
178
187
  ),
179
188
  related=("prompts", "tools", "contexts", "skills", "pgi", "deploy"),
180
189
  )
@@ -273,6 +282,11 @@ Or give the schema yourself, with a handler that takes `(args, raw_data)`:
273
282
  - `gates=[SemanticGate(...)]` adds semantic gates: yes/no questions a
274
283
  decision model answers about the call before the platform runs the tool.
275
284
  A platform release without semantic gates runs the tool ungated.
285
+ - Answer within a few seconds: the caller hears nothing while a tool runs.
286
+ SignalWire waits up to 120 seconds for a tool's webhook, and sends the
287
+ request again after a timeout, a failed connection or a 5xx, so a slow tool
288
+ can run more than once. Start long work in the background, return at once, and
289
+ send the result into the call with `rest.calling.ai_message()`.
276
290
  """,
277
291
  docs=(
278
292
  ("docs/swaig_reference.md", "Every FunctionResult method and action"),
@@ -749,6 +749,121 @@ class AgentBase( # type: ignore[misc] # intentional diamond: WebMixin's serve/
749
749
  handler=_hangup_handler,
750
750
  )
751
751
 
752
+ def on_call_start(
753
+ self, handler: Callable[[dict[str, Any]], "FunctionResult | None"]
754
+ ) -> Callable[[dict[str, Any]], "FunctionResult | None"]:
755
+ """
756
+ Register a handler that runs when the call starts, before the AI speaks.
757
+
758
+ Usable as a decorator or called directly. Handlers run in registration
759
+ order and receive:
760
+
761
+ raw_data (dict): the complete SWAIG request, including `call_id`,
762
+ `global_data` and the caller's details.
763
+
764
+ This wraps the platform's reserved `startup_hook` function, the
765
+ counterpart of the `hangup_hook` behind `on_call_end`. That name is
766
+ internal: the platform calls it once, after the call is answered and
767
+ before the AI's first turn, and never offers it to the model as
768
+ something it could choose.
769
+
770
+ The platform waits for the hook before the AI starts, so a slow
771
+ handler delays the greeting; it waits up to 120 seconds for a
772
+ function's reply and sends the request again after a timeout or a
773
+ 5xx. Keep handlers short; start long work in
774
+ the background and send its result into the call later (see
775
+ `rest.calling.ai_message`).
776
+
777
+ A handler may return a `FunctionResult`, or None. What the platform
778
+ does with the hook's reply:
779
+ - its actions run at once, in registration order across handlers
780
+ (for example `update_global_data()` to give the call data before
781
+ the conversation starts);
782
+ - its response text is added to the conversation as a system message
783
+ the model reads before its first turn. The texts of several handlers
784
+ are joined, one per line. Only a plain string response is used. An
785
+ OpenAI Realtime agent runs the actions but drops the text, so put
786
+ what its first greeting needs in the prompt from a per-call
787
+ configuration callback instead.
788
+ `post_process` is not used: the combined result runs its actions at
789
+ once. The text pipeline adds every hook reply to the conversation, so
790
+ a hook whose handlers return no text still adds a short placeholder
791
+ line, as any function with an empty reply does.
792
+
793
+ Exceptions are caught and logged rather than raised, and that
794
+ handler's result is dropped, so a failing handler can't stop the call
795
+ from starting or the other handlers from running.
796
+
797
+ Args:
798
+ handler: Callable taking (raw_data), returning a FunctionResult or
799
+ None.
800
+
801
+ Returns:
802
+ The handler, so this can be used as a decorator.
803
+
804
+ Example:
805
+ @agent.on_call_start
806
+ def load_caller(raw_data):
807
+ caller = lookup(raw_data.get("caller_id_num"))
808
+ result = FunctionResult(f"The caller's name is {caller.name}.")
809
+ return result.update_global_data({"customer_id": caller.id})
810
+ """
811
+ handlers = self.__dict__.get("_call_start_handlers")
812
+ if handlers is None:
813
+ # Rebind rather than mutate -- see the ephemeral-copy contract on
814
+ # _create_ephemeral_copy; this list is not in the copied set.
815
+ self._call_start_handlers = [handler]
816
+ self._ensure_call_start_hook()
817
+ else:
818
+ self._call_start_handlers = [*handlers, handler]
819
+ return handler
820
+
821
+ def _ensure_call_start_hook(self) -> None:
822
+ """Register the reserved startup_hook once."""
823
+
824
+ def _startup_handler(args: Any, raw_data: Any) -> FunctionResult:
825
+ raw = raw_data or {}
826
+ combined = FunctionResult()
827
+ texts: list[str] = []
828
+ for callback in self.__dict__.get("_call_start_handlers") or []:
829
+ name = getattr(callback, "__name__", repr(callback))
830
+ # Isolated per handler, as in _ensure_call_end_hook: one failure
831
+ # must not stop the others.
832
+ try:
833
+ result = callback(raw)
834
+ except Exception as exc:
835
+ self.log.error(
836
+ "call_start_handler_failed", error=str(exc), handler=name
837
+ )
838
+ continue
839
+ if result is None:
840
+ continue
841
+ if not isinstance(result, FunctionResult):
842
+ self.log.warning(
843
+ "call_start_handler_result_ignored",
844
+ handler=name,
845
+ result_type=type(result).__name__,
846
+ )
847
+ continue
848
+ if isinstance(result.response, str):
849
+ if result.response:
850
+ texts.append(result.response)
851
+ elif result.response:
852
+ self.log.warning(
853
+ "call_start_handler_structured_response_ignored",
854
+ handler=name,
855
+ )
856
+ combined.add_actions(result.action)
857
+ combined.set_response("\n".join(texts))
858
+ return combined
859
+
860
+ self.define_tool(
861
+ name="startup_hook",
862
+ description="Internal: fires when the call starts.",
863
+ parameters={},
864
+ handler=_startup_handler,
865
+ )
866
+
752
867
  def on_debug_event(self, handler: Callable[..., Any]) -> Callable[..., Any]:
753
868
  """
754
869
  Register a handler for debug webhook events.
@@ -1696,6 +1696,20 @@ class WebMixin(_HostTyped): # type: ignore[misc] # _HostTyped is object at run
1696
1696
  `set_dynamic_config_callback` requires them to find and manually chain
1697
1697
  each other's callbacks, and silently drops one when they don't.
1698
1698
 
1699
+ Rejecting a call: a callback can't refuse the request, but it can
1700
+ decide what the call does. Build the agent to fail closed -- in the
1701
+ constructor, `add_post_answer_verb("play", {"url": "say:..."})` and
1702
+ `add_post_answer_verb("hangup", {})`, and no tools -- so the call
1703
+ hears the message and hangs up before the `ai` verb runs. For a call
1704
+ the callback accepts, add the tools to `agent` and call
1705
+ `agent.clear_post_answer_verbs()` last. A callback that raises is
1706
+ logged and the copy is rendered as it stands, so a failure before
1707
+ that last step leaves the goodbye in place. Callbacks run for every
1708
+ request of the call (the SWML fetch, each tool call, the summary),
1709
+ and only the SWML fetch carries the caller's data (such as
1710
+ `userVariables`): verify there, remember the `call_id`, and check it
1711
+ on later requests. See "Rejecting a Call" in docs/agent_guide.md.
1712
+
1699
1713
  Args:
1700
1714
  callback: Callable taking (query_params, body_params, headers, agent).
1701
1715
  `agent` is the EPHEMERAL per-request copy; configure that,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: signalwire-sdk
3
- Version: 3.7.1.dev128
3
+ Version: 3.7.1.dev130
4
4
  Summary: SignalWire SDK for AI voice agents, live call control (RELAY) and REST. Run sw-pydocs for its documentation.
5
5
  Author-email: SignalWire Team <info@signalwire.com>
6
6
  License: MIT