signalwire-agents 0.1.28__tar.gz → 0.1.30__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_agents-0.1.28 → signalwire_agents-0.1.30}/CHANGELOG.md +8 -0
- {signalwire_agents-0.1.28/signalwire_agents.egg-info → signalwire_agents-0.1.30}/PKG-INFO +1 -1
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/pyproject.toml +1 -1
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/__init__.py +1 -1
- signalwire_agents-0.1.30/signalwire_agents/cli/__init__.py +18 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/cli/config.py +9 -0
- signalwire_agents-0.1.30/signalwire_agents/cli/core/__init__.py +10 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/cli/core/agent_loader.py +9 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/cli/core/argparse_helpers.py +9 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/cli/core/dynamic_config.py +9 -0
- signalwire_agents-0.1.30/signalwire_agents/cli/execution/__init__.py +10 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/cli/execution/datamap_exec.py +9 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/cli/execution/webhook_exec.py +9 -0
- signalwire_agents-0.1.30/signalwire_agents/cli/output/__init__.py +10 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/cli/output/output_formatter.py +9 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/cli/output/swml_dump.py +9 -0
- signalwire_agents-0.1.30/signalwire_agents/cli/simulation/__init__.py +10 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/cli/simulation/data_generation.py +9 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/cli/simulation/data_overrides.py +9 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/cli/simulation/mock_env.py +9 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/cli/test_swaig.py +9 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/cli/types.py +9 -0
- signalwire_agents-0.1.30/signalwire_agents/core/agent/swml/__init__.py +9 -0
- signalwire_agents-0.1.30/signalwire_agents/core/auth_handler.py +233 -0
- signalwire_agents-0.1.30/signalwire_agents/core/config_loader.py +259 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/core/contexts.py +84 -0
- signalwire_agents-0.1.30/signalwire_agents/core/security/__init__.py +9 -0
- signalwire_agents-0.1.30/signalwire_agents/core/security_config.py +333 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/core/swml_service.py +19 -25
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/search/search_service.py +200 -11
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/skills/__init__.py +9 -0
- signalwire_agents-0.1.30/signalwire_agents/skills/api_ninjas_trivia/__init__.py +12 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/skills/api_ninjas_trivia/skill.py +9 -0
- signalwire_agents-0.1.30/signalwire_agents/skills/datasphere_serverless/__init__.py +10 -0
- signalwire_agents-0.1.30/signalwire_agents/skills/datetime/__init__.py +10 -0
- signalwire_agents-0.1.30/signalwire_agents/skills/joke/__init__.py +10 -0
- signalwire_agents-0.1.30/signalwire_agents/skills/math/__init__.py +10 -0
- signalwire_agents-0.1.30/signalwire_agents/skills/mcp_gateway/__init__.py +10 -0
- signalwire_agents-0.1.30/signalwire_agents/skills/native_vector_search/__init__.py +10 -0
- signalwire_agents-0.1.30/signalwire_agents/skills/play_background_file/__init__.py +12 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/skills/play_background_file/skill.py +9 -0
- signalwire_agents-0.1.30/signalwire_agents/skills/spider/__init__.py +13 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/skills/spider/skill.py +9 -0
- signalwire_agents-0.1.30/signalwire_agents/skills/swml_transfer/__init__.py +10 -0
- signalwire_agents-0.1.30/signalwire_agents/skills/weather_api/__init__.py +12 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/skills/weather_api/skill.py +9 -0
- signalwire_agents-0.1.30/signalwire_agents/skills/web_search/__init__.py +10 -0
- signalwire_agents-0.1.30/signalwire_agents/skills/wikipedia_search/__init__.py +18 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/skills/wikipedia_search/skill.py +9 -0
- signalwire_agents-0.1.30/signalwire_agents/utils/pom_utils.py +9 -0
- signalwire_agents-0.1.30/signalwire_agents/utils/token_generators.py +9 -0
- signalwire_agents-0.1.30/signalwire_agents/utils/validators.py +9 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30/signalwire_agents.egg-info}/PKG-INFO +1 -1
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents.egg-info/SOURCES.txt +3 -0
- signalwire_agents-0.1.28/signalwire_agents/cli/__init__.py +0 -9
- signalwire_agents-0.1.28/signalwire_agents/cli/core/__init__.py +0 -1
- signalwire_agents-0.1.28/signalwire_agents/cli/execution/__init__.py +0 -1
- signalwire_agents-0.1.28/signalwire_agents/cli/output/__init__.py +0 -1
- signalwire_agents-0.1.28/signalwire_agents/cli/simulation/__init__.py +0 -1
- signalwire_agents-0.1.28/signalwire_agents/core/agent/deployment/__init__.py +0 -0
- signalwire_agents-0.1.28/signalwire_agents/core/agent/deployment/handlers/__init__.py +0 -0
- signalwire_agents-0.1.28/signalwire_agents/core/agent/routing/__init__.py +0 -0
- signalwire_agents-0.1.28/signalwire_agents/core/agent/security/__init__.py +0 -0
- signalwire_agents-0.1.28/signalwire_agents/core/agent/swml/__init__.py +0 -0
- signalwire_agents-0.1.28/signalwire_agents/skills/api_ninjas_trivia/__init__.py +0 -3
- signalwire_agents-0.1.28/signalwire_agents/skills/datasphere_serverless/__init__.py +0 -1
- signalwire_agents-0.1.28/signalwire_agents/skills/datetime/__init__.py +0 -1
- signalwire_agents-0.1.28/signalwire_agents/skills/joke/__init__.py +0 -1
- signalwire_agents-0.1.28/signalwire_agents/skills/math/__init__.py +0 -1
- signalwire_agents-0.1.28/signalwire_agents/skills/mcp_gateway/__init__.py +0 -1
- signalwire_agents-0.1.28/signalwire_agents/skills/native_vector_search/__init__.py +0 -1
- signalwire_agents-0.1.28/signalwire_agents/skills/play_background_file/__init__.py +0 -3
- signalwire_agents-0.1.28/signalwire_agents/skills/spider/__init__.py +0 -4
- signalwire_agents-0.1.28/signalwire_agents/skills/swml_transfer/__init__.py +0 -1
- signalwire_agents-0.1.28/signalwire_agents/skills/weather_api/__init__.py +0 -3
- signalwire_agents-0.1.28/signalwire_agents/skills/web_search/__init__.py +0 -1
- signalwire_agents-0.1.28/signalwire_agents/skills/wikipedia_search/__init__.py +0 -9
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/LICENSE +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/README.md +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/requirements-dev.txt +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/requirements.txt +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/schema.json +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/setup.cfg +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/setup.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/agent_server.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/cli/build_search.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/core/__init__.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/core/agent/__init__.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/core/agent/config/__init__.py +0 -0
- {signalwire_agents-0.1.28/signalwire_agents/core/security → signalwire_agents-0.1.30/signalwire_agents/core/agent/deployment}/__init__.py +0 -0
- /signalwire_agents-0.1.28/signalwire_agents/utils/pom_utils.py → /signalwire_agents-0.1.30/signalwire_agents/core/agent/deployment/handlers/__init__.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/core/agent/prompt/__init__.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/core/agent/prompt/manager.py +0 -0
- /signalwire_agents-0.1.28/signalwire_agents/utils/token_generators.py → /signalwire_agents-0.1.30/signalwire_agents/core/agent/routing/__init__.py +0 -0
- /signalwire_agents-0.1.28/signalwire_agents/utils/validators.py → /signalwire_agents-0.1.30/signalwire_agents/core/agent/security/__init__.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/core/agent/tools/__init__.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/core/agent/tools/decorator.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/core/agent/tools/registry.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/core/agent_base.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/core/data_map.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/core/function_result.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/core/logging_config.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/core/mixins/__init__.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/core/mixins/ai_config_mixin.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/core/mixins/auth_mixin.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/core/mixins/prompt_mixin.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/core/mixins/serverless_mixin.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/core/mixins/skill_mixin.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/core/mixins/state_mixin.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/core/mixins/tool_mixin.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/core/mixins/web_mixin.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/core/pom_builder.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/core/security/session_manager.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/core/skill_base.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/core/skill_manager.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/core/swaig_function.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/core/swml_builder.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/core/swml_handler.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/core/swml_renderer.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/prefabs/__init__.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/prefabs/concierge.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/prefabs/faq_bot.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/prefabs/info_gatherer.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/prefabs/receptionist.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/prefabs/survey.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/schema.json +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/search/__init__.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/search/document_processor.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/search/index_builder.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/search/query_processor.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/search/search_engine.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/skills/README.md +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/skills/api_ninjas_trivia/README.md +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/skills/datasphere/README.md +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/skills/datasphere/__init__.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/skills/datasphere/skill.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/skills/datasphere_serverless/README.md +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/skills/datasphere_serverless/skill.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/skills/datetime/README.md +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/skills/datetime/skill.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/skills/joke/README.md +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/skills/joke/skill.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/skills/math/README.md +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/skills/math/skill.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/skills/mcp_gateway/README.md +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/skills/mcp_gateway/skill.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/skills/native_vector_search/skill.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/skills/play_background_file/README.md +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/skills/registry.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/skills/spider/README.md +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/skills/swml_transfer/README.md +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/skills/swml_transfer/skill.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/skills/weather_api/README.md +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/skills/web_search/README.md +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/skills/web_search/skill.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/skills/wikipedia_search/README.md +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/utils/__init__.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/utils/schema_utils.py +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents.egg-info/dependency_links.txt +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents.egg-info/entry_points.txt +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents.egg-info/requires.txt +0 -0
- {signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents.egg-info/top_level.txt +0 -0
@@ -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.
|
21
|
+
__version__ = "0.1.30"
|
22
22
|
|
23
23
|
# Import core classes for easier access
|
24
24
|
from .core.agent_base import AgentBase
|
@@ -0,0 +1,18 @@
|
|
1
|
+
"""
|
2
|
+
Copyright (c) 2025 SignalWire
|
3
|
+
|
4
|
+
This file is part of the SignalWire AI Agents SDK.
|
5
|
+
|
6
|
+
Licensed under the MIT License.
|
7
|
+
See LICENSE file in the project root for full license information.
|
8
|
+
"""
|
9
|
+
|
10
|
+
"""
|
11
|
+
SignalWire Agents CLI Tools
|
12
|
+
|
13
|
+
This package contains command-line tools for working with SignalWire AI Agents.
|
14
|
+
"""
|
15
|
+
|
16
|
+
from .test_swaig import main as test_swaig_main
|
17
|
+
|
18
|
+
__all__ = ['test_swaig_main']
|
@@ -1,4 +1,13 @@
|
|
1
1
|
#!/usr/bin/env python3
|
2
|
+
"""
|
3
|
+
Copyright (c) 2025 SignalWire
|
4
|
+
|
5
|
+
This file is part of the SignalWire AI Agents SDK.
|
6
|
+
|
7
|
+
Licensed under the MIT License.
|
8
|
+
See LICENSE file in the project root for full license information.
|
9
|
+
"""
|
10
|
+
|
2
11
|
"""
|
3
12
|
Configuration constants for the CLI tools
|
4
13
|
"""
|
{signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/cli/core/agent_loader.py
RENAMED
@@ -1,4 +1,13 @@
|
|
1
1
|
#!/usr/bin/env python3
|
2
|
+
"""
|
3
|
+
Copyright (c) 2025 SignalWire
|
4
|
+
|
5
|
+
This file is part of the SignalWire AI Agents SDK.
|
6
|
+
|
7
|
+
Licensed under the MIT License.
|
8
|
+
See LICENSE file in the project root for full license information.
|
9
|
+
"""
|
10
|
+
|
2
11
|
"""
|
3
12
|
Agent discovery and loading functionality
|
4
13
|
"""
|
{signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/cli/core/argparse_helpers.py
RENAMED
@@ -1,4 +1,13 @@
|
|
1
1
|
#!/usr/bin/env python3
|
2
|
+
"""
|
3
|
+
Copyright (c) 2025 SignalWire
|
4
|
+
|
5
|
+
This file is part of the SignalWire AI Agents SDK.
|
6
|
+
|
7
|
+
Licensed under the MIT License.
|
8
|
+
See LICENSE file in the project root for full license information.
|
9
|
+
"""
|
10
|
+
|
2
11
|
"""
|
3
12
|
Custom argument parsing and function argument parsing
|
4
13
|
"""
|
{signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/cli/core/dynamic_config.py
RENAMED
@@ -1,4 +1,13 @@
|
|
1
1
|
#!/usr/bin/env python3
|
2
|
+
"""
|
3
|
+
Copyright (c) 2025 SignalWire
|
4
|
+
|
5
|
+
This file is part of the SignalWire AI Agents SDK.
|
6
|
+
|
7
|
+
Licensed under the MIT License.
|
8
|
+
See LICENSE file in the project root for full license information.
|
9
|
+
"""
|
10
|
+
|
2
11
|
"""
|
3
12
|
Apply dynamic configuration to agents
|
4
13
|
"""
|
@@ -1,4 +1,13 @@
|
|
1
1
|
#!/usr/bin/env python3
|
2
|
+
"""
|
3
|
+
Copyright (c) 2025 SignalWire
|
4
|
+
|
5
|
+
This file is part of the SignalWire AI Agents SDK.
|
6
|
+
|
7
|
+
Licensed under the MIT License.
|
8
|
+
See LICENSE file in the project root for full license information.
|
9
|
+
"""
|
10
|
+
|
2
11
|
"""
|
3
12
|
DataMap function execution and template expansion
|
4
13
|
"""
|
@@ -1,4 +1,13 @@
|
|
1
1
|
#!/usr/bin/env python3
|
2
|
+
"""
|
3
|
+
Copyright (c) 2025 SignalWire
|
4
|
+
|
5
|
+
This file is part of the SignalWire AI Agents SDK.
|
6
|
+
|
7
|
+
Licensed under the MIT License.
|
8
|
+
See LICENSE file in the project root for full license information.
|
9
|
+
"""
|
10
|
+
|
2
11
|
"""
|
3
12
|
Webhook function execution (including external)
|
4
13
|
"""
|
@@ -1,4 +1,13 @@
|
|
1
1
|
#!/usr/bin/env python3
|
2
|
+
"""
|
3
|
+
Copyright (c) 2025 SignalWire
|
4
|
+
|
5
|
+
This file is part of the SignalWire AI Agents SDK.
|
6
|
+
|
7
|
+
Licensed under the MIT License.
|
8
|
+
See LICENSE file in the project root for full license information.
|
9
|
+
"""
|
10
|
+
|
2
11
|
"""
|
3
12
|
Display agent/tools and format results
|
4
13
|
"""
|
{signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/cli/output/swml_dump.py
RENAMED
@@ -1,4 +1,13 @@
|
|
1
1
|
#!/usr/bin/env python3
|
2
|
+
"""
|
3
|
+
Copyright (c) 2025 SignalWire
|
4
|
+
|
5
|
+
This file is part of the SignalWire AI Agents SDK.
|
6
|
+
|
7
|
+
Licensed under the MIT License.
|
8
|
+
See LICENSE file in the project root for full license information.
|
9
|
+
"""
|
10
|
+
|
2
11
|
"""
|
3
12
|
Handle SWML document dumping
|
4
13
|
"""
|
@@ -1,4 +1,13 @@
|
|
1
1
|
#!/usr/bin/env python3
|
2
|
+
"""
|
3
|
+
Copyright (c) 2025 SignalWire
|
4
|
+
|
5
|
+
This file is part of the SignalWire AI Agents SDK.
|
6
|
+
|
7
|
+
Licensed under the MIT License.
|
8
|
+
See LICENSE file in the project root for full license information.
|
9
|
+
"""
|
10
|
+
|
2
11
|
"""
|
3
12
|
Generate fake SWML post_data and related helpers
|
4
13
|
"""
|
@@ -1,4 +1,13 @@
|
|
1
1
|
#!/usr/bin/env python3
|
2
|
+
"""
|
3
|
+
Copyright (c) 2025 SignalWire
|
4
|
+
|
5
|
+
This file is part of the SignalWire AI Agents SDK.
|
6
|
+
|
7
|
+
Licensed under the MIT License.
|
8
|
+
See LICENSE file in the project root for full license information.
|
9
|
+
"""
|
10
|
+
|
2
11
|
"""
|
3
12
|
Handle CLI overrides and mapping to nested data
|
4
13
|
"""
|
{signalwire_agents-0.1.28 → signalwire_agents-0.1.30}/signalwire_agents/cli/simulation/mock_env.py
RENAMED
@@ -1,4 +1,13 @@
|
|
1
1
|
#!/usr/bin/env python3
|
2
|
+
"""
|
3
|
+
Copyright (c) 2025 SignalWire
|
4
|
+
|
5
|
+
This file is part of the SignalWire AI Agents SDK.
|
6
|
+
|
7
|
+
Licensed under the MIT License.
|
8
|
+
See LICENSE file in the project root for full license information.
|
9
|
+
"""
|
10
|
+
|
2
11
|
"""
|
3
12
|
Mock environment and serverless simulation functionality
|
4
13
|
"""
|
@@ -1,4 +1,13 @@
|
|
1
1
|
#!/usr/bin/env python3
|
2
|
+
"""
|
3
|
+
Copyright (c) 2025 SignalWire
|
4
|
+
|
5
|
+
This file is part of the SignalWire AI Agents SDK.
|
6
|
+
|
7
|
+
Licensed under the MIT License.
|
8
|
+
See LICENSE file in the project root for full license information.
|
9
|
+
"""
|
10
|
+
|
2
11
|
"""
|
3
12
|
SWAIG Function CLI Testing Tool
|
4
13
|
|
@@ -1,4 +1,13 @@
|
|
1
1
|
#!/usr/bin/env python3
|
2
|
+
"""
|
3
|
+
Copyright (c) 2025 SignalWire
|
4
|
+
|
5
|
+
This file is part of the SignalWire AI Agents SDK.
|
6
|
+
|
7
|
+
Licensed under the MIT License.
|
8
|
+
See LICENSE file in the project root for full license information.
|
9
|
+
"""
|
10
|
+
|
2
11
|
"""
|
3
12
|
Type definitions for the CLI tools
|
4
13
|
"""
|
@@ -0,0 +1,233 @@
|
|
1
|
+
"""
|
2
|
+
Copyright (c) 2025 SignalWire
|
3
|
+
|
4
|
+
This file is part of the SignalWire AI Agents SDK.
|
5
|
+
|
6
|
+
Licensed under the MIT License.
|
7
|
+
See LICENSE file in the project root for full license information.
|
8
|
+
"""
|
9
|
+
|
10
|
+
import secrets
|
11
|
+
from typing import Optional, Tuple, Dict, Any, Callable
|
12
|
+
from functools import wraps
|
13
|
+
|
14
|
+
try:
|
15
|
+
from fastapi import HTTPException, Depends
|
16
|
+
from fastapi.security import HTTPBasic, HTTPBasicCredentials, HTTPBearer, HTTPAuthorizationCredentials
|
17
|
+
except ImportError:
|
18
|
+
HTTPException = None
|
19
|
+
Depends = None
|
20
|
+
HTTPBasic = None
|
21
|
+
HTTPBasicCredentials = None
|
22
|
+
HTTPBearer = None
|
23
|
+
HTTPAuthorizationCredentials = None
|
24
|
+
|
25
|
+
from signalwire_agents.core.logging_config import get_logger
|
26
|
+
|
27
|
+
logger = get_logger("auth_handler")
|
28
|
+
|
29
|
+
|
30
|
+
class AuthHandler:
|
31
|
+
"""
|
32
|
+
Unified authentication handler supporting multiple auth methods.
|
33
|
+
|
34
|
+
This class provides a clean pattern for handling Basic Auth, Bearer tokens,
|
35
|
+
and API keys across all SignalWire services.
|
36
|
+
"""
|
37
|
+
|
38
|
+
def __init__(self, security_config: 'SecurityConfig'):
|
39
|
+
"""
|
40
|
+
Initialize auth handler with security configuration.
|
41
|
+
|
42
|
+
Args:
|
43
|
+
security_config: SecurityConfig instance with auth settings
|
44
|
+
"""
|
45
|
+
self.security_config = security_config
|
46
|
+
self.basic_auth = HTTPBasic() if HTTPBasic else None
|
47
|
+
self.bearer_auth = HTTPBearer(auto_error=False) if HTTPBearer else None
|
48
|
+
|
49
|
+
# Get auth methods from config
|
50
|
+
self._setup_auth_methods()
|
51
|
+
|
52
|
+
def _setup_auth_methods(self):
|
53
|
+
"""Setup enabled authentication methods from config"""
|
54
|
+
self.auth_methods = {}
|
55
|
+
|
56
|
+
# Basic auth (always available for backward compatibility)
|
57
|
+
username, password = self.security_config.get_basic_auth()
|
58
|
+
self.auth_methods['basic'] = {
|
59
|
+
'enabled': True,
|
60
|
+
'username': username,
|
61
|
+
'password': password
|
62
|
+
}
|
63
|
+
|
64
|
+
# Bearer token (if configured)
|
65
|
+
bearer_token = getattr(self.security_config, 'bearer_token', None)
|
66
|
+
if bearer_token:
|
67
|
+
self.auth_methods['bearer'] = {
|
68
|
+
'enabled': True,
|
69
|
+
'token': bearer_token
|
70
|
+
}
|
71
|
+
|
72
|
+
# API key (if configured)
|
73
|
+
api_key = getattr(self.security_config, 'api_key', None)
|
74
|
+
if api_key:
|
75
|
+
self.auth_methods['api_key'] = {
|
76
|
+
'enabled': True,
|
77
|
+
'key': api_key,
|
78
|
+
'header': getattr(self.security_config, 'api_key_header', 'X-API-Key')
|
79
|
+
}
|
80
|
+
|
81
|
+
def verify_basic_auth(self, credentials: HTTPBasicCredentials) -> bool:
|
82
|
+
"""Verify basic auth credentials"""
|
83
|
+
if not self.auth_methods.get('basic', {}).get('enabled'):
|
84
|
+
return False
|
85
|
+
|
86
|
+
basic_config = self.auth_methods['basic']
|
87
|
+
username_correct = secrets.compare_digest(
|
88
|
+
credentials.username, basic_config['username']
|
89
|
+
)
|
90
|
+
password_correct = secrets.compare_digest(
|
91
|
+
credentials.password, basic_config['password']
|
92
|
+
)
|
93
|
+
|
94
|
+
return username_correct and password_correct
|
95
|
+
|
96
|
+
def verify_bearer_token(self, credentials: HTTPAuthorizationCredentials) -> bool:
|
97
|
+
"""Verify bearer token"""
|
98
|
+
if not self.auth_methods.get('bearer', {}).get('enabled'):
|
99
|
+
return False
|
100
|
+
|
101
|
+
bearer_config = self.auth_methods['bearer']
|
102
|
+
return secrets.compare_digest(
|
103
|
+
credentials.credentials, bearer_config['token']
|
104
|
+
)
|
105
|
+
|
106
|
+
def verify_api_key(self, api_key: str) -> bool:
|
107
|
+
"""Verify API key"""
|
108
|
+
if not self.auth_methods.get('api_key', {}).get('enabled'):
|
109
|
+
return False
|
110
|
+
|
111
|
+
api_config = self.auth_methods['api_key']
|
112
|
+
return secrets.compare_digest(api_key, api_config['key'])
|
113
|
+
|
114
|
+
def get_fastapi_dependency(self, optional: bool = False):
|
115
|
+
"""
|
116
|
+
Get FastAPI dependency for authentication.
|
117
|
+
|
118
|
+
Args:
|
119
|
+
optional: If True, authentication is optional
|
120
|
+
|
121
|
+
Returns:
|
122
|
+
FastAPI dependency function
|
123
|
+
"""
|
124
|
+
if not Depends:
|
125
|
+
return None
|
126
|
+
|
127
|
+
async def auth_dependency(
|
128
|
+
basic_credentials: Optional[HTTPBasicCredentials] = Depends(self.basic_auth) if self.basic_auth else None,
|
129
|
+
bearer_credentials: Optional[HTTPAuthorizationCredentials] = Depends(self.bearer_auth) if self.bearer_auth else None,
|
130
|
+
api_key: Optional[str] = None # Get from header in request
|
131
|
+
):
|
132
|
+
# Try each auth method
|
133
|
+
authenticated = False
|
134
|
+
auth_method = None
|
135
|
+
|
136
|
+
# Try bearer token first (if provided)
|
137
|
+
if bearer_credentials and self.verify_bearer_token(bearer_credentials):
|
138
|
+
authenticated = True
|
139
|
+
auth_method = 'bearer'
|
140
|
+
|
141
|
+
# Try basic auth
|
142
|
+
elif basic_credentials and self.verify_basic_auth(basic_credentials):
|
143
|
+
authenticated = True
|
144
|
+
auth_method = 'basic'
|
145
|
+
|
146
|
+
# Try API key (would need to be extracted from request headers)
|
147
|
+
# This is a simplified version - in practice, you'd get it from request
|
148
|
+
|
149
|
+
if not authenticated and not optional:
|
150
|
+
raise HTTPException(
|
151
|
+
status_code=401,
|
152
|
+
detail="Invalid authentication credentials",
|
153
|
+
headers={"WWW-Authenticate": "Basic"},
|
154
|
+
)
|
155
|
+
|
156
|
+
return {'authenticated': authenticated, 'method': auth_method}
|
157
|
+
|
158
|
+
return auth_dependency
|
159
|
+
|
160
|
+
def flask_decorator(self, f: Callable) -> Callable:
|
161
|
+
"""
|
162
|
+
Flask decorator for authentication.
|
163
|
+
|
164
|
+
This provides compatibility with Flask-based services like MCP Gateway.
|
165
|
+
"""
|
166
|
+
@wraps(f)
|
167
|
+
def decorated(*args, **kwargs):
|
168
|
+
from flask import request, Response
|
169
|
+
|
170
|
+
# Try Bearer token first
|
171
|
+
auth_header = request.headers.get('Authorization', '')
|
172
|
+
|
173
|
+
if auth_header.startswith('Bearer ') and self.auth_methods.get('bearer', {}).get('enabled'):
|
174
|
+
token = auth_header[7:]
|
175
|
+
if secrets.compare_digest(token, self.auth_methods['bearer']['token']):
|
176
|
+
return f(*args, **kwargs)
|
177
|
+
|
178
|
+
# Try API key
|
179
|
+
if self.auth_methods.get('api_key', {}).get('enabled'):
|
180
|
+
api_config = self.auth_methods['api_key']
|
181
|
+
api_key = request.headers.get(api_config['header'])
|
182
|
+
if api_key and secrets.compare_digest(api_key, api_config['key']):
|
183
|
+
return f(*args, **kwargs)
|
184
|
+
|
185
|
+
# Fall back to Basic auth
|
186
|
+
auth = request.authorization
|
187
|
+
if auth and self.auth_methods.get('basic', {}).get('enabled'):
|
188
|
+
basic_config = self.auth_methods['basic']
|
189
|
+
if auth.username == basic_config['username'] and \
|
190
|
+
auth.password == basic_config['password']:
|
191
|
+
return f(*args, **kwargs)
|
192
|
+
|
193
|
+
# Authentication failed
|
194
|
+
logger.warning(
|
195
|
+
"auth_failed",
|
196
|
+
ip=request.remote_addr,
|
197
|
+
method=request.method,
|
198
|
+
path=request.path
|
199
|
+
)
|
200
|
+
|
201
|
+
return Response(
|
202
|
+
'Authentication required',
|
203
|
+
401,
|
204
|
+
{'WWW-Authenticate': 'Basic realm="SignalWire Service"'}
|
205
|
+
)
|
206
|
+
|
207
|
+
return decorated
|
208
|
+
|
209
|
+
def get_auth_info(self) -> Dict[str, Any]:
|
210
|
+
"""Get information about configured auth methods"""
|
211
|
+
info = {}
|
212
|
+
|
213
|
+
if self.auth_methods.get('basic', {}).get('enabled'):
|
214
|
+
info['basic'] = {
|
215
|
+
'enabled': True,
|
216
|
+
'username': self.auth_methods['basic']['username']
|
217
|
+
}
|
218
|
+
|
219
|
+
if self.auth_methods.get('bearer', {}).get('enabled'):
|
220
|
+
info['bearer'] = {
|
221
|
+
'enabled': True,
|
222
|
+
'hint': 'Use Authorization: Bearer <token>'
|
223
|
+
}
|
224
|
+
|
225
|
+
if self.auth_methods.get('api_key', {}).get('enabled'):
|
226
|
+
api_config = self.auth_methods['api_key']
|
227
|
+
info['api_key'] = {
|
228
|
+
'enabled': True,
|
229
|
+
'header': api_config['header'],
|
230
|
+
'hint': f'Use {api_config["header"]}: <key>'
|
231
|
+
}
|
232
|
+
|
233
|
+
return info
|