signalwire-agents 0.1.26__tar.gz → 0.1.28__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 (139) hide show
  1. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/CHANGELOG.md +8 -0
  2. {signalwire_agents-0.1.26/signalwire_agents.egg-info → signalwire_agents-0.1.28}/PKG-INFO +1 -59
  3. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/README.md +0 -58
  4. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/pyproject.toml +1 -1
  5. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/schema.json +2789 -701
  6. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/__init__.py +1 -4
  7. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/cli/config.py +11 -1
  8. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/cli/simulation/data_overrides.py +6 -2
  9. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/cli/test_swaig.py +6 -0
  10. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/agent_base.py +1 -12
  11. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/contexts.py +1 -0
  12. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/mixins/state_mixin.py +1 -67
  13. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/mixins/tool_mixin.py +0 -65
  14. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/prefabs/concierge.py +0 -3
  15. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/prefabs/faq_bot.py +0 -3
  16. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/prefabs/info_gatherer.py +0 -3
  17. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/prefabs/receptionist.py +0 -3
  18. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/prefabs/survey.py +0 -3
  19. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/schema.json +2789 -701
  20. signalwire_agents-0.1.28/signalwire_agents/skills/mcp_gateway/README.md +230 -0
  21. signalwire_agents-0.1.28/signalwire_agents/skills/mcp_gateway/__init__.py +1 -0
  22. signalwire_agents-0.1.28/signalwire_agents/skills/mcp_gateway/skill.py +339 -0
  23. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28/signalwire_agents.egg-info}/PKG-INFO +1 -59
  24. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents.egg-info/SOURCES.txt +3 -3
  25. signalwire_agents-0.1.26/signalwire_agents/core/state/__init__.py +0 -17
  26. signalwire_agents-0.1.26/signalwire_agents/core/state/file_state_manager.py +0 -219
  27. signalwire_agents-0.1.26/signalwire_agents/core/state/state_manager.py +0 -101
  28. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/LICENSE +0 -0
  29. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/requirements-dev.txt +0 -0
  30. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/requirements.txt +0 -0
  31. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/setup.cfg +0 -0
  32. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/setup.py +0 -0
  33. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/agent_server.py +0 -0
  34. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/cli/__init__.py +0 -0
  35. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/cli/build_search.py +0 -0
  36. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/cli/core/__init__.py +0 -0
  37. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/cli/core/agent_loader.py +0 -0
  38. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/cli/core/argparse_helpers.py +0 -0
  39. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/cli/core/dynamic_config.py +0 -0
  40. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/cli/execution/__init__.py +0 -0
  41. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/cli/execution/datamap_exec.py +0 -0
  42. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/cli/execution/webhook_exec.py +0 -0
  43. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/cli/output/__init__.py +0 -0
  44. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/cli/output/output_formatter.py +0 -0
  45. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/cli/output/swml_dump.py +0 -0
  46. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/cli/simulation/__init__.py +0 -0
  47. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/cli/simulation/data_generation.py +0 -0
  48. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/cli/simulation/mock_env.py +0 -0
  49. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/cli/types.py +0 -0
  50. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/__init__.py +0 -0
  51. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/agent/__init__.py +0 -0
  52. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/agent/config/__init__.py +0 -0
  53. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/agent/deployment/__init__.py +0 -0
  54. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/agent/deployment/handlers/__init__.py +0 -0
  55. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/agent/prompt/__init__.py +0 -0
  56. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/agent/prompt/manager.py +0 -0
  57. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/agent/routing/__init__.py +0 -0
  58. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/agent/security/__init__.py +0 -0
  59. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/agent/swml/__init__.py +0 -0
  60. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/agent/tools/__init__.py +0 -0
  61. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/agent/tools/decorator.py +0 -0
  62. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/agent/tools/registry.py +0 -0
  63. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/data_map.py +0 -0
  64. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/function_result.py +0 -0
  65. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/logging_config.py +0 -0
  66. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/mixins/__init__.py +0 -0
  67. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/mixins/ai_config_mixin.py +0 -0
  68. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/mixins/auth_mixin.py +0 -0
  69. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/mixins/prompt_mixin.py +0 -0
  70. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/mixins/serverless_mixin.py +0 -0
  71. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/mixins/skill_mixin.py +0 -0
  72. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/mixins/web_mixin.py +0 -0
  73. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/pom_builder.py +0 -0
  74. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/security/__init__.py +0 -0
  75. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/security/session_manager.py +0 -0
  76. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/skill_base.py +0 -0
  77. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/skill_manager.py +0 -0
  78. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/swaig_function.py +0 -0
  79. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/swml_builder.py +0 -0
  80. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/swml_handler.py +0 -0
  81. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/swml_renderer.py +0 -0
  82. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/core/swml_service.py +0 -0
  83. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/prefabs/__init__.py +0 -0
  84. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/search/__init__.py +0 -0
  85. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/search/document_processor.py +0 -0
  86. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/search/index_builder.py +0 -0
  87. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/search/query_processor.py +0 -0
  88. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/search/search_engine.py +0 -0
  89. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/search/search_service.py +0 -0
  90. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/README.md +0 -0
  91. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/__init__.py +0 -0
  92. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/api_ninjas_trivia/README.md +0 -0
  93. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/api_ninjas_trivia/__init__.py +0 -0
  94. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/api_ninjas_trivia/skill.py +0 -0
  95. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/datasphere/README.md +0 -0
  96. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/datasphere/__init__.py +0 -0
  97. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/datasphere/skill.py +0 -0
  98. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/datasphere_serverless/README.md +0 -0
  99. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/datasphere_serverless/__init__.py +0 -0
  100. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/datasphere_serverless/skill.py +0 -0
  101. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/datetime/README.md +0 -0
  102. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/datetime/__init__.py +0 -0
  103. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/datetime/skill.py +0 -0
  104. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/joke/README.md +0 -0
  105. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/joke/__init__.py +0 -0
  106. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/joke/skill.py +0 -0
  107. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/math/README.md +0 -0
  108. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/math/__init__.py +0 -0
  109. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/math/skill.py +0 -0
  110. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/native_vector_search/__init__.py +0 -0
  111. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/native_vector_search/skill.py +0 -0
  112. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/play_background_file/README.md +0 -0
  113. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/play_background_file/__init__.py +0 -0
  114. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/play_background_file/skill.py +0 -0
  115. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/registry.py +0 -0
  116. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/spider/README.md +0 -0
  117. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/spider/__init__.py +0 -0
  118. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/spider/skill.py +0 -0
  119. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/swml_transfer/README.md +0 -0
  120. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/swml_transfer/__init__.py +0 -0
  121. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/swml_transfer/skill.py +0 -0
  122. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/weather_api/README.md +0 -0
  123. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/weather_api/__init__.py +0 -0
  124. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/weather_api/skill.py +0 -0
  125. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/web_search/README.md +0 -0
  126. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/web_search/__init__.py +0 -0
  127. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/web_search/skill.py +0 -0
  128. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/wikipedia_search/README.md +0 -0
  129. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/wikipedia_search/__init__.py +0 -0
  130. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/skills/wikipedia_search/skill.py +0 -0
  131. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/utils/__init__.py +0 -0
  132. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/utils/pom_utils.py +0 -0
  133. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/utils/schema_utils.py +0 -0
  134. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/utils/token_generators.py +0 -0
  135. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents/utils/validators.py +0 -0
  136. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents.egg-info/dependency_links.txt +0 -0
  137. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents.egg-info/entry_points.txt +0 -0
  138. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents.egg-info/requires.txt +0 -0
  139. {signalwire_agents-0.1.26 → signalwire_agents-0.1.28}/signalwire_agents.egg-info/top_level.txt +0 -0
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.1.28] - 2025-06-23
4
+
5
+ - Version bump
6
+
7
+ ## [0.1.27] - 2025-06-20
8
+
9
+ - Version bump
10
+
3
11
  ## [0.1.26] - 2025-06-20
4
12
 
5
13
  - Version bump
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: signalwire_agents
3
- Version: 0.1.26
3
+ Version: 0.1.28
4
4
  Summary: SignalWire AI Agents SDK
5
5
  Author-email: SignalWire Team <info@signalwire.com>
6
6
  License: MIT
@@ -593,64 +593,6 @@ if __name__ == "__main__":
593
593
  agent.serve(host="0.0.0.0", port=8000)
594
594
  ```
595
595
 
596
- ## Using State Management
597
-
598
- ```python
599
- from signalwire_agents import AgentBase
600
- from signalwire_agents.core.function_result import SwaigFunctionResult
601
- from signalwire_agents.core.state import FileStateManager
602
-
603
- class StatefulAgent(AgentBase):
604
- def __init__(self):
605
- # Configure state management
606
- state_manager = FileStateManager(storage_dir="./state_data")
607
-
608
- super().__init__(
609
- name="stateful",
610
- route="/stateful",
611
- enable_state_tracking=True, # Enable state tracking
612
- state_manager=state_manager # Use custom state manager
613
- )
614
-
615
- # When enable_state_tracking=True, startup_hook and hangup_hook
616
- # are automatically registered to track session lifecycle
617
-
618
- # Custom tool for accessing and updating state
619
- @AgentBase.tool(
620
- name="save_preference",
621
- description="Save a user preference",
622
- parameters={
623
- "preference_name": {
624
- "type": "string",
625
- "description": "Name of the preference to save"
626
- },
627
- "preference_value": {
628
- "type": "string",
629
- "description": "Value of the preference"
630
- }
631
- }
632
- )
633
- def save_preference(self, args, raw_data):
634
- # Get the call ID from the raw data
635
- call_id = raw_data.get("call_id")
636
-
637
- if call_id:
638
- # Get current state or empty dict if none exists
639
- state = self.get_state(call_id) or {}
640
-
641
- # Update the state
642
- preferences = state.get("preferences", {})
643
- preferences[args.get("preference_name")] = args.get("preference_value")
644
- state["preferences"] = preferences
645
-
646
- # Save the updated state
647
- self.update_state(call_id, state)
648
-
649
- return SwaigFunctionResult("Preference saved successfully")
650
- else:
651
- return SwaigFunctionResult("Could not save preference: No call ID")
652
- ```
653
-
654
596
  ## Using Prefab Agents
655
597
 
656
598
  ```python
@@ -519,64 +519,6 @@ if __name__ == "__main__":
519
519
  agent.serve(host="0.0.0.0", port=8000)
520
520
  ```
521
521
 
522
- ## Using State Management
523
-
524
- ```python
525
- from signalwire_agents import AgentBase
526
- from signalwire_agents.core.function_result import SwaigFunctionResult
527
- from signalwire_agents.core.state import FileStateManager
528
-
529
- class StatefulAgent(AgentBase):
530
- def __init__(self):
531
- # Configure state management
532
- state_manager = FileStateManager(storage_dir="./state_data")
533
-
534
- super().__init__(
535
- name="stateful",
536
- route="/stateful",
537
- enable_state_tracking=True, # Enable state tracking
538
- state_manager=state_manager # Use custom state manager
539
- )
540
-
541
- # When enable_state_tracking=True, startup_hook and hangup_hook
542
- # are automatically registered to track session lifecycle
543
-
544
- # Custom tool for accessing and updating state
545
- @AgentBase.tool(
546
- name="save_preference",
547
- description="Save a user preference",
548
- parameters={
549
- "preference_name": {
550
- "type": "string",
551
- "description": "Name of the preference to save"
552
- },
553
- "preference_value": {
554
- "type": "string",
555
- "description": "Value of the preference"
556
- }
557
- }
558
- )
559
- def save_preference(self, args, raw_data):
560
- # Get the call ID from the raw data
561
- call_id = raw_data.get("call_id")
562
-
563
- if call_id:
564
- # Get current state or empty dict if none exists
565
- state = self.get_state(call_id) or {}
566
-
567
- # Update the state
568
- preferences = state.get("preferences", {})
569
- preferences[args.get("preference_name")] = args.get("preference_value")
570
- state["preferences"] = preferences
571
-
572
- # Save the updated state
573
- self.update_state(call_id, state)
574
-
575
- return SwaigFunctionResult("Preference saved successfully")
576
- else:
577
- return SwaigFunctionResult("Could not save preference: No call ID")
578
- ```
579
-
580
522
  ## Using Prefab Agents
581
523
 
582
524
  ```python
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "signalwire_agents"
7
- version = "0.1.26"
7
+ version = "0.1.28"
8
8
  description = "SignalWire AI Agents SDK"
9
9
  authors = [
10
10
  {name = "SignalWire Team", email = "info@signalwire.com"}