signalwire-sdk 3.0.2.dev68__tar.gz → 3.0.2.dev70__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.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/PKG-INFO +2 -2
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/README.md +1 -1
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/pyproject.toml +1 -1
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/__init__.py +1 -1
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/agent_server.py +1 -1
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/agents/bedrock.py +5 -5
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/cli/build_search.py +7 -7
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/cli/core/agent_loader.py +2 -2
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/cli/core/argparse_helpers.py +6 -6
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/cli/core/service_loader.py +17 -15
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/cli/dokku.py +23 -19
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/cli/execution/webhook_exec.py +4 -2
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/cli/init_project.py +15 -15
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/cli/output/swml_dump.py +2 -2
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/cli/simulation/mock_env.py +13 -12
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/cli/swaig_test_wrapper.py +1 -1
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/cli/test_swaig.py +4 -4
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/agent/prompt/manager.py +6 -4
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/mixins/prompt_mixin.py +20 -11
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/mixins/skill_mixin.py +6 -3
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/mixins/state_mixin.py +11 -3
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/skill_base.py +8 -4
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/swml_renderer.py +5 -2
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/swml_service.py +10 -6
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/livewire/__init__.py +73 -53
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/livewire/plugins.py +3 -3
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/mcp_gateway/gateway_service.py +22 -19
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/mcp_gateway/mcp_manager.py +15 -11
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/mcp_gateway/session_manager.py +3 -3
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/pom/pom.py +18 -11
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/prefabs/concierge.py +15 -6
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/prefabs/faq_bot.py +13 -7
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/prefabs/info_gatherer.py +28 -11
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/prefabs/receptionist.py +19 -9
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/prefabs/survey.py +15 -7
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/relay/call.py +50 -48
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/relay/client.py +17 -9
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/relay/message.py +2 -2
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/rest/namespaces/phone_numbers.py +37 -23
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/search/__init__.py +1 -1
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/search/document_processor.py +16 -14
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/search/index_builder.py +5 -5
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/search/pgvector_backend.py +9 -9
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/search/query_processor.py +8 -6
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/search/search_engine.py +15 -14
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/search/search_service.py +18 -13
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/api_ninjas_trivia/skill.py +6 -3
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/claude_skills/skill.py +11 -6
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/datasphere/skill.py +3 -1
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/datetime/skill.py +6 -2
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/google_maps/skill.py +24 -8
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/info_gatherer/skill.py +7 -3
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/math/skill.py +9 -5
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/mcp_gateway/skill.py +3 -3
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/native_vector_search/skill.py +11 -4
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/play_background_file/skill.py +6 -3
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/registry.py +1 -1
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/spider/skill.py +5 -4
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/weather_api/skill.py +6 -3
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/web_search/skill.py +6 -4
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/web_search/skill_improved.py +4 -2
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/web_search/skill_original.py +4 -2
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/wikipedia_search/skill.py +9 -4
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/utils/__init__.py +5 -1
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/utils/schema_utils.py +13 -5
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/web/web_service.py +21 -14
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire_sdk.egg-info/PKG-INFO +2 -2
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/LICENSE +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/man/sw-agent-init.1 +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/man/sw-search.1 +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/man/swaig-test.1 +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/setup.cfg +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/setup.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/cli/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/cli/config.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/cli/core/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/cli/core/dynamic_config.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/cli/execution/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/cli/execution/datamap_exec.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/cli/output/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/cli/output/output_formatter.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/cli/simulation/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/cli/simulation/data_generation.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/cli/simulation/data_overrides.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/cli/types.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/_agent_host.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/agent/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/agent/config/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/agent/deployment/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/agent/deployment/handlers/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/agent/prompt/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/agent/routing/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/agent/security/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/agent/swml/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/agent/tools/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/agent/tools/decorator.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/agent/tools/registry.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/agent/tools/type_inference.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/agent_base.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/auth_handler.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/config_loader.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/contexts.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/data_map.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/function_result.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/logging_config.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/mixins/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/mixins/_mixin_host.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/mixins/ai_config_mixin.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/mixins/auth_mixin.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/mixins/mcp_server_mixin.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/mixins/serverless_mixin.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/mixins/tool_mixin.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/mixins/web_mixin.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/pom_builder.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/security/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/security/security_utils.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/security/session_manager.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/security/webhook_middleware.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/security/webhook_validator.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/security_config.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/skill_manager.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/swaig_function.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/swml_builder.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/core/swml_handler.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/mcp_gateway/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/pom/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/pom/pom_tool.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/prefabs/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/relay/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/relay/constants.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/relay/event.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/rest/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/rest/_base.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/rest/_pagination.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/rest/call_handler.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/rest/client.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/rest/namespaces/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/rest/namespaces/addresses.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/rest/namespaces/calling.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/rest/namespaces/chat.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/rest/namespaces/compat.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/rest/namespaces/datasphere.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/rest/namespaces/fabric.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/rest/namespaces/imported_numbers.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/rest/namespaces/logs.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/rest/namespaces/lookup.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/rest/namespaces/mfa.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/rest/namespaces/number_groups.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/rest/namespaces/project.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/rest/namespaces/pubsub.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/rest/namespaces/queues.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/rest/namespaces/recordings.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/rest/namespaces/registry.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/rest/namespaces/short_codes.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/rest/namespaces/sip_profile.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/rest/namespaces/verified_callers.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/rest/namespaces/video.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/schema.json +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/search/migration.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/search/models.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/README.md +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/api_ninjas_trivia/README.md +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/api_ninjas_trivia/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/claude_skills/README.md +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/claude_skills/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/datasphere/README.md +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/datasphere/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/datasphere_serverless/README.md +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/datasphere_serverless/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/datasphere_serverless/skill.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/datetime/README.md +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/datetime/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/google_maps/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/info_gatherer/README.md +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/info_gatherer/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/joke/README.md +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/joke/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/joke/skill.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/math/README.md +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/math/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/mcp_gateway/README.md +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/mcp_gateway/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/native_vector_search/README.md +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/native_vector_search/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/play_background_file/README.md +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/play_background_file/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/spider/README.md +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/spider/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/swml_transfer/README.md +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/swml_transfer/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/swml_transfer/skill.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/weather_api/README.md +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/weather_api/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/web_search/README.md +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/web_search/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/wikipedia_search/README.md +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/skills/wikipedia_search/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/utils/pom_utils.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/utils/token_generators.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/utils/url_validator.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/utils/validators.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/web/__init__.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire_sdk.egg-info/SOURCES.txt +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire_sdk.egg-info/dependency_links.txt +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire_sdk.egg-info/entry_points.txt +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire_sdk.egg-info/requires.txt +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire_sdk.egg-info/top_level.txt +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/tests/test_examples.py +0 -0
- {signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/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.0.2.
|
|
3
|
+
Version: 3.0.2.dev70
|
|
4
4
|
Summary: SignalWire SDK
|
|
5
5
|
Author-email: SignalWire Team <info@signalwire.com>
|
|
6
6
|
License: MIT
|
|
@@ -126,7 +126,7 @@ _Build AI voice agents, control live calls over WebSocket, and manage every Sign
|
|
|
126
126
|
|-----------|-------------|------------|
|
|
127
127
|
| **AI Agents** | Build voice agents that handle calls autonomously -- the platform runs the AI pipeline, your code defines the persona, tools, and call flow | [Agent Guide](#ai-agents) |
|
|
128
128
|
| **RELAY Client** | Control live calls and SMS/MMS in real time over WebSocket -- answer, play, record, collect DTMF, conference, transfer, and more | [RELAY docs](relay/README.md) |
|
|
129
|
-
| **REST Client** | Manage SignalWire resources over HTTP -- phone numbers, SIP endpoints, Fabric AI agents, video rooms, messaging, and
|
|
129
|
+
| **REST Client** | Manage SignalWire resources over HTTP -- phone numbers, SIP endpoints, Fabric AI agents, video rooms, messaging, and 21 API namespaces | [REST docs](rest/README.md) |
|
|
130
130
|
|
|
131
131
|
```bash
|
|
132
132
|
pip install signalwire-sdk
|
|
@@ -28,7 +28,7 @@ _Build AI voice agents, control live calls over WebSocket, and manage every Sign
|
|
|
28
28
|
|-----------|-------------|------------|
|
|
29
29
|
| **AI Agents** | Build voice agents that handle calls autonomously -- the platform runs the AI pipeline, your code defines the persona, tools, and call flow | [Agent Guide](#ai-agents) |
|
|
30
30
|
| **RELAY Client** | Control live calls and SMS/MMS in real time over WebSocket -- answer, play, record, collect DTMF, conference, transfer, and more | [RELAY docs](relay/README.md) |
|
|
31
|
-
| **REST Client** | Manage SignalWire resources over HTTP -- phone numbers, SIP endpoints, Fabric AI agents, video rooms, messaging, and
|
|
31
|
+
| **REST Client** | Manage SignalWire resources over HTTP -- phone numbers, SIP endpoints, Fabric AI agents, video rooms, messaging, and 21 API namespaces | [REST docs](rest/README.md) |
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
34
|
pip install signalwire-sdk
|
|
@@ -17,7 +17,7 @@ from .core.logging_config import configure_logging
|
|
|
17
17
|
|
|
18
18
|
configure_logging()
|
|
19
19
|
|
|
20
|
-
__version__ = "3.0.2.
|
|
20
|
+
__version__ = "3.0.2.dev70"
|
|
21
21
|
|
|
22
22
|
# Import core classes for easier access.
|
|
23
23
|
# These imports are intentionally placed after configure_logging() so the SDK's
|
{signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/agents/bedrock.py
RENAMED
|
@@ -46,8 +46,8 @@ class BedrockAgent(AgentBase):
|
|
|
46
46
|
temperature: float = 0.7,
|
|
47
47
|
top_p: float = 0.9,
|
|
48
48
|
max_tokens: int = 1024,
|
|
49
|
-
**kwargs,
|
|
50
|
-
):
|
|
49
|
+
**kwargs: Any,
|
|
50
|
+
) -> None:
|
|
51
51
|
"""
|
|
52
52
|
Initialize BedrockAgent
|
|
53
53
|
|
|
@@ -77,7 +77,7 @@ class BedrockAgent(AgentBase):
|
|
|
77
77
|
logger.info(f"BedrockAgent initialized: {name} on route {route}")
|
|
78
78
|
|
|
79
79
|
def _render_swml(
|
|
80
|
-
self, call_id: str | None = None, modifications: dict | None = None
|
|
80
|
+
self, call_id: str | None = None, modifications: dict[str, Any] | None = None
|
|
81
81
|
) -> str:
|
|
82
82
|
"""
|
|
83
83
|
Render SWML document with amazon_bedrock verb
|
|
@@ -264,7 +264,7 @@ class BedrockAgent(AgentBase):
|
|
|
264
264
|
"""
|
|
265
265
|
self.set_inference_params(temperature=temperature)
|
|
266
266
|
|
|
267
|
-
def set_post_prompt_llm_params(self, **params) -> None:
|
|
267
|
+
def set_post_prompt_llm_params(self, **params: Any) -> None:
|
|
268
268
|
"""
|
|
269
269
|
Set post-prompt LLM parameters - not applicable for Bedrock
|
|
270
270
|
|
|
@@ -278,7 +278,7 @@ class BedrockAgent(AgentBase):
|
|
|
278
278
|
"set_post_prompt_llm_params() called but Bedrock post-prompt uses OpenAI configured in C code"
|
|
279
279
|
)
|
|
280
280
|
|
|
281
|
-
def set_prompt_llm_params(self, **params) -> None:
|
|
281
|
+
def set_prompt_llm_params(self, **params: Any) -> None:
|
|
282
282
|
"""
|
|
283
283
|
Set prompt LLM parameters - use set_inference_params instead
|
|
284
284
|
|
{signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/cli/build_search.py
RENAMED
|
@@ -17,7 +17,7 @@ from urllib.parse import urlparse, urlunparse
|
|
|
17
17
|
from signalwire.search.models import MODEL_ALIASES, DEFAULT_MODEL, resolve_model_alias
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
def _mask_connection_string(conn_str):
|
|
20
|
+
def _mask_connection_string(conn_str: str) -> str:
|
|
21
21
|
"""Mask password in connection string for safe logging."""
|
|
22
22
|
try:
|
|
23
23
|
parsed = urlparse(conn_str)
|
|
@@ -32,7 +32,7 @@ def _mask_connection_string(conn_str):
|
|
|
32
32
|
return "****"
|
|
33
33
|
|
|
34
34
|
|
|
35
|
-
def main():
|
|
35
|
+
def main() -> None:
|
|
36
36
|
"""Main entry point for the build-search command"""
|
|
37
37
|
parser = argparse.ArgumentParser(
|
|
38
38
|
description="Build local search index from documents",
|
|
@@ -659,7 +659,7 @@ Examples:
|
|
|
659
659
|
sys.exit(1)
|
|
660
660
|
|
|
661
661
|
|
|
662
|
-
def validate_command():
|
|
662
|
+
def validate_command() -> None:
|
|
663
663
|
"""Validate an existing search index"""
|
|
664
664
|
parser = argparse.ArgumentParser(description="Validate a search index file")
|
|
665
665
|
parser.add_argument("index_file", help="Path to .swsearch file to validate")
|
|
@@ -702,7 +702,7 @@ def validate_command():
|
|
|
702
702
|
sys.exit(1)
|
|
703
703
|
|
|
704
704
|
|
|
705
|
-
def search_command():
|
|
705
|
+
def search_command() -> None:
|
|
706
706
|
"""Search within an existing search index"""
|
|
707
707
|
parser = argparse.ArgumentParser(
|
|
708
708
|
description="Search within a .swsearch index file or pgvector collection"
|
|
@@ -1091,7 +1091,7 @@ def search_command():
|
|
|
1091
1091
|
sys.exit(1)
|
|
1092
1092
|
|
|
1093
1093
|
|
|
1094
|
-
def migrate_command():
|
|
1094
|
+
def migrate_command() -> None:
|
|
1095
1095
|
"""Migrate search indexes between backends"""
|
|
1096
1096
|
parser = argparse.ArgumentParser(
|
|
1097
1097
|
description="Migrate search indexes between SQLite and pgvector backends",
|
|
@@ -1242,7 +1242,7 @@ Examples:
|
|
|
1242
1242
|
sys.exit(1)
|
|
1243
1243
|
|
|
1244
1244
|
|
|
1245
|
-
def remote_command():
|
|
1245
|
+
def remote_command() -> None:
|
|
1246
1246
|
"""Search via remote API endpoint"""
|
|
1247
1247
|
parser = argparse.ArgumentParser(description="Search via remote API endpoint")
|
|
1248
1248
|
parser.add_argument(
|
|
@@ -1413,7 +1413,7 @@ def remote_command():
|
|
|
1413
1413
|
sys.exit(1)
|
|
1414
1414
|
|
|
1415
1415
|
|
|
1416
|
-
def console_entry_point():
|
|
1416
|
+
def console_entry_point() -> None:
|
|
1417
1417
|
"""Console script entry point for pip installation"""
|
|
1418
1418
|
import sys
|
|
1419
1419
|
|
|
@@ -511,12 +511,12 @@ def _load_service_impl(
|
|
|
511
511
|
captured_services = []
|
|
512
512
|
patches_applied = []
|
|
513
513
|
|
|
514
|
-
def mock_serve(self, *args, **kwargs):
|
|
514
|
+
def mock_serve(self: Any, *args: Any, **kwargs: Any) -> Any:
|
|
515
515
|
captured_services.append(self)
|
|
516
516
|
print(" (Intercepted serve() call, service captured for testing)")
|
|
517
517
|
return self
|
|
518
518
|
|
|
519
|
-
def mock_run(self, *args, **kwargs):
|
|
519
|
+
def mock_run(self: Any, *args: Any, **kwargs: Any) -> Any:
|
|
520
520
|
captured_services.append(self)
|
|
521
521
|
print(" (Intercepted run() call, service captured for testing)")
|
|
522
522
|
return self
|
|
@@ -12,23 +12,23 @@ Custom argument parsing and function argument parsing
|
|
|
12
12
|
|
|
13
13
|
import sys
|
|
14
14
|
import argparse
|
|
15
|
-
from typing import Any
|
|
15
|
+
from typing import Any, NoReturn
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
class CustomArgumentParser(argparse.ArgumentParser):
|
|
19
19
|
"""Custom ArgumentParser with better error handling"""
|
|
20
20
|
|
|
21
|
-
def __init__(self, *args, **kwargs):
|
|
21
|
+
def __init__(self, *args: Any, **kwargs: Any) -> None:
|
|
22
22
|
super().__init__(*args, **kwargs)
|
|
23
23
|
self._suppress_usage = False
|
|
24
24
|
|
|
25
|
-
def _print_message(self, message, file=None):
|
|
25
|
+
def _print_message(self, message: str, file: Any = None) -> None:
|
|
26
26
|
"""Override to suppress usage output for specific errors"""
|
|
27
27
|
if self._suppress_usage:
|
|
28
28
|
return
|
|
29
29
|
super()._print_message(message, file)
|
|
30
30
|
|
|
31
|
-
def error(self, message):
|
|
31
|
+
def error(self, message: str) -> NoReturn:
|
|
32
32
|
"""Override error method to provide user-friendly error messages"""
|
|
33
33
|
if "required" in message.lower() and "agent_path" in message:
|
|
34
34
|
self._suppress_usage = True
|
|
@@ -49,13 +49,13 @@ class CustomArgumentParser(argparse.ArgumentParser):
|
|
|
49
49
|
# For other errors, use the default behavior
|
|
50
50
|
super().error(message)
|
|
51
51
|
|
|
52
|
-
def print_usage(self, file=None):
|
|
52
|
+
def print_usage(self, file: Any = None) -> None:
|
|
53
53
|
"""Override print_usage to suppress output when we want custom error handling"""
|
|
54
54
|
if self._suppress_usage:
|
|
55
55
|
return
|
|
56
56
|
super().print_usage(file)
|
|
57
57
|
|
|
58
|
-
def parse_args(self, args=None, namespace=None):
|
|
58
|
+
def parse_args(self, args: Any = None, namespace: Any = None) -> Any:
|
|
59
59
|
"""Override parse_args to provide custom error handling for missing arguments"""
|
|
60
60
|
# Check if no arguments provided (just the program name)
|
|
61
61
|
if args is None:
|
|
@@ -44,9 +44,9 @@ else:
|
|
|
44
44
|
class ServiceCapture:
|
|
45
45
|
"""Captures SWMLService instances when they try to run/serve"""
|
|
46
46
|
|
|
47
|
-
def __init__(self):
|
|
47
|
+
def __init__(self) -> None:
|
|
48
48
|
self.captured_services: list[SWMLService] = []
|
|
49
|
-
self.original_methods = {}
|
|
49
|
+
self.original_methods: dict[Any, Any] = {}
|
|
50
50
|
|
|
51
51
|
def capture(
|
|
52
52
|
self, service_path: str, suppress_output: bool = False
|
|
@@ -115,20 +115,20 @@ class ServiceCapture:
|
|
|
115
115
|
|
|
116
116
|
return self.captured_services
|
|
117
117
|
|
|
118
|
-
def _apply_patches(self):
|
|
118
|
+
def _apply_patches(self) -> None:
|
|
119
119
|
"""Apply patches to capture services"""
|
|
120
120
|
|
|
121
121
|
# Store reference to self for use in closures
|
|
122
122
|
capture_self = self
|
|
123
123
|
|
|
124
|
-
def mock_run(service_instance, *args, **kwargs):
|
|
124
|
+
def mock_run(service_instance: Any, *args: Any, **kwargs: Any) -> Any:
|
|
125
125
|
"""Capture service when run() is called"""
|
|
126
126
|
capture_self.captured_services.append(service_instance)
|
|
127
127
|
# Don't print during stdout suppression
|
|
128
128
|
# Don't actually run - we're just capturing
|
|
129
129
|
return service_instance
|
|
130
130
|
|
|
131
|
-
def mock_serve(service_instance, *args, **kwargs):
|
|
131
|
+
def mock_serve(service_instance: Any, *args: Any, **kwargs: Any) -> Any:
|
|
132
132
|
"""Capture service when serve() is called"""
|
|
133
133
|
capture_self.captured_services.append(service_instance)
|
|
134
134
|
# Don't print during stdout suppression
|
|
@@ -146,7 +146,7 @@ class ServiceCapture:
|
|
|
146
146
|
self.original_methods[(base_class, "serve")] = base_class.serve
|
|
147
147
|
base_class.serve = mock_serve
|
|
148
148
|
|
|
149
|
-
def _restore_patches(self):
|
|
149
|
+
def _restore_patches(self) -> None:
|
|
150
150
|
"""Restore original methods"""
|
|
151
151
|
for (base_class, method_name), original_method in self.original_methods.items():
|
|
152
152
|
setattr(base_class, method_name, original_method)
|
|
@@ -156,10 +156,10 @@ class ServiceCapture:
|
|
|
156
156
|
async def simulate_request_to_service(
|
|
157
157
|
service: SWMLService,
|
|
158
158
|
method: str = "POST",
|
|
159
|
-
body: dict | None = None,
|
|
160
|
-
query_params: dict | None = None,
|
|
161
|
-
headers: dict | None = None,
|
|
162
|
-
) -> dict:
|
|
159
|
+
body: dict[str, Any] | None = None,
|
|
160
|
+
query_params: dict[str, str] | None = None,
|
|
161
|
+
headers: dict[str, str] | None = None,
|
|
162
|
+
) -> dict[str, Any]:
|
|
163
163
|
"""
|
|
164
164
|
Simulate a request to a SWMLService instance
|
|
165
165
|
|
|
@@ -195,7 +195,9 @@ async def simulate_request_to_service(
|
|
|
195
195
|
# FastAPI Response
|
|
196
196
|
import json
|
|
197
197
|
|
|
198
|
-
|
|
198
|
+
# json.loads() is typed -> Any; a FastAPI Response body is the rendered
|
|
199
|
+
# SWML JSON object, matching the declared dict return.
|
|
200
|
+
return cast(dict[str, Any], json.loads(result.body.decode()))
|
|
199
201
|
if isinstance(result, dict):
|
|
200
202
|
return result
|
|
201
203
|
# Try to get content from response
|
|
@@ -206,11 +208,11 @@ def load_and_simulate_service(
|
|
|
206
208
|
service_path: str,
|
|
207
209
|
route: str | None = None,
|
|
208
210
|
method: str = "POST",
|
|
209
|
-
body: dict | None = None,
|
|
210
|
-
query_params: dict | None = None,
|
|
211
|
-
headers: dict | None = None,
|
|
211
|
+
body: dict[str, Any] | None = None,
|
|
212
|
+
query_params: dict[str, str] | None = None,
|
|
213
|
+
headers: dict[str, str] | None = None,
|
|
212
214
|
suppress_output: bool = False,
|
|
213
|
-
) -> dict:
|
|
215
|
+
) -> dict[str, Any]:
|
|
214
216
|
"""
|
|
215
217
|
Load a service file and simulate a request to it
|
|
216
218
|
|
{signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/cli/dokku.py
RENAMED
|
@@ -43,23 +43,23 @@ class Colors:
|
|
|
43
43
|
NC = "\033[0m"
|
|
44
44
|
|
|
45
45
|
|
|
46
|
-
def print_step(msg: str):
|
|
46
|
+
def print_step(msg: str) -> None:
|
|
47
47
|
print(f"{Colors.BLUE}==>{Colors.NC} {msg}")
|
|
48
48
|
|
|
49
49
|
|
|
50
|
-
def print_success(msg: str):
|
|
50
|
+
def print_success(msg: str) -> None:
|
|
51
51
|
print(f"{Colors.GREEN}✓{Colors.NC} {msg}")
|
|
52
52
|
|
|
53
53
|
|
|
54
|
-
def print_warning(msg: str):
|
|
54
|
+
def print_warning(msg: str) -> None:
|
|
55
55
|
print(f"{Colors.YELLOW}!{Colors.NC} {msg}")
|
|
56
56
|
|
|
57
57
|
|
|
58
|
-
def print_error(msg: str):
|
|
58
|
+
def print_error(msg: str) -> None:
|
|
59
59
|
print(f"{Colors.RED}✗{Colors.NC} {msg}")
|
|
60
60
|
|
|
61
61
|
|
|
62
|
-
def print_header(msg: str):
|
|
62
|
+
def print_header(msg: str) -> None:
|
|
63
63
|
print(f"\n{Colors.BOLD}{Colors.CYAN}{msg}{Colors.NC}")
|
|
64
64
|
|
|
65
65
|
|
|
@@ -1849,7 +1849,7 @@ class DokkuProjectGenerator:
|
|
|
1849
1849
|
print_error(f"Failed to generate project: {e}")
|
|
1850
1850
|
return False
|
|
1851
1851
|
|
|
1852
|
-
def _write_core_files(self):
|
|
1852
|
+
def _write_core_files(self) -> None:
|
|
1853
1853
|
"""Write files common to both modes."""
|
|
1854
1854
|
# Procfile
|
|
1855
1855
|
self._write_file("Procfile", PROCFILE_TEMPLATE)
|
|
@@ -1895,7 +1895,7 @@ class DokkuProjectGenerator:
|
|
|
1895
1895
|
),
|
|
1896
1896
|
)
|
|
1897
1897
|
|
|
1898
|
-
def _write_web_files(self):
|
|
1898
|
+
def _write_web_files(self) -> None:
|
|
1899
1899
|
"""Write web interface files."""
|
|
1900
1900
|
# Create web directory
|
|
1901
1901
|
web_dir = self.project_dir / "web"
|
|
@@ -1909,7 +1909,7 @@ class DokkuProjectGenerator:
|
|
|
1909
1909
|
WEB_INDEX_TEMPLATE.format(agent_name=self.app_name, route=route),
|
|
1910
1910
|
)
|
|
1911
1911
|
|
|
1912
|
-
def _write_simple_files(self):
|
|
1912
|
+
def _write_simple_files(self) -> None:
|
|
1913
1913
|
"""Write files for simple deployment mode."""
|
|
1914
1914
|
dokku_host = self.options.get("dokku_host", "dokku.yourdomain.com")
|
|
1915
1915
|
route = self.options.get("route", "swaig")
|
|
@@ -1929,7 +1929,7 @@ class DokkuProjectGenerator:
|
|
|
1929
1929
|
)
|
|
1930
1930
|
self._write_file("README.md", readme)
|
|
1931
1931
|
|
|
1932
|
-
def _write_cicd_files(self):
|
|
1932
|
+
def _write_cicd_files(self) -> None:
|
|
1933
1933
|
"""Write files for CI/CD deployment mode."""
|
|
1934
1934
|
# Create .github/workflows directory
|
|
1935
1935
|
workflows_dir = self.project_dir / ".github" / "workflows"
|
|
@@ -1957,7 +1957,7 @@ class DokkuProjectGenerator:
|
|
|
1957
1957
|
readme = README_CICD_TEMPLATE.format(app_name=self.app_name)
|
|
1958
1958
|
self._write_file("README.md", readme)
|
|
1959
1959
|
|
|
1960
|
-
def _write_file(self, path: str, content: str, executable: bool = False):
|
|
1960
|
+
def _write_file(self, path: str, content: str, executable: bool = False) -> None:
|
|
1961
1961
|
"""Write a file to the project directory."""
|
|
1962
1962
|
file_path = self.project_dir / path
|
|
1963
1963
|
file_path.parent.mkdir(parents=True, exist_ok=True)
|
|
@@ -1974,7 +1974,7 @@ class DokkuProjectGenerator:
|
|
|
1974
1974
|
# =============================================================================
|
|
1975
1975
|
|
|
1976
1976
|
|
|
1977
|
-
def cmd_init(args):
|
|
1977
|
+
def cmd_init(args: argparse.Namespace) -> int:
|
|
1978
1978
|
"""Initialize a new Dokku project."""
|
|
1979
1979
|
app_name = args.name
|
|
1980
1980
|
|
|
@@ -2031,7 +2031,9 @@ def cmd_init(args):
|
|
|
2031
2031
|
return 1
|
|
2032
2032
|
|
|
2033
2033
|
|
|
2034
|
-
def _print_simple_instructions(
|
|
2034
|
+
def _print_simple_instructions(
|
|
2035
|
+
app_name: str, dokku_host: str, project_dir: Path
|
|
2036
|
+
) -> None:
|
|
2035
2037
|
"""Print instructions for simple mode."""
|
|
2036
2038
|
print(f"""To deploy your agent:
|
|
2037
2039
|
|
|
@@ -2046,7 +2048,7 @@ Or manually:
|
|
|
2046
2048
|
""")
|
|
2047
2049
|
|
|
2048
2050
|
|
|
2049
|
-
def _print_cicd_instructions(app_name: str):
|
|
2051
|
+
def _print_cicd_instructions(app_name: str) -> None:
|
|
2050
2052
|
"""Print instructions for CI/CD mode."""
|
|
2051
2053
|
print(f"""
|
|
2052
2054
|
{Colors.BOLD}═══════════════════════════════════════════════════════════{Colors.NC}
|
|
@@ -2082,7 +2084,7 @@ def _print_cicd_instructions(app_name: str):
|
|
|
2082
2084
|
""")
|
|
2083
2085
|
|
|
2084
2086
|
|
|
2085
|
-
def cmd_deploy(args):
|
|
2087
|
+
def cmd_deploy(args: argparse.Namespace) -> int:
|
|
2086
2088
|
"""Deploy to Dokku."""
|
|
2087
2089
|
# Check if we're in a Dokku project
|
|
2088
2090
|
if not Path("Procfile").exists():
|
|
@@ -2150,7 +2152,7 @@ def cmd_deploy(args):
|
|
|
2150
2152
|
return 0
|
|
2151
2153
|
|
|
2152
2154
|
|
|
2153
|
-
def cmd_logs(args):
|
|
2155
|
+
def cmd_logs(args: argparse.Namespace) -> int:
|
|
2154
2156
|
"""Tail Dokku logs."""
|
|
2155
2157
|
app_name = args.app
|
|
2156
2158
|
dokku_host = args.host
|
|
@@ -2172,7 +2174,7 @@ def cmd_logs(args):
|
|
|
2172
2174
|
return 0
|
|
2173
2175
|
|
|
2174
2176
|
|
|
2175
|
-
def cmd_config(args):
|
|
2177
|
+
def cmd_config(args: argparse.Namespace) -> int:
|
|
2176
2178
|
"""Manage Dokku config."""
|
|
2177
2179
|
app_name = args.app
|
|
2178
2180
|
dokku_host = args.host
|
|
@@ -2202,7 +2204,7 @@ def cmd_config(args):
|
|
|
2202
2204
|
return 0
|
|
2203
2205
|
|
|
2204
2206
|
|
|
2205
|
-
def cmd_scale(args):
|
|
2207
|
+
def cmd_scale(args: argparse.Namespace) -> int:
|
|
2206
2208
|
"""Scale Dokku processes."""
|
|
2207
2209
|
app_name = args.app
|
|
2208
2210
|
dokku_host = args.host
|
|
@@ -2232,7 +2234,9 @@ def _get_app_name() -> str:
|
|
|
2232
2234
|
with open( # noqa: PTH123 # tests patch builtins.open while mocking Path; Path.open() would bypass the mock seam
|
|
2233
2235
|
"app.json"
|
|
2234
2236
|
) as f:
|
|
2235
|
-
|
|
2237
|
+
# json.load() is typed -> Any; the "name" field is a string
|
|
2238
|
+
# (default "" when absent). Coerce to satisfy the str return.
|
|
2239
|
+
return str(json.load(f).get("name", ""))
|
|
2236
2240
|
except Exception: # noqa: S110 # best-effort read of optional app.json; falls through to interactive prompt on failure
|
|
2237
2241
|
pass
|
|
2238
2242
|
return prompt("App name", Path.cwd().name)
|
|
@@ -2243,7 +2247,7 @@ def _get_app_name() -> str:
|
|
|
2243
2247
|
# =============================================================================
|
|
2244
2248
|
|
|
2245
2249
|
|
|
2246
|
-
def main():
|
|
2250
|
+
def main() -> int:
|
|
2247
2251
|
parser = argparse.ArgumentParser(
|
|
2248
2252
|
description="SignalWire Agent Dokku Deployment Tool",
|
|
2249
2253
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
@@ -12,7 +12,7 @@ Webhook function execution (including external)
|
|
|
12
12
|
|
|
13
13
|
import json
|
|
14
14
|
import requests
|
|
15
|
-
from typing import Any, TYPE_CHECKING
|
|
15
|
+
from typing import Any, TYPE_CHECKING, cast
|
|
16
16
|
from ..config import HTTP_REQUEST_TIMEOUT
|
|
17
17
|
|
|
18
18
|
if TYPE_CHECKING:
|
|
@@ -92,7 +92,9 @@ def execute_external_webhook_function(
|
|
|
92
92
|
|
|
93
93
|
if response.status_code == 200:
|
|
94
94
|
try:
|
|
95
|
-
|
|
95
|
+
# requests' .json() is typed -> Any; a successful webhook returns
|
|
96
|
+
# a JSON object, matching the declared dict return.
|
|
97
|
+
result = cast(dict[str, Any], response.json())
|
|
96
98
|
if verbose:
|
|
97
99
|
print("✓ External webhook succeeded")
|
|
98
100
|
print(f"Response: {json.dumps(result, indent=2)}")
|
{signalwire_sdk-3.0.2.dev68 → signalwire_sdk-3.0.2.dev70}/signalwire/signalwire/cli/init_project.py
RENAMED
|
@@ -46,19 +46,19 @@ class Colors:
|
|
|
46
46
|
NC = "\033[0m" # No Color
|
|
47
47
|
|
|
48
48
|
|
|
49
|
-
def print_step(msg: str):
|
|
49
|
+
def print_step(msg: str) -> None:
|
|
50
50
|
print(f"{Colors.BLUE}==>{Colors.NC} {msg}")
|
|
51
51
|
|
|
52
52
|
|
|
53
|
-
def print_success(msg: str):
|
|
53
|
+
def print_success(msg: str) -> None:
|
|
54
54
|
print(f"{Colors.GREEN}✓{Colors.NC} {msg}")
|
|
55
55
|
|
|
56
56
|
|
|
57
|
-
def print_warning(msg: str):
|
|
57
|
+
def print_warning(msg: str) -> None:
|
|
58
58
|
print(f"{Colors.YELLOW}!{Colors.NC} {msg}")
|
|
59
59
|
|
|
60
60
|
|
|
61
|
-
def print_error(msg: str):
|
|
61
|
+
def print_error(msg: str) -> None:
|
|
62
62
|
print(f"{Colors.RED}✗{Colors.NC} {msg}")
|
|
63
63
|
|
|
64
64
|
|
|
@@ -2066,7 +2066,7 @@ class ProjectGenerator:
|
|
|
2066
2066
|
"auth_password": auth_password,
|
|
2067
2067
|
}
|
|
2068
2068
|
|
|
2069
|
-
def _create_cloud_env_example(self, platform: str):
|
|
2069
|
+
def _create_cloud_env_example(self, platform: str) -> None:
|
|
2070
2070
|
"""Create .env.example for cloud platforms."""
|
|
2071
2071
|
env_content = """# Optional: Basic authentication credentials
|
|
2072
2072
|
# If not set, the SDK will auto-generate secure credentials
|
|
@@ -2076,7 +2076,7 @@ SWML_BASIC_AUTH_PASSWORD=your-secure-password
|
|
|
2076
2076
|
(self.project_dir / ".env.example").write_text(env_content)
|
|
2077
2077
|
print_success("Created .env.example")
|
|
2078
2078
|
|
|
2079
|
-
def _create_cloud_readme(self, platform: str):
|
|
2079
|
+
def _create_cloud_readme(self, platform: str) -> None:
|
|
2080
2080
|
"""Create README.md for cloud platforms."""
|
|
2081
2081
|
platform_names = {
|
|
2082
2082
|
"aws": "AWS Lambda",
|
|
@@ -2272,7 +2272,7 @@ Set your phone number's SWML URL to the endpoint URL shown after deployment.
|
|
|
2272
2272
|
(self.project_dir / "README.md").write_text(readme)
|
|
2273
2273
|
print_success("Created README.md")
|
|
2274
2274
|
|
|
2275
|
-
def _create_directories(self):
|
|
2275
|
+
def _create_directories(self) -> None:
|
|
2276
2276
|
"""Create project directory structure."""
|
|
2277
2277
|
dirs = ["agents", "skills"]
|
|
2278
2278
|
if self.features.get("tests"):
|
|
@@ -2286,7 +2286,7 @@ Set your phone number's SWML URL to the endpoint URL shown after deployment.
|
|
|
2286
2286
|
for d in dirs:
|
|
2287
2287
|
(self.project_dir / d).mkdir(exist_ok=True)
|
|
2288
2288
|
|
|
2289
|
-
def _create_agent_files(self):
|
|
2289
|
+
def _create_agent_files(self) -> None:
|
|
2290
2290
|
"""Create agent module files."""
|
|
2291
2291
|
agents_dir = self.project_dir / "agents"
|
|
2292
2292
|
|
|
@@ -2305,13 +2305,13 @@ Set your phone number's SWML URL to the endpoint URL shown after deployment.
|
|
|
2305
2305
|
(self.project_dir / "skills" / "__init__.py").write_text(TEMPLATE_SKILLS_INIT)
|
|
2306
2306
|
print_success("Created skills/__init__.py")
|
|
2307
2307
|
|
|
2308
|
-
def _create_app_file(self):
|
|
2308
|
+
def _create_app_file(self) -> None:
|
|
2309
2309
|
"""Create main app.py entry point."""
|
|
2310
2310
|
app_code = get_app_template(self.features)
|
|
2311
2311
|
(self.project_dir / "app.py").write_text(app_code)
|
|
2312
2312
|
print_success("Created app.py")
|
|
2313
2313
|
|
|
2314
|
-
def _create_config_files(self):
|
|
2314
|
+
def _create_config_files(self) -> None:
|
|
2315
2315
|
"""Create configuration files."""
|
|
2316
2316
|
# .env
|
|
2317
2317
|
env_content = f"""# SignalWire Credentials
|
|
@@ -2357,7 +2357,7 @@ DEBUG_WEBHOOK_LEVEL=1
|
|
|
2357
2357
|
(self.project_dir / "requirements.txt").write_text(TEMPLATE_REQUIREMENTS)
|
|
2358
2358
|
print_success("Created requirements.txt")
|
|
2359
2359
|
|
|
2360
|
-
def _create_test_files(self):
|
|
2360
|
+
def _create_test_files(self) -> None:
|
|
2361
2361
|
"""Create test files."""
|
|
2362
2362
|
tests_dir = self.project_dir / "tests"
|
|
2363
2363
|
|
|
@@ -2368,20 +2368,20 @@ DEBUG_WEBHOOK_LEVEL=1
|
|
|
2368
2368
|
(tests_dir / "test_agent.py").write_text(test_code)
|
|
2369
2369
|
print_success("Created tests/test_agent.py")
|
|
2370
2370
|
|
|
2371
|
-
def _create_web_files(self):
|
|
2371
|
+
def _create_web_files(self) -> None:
|
|
2372
2372
|
"""Create web UI files."""
|
|
2373
2373
|
web_dir = self.project_dir / "web"
|
|
2374
2374
|
|
|
2375
2375
|
(web_dir / "index.html").write_text(get_web_index_template())
|
|
2376
2376
|
print_success("Created web/index.html")
|
|
2377
2377
|
|
|
2378
|
-
def _create_readme(self):
|
|
2378
|
+
def _create_readme(self) -> None:
|
|
2379
2379
|
"""Create README.md."""
|
|
2380
2380
|
readme = get_readme_template(self.project_name, self.features)
|
|
2381
2381
|
(self.project_dir / "README.md").write_text(readme)
|
|
2382
2382
|
print_success("Created README.md")
|
|
2383
2383
|
|
|
2384
|
-
def _create_virtualenv(self):
|
|
2384
|
+
def _create_virtualenv(self) -> None:
|
|
2385
2385
|
"""Create and set up virtual environment."""
|
|
2386
2386
|
venv_dir = self.project_dir / ".venv"
|
|
2387
2387
|
|
|
@@ -2627,7 +2627,7 @@ def run_quick(project_name: str, args: Any) -> dict[str, Any]:
|
|
|
2627
2627
|
}
|
|
2628
2628
|
|
|
2629
2629
|
|
|
2630
|
-
def main():
|
|
2630
|
+
def main() -> None:
|
|
2631
2631
|
"""Main entry point."""
|
|
2632
2632
|
import argparse
|
|
2633
2633
|
|
|
@@ -28,14 +28,14 @@ if TYPE_CHECKING:
|
|
|
28
28
|
original_print = print
|
|
29
29
|
|
|
30
30
|
|
|
31
|
-
def setup_output_suppression():
|
|
31
|
+
def setup_output_suppression() -> None:
|
|
32
32
|
"""Set up output suppression for SWML dumping"""
|
|
33
33
|
# The central logging system is already configured via environment variable
|
|
34
34
|
# Just suppress any remaining warnings
|
|
35
35
|
warnings.filterwarnings("ignore")
|
|
36
36
|
|
|
37
37
|
# Capture and suppress print statements
|
|
38
|
-
def suppressed_print(*args, **kwargs):
|
|
38
|
+
def suppressed_print(*args: Any, **kwargs: Any) -> None:
|
|
39
39
|
# If file is specified (like stderr), allow it
|
|
40
40
|
if "file" in kwargs and kwargs["file"] is not sys.stdout:
|
|
41
41
|
original_print(*args, **kwargs)
|