Name | ai-rules JSON |
Version |
0.3.0
JSON |
| download |
home_page | None |
Summary | A powerful CLI toolkit for extending and enhancing AI capabilities through customizable rules and commands. |
upload_time | 2025-01-18 09:50:35 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.9 |
license | MIT License Copyright (c) 2024 Hal Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
keywords |
ai
ai-assistant
cli
prompt-engineering
rules
uv
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
|
# ai-rules
🛠️ A powerful CLI toolkit for extending and enhancing AI capabilities through customizable rules and commands.
Transform your AI assistants (Cursor, Windsurf, Cline) into more capable development companions by crafting specialized instruction sets and custom commands.
## Inspiration
This project is inspired by [devin.cursorrules](https://github.com/grapeot/devin.cursorrules) and the blog post [Turning $20 into $500 - Transforming Cursor into Devin in One Hour](https://yage.ai/cursor-to-devin-en.html). We extend these ideas by providing a systematic way to manage and enhance AI rules across different platforms.
## Key Features
- 🧠 Extend AI capabilities through custom rules and commands
- 🔌 Plugin system for adding new AI functionalities
- 🌍 Support multiple AI platforms (Cursor, Windsurf, Cline)
- 🤖 LLM-powered tools (search, translation, etc.)
- 📝 Global and workspace-specific rule management
- ⚡ Command extension system for AI enhancement
## Installation
```bash
pip install ai-rules
```
## Quick Start
### Initialize AI Assistant Rules
```bash
# Initialize rules for Windsurf
uvx ai-rules init windsurf
# Initialize rules for Cursor
uvx ai-rules init cursor
# Initialize rules for CLI
uvx ai-rules init cli
```
### Use Built-in Plugins
```bash
# Search the web (supports Chinese and other languages)
uvx ai-rules plugin search --query "Python best practices" --limit 5
# Translate text (auto-detect source language)
uvx ai-rules plugin translate --text "Hello World" --target zh
# Web scraping (automatically installs required browser)
uvx ai-rules plugin web-scraper --urls https://example.com --format markdown
```
### Debug Mode
Enable debug logging with the `--debug` flag or `AI_RULES_DEBUG` environment variable:
```bash
# Enable debug logging with flag
uvx ai-rules --debug plugin search --query "Python best practices"
# Enable debug logging with environment variable
export AI_RULES_DEBUG=1
uvx ai-rules plugin search --query "Python best practices"
```
## Plugin Development Guide
### Creating a Custom Plugin
1. Create a new Python file in one of these locations:
- Built-in plugins: `src/ai_rules/plugins/`
- User plugins: `~/.ai-rules/plugins/`
- Virtual environment plugins: `venv/lib/ai-rules/plugins/`
2. Implement your plugin by inheriting from the Plugin base class:
```python
"""Example plugin demonstrating basic structure."""
# Import built-in modules
import logging
from typing import Any, Dict
# Import third-party modules
import click
from pydantic import BaseModel, Field
# Import local modules
from ai_rules.core.plugin import Plugin, PluginParameter, PluginSpec
# Configure logger
logger = logging.getLogger(__name__)
class InputModel(BaseModel):
"""Input validation model."""
text: str = Field(..., description="Input text to process")
option: int = Field(42, description="An optional parameter")
class MyCustomPlugin(Plugin):
"""Your custom plugin description."""
def __init__(self) -> None:
"""Initialize plugin instance."""
super().__init__()
self.metadata.name = "my_plugin"
self.metadata.description = "Description of what your plugin does"
self.metadata.version = "1.0.0"
self.metadata.author = "Your Name"
def get_command_spec(self) -> Dict[str, Any]:
"""Define command line parameters."""
return PluginSpec(
params=[
PluginParameter(
name="text",
type=click.STRING,
required=True,
help="Input text to process"
),
PluginParameter(
name="option",
type=click.INT,
required=False,
help="An optional parameter (default: 42)"
)
]
).model_dump()
def execute(self, **kwargs: Dict[str, Any]) -> Dict[str, Any]:
"""Execute plugin functionality.
Args:
**kwargs: Keyword arguments from command line.
Returns:
Dict containing plugin results.
"""
try:
# Validate input
input_data = InputModel(**kwargs)
# Process input (your plugin logic here)
result = f"Processed {input_data.text} with option {input_data.option}"
logger.info("Successfully processed input")
# Return result
return {"result": result}
except Exception as e:
logger.error("Plugin execution failed: %s", e)
raise click.ClickException(str(e))
```
### Plugin Requirements
1. **Base Class**: Must inherit from `Plugin`
2. **Required Attributes** (set in `__init__`):
- `name`: Plugin command name
- `description`: Plugin description
- `version`: Plugin version
- `author`: Plugin author
3. **Required Methods**:
- `get_command_spec()`: Define command parameters
- `execute()`: Implement plugin logic
4. **Response Format**:
All plugins use a standardized response format:
```json
{
"status": "success", // or "error"
"message": "Operation completed successfully",
"data": {
// Plugin-specific response data
},
"error": null, // Error message if status is "error"
"metadata": {
"plugin_name": "example",
"plugin_version": "1.0.0",
"timestamp": "2025-01-14T18:04:54+08:00"
}
}
```
5. **Best Practices**:
- Use Pydantic models for input/output validation
- Use logging instead of print statements
- Implement proper input validation
- Handle errors gracefully
- Add type hints and docstrings
- Use super().format_response() and super().format_error()
### Parameter Types
The following Click types are supported:
- `click.STRING`: Text input
- `click.INT`: Integer numbers
- `click.FLOAT`: Floating point numbers
- `click.BOOL`: Boolean flags
- `click.Choice(['a', 'b'])`: Choice from options
- More types in [Click documentation](https://click.palletsprojects.com/en/8.1.x/parameters/)
### Built-in Plugins
1. **Search Plugin** ([source](src/ai_rules/plugins/duckduckgo_search.py))
- Web search using DuckDuckGo
- Supports multiple languages
- Features:
- Configurable result limit
- Retry mechanism
- Rich error handling
- Standardized response format
```bash
# Basic search
uvx ai-rules plugin search --query "Python async/await"
# Limit results
uvx ai-rules plugin search --query "Python async/await" --limit 3
# Search in other languages
uvx ai-rules plugin search --query "Python 最佳实践"
```
Example response:
```json
{
"status": "success",
"message": "Found 3 results for query: Python async/await",
"data": {
"results": [
{
"title": "Python asyncio: Async/Await Tutorial",
"link": "https://example.com/python-async",
"snippet": "A comprehensive guide to async/await in Python..."
}
]
},
"metadata": {
"plugin_name": "search",
"plugin_version": "1.0.0",
"timestamp": "2025-01-14T18:04:54+08:00"
}
}
```
2. **Translate Plugin** ([source](src/ai_rules/plugins/translate.py))
- Text translation using LibreTranslate
- Features:
- Auto language detection
- Multiple language support
- Configurable source/target languages
```bash
# Basic translation (auto-detect source)
uvx ai-rules plugin translate --text "Hello World" --target zh
# Specify source language
uvx ai-rules plugin translate --text "Bonjour" --source fr --target en
```
Example response:
```json
{
"status": "success",
"message": "Translated text from English to Chinese",
"data": {
"translation": "你好世界",
"source_language": "en",
"target_language": "zh"
},
"metadata": {
"plugin_name": "translate",
"plugin_version": "1.0.0",
"timestamp": "2025-01-14T18:04:54+08:00"
}
}
```
3. **Web Scraper Plugin** ([source](src/ai_rules/plugins/web_scraper.py))
- Web scraping using Playwright
- Features:
- Automatic browser installation
- Configurable URL and format
```bash
# Basic web scraping
uvx ai-rules plugin web-scraper --urls https://example.com --format markdown
```
Example response:
```json
{
"status": "success",
"message": "Scraped content from https://example.com",
"data": {
"content": "# Example Website\n\nThis is an example website.",
"format": "markdown"
},
"metadata": {
"plugin_name": "web-scraper",
"plugin_version": "1.0.0",
"timestamp": "2025-01-14T18:04:54+08:00"
}
}
```
### Using Your Plugin
Once installed, your plugin will be automatically discovered and registered:
```bash
# List available plugins
uvx ai-rules plugin --help
# Run your plugin
uvx ai-rules plugin my_plugin --text "input text" --option 123
# Run with debug logging
uvx ai-rules --debug plugin my_plugin --text "input text" --option 123
```
## Documentation
### Command Structure
1. Initialize Rules
```bash
uvx ai-rules init <assistant-type>
```
- `assistant-type`: windsurf, cursor, or cli
- Creates configuration files in the current directory
2. Use Plugins
```bash
uvx ai-rules plugin <plugin-name> [arguments]
```
## Development
### Project Structure
```
src/ai_rules/
├── core/
│ ├── plugin.py # Plugin system
│ ├── template.py # Template conversion
│ └── __init__.py
├── plugins/ # Built-in plugins
│ ├── duckduckgo_search.py # Search plugin
│ └── translate.py # Translation plugin
│ └── web_scraper.py # Web scraper plugin
├── templates/ # Rule templates
├── cli.py # CLI implementation
└── __init__.py
```
### Contributing
Contributions are welcome! Please read our [Contributing Guidelines](CONTRIBUTING.md) first.
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
Raw data
{
"_id": null,
"home_page": null,
"name": "ai-rules",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "ai, ai-assistant, cli, prompt-engineering, rules, uv",
"author": null,
"author_email": "loonghao <hal.long@outlook.com>",
"download_url": "https://files.pythonhosted.org/packages/87/a4/cbfa2b5f762dbe420b4c343ad9f88eae1468ff2ef3d1c9487ce80eefafc2/ai_rules-0.3.0.tar.gz",
"platform": null,
"description": "# ai-rules\n\n\ud83d\udee0\ufe0f A powerful CLI toolkit for extending and enhancing AI capabilities through customizable rules and commands.\n\nTransform your AI assistants (Cursor, Windsurf, Cline) into more capable development companions by crafting specialized instruction sets and custom commands.\n\n## Inspiration\nThis project is inspired by [devin.cursorrules](https://github.com/grapeot/devin.cursorrules) and the blog post [Turning $20 into $500 - Transforming Cursor into Devin in One Hour](https://yage.ai/cursor-to-devin-en.html). We extend these ideas by providing a systematic way to manage and enhance AI rules across different platforms.\n\n## Key Features\n- \ud83e\udde0 Extend AI capabilities through custom rules and commands\n- \ud83d\udd0c Plugin system for adding new AI functionalities\n- \ud83c\udf0d Support multiple AI platforms (Cursor, Windsurf, Cline)\n- \ud83e\udd16 LLM-powered tools (search, translation, etc.)\n- \ud83d\udcdd Global and workspace-specific rule management\n- \u26a1 Command extension system for AI enhancement\n\n## Installation\n\n```bash\npip install ai-rules\n```\n\n## Quick Start\n\n### Initialize AI Assistant Rules\n\n```bash\n# Initialize rules for Windsurf\nuvx ai-rules init windsurf\n\n# Initialize rules for Cursor\nuvx ai-rules init cursor\n\n# Initialize rules for CLI\nuvx ai-rules init cli\n```\n\n### Use Built-in Plugins\n\n```bash\n# Search the web (supports Chinese and other languages)\nuvx ai-rules plugin search --query \"Python best practices\" --limit 5\n\n# Translate text (auto-detect source language)\nuvx ai-rules plugin translate --text \"Hello World\" --target zh\n\n# Web scraping (automatically installs required browser)\nuvx ai-rules plugin web-scraper --urls https://example.com --format markdown\n```\n\n### Debug Mode\n\nEnable debug logging with the `--debug` flag or `AI_RULES_DEBUG` environment variable:\n\n```bash\n# Enable debug logging with flag\nuvx ai-rules --debug plugin search --query \"Python best practices\"\n\n# Enable debug logging with environment variable\nexport AI_RULES_DEBUG=1\nuvx ai-rules plugin search --query \"Python best practices\"\n```\n\n## Plugin Development Guide\n\n### Creating a Custom Plugin\n\n1. Create a new Python file in one of these locations:\n - Built-in plugins: `src/ai_rules/plugins/`\n - User plugins: `~/.ai-rules/plugins/`\n - Virtual environment plugins: `venv/lib/ai-rules/plugins/`\n\n2. Implement your plugin by inheriting from the Plugin base class:\n\n```python\n\"\"\"Example plugin demonstrating basic structure.\"\"\"\n\n# Import built-in modules\nimport logging\nfrom typing import Any, Dict\n\n# Import third-party modules\nimport click\nfrom pydantic import BaseModel, Field\n\n# Import local modules\nfrom ai_rules.core.plugin import Plugin, PluginParameter, PluginSpec\n\n# Configure logger\nlogger = logging.getLogger(__name__)\n\nclass InputModel(BaseModel):\n \"\"\"Input validation model.\"\"\"\n \n text: str = Field(..., description=\"Input text to process\")\n option: int = Field(42, description=\"An optional parameter\")\n\nclass MyCustomPlugin(Plugin):\n \"\"\"Your custom plugin description.\"\"\"\n \n def __init__(self) -> None:\n \"\"\"Initialize plugin instance.\"\"\"\n super().__init__()\n self.metadata.name = \"my_plugin\"\n self.metadata.description = \"Description of what your plugin does\"\n self.metadata.version = \"1.0.0\"\n self.metadata.author = \"Your Name\"\n \n def get_command_spec(self) -> Dict[str, Any]:\n \"\"\"Define command line parameters.\"\"\"\n return PluginSpec(\n params=[\n PluginParameter(\n name=\"text\",\n type=click.STRING,\n required=True,\n help=\"Input text to process\"\n ),\n PluginParameter(\n name=\"option\",\n type=click.INT,\n required=False,\n help=\"An optional parameter (default: 42)\"\n )\n ]\n ).model_dump()\n \n def execute(self, **kwargs: Dict[str, Any]) -> Dict[str, Any]:\n \"\"\"Execute plugin functionality.\n \n Args:\n **kwargs: Keyword arguments from command line.\n\n Returns:\n Dict containing plugin results.\n \"\"\"\n try:\n # Validate input\n input_data = InputModel(**kwargs)\n \n # Process input (your plugin logic here)\n result = f\"Processed {input_data.text} with option {input_data.option}\"\n logger.info(\"Successfully processed input\")\n \n # Return result\n return {\"result\": result}\n \n except Exception as e:\n logger.error(\"Plugin execution failed: %s\", e)\n raise click.ClickException(str(e))\n```\n\n### Plugin Requirements\n\n1. **Base Class**: Must inherit from `Plugin`\n2. **Required Attributes** (set in `__init__`):\n - `name`: Plugin command name\n - `description`: Plugin description\n - `version`: Plugin version\n - `author`: Plugin author\n3. **Required Methods**:\n - `get_command_spec()`: Define command parameters\n - `execute()`: Implement plugin logic\n4. **Response Format**:\n All plugins use a standardized response format:\n ```json\n {\n \"status\": \"success\", // or \"error\"\n \"message\": \"Operation completed successfully\",\n \"data\": {\n // Plugin-specific response data\n },\n \"error\": null, // Error message if status is \"error\"\n \"metadata\": {\n \"plugin_name\": \"example\",\n \"plugin_version\": \"1.0.0\",\n \"timestamp\": \"2025-01-14T18:04:54+08:00\"\n }\n }\n ```\n5. **Best Practices**:\n - Use Pydantic models for input/output validation\n - Use logging instead of print statements\n - Implement proper input validation\n - Handle errors gracefully\n - Add type hints and docstrings\n - Use super().format_response() and super().format_error()\n\n### Parameter Types\n\nThe following Click types are supported:\n- `click.STRING`: Text input\n- `click.INT`: Integer numbers\n- `click.FLOAT`: Floating point numbers\n- `click.BOOL`: Boolean flags\n- `click.Choice(['a', 'b'])`: Choice from options\n- More types in [Click documentation](https://click.palletsprojects.com/en/8.1.x/parameters/)\n\n### Built-in Plugins\n\n1. **Search Plugin** ([source](src/ai_rules/plugins/duckduckgo_search.py))\n - Web search using DuckDuckGo\n - Supports multiple languages\n - Features:\n - Configurable result limit\n - Retry mechanism\n - Rich error handling\n - Standardized response format\n\n```bash\n# Basic search\nuvx ai-rules plugin search --query \"Python async/await\"\n\n# Limit results\nuvx ai-rules plugin search --query \"Python async/await\" --limit 3\n\n# Search in other languages\nuvx ai-rules plugin search --query \"Python \u6700\u4f73\u5b9e\u8df5\"\n```\n\nExample response:\n```json\n{\n \"status\": \"success\",\n \"message\": \"Found 3 results for query: Python async/await\",\n \"data\": {\n \"results\": [\n {\n \"title\": \"Python asyncio: Async/Await Tutorial\",\n \"link\": \"https://example.com/python-async\",\n \"snippet\": \"A comprehensive guide to async/await in Python...\"\n }\n ]\n },\n \"metadata\": {\n \"plugin_name\": \"search\",\n \"plugin_version\": \"1.0.0\",\n \"timestamp\": \"2025-01-14T18:04:54+08:00\"\n }\n}\n```\n\n2. **Translate Plugin** ([source](src/ai_rules/plugins/translate.py))\n - Text translation using LibreTranslate\n - Features:\n - Auto language detection\n - Multiple language support\n - Configurable source/target languages\n\n```bash\n# Basic translation (auto-detect source)\nuvx ai-rules plugin translate --text \"Hello World\" --target zh\n\n# Specify source language\nuvx ai-rules plugin translate --text \"Bonjour\" --source fr --target en\n```\n\nExample response:\n```json\n{\n \"status\": \"success\",\n \"message\": \"Translated text from English to Chinese\",\n \"data\": {\n \"translation\": \"\u4f60\u597d\u4e16\u754c\",\n \"source_language\": \"en\",\n \"target_language\": \"zh\"\n },\n \"metadata\": {\n \"plugin_name\": \"translate\",\n \"plugin_version\": \"1.0.0\",\n \"timestamp\": \"2025-01-14T18:04:54+08:00\"\n }\n}\n```\n\n3. **Web Scraper Plugin** ([source](src/ai_rules/plugins/web_scraper.py))\n - Web scraping using Playwright\n - Features:\n - Automatic browser installation\n - Configurable URL and format\n\n```bash\n# Basic web scraping\nuvx ai-rules plugin web-scraper --urls https://example.com --format markdown\n```\n\nExample response:\n```json\n{\n \"status\": \"success\",\n \"message\": \"Scraped content from https://example.com\",\n \"data\": {\n \"content\": \"# Example Website\\n\\nThis is an example website.\",\n \"format\": \"markdown\"\n },\n \"metadata\": {\n \"plugin_name\": \"web-scraper\",\n \"plugin_version\": \"1.0.0\",\n \"timestamp\": \"2025-01-14T18:04:54+08:00\"\n }\n}\n```\n\n### Using Your Plugin\n\nOnce installed, your plugin will be automatically discovered and registered:\n\n```bash\n# List available plugins\nuvx ai-rules plugin --help\n\n# Run your plugin\nuvx ai-rules plugin my_plugin --text \"input text\" --option 123\n\n# Run with debug logging\nuvx ai-rules --debug plugin my_plugin --text \"input text\" --option 123\n```\n\n## Documentation\n\n### Command Structure\n\n1. Initialize Rules\n```bash\nuvx ai-rules init <assistant-type>\n```\n- `assistant-type`: windsurf, cursor, or cli\n- Creates configuration files in the current directory\n\n2. Use Plugins\n```bash\nuvx ai-rules plugin <plugin-name> [arguments]\n```\n\n## Development\n\n### Project Structure\n```\nsrc/ai_rules/\n\u251c\u2500\u2500 core/\n\u2502 \u251c\u2500\u2500 plugin.py # Plugin system\n\u2502 \u251c\u2500\u2500 template.py # Template conversion\n\u2502 \u2514\u2500\u2500 __init__.py\n\u251c\u2500\u2500 plugins/ # Built-in plugins\n\u2502 \u251c\u2500\u2500 duckduckgo_search.py # Search plugin\n\u2502 \u2514\u2500\u2500 translate.py # Translation plugin\n\u2502 \u2514\u2500\u2500 web_scraper.py # Web scraper plugin\n\u251c\u2500\u2500 templates/ # Rule templates\n\u251c\u2500\u2500 cli.py # CLI implementation\n\u2514\u2500\u2500 __init__.py\n```\n\n### Contributing\n\nContributions are welcome! Please read our [Contributing Guidelines](CONTRIBUTING.md) first.\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n",
"bugtrack_url": null,
"license": "MIT License Copyright (c) 2024 Hal Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.",
"summary": "A powerful CLI toolkit for extending and enhancing AI capabilities through customizable rules and commands.",
"version": "0.3.0",
"project_urls": {
"Documentation": "https://github.com/loonghao/ai-rules-cli#readme",
"Homepage": "https://github.com/loonghao/ai-rules-cli",
"Issues": "https://github.com/loonghao/ai-rules-cli/issues",
"Repository": "https://github.com/loonghao/ai-rules-cli.git"
},
"split_keywords": [
"ai",
" ai-assistant",
" cli",
" prompt-engineering",
" rules",
" uv"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "77f89d839a11b48d61f6bec93b783d58209a150178553a93959a8699bb2bdd78",
"md5": "8a2df75d05b24b86ccdd25a5355136f0",
"sha256": "01997a2e93a85e2516326aeed95194ff5db5dce31c7ed40e4820abdb839e29ad"
},
"downloads": -1,
"filename": "ai_rules-0.3.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "8a2df75d05b24b86ccdd25a5355136f0",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 56469,
"upload_time": "2025-01-18T09:50:32",
"upload_time_iso_8601": "2025-01-18T09:50:32.703904Z",
"url": "https://files.pythonhosted.org/packages/77/f8/9d839a11b48d61f6bec93b783d58209a150178553a93959a8699bb2bdd78/ai_rules-0.3.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "87a4cbfa2b5f762dbe420b4c343ad9f88eae1468ff2ef3d1c9487ce80eefafc2",
"md5": "38f16ea010a5aa6c90a176cccd1007e2",
"sha256": "7ba35d281a321bc7d6a925c91ef2b20b8b8496c82da292694fe7f507fd0d500e"
},
"downloads": -1,
"filename": "ai_rules-0.3.0.tar.gz",
"has_sig": false,
"md5_digest": "38f16ea010a5aa6c90a176cccd1007e2",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 168760,
"upload_time": "2025-01-18T09:50:35",
"upload_time_iso_8601": "2025-01-18T09:50:35.505989Z",
"url": "https://files.pythonhosted.org/packages/87/a4/cbfa2b5f762dbe420b4c343ad9f88eae1468ff2ef3d1c9487ce80eefafc2/ai_rules-0.3.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-01-18 09:50:35",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "loonghao",
"github_project": "ai-rules-cli#readme",
"travis_ci": false,
"coveralls": true,
"github_actions": true,
"lcname": "ai-rules"
}