# Cadence Example Plugins
A collection of example AI agent plugins for the Cadence Framework.
## Overview
This repository contains example plugins that demonstrate how to build custom AI agents and tools for the Cadence
multi-agent framework. These plugins showcase various capabilities and serve as templates for building your own plugins.
## Available Plugins
### Math Agent
A specialized agent for mathematical calculations and problem-solving.
**Features:**
- Basic arithmetic operations
- Complex mathematical expressions
- Unit conversions
- Mathematical problem solving
**Usage:**
```python
from cadence_plugins.math_agent.plugin import MathPlugin
plugin = MathPlugin()
agent = plugin.create_agent()
# The agent is used by the Cadence framework automatically
```
### Search Agent
A web search agent for information retrieval and research.
**Features:**
- Web search capabilities
- Information summarization
- Source citation
- Multi-query support
**Usage:**
```python
from cadence_plugins.search_agent.plugin import SearchPlugin
plugin = SearchPlugin()
agent = plugin.create_agent()
# The agent is used by the Cadence framework automatically
```
### Info Agent
A general-purpose information and utility agent.
**Features:**
- General knowledge queries
- Utility functions
- Information organization
- Context-aware responses
**Usage:**
```python
from cadence_plugins.myinfo_agent.plugin import MyInfoPlugin
plugin = MyInfoPlugin()
agent = plugin.create_agent()
# The agent is used by the Cadence framework automatically
```
## Plugin Structure
Each plugin follows a standard structure and must be properly registered to be discovered by the Cadence framework.
### Plugin Registration
Every plugin must register itself in its `__init__.py` file:
```python
# plugins/src/cadence_example_plugins/my_plugin/__init__.py
from cadence_sdk import register_plugin
from .plugin import MyPlugin
# Register on import
register_plugin(MyPlugin)
```
### Directory Structure
```
plugin_name/
├── __init__.py # Plugin initialization
├── agent.py # Agent implementation
├── tools.py # Tool definitions
└── plugin.py # Plugin metadata and factory
```
### Example Plugin Structure
```python
# plugin.py
from cadence_sdk.base.plugin import BasePlugin
from cadence_sdk.base.metadata import PluginMetadata
class ExamplePlugin(BasePlugin):
@staticmethod
def get_metadata() -> PluginMetadata:
return PluginMetadata(
name="example_plugin",
version="1.0.7",
description="An example plugin for demonstration",
capabilities=["example"],
llm_requirements={
"provider": "openai",
"model": "gpt-4",
"temperature": 0.1
},
agent_type="specialized",
dependencies=[]
)
@staticmethod
def create_agent():
from .agent import ExampleAgent
return ExampleAgent(ExamplePlugin.get_metadata())
# agent.py
from cadence_sdk.base.agent import BaseAgent
from cadence_sdk.base.metadata import PluginMetadata
class ExampleAgent(BaseAgent):
def __init__(self, metadata: PluginMetadata):
super().__init__(metadata)
def get_tools(self):
from .tools import ExampleTool
return [ExampleTool()]
def get_system_prompt(self) -> str:
return "You are an example agent for demonstration purposes."
# tools.py
from cadence_sdk.tools import Tool
class ExampleTool(Tool):
name = "example_tool"
description = "An example tool"
def execute(self, **kwargs) -> str:
return "Tool executed successfully"
```
## Installation
### From Source
```bash
# Clone the main repository
git clone https://github.com/jonaskahn/cadence.git
cd cadence
# Install plugin dependencies
cd plugins
poetry install
# Install in development mode
poetry install --editable
```
### From PyPI
```bash
pip install cadence-plugins
# Note: This package is part of the main Cadence repository
```
## Configuration
### Environment Variables
```bash
# Set plugin directories (single path or JSON list)
export CADENCE_PLUGINS_DIR="./plugins/src/cadence_plugins"
# Or multiple directories as JSON array
export CADENCE_PLUGINS_DIR='["/path/to/plugins", "/another/path"]'
# Plugin limits (configured in main application)
export CADENCE_MAX_AGENT_HOPS=25
export CADENCE_GRAPH_RECURSION_LIMIT=50
```
### Plugin Discovery
The Cadence framework automatically discovers plugins from:
- Installed packages (via pip)
- Directory paths (configured via environment variables)
- Custom plugin registries
## Development
### Creating a New Plugin
1. **Create plugin directory structure**
```bash
mkdir my_plugin
cd my_plugin
touch __init__.py agent.py tools.py plugin.py
```
2. **Implement plugin interface**
```python
# plugin.py
from cadence_sdk.base.plugin import BasePlugin
from cadence_sdk.base.metadata import PluginMetadata
class MyPlugin(BasePlugin):
@staticmethod
def get_metadata() -> PluginMetadata:
return PluginMetadata(
name="my_plugin",
version="1.0.7",
description="My custom plugin",
capabilities=["custom"],
llm_requirements={
"provider": "openai",
"model": "gpt-4",
"temperature": 0.1
},
agent_type="specialized",
dependencies=[]
)
@staticmethod
def create_agent():
from .agent import MyAgent
return MyAgent(MyPlugin.get_metadata())
```
3. **Implement agent**
```python
# agent.py
from cadence_sdk.base.agent import BaseAgent
from cadence_sdk.base.metadata import PluginMetadata
class MyAgent(BaseAgent):
def __init__(self, metadata: PluginMetadata):
super().__init__(metadata)
def get_tools(self):
from .tools import MyTool
return [MyTool()]
def get_system_prompt(self) -> str:
return "You are a custom agent. How can I help you?"
```
4. **Add tools (optional)**
```python
# tools.py
from cadence_sdk.tools import Tool
class MyTool(Tool):
name = "my_tool"
description = "My custom tool"
def execute(self, **kwargs) -> str:
# Your tool logic here
return "Tool executed"
```
### Testing Your Plugin
```bash
# Run plugin tests
poetry run pytest tests/
# Test with Cadence framework
export CADENCE_PLUGINS_DIR="./my_plugin"
python -m cadence
# Or test from main project directory
cd .. # Go back to main project
export CADENCE_PLUGINS_DIR="./plugins/src/cadence_plugins"
python -m cadence
```
### Plugin Validation
The SDK provides validation utilities:
```python
from cadence_sdk.utils.validation import validate_plugin_structure
errors = validate_plugin_structure(MyPlugin)
if errors:
print("Validation errors:", errors)
else:
print("Plugin is valid!")
```
## Best Practices
### Plugin Design
1. **Single Responsibility**: Each plugin should have a focused purpose
2. **Clear Interfaces**: Implement required methods with clear contracts
3. **Error Handling**: Gracefully handle errors and provide meaningful messages
4. **Documentation**: Include comprehensive docstrings and examples
5. **Testing**: Write tests for your plugin functionality
### Performance Considerations
1. **Lazy Loading**: Load resources only when needed
2. **Caching**: Cache frequently accessed data
3. **Async Support**: Use async/await for I/O operations
4. **Resource Management**: Properly clean up resources
### Security
1. **Input Validation**: Validate all user inputs
2. **Tool Safety**: Ensure tools are safe to execute
3. **Access Control**: Implement appropriate access controls
4. **Audit Logging**: Log important operations
## Examples
### Advanced Plugin Example
```python
from cadence_sdk.base.plugin import BasePlugin
from cadence_sdk.base.agent import BaseAgent
from cadence_sdk.tools import Tool
from cadence_sdk.base.metadata import PluginMetadata
class WeatherPlugin(BasePlugin):
@staticmethod
def get_metadata() -> PluginMetadata:
return PluginMetadata(
name="weather_plugin",
version="1.0.7",
description="Weather information and forecasting",
capabilities=["weather_forecast", "current_conditions"],
llm_requirements={
"provider": "openai",
"model": "gpt-4",
"temperature": 0.1
},
agent_type="specialized",
dependencies=["requests", "pandas"]
)
@staticmethod
def create_agent():
from .agent import WeatherAgent
return WeatherAgent(WeatherPlugin.get_metadata())
class WeatherAgent(BaseAgent):
def __init__(self, metadata: PluginMetadata):
super().__init__(metadata)
def get_tools(self):
from .tools import WeatherTool
return [WeatherTool()]
def get_system_prompt(self) -> str:
return "You are a weather agent that provides weather information and forecasts."
class WeatherTool(Tool):
name = "get_weather"
description = "Get current weather for a location"
def execute(self, location: str) -> str:
# Implementation would call weather API
return f"Weather for {location}: Sunny, 72°F"
```
## Contributing
We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
### Development Setup
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests
5. Submit a pull request
### Code Standards
- Follow PEP 8 style guidelines
- Use type hints throughout
- Include comprehensive docstrings
- Write tests for new functionality
- Update documentation as needed
## Troubleshooting
### Common Issues
1. **Plugin not discovered**
- Check plugin directory path
- Verify plugin structure
- Check environment variables
2. **Import errors**
- Verify dependencies are installed
- Check import paths
- Ensure plugin is properly structured
3. **Agent not responding**
- Check agent implementation
- Verify tool definitions
- Check error logs
### Getting Help
- Check the [documentation](https://cadence-plugins.readthedocs.io/)
- Open an [issue](https://github.com/jonaskahn/cadence-plugins/issues)
- Join our [discussions](https://github.com/jonaskahn/cadence-plugins/discussions)
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## Support
- **Documentation**: [Read the Docs](https://cadence.readthedocs.io/)
- **Issues**: [GitHub Issues](https://github.com/jonaskahn/cadence/issues)
- **Discussions**: [GitHub Discussions](https://github.com/jonaskahn/cadence/discussions)
---
**Built with ❤️ for the Cadence AI community**
Raw data
{
"_id": null,
"home_page": "https://github.com/jonaskahn/cadence-plugins",
"name": "cadence-example-plugins",
"maintainer": null,
"docs_url": null,
"requires_python": "<3.14,>=3.13",
"maintainer_email": null,
"keywords": "ai, agents, cadence-ai, plugins, cadence-plugins, langchain, langgraph, multi-agent",
"author": "Jonas Kahn",
"author_email": "me@ifelse.one",
"download_url": "https://files.pythonhosted.org/packages/f3/63/393f92cb719066ed1e1474632dcdded611c8ad82af8a1ab1e003921d4aac/cadence_example_plugins-1.0.7.tar.gz",
"platform": null,
"description": "# Cadence Example Plugins\n\nA collection of example AI agent plugins for the Cadence Framework.\n\n## Overview\n\nThis repository contains example plugins that demonstrate how to build custom AI agents and tools for the Cadence\nmulti-agent framework. These plugins showcase various capabilities and serve as templates for building your own plugins.\n\n## Available Plugins\n\n### Math Agent\n\nA specialized agent for mathematical calculations and problem-solving.\n\n**Features:**\n\n- Basic arithmetic operations\n- Complex mathematical expressions\n- Unit conversions\n- Mathematical problem solving\n\n**Usage:**\n\n```python\nfrom cadence_plugins.math_agent.plugin import MathPlugin\n\nplugin = MathPlugin()\nagent = plugin.create_agent()\n# The agent is used by the Cadence framework automatically\n```\n\n### Search Agent\n\nA web search agent for information retrieval and research.\n\n**Features:**\n\n- Web search capabilities\n- Information summarization\n- Source citation\n- Multi-query support\n\n**Usage:**\n\n```python\nfrom cadence_plugins.search_agent.plugin import SearchPlugin\n\nplugin = SearchPlugin()\nagent = plugin.create_agent()\n# The agent is used by the Cadence framework automatically\n```\n\n### Info Agent\n\nA general-purpose information and utility agent.\n\n**Features:**\n\n- General knowledge queries\n- Utility functions\n- Information organization\n- Context-aware responses\n\n**Usage:**\n\n```python\nfrom cadence_plugins.myinfo_agent.plugin import MyInfoPlugin\n\nplugin = MyInfoPlugin()\nagent = plugin.create_agent()\n# The agent is used by the Cadence framework automatically\n```\n\n## Plugin Structure\n\nEach plugin follows a standard structure and must be properly registered to be discovered by the Cadence framework.\n\n### Plugin Registration\n\nEvery plugin must register itself in its `__init__.py` file:\n\n```python\n# plugins/src/cadence_example_plugins/my_plugin/__init__.py\nfrom cadence_sdk import register_plugin\nfrom .plugin import MyPlugin\n\n# Register on import\nregister_plugin(MyPlugin)\n```\n\n### Directory Structure\n\n```\nplugin_name/\n\u251c\u2500\u2500 __init__.py # Plugin initialization\n\u251c\u2500\u2500 agent.py # Agent implementation\n\u251c\u2500\u2500 tools.py # Tool definitions\n\u2514\u2500\u2500 plugin.py # Plugin metadata and factory\n```\n\n### Example Plugin Structure\n\n```python\n# plugin.py\nfrom cadence_sdk.base.plugin import BasePlugin\nfrom cadence_sdk.base.metadata import PluginMetadata\n\n\nclass ExamplePlugin(BasePlugin):\n @staticmethod\n def get_metadata() -> PluginMetadata:\n return PluginMetadata(\n name=\"example_plugin\",\n version=\"1.0.7\",\n description=\"An example plugin for demonstration\",\n capabilities=[\"example\"],\n llm_requirements={\n \"provider\": \"openai\",\n \"model\": \"gpt-4\",\n \"temperature\": 0.1\n },\n agent_type=\"specialized\",\n dependencies=[]\n )\n\n @staticmethod\n def create_agent():\n from .agent import ExampleAgent\n return ExampleAgent(ExamplePlugin.get_metadata())\n\n\n# agent.py\nfrom cadence_sdk.base.agent import BaseAgent\nfrom cadence_sdk.base.metadata import PluginMetadata\n\n\nclass ExampleAgent(BaseAgent):\n def __init__(self, metadata: PluginMetadata):\n super().__init__(metadata)\n\n def get_tools(self):\n from .tools import ExampleTool\n return [ExampleTool()]\n\n def get_system_prompt(self) -> str:\n return \"You are an example agent for demonstration purposes.\"\n\n\n# tools.py\nfrom cadence_sdk.tools import Tool\n\n\nclass ExampleTool(Tool):\n name = \"example_tool\"\n description = \"An example tool\"\n\n def execute(self, **kwargs) -> str:\n return \"Tool executed successfully\"\n```\n\n## Installation\n\n### From Source\n\n```bash\n# Clone the main repository\ngit clone https://github.com/jonaskahn/cadence.git\ncd cadence\n\n# Install plugin dependencies\ncd plugins\npoetry install\n\n# Install in development mode\npoetry install --editable\n```\n\n### From PyPI\n\n```bash\npip install cadence-plugins\n# Note: This package is part of the main Cadence repository\n```\n\n## Configuration\n\n### Environment Variables\n\n```bash\n# Set plugin directories (single path or JSON list)\nexport CADENCE_PLUGINS_DIR=\"./plugins/src/cadence_plugins\"\n\n# Or multiple directories as JSON array\nexport CADENCE_PLUGINS_DIR='[\"/path/to/plugins\", \"/another/path\"]'\n\n# Plugin limits (configured in main application)\nexport CADENCE_MAX_AGENT_HOPS=25\n\nexport CADENCE_GRAPH_RECURSION_LIMIT=50\n```\n\n### Plugin Discovery\n\nThe Cadence framework automatically discovers plugins from:\n\n- Installed packages (via pip)\n- Directory paths (configured via environment variables)\n- Custom plugin registries\n\n## Development\n\n### Creating a New Plugin\n\n1. **Create plugin directory structure**\n\n ```bash\n mkdir my_plugin\n cd my_plugin\n touch __init__.py agent.py tools.py plugin.py\n ```\n\n2. **Implement plugin interface**\n\n ```python\n # plugin.py\n from cadence_sdk.base.plugin import BasePlugin\n from cadence_sdk.base.metadata import PluginMetadata\n \n class MyPlugin(BasePlugin):\n @staticmethod\n def get_metadata() -> PluginMetadata:\n return PluginMetadata(\n name=\"my_plugin\",\n version=\"1.0.7\",\n description=\"My custom plugin\",\n capabilities=[\"custom\"],\n llm_requirements={\n \"provider\": \"openai\",\n \"model\": \"gpt-4\",\n \"temperature\": 0.1\n },\n agent_type=\"specialized\",\n dependencies=[]\n )\n \n @staticmethod\n def create_agent():\n from .agent import MyAgent\n return MyAgent(MyPlugin.get_metadata())\n ```\n\n3. **Implement agent**\n\n ```python\n # agent.py\n from cadence_sdk.base.agent import BaseAgent\n from cadence_sdk.base.metadata import PluginMetadata\n \n class MyAgent(BaseAgent):\n def __init__(self, metadata: PluginMetadata):\n super().__init__(metadata)\n \n def get_tools(self):\n from .tools import MyTool\n return [MyTool()]\n \n def get_system_prompt(self) -> str:\n return \"You are a custom agent. How can I help you?\"\n ```\n\n4. **Add tools (optional)**\n\n ```python\n # tools.py\n from cadence_sdk.tools import Tool\n \n class MyTool(Tool):\n name = \"my_tool\"\n description = \"My custom tool\"\n \n def execute(self, **kwargs) -> str:\n # Your tool logic here\n return \"Tool executed\"\n ```\n\n### Testing Your Plugin\n\n```bash\n# Run plugin tests\npoetry run pytest tests/\n\n# Test with Cadence framework\nexport CADENCE_PLUGINS_DIR=\"./my_plugin\"\npython -m cadence\n\n# Or test from main project directory\ncd .. # Go back to main project\nexport CADENCE_PLUGINS_DIR=\"./plugins/src/cadence_plugins\"\npython -m cadence\n```\n\n### Plugin Validation\n\nThe SDK provides validation utilities:\n\n```python\nfrom cadence_sdk.utils.validation import validate_plugin_structure\n\nerrors = validate_plugin_structure(MyPlugin)\nif errors:\n print(\"Validation errors:\", errors)\nelse:\n print(\"Plugin is valid!\")\n```\n\n## Best Practices\n\n### Plugin Design\n\n1. **Single Responsibility**: Each plugin should have a focused purpose\n2. **Clear Interfaces**: Implement required methods with clear contracts\n3. **Error Handling**: Gracefully handle errors and provide meaningful messages\n4. **Documentation**: Include comprehensive docstrings and examples\n5. **Testing**: Write tests for your plugin functionality\n\n### Performance Considerations\n\n1. **Lazy Loading**: Load resources only when needed\n2. **Caching**: Cache frequently accessed data\n3. **Async Support**: Use async/await for I/O operations\n4. **Resource Management**: Properly clean up resources\n\n### Security\n\n1. **Input Validation**: Validate all user inputs\n2. **Tool Safety**: Ensure tools are safe to execute\n3. **Access Control**: Implement appropriate access controls\n4. **Audit Logging**: Log important operations\n\n## Examples\n\n### Advanced Plugin Example\n\n```python\nfrom cadence_sdk.base.plugin import BasePlugin\nfrom cadence_sdk.base.agent import BaseAgent\nfrom cadence_sdk.tools import Tool\nfrom cadence_sdk.base.metadata import PluginMetadata\n\n\nclass WeatherPlugin(BasePlugin):\n @staticmethod\n def get_metadata() -> PluginMetadata:\n return PluginMetadata(\n name=\"weather_plugin\",\n version=\"1.0.7\",\n description=\"Weather information and forecasting\",\n capabilities=[\"weather_forecast\", \"current_conditions\"],\n llm_requirements={\n \"provider\": \"openai\",\n \"model\": \"gpt-4\",\n \"temperature\": 0.1\n },\n agent_type=\"specialized\",\n dependencies=[\"requests\", \"pandas\"]\n )\n\n @staticmethod\n def create_agent():\n from .agent import WeatherAgent\n return WeatherAgent(WeatherPlugin.get_metadata())\n\n\nclass WeatherAgent(BaseAgent):\n def __init__(self, metadata: PluginMetadata):\n super().__init__(metadata)\n\n def get_tools(self):\n from .tools import WeatherTool\n return [WeatherTool()]\n\n def get_system_prompt(self) -> str:\n return \"You are a weather agent that provides weather information and forecasts.\"\n\n\nclass WeatherTool(Tool):\n name = \"get_weather\"\n description = \"Get current weather for a location\"\n\n def execute(self, location: str) -> str:\n # Implementation would call weather API\n return f\"Weather for {location}: Sunny, 72\u00b0F\"\n```\n\n## Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\n### Development Setup\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes\n4. Add tests\n5. Submit a pull request\n\n### Code Standards\n\n- Follow PEP 8 style guidelines\n- Use type hints throughout\n- Include comprehensive docstrings\n- Write tests for new functionality\n- Update documentation as needed\n\n## Troubleshooting\n\n### Common Issues\n\n1. **Plugin not discovered**\n - Check plugin directory path\n - Verify plugin structure\n - Check environment variables\n\n2. **Import errors**\n - Verify dependencies are installed\n - Check import paths\n - Ensure plugin is properly structured\n\n3. **Agent not responding**\n - Check agent implementation\n - Verify tool definitions\n - Check error logs\n\n### Getting Help\n\n- Check the [documentation](https://cadence-plugins.readthedocs.io/)\n- Open an [issue](https://github.com/jonaskahn/cadence-plugins/issues)\n- Join our [discussions](https://github.com/jonaskahn/cadence-plugins/discussions)\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Support\n\n- **Documentation**: [Read the Docs](https://cadence.readthedocs.io/)\n- **Issues**: [GitHub Issues](https://github.com/jonaskahn/cadence/issues)\n- **Discussions**: [GitHub Discussions](https://github.com/jonaskahn/cadence/discussions)\n\n---\n\n**Built with \u2764\ufe0f for the Cadence AI community**",
"bugtrack_url": null,
"license": "MIT",
"summary": "Cadence Plugins - Collection of example AI agent plugins for Cadence AI Framework",
"version": "1.0.7",
"project_urls": {
"Documentation": "https://cadence-plugins.readthedocs.io/",
"Homepage": "https://github.com/jonaskahn/cadence-plugins",
"Repository": "https://github.com/jonaskahn/cadence-plugins.git",
"issues": "https://github.com/jonaskahn/cadence-plugins/issues"
},
"split_keywords": [
"ai",
" agents",
" cadence-ai",
" plugins",
" cadence-plugins",
" langchain",
" langgraph",
" multi-agent"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "c936b21bd5e552ac86e77ab36f3de7e6fe6ee17faa0afa59620149af0227f455",
"md5": "44882e9767b797e0ef9086f970ec8182",
"sha256": "f5c8866c9d49d00307a6a97215f7ad8812bd5a9d73d2743683866a0e1e9d05b9"
},
"downloads": -1,
"filename": "cadence_example_plugins-1.0.7-py3-none-any.whl",
"has_sig": false,
"md5_digest": "44882e9767b797e0ef9086f970ec8182",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<3.14,>=3.13",
"size": 14364,
"upload_time": "2025-09-03T09:36:47",
"upload_time_iso_8601": "2025-09-03T09:36:47.670144Z",
"url": "https://files.pythonhosted.org/packages/c9/36/b21bd5e552ac86e77ab36f3de7e6fe6ee17faa0afa59620149af0227f455/cadence_example_plugins-1.0.7-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "f363393f92cb719066ed1e1474632dcdded611c8ad82af8a1ab1e003921d4aac",
"md5": "a5ca76d00d1aec0179ca71356dc5c6a8",
"sha256": "4bedc4d3c3f02aad47e3ba1d7f3051b7a224f61002172cbf32abaa68f1834322"
},
"downloads": -1,
"filename": "cadence_example_plugins-1.0.7.tar.gz",
"has_sig": false,
"md5_digest": "a5ca76d00d1aec0179ca71356dc5c6a8",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<3.14,>=3.13",
"size": 11738,
"upload_time": "2025-09-03T09:36:48",
"upload_time_iso_8601": "2025-09-03T09:36:48.972568Z",
"url": "https://files.pythonhosted.org/packages/f3/63/393f92cb719066ed1e1474632dcdded611c8ad82af8a1ab1e003921d4aac/cadence_example_plugins-1.0.7.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-09-03 09:36:48",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "jonaskahn",
"github_project": "cadence-plugins",
"github_not_found": true,
"lcname": "cadence-example-plugins"
}