signalwire-agents 0.1.34__tar.gz → 0.1.36__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 (142) hide show
  1. {signalwire_agents-0.1.34/signalwire_agents.egg-info → signalwire_agents-0.1.36}/PKG-INFO +11 -7
  2. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/README.md +10 -6
  3. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/pyproject.toml +1 -1
  4. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/__init__.py +66 -2
  5. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/agent_base.py +15 -0
  6. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/skill_base.py +64 -1
  7. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/datetime/skill.py +16 -1
  8. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/math/skill.py +16 -1
  9. signalwire_agents-0.1.36/signalwire_agents/skills/registry.py +423 -0
  10. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/web_search/skill.py +60 -1
  11. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36/signalwire_agents.egg-info}/PKG-INFO +11 -7
  12. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents.egg-info/SOURCES.txt +0 -4
  13. signalwire_agents-0.1.34/CHANGELOG.md +0 -160
  14. signalwire_agents-0.1.34/requirements-dev.txt +0 -16
  15. signalwire_agents-0.1.34/requirements.txt +0 -11
  16. signalwire_agents-0.1.34/signalwire_agents/schema.json +0 -7606
  17. signalwire_agents-0.1.34/signalwire_agents/skills/registry.py +0 -120
  18. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/LICENSE +0 -0
  19. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/setup.cfg +0 -0
  20. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/setup.py +0 -0
  21. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/agent_server.py +0 -0
  22. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/cli/__init__.py +0 -0
  23. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/cli/build_search.py +0 -0
  24. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/cli/config.py +0 -0
  25. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/cli/core/__init__.py +0 -0
  26. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/cli/core/agent_loader.py +0 -0
  27. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/cli/core/argparse_helpers.py +0 -0
  28. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/cli/core/dynamic_config.py +0 -0
  29. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/cli/core/service_loader.py +0 -0
  30. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/cli/execution/__init__.py +0 -0
  31. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/cli/execution/datamap_exec.py +0 -0
  32. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/cli/execution/webhook_exec.py +0 -0
  33. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/cli/output/__init__.py +0 -0
  34. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/cli/output/output_formatter.py +0 -0
  35. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/cli/output/swml_dump.py +0 -0
  36. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/cli/simulation/__init__.py +0 -0
  37. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/cli/simulation/data_generation.py +0 -0
  38. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/cli/simulation/data_overrides.py +0 -0
  39. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/cli/simulation/mock_env.py +0 -0
  40. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/cli/swaig_test_wrapper.py +0 -0
  41. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/cli/test_swaig.py +0 -0
  42. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/cli/types.py +0 -0
  43. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/__init__.py +0 -0
  44. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/agent/__init__.py +0 -0
  45. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/agent/config/__init__.py +0 -0
  46. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/agent/deployment/__init__.py +0 -0
  47. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/agent/deployment/handlers/__init__.py +0 -0
  48. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/agent/prompt/__init__.py +0 -0
  49. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/agent/prompt/manager.py +0 -0
  50. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/agent/routing/__init__.py +0 -0
  51. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/agent/security/__init__.py +0 -0
  52. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/agent/swml/__init__.py +0 -0
  53. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/agent/tools/__init__.py +0 -0
  54. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/agent/tools/decorator.py +0 -0
  55. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/agent/tools/registry.py +0 -0
  56. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/auth_handler.py +0 -0
  57. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/config_loader.py +0 -0
  58. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/contexts.py +0 -0
  59. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/data_map.py +0 -0
  60. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/function_result.py +0 -0
  61. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/logging_config.py +0 -0
  62. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/mixins/__init__.py +0 -0
  63. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/mixins/ai_config_mixin.py +0 -0
  64. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/mixins/auth_mixin.py +0 -0
  65. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/mixins/prompt_mixin.py +0 -0
  66. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/mixins/serverless_mixin.py +0 -0
  67. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/mixins/skill_mixin.py +0 -0
  68. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/mixins/state_mixin.py +0 -0
  69. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/mixins/tool_mixin.py +0 -0
  70. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/mixins/web_mixin.py +0 -0
  71. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/pom_builder.py +0 -0
  72. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/security/__init__.py +0 -0
  73. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/security/session_manager.py +0 -0
  74. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/security_config.py +0 -0
  75. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/skill_manager.py +0 -0
  76. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/swaig_function.py +0 -0
  77. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/swml_builder.py +0 -0
  78. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/swml_handler.py +0 -0
  79. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/swml_renderer.py +0 -0
  80. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/core/swml_service.py +0 -0
  81. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/prefabs/__init__.py +0 -0
  82. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/prefabs/concierge.py +0 -0
  83. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/prefabs/faq_bot.py +0 -0
  84. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/prefabs/info_gatherer.py +0 -0
  85. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/prefabs/receptionist.py +0 -0
  86. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/prefabs/survey.py +0 -0
  87. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36/signalwire_agents}/schema.json +0 -0
  88. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/search/__init__.py +0 -0
  89. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/search/document_processor.py +0 -0
  90. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/search/index_builder.py +0 -0
  91. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/search/query_processor.py +0 -0
  92. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/search/search_engine.py +0 -0
  93. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/search/search_service.py +0 -0
  94. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/README.md +0 -0
  95. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/__init__.py +0 -0
  96. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/api_ninjas_trivia/README.md +0 -0
  97. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/api_ninjas_trivia/__init__.py +0 -0
  98. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/api_ninjas_trivia/skill.py +0 -0
  99. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/datasphere/README.md +0 -0
  100. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/datasphere/__init__.py +0 -0
  101. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/datasphere/skill.py +0 -0
  102. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/datasphere_serverless/README.md +0 -0
  103. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/datasphere_serverless/__init__.py +0 -0
  104. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/datasphere_serverless/skill.py +0 -0
  105. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/datetime/README.md +0 -0
  106. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/datetime/__init__.py +0 -0
  107. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/joke/README.md +0 -0
  108. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/joke/__init__.py +0 -0
  109. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/joke/skill.py +0 -0
  110. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/math/README.md +0 -0
  111. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/math/__init__.py +0 -0
  112. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/mcp_gateway/README.md +0 -0
  113. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/mcp_gateway/__init__.py +0 -0
  114. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/mcp_gateway/skill.py +0 -0
  115. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/native_vector_search/__init__.py +0 -0
  116. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/native_vector_search/skill.py +0 -0
  117. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/play_background_file/README.md +0 -0
  118. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/play_background_file/__init__.py +0 -0
  119. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/play_background_file/skill.py +0 -0
  120. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/spider/README.md +0 -0
  121. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/spider/__init__.py +0 -0
  122. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/spider/skill.py +0 -0
  123. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/swml_transfer/README.md +0 -0
  124. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/swml_transfer/__init__.py +0 -0
  125. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/swml_transfer/skill.py +0 -0
  126. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/weather_api/README.md +0 -0
  127. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/weather_api/__init__.py +0 -0
  128. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/weather_api/skill.py +0 -0
  129. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/web_search/README.md +0 -0
  130. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/web_search/__init__.py +0 -0
  131. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/wikipedia_search/README.md +0 -0
  132. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/wikipedia_search/__init__.py +0 -0
  133. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/skills/wikipedia_search/skill.py +0 -0
  134. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/utils/__init__.py +0 -0
  135. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/utils/pom_utils.py +0 -0
  136. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/utils/schema_utils.py +0 -0
  137. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/utils/token_generators.py +0 -0
  138. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents/utils/validators.py +0 -0
  139. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents.egg-info/dependency_links.txt +0 -0
  140. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents.egg-info/entry_points.txt +0 -0
  141. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents.egg-info/requires.txt +0 -0
  142. {signalwire_agents-0.1.34 → signalwire_agents-0.1.36}/signalwire_agents.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: signalwire_agents
3
- Version: 0.1.34
3
+ Version: 0.1.36
4
4
  Summary: SignalWire AI Agents SDK
5
5
  Author-email: SignalWire Team <info@signalwire.com>
6
6
  License: MIT
@@ -74,7 +74,9 @@ Dynamic: license-file
74
74
 
75
75
  <!-- Header -->
76
76
  <div align="center">
77
- <img src="https://github.com/user-attachments/assets/0c8ed3b9-8c50-4dc6-9cc4-cc6cd137fd50" width="500" href="https://signalwire.com" />
77
+ <a href="https://signalwire.com" target="_blank">
78
+ <img src="https://github.com/user-attachments/assets/0c8ed3b9-8c50-4dc6-9cc4-cc6cd137fd50" width="500" />
79
+ </a>
78
80
 
79
81
  # Agents SDK
80
82
 
@@ -92,15 +94,17 @@ Dynamic: license-file
92
94
 
93
95
  <!-- Badges -->
94
96
  <div align="center">
95
- <img src="https://img.shields.io/badge/Discord%20Community-5865F2" alt="Discord" href="https://discord.com/invite/F2WNYTNjuF"/>
96
- <img src="https://img.shields.io/badge/MIT-License-blue" alt="MIT License" href="LICENSE" />
97
- <img src="https://img.shields.io/badge/GitHub-%23121011.svg?logo=github&logoColor=white&" alt="GitHub" href="https://github.com/signalwire"/>
98
- <img src="https://img.shields.io/github/stars/signalwire/signalwire-agents" alt="GitHub Stars" href="https://github.com/signalwire/docs"/>
97
+ <a href="https://discord.com/invite/F2WNYTNjuF" target="_blank"><img src="https://img.shields.io/badge/Discord%20Community-5865F2" alt="Discord" /></a>
98
+ <a href="LICENSE"><img src="https://img.shields.io/badge/MIT-License-blue" alt="MIT License" /></a>
99
+ <a href="https://github.com/signalwire" target="_blank"><img src="https://img.shields.io/badge/GitHub-%23121011.svg?logo=github&logoColor=white&" alt="GitHub" /></a>
100
+ <a href="https://github.com/signalwire/docs" target="_blank"><img src="https://img.shields.io/github/stars/signalwire/signalwire-agents" alt="GitHub Stars" /></a>
99
101
  </div>
100
102
 
101
103
  <br/>
102
104
 
103
- <img src="https://github.com/user-attachments/assets/c2510c86-ae03-42a9-be06-ab9bcea948e1" alt="Sign Up" href="https://signalwire.com/signup" height="65"/>
105
+ <a href="https://signalwire.com/signup" target="_blank">
106
+ <img src="https://github.com/user-attachments/assets/c2510c86-ae03-42a9-be06-ab9bcea948e1" alt="Sign Up" height="65"/>
107
+ </a>
104
108
 
105
109
  </div>
106
110
 
@@ -1,6 +1,8 @@
1
1
  <!-- Header -->
2
2
  <div align="center">
3
- <img src="https://github.com/user-attachments/assets/0c8ed3b9-8c50-4dc6-9cc4-cc6cd137fd50" width="500" href="https://signalwire.com" />
3
+ <a href="https://signalwire.com" target="_blank">
4
+ <img src="https://github.com/user-attachments/assets/0c8ed3b9-8c50-4dc6-9cc4-cc6cd137fd50" width="500" />
5
+ </a>
4
6
 
5
7
  # Agents SDK
6
8
 
@@ -18,15 +20,17 @@
18
20
 
19
21
  <!-- Badges -->
20
22
  <div align="center">
21
- <img src="https://img.shields.io/badge/Discord%20Community-5865F2" alt="Discord" href="https://discord.com/invite/F2WNYTNjuF"/>
22
- <img src="https://img.shields.io/badge/MIT-License-blue" alt="MIT License" href="LICENSE" />
23
- <img src="https://img.shields.io/badge/GitHub-%23121011.svg?logo=github&logoColor=white&" alt="GitHub" href="https://github.com/signalwire"/>
24
- <img src="https://img.shields.io/github/stars/signalwire/signalwire-agents" alt="GitHub Stars" href="https://github.com/signalwire/docs"/>
23
+ <a href="https://discord.com/invite/F2WNYTNjuF" target="_blank"><img src="https://img.shields.io/badge/Discord%20Community-5865F2" alt="Discord" /></a>
24
+ <a href="LICENSE"><img src="https://img.shields.io/badge/MIT-License-blue" alt="MIT License" /></a>
25
+ <a href="https://github.com/signalwire" target="_blank"><img src="https://img.shields.io/badge/GitHub-%23121011.svg?logo=github&logoColor=white&" alt="GitHub" /></a>
26
+ <a href="https://github.com/signalwire/docs" target="_blank"><img src="https://img.shields.io/github/stars/signalwire/signalwire-agents" alt="GitHub Stars" /></a>
25
27
  </div>
26
28
 
27
29
  <br/>
28
30
 
29
- <img src="https://github.com/user-attachments/assets/c2510c86-ae03-42a9-be06-ab9bcea948e1" alt="Sign Up" href="https://signalwire.com/signup" height="65"/>
31
+ <a href="https://signalwire.com/signup" target="_blank">
32
+ <img src="https://github.com/user-attachments/assets/c2510c86-ae03-42a9-be06-ab9bcea948e1" alt="Sign Up" height="65"/>
33
+ </a>
30
34
 
31
35
  </div>
32
36
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "signalwire_agents"
7
- version = "0.1.34"
7
+ version = "0.1.36"
8
8
  description = "SignalWire AI Agents SDK"
9
9
  authors = [
10
10
  {name = "SignalWire Team", email = "info@signalwire.com"}
@@ -18,7 +18,7 @@ A package for building AI agents using SignalWire's AI and SWML capabilities.
18
18
  from .core.logging_config import configure_logging
19
19
  configure_logging()
20
20
 
21
- __version__ = "0.1.34"
21
+ __version__ = "0.1.36"
22
22
 
23
23
  # Import core classes for easier access
24
24
  from .core.agent_base import AgentBase
@@ -62,6 +62,67 @@ def list_skills(*args, **kwargs):
62
62
  except ImportError:
63
63
  raise NotImplementedError("CLI helpers not available")
64
64
 
65
+ def list_skills_with_params():
66
+ """
67
+ Get complete schema for all available skills including parameter metadata
68
+
69
+ This function returns a comprehensive schema for all available skills,
70
+ including their metadata and parameter definitions. This is useful for
71
+ GUI configuration tools, API documentation, or programmatic skill discovery.
72
+
73
+ Returns:
74
+ Dict[str, Dict[str, Any]]: Complete skill schema where keys are skill names
75
+
76
+ Example:
77
+ >>> schema = list_skills_with_params()
78
+ >>> print(schema['web_search']['parameters']['api_key'])
79
+ {
80
+ 'type': 'string',
81
+ 'description': 'Google Custom Search API key',
82
+ 'required': True,
83
+ 'hidden': True,
84
+ 'env_var': 'GOOGLE_SEARCH_API_KEY'
85
+ }
86
+ """
87
+ from signalwire_agents.skills.registry import skill_registry
88
+ return skill_registry.get_all_skills_schema()
89
+
90
+ def register_skill(skill_class):
91
+ """
92
+ Register a custom skill class
93
+
94
+ This allows third-party code to register skill classes directly without
95
+ requiring them to be in a specific directory structure.
96
+
97
+ Args:
98
+ skill_class: A class that inherits from SkillBase
99
+
100
+ Example:
101
+ >>> from my_custom_skills import MyWeatherSkill
102
+ >>> register_skill(MyWeatherSkill)
103
+ >>> # Now you can use it in agents:
104
+ >>> agent.add_skill('my_weather')
105
+ """
106
+ from signalwire_agents.skills.registry import skill_registry
107
+ return skill_registry.register_skill(skill_class)
108
+
109
+ def add_skill_directory(path):
110
+ """
111
+ Add a directory to search for skills
112
+
113
+ This allows third-party skill collections to be registered by path.
114
+ Skills in these directories should follow the same structure as built-in skills.
115
+
116
+ Args:
117
+ path: Path to directory containing skill subdirectories
118
+
119
+ Example:
120
+ >>> add_skill_directory('/opt/custom_skills')
121
+ >>> # Now agent.add_skill('my_custom_skill') will search in this directory
122
+ """
123
+ from signalwire_agents.skills.registry import skill_registry
124
+ return skill_registry.add_skill_directory(path)
125
+
65
126
  __all__ = [
66
127
  "AgentBase",
67
128
  "AgentServer",
@@ -78,5 +139,8 @@ __all__ = [
78
139
  "create_simple_context",
79
140
  "start_agent",
80
141
  "run_agent",
81
- "list_skills"
142
+ "list_skills",
143
+ "list_skills_with_params",
144
+ "register_skill",
145
+ "add_skill_directory"
82
146
  ]
@@ -692,6 +692,13 @@ class AgentBase(
692
692
  # Add answer verb with auto-answer enabled
693
693
  agent_to_use.add_verb("answer", {})
694
694
 
695
+ # Add recording if enabled
696
+ if agent_to_use._record_call:
697
+ agent_to_use.add_verb("record_call", {
698
+ "format": agent_to_use._record_format,
699
+ "stereo": agent_to_use._record_stereo
700
+ })
701
+
695
702
  # Use the AI verb handler to build and validate the AI verb config
696
703
  ai_config = {}
697
704
 
@@ -811,6 +818,14 @@ class AgentBase(
811
818
  # Clear and rebuild the document with the modified AI config
812
819
  agent_to_use.reset_document()
813
820
  agent_to_use.add_verb("answer", {})
821
+
822
+ # Add recording if enabled
823
+ if agent_to_use._record_call:
824
+ agent_to_use.add_verb("record_call", {
825
+ "format": agent_to_use._record_format,
826
+ "stereo": agent_to_use._record_stereo
827
+ })
828
+
814
829
  agent_to_use.add_verb("ai", ai_config)
815
830
 
816
831
  # Return the rendered document as a string
@@ -114,4 +114,67 @@ class SkillBase(ABC):
114
114
 
115
115
  # For multi-instance skills, create key from skill name + tool name
116
116
  tool_name = self.params.get('tool_name', self.SKILL_NAME)
117
- return f"{self.SKILL_NAME}_{tool_name}"
117
+ return f"{self.SKILL_NAME}_{tool_name}"
118
+
119
+ @classmethod
120
+ def get_parameter_schema(cls) -> Dict[str, Dict[str, Any]]:
121
+ """
122
+ Get the parameter schema for this skill
123
+
124
+ This method returns metadata about all parameters the skill accepts,
125
+ including their types, descriptions, default values, and whether they
126
+ are required or should be hidden (e.g., API keys).
127
+
128
+ The base implementation provides common parameters available to all skills.
129
+ Subclasses should override this method and merge their specific parameters
130
+ with the base schema.
131
+
132
+ Returns:
133
+ Dict[str, Dict[str, Any]]: Parameter schema where keys are parameter names
134
+ and values are dictionaries containing:
135
+ - type: Parameter type ("string", "integer", "number", "boolean", "object", "array")
136
+ - description: Human-readable description
137
+ - default: Default value if not provided (optional)
138
+ - required: Whether the parameter is required (default: False)
139
+ - hidden: Whether to hide this field in UIs (for secrets/keys)
140
+ - env_var: Environment variable that can provide this value (optional)
141
+ - enum: List of allowed values (optional)
142
+ - min/max: Minimum/maximum values for numeric types (optional)
143
+
144
+ Example:
145
+ {
146
+ "tool_name": {
147
+ "type": "string",
148
+ "description": "Name for the tool when using multiple instances",
149
+ "default": "my_skill",
150
+ "required": False
151
+ },
152
+ "api_key": {
153
+ "type": "string",
154
+ "description": "API key for the service",
155
+ "required": True,
156
+ "hidden": True,
157
+ "env_var": "MY_API_KEY"
158
+ }
159
+ }
160
+ """
161
+ schema = {}
162
+
163
+ # Add swaig_fields parameter (available to all skills)
164
+ schema["swaig_fields"] = {
165
+ "type": "object",
166
+ "description": "Additional SWAIG function metadata to merge into tool definitions",
167
+ "default": {},
168
+ "required": False
169
+ }
170
+
171
+ # Add tool_name for multi-instance skills
172
+ if cls.SUPPORTS_MULTIPLE_INSTANCES:
173
+ schema["tool_name"] = {
174
+ "type": "string",
175
+ "description": "Custom name for this skill instance (for multiple instances)",
176
+ "default": cls.SKILL_NAME,
177
+ "required": False
178
+ }
179
+
180
+ return schema
@@ -110,4 +110,19 @@ class DateTimeSkill(SkillBase):
110
110
  "Both tools support different timezones"
111
111
  ]
112
112
  }
113
- ]
113
+ ]
114
+
115
+ @classmethod
116
+ def get_parameter_schema(cls) -> Dict[str, Dict[str, Any]]:
117
+ """
118
+ Get the parameter schema for the datetime skill
119
+
120
+ The datetime skill has no custom parameters - it inherits only
121
+ the base parameters from SkillBase.
122
+ """
123
+ # Get base schema from parent
124
+ schema = super().get_parameter_schema()
125
+
126
+ # No additional parameters for datetime skill
127
+
128
+ return schema
@@ -88,4 +88,19 @@ class MathSkill(SkillBase):
88
88
  "Can handle parentheses for complex expressions"
89
89
  ]
90
90
  }
91
- ]
91
+ ]
92
+
93
+ @classmethod
94
+ def get_parameter_schema(cls) -> Dict[str, Dict[str, Any]]:
95
+ """
96
+ Get the parameter schema for the math skill
97
+
98
+ The math skill has no custom parameters - it inherits only
99
+ the base parameters from SkillBase.
100
+ """
101
+ # Get base schema from parent
102
+ schema = super().get_parameter_schema()
103
+
104
+ # No additional parameters for math skill
105
+
106
+ return schema