feat: Add Official Microsoft & Gemini Skills (845+ Total)
🚀 Impact Significantly expands the capabilities of **Antigravity Awesome Skills** by integrating official skill collections from **Microsoft** and **Google Gemini**. This update increases the total skill count to **845+**, making the library even more comprehensive for AI coding assistants. ✨ Key Changes 1. New Official Skills - **Microsoft Skills**: Added a massive collection of official skills from [microsoft/skills](https://github.com/microsoft/skills). - Includes Azure, .NET, Python, TypeScript, and Semantic Kernel skills. - Preserves the original directory structure under `skills/official/microsoft/`. - Includes plugin skills from the `.github/plugins` directory. - **Gemini Skills**: Added official Gemini API development skills under `skills/gemini-api-dev/`. 2. New Scripts & Tooling - **`scripts/sync_microsoft_skills.py`**: A robust synchronization script that: - Clones the official Microsoft repository. - Preserves the original directory heirarchy. - Handles symlinks and plugin locations. - Generates attribution metadata. - **`scripts/tests/inspect_microsoft_repo.py`**: Debug tool to inspect the remote repository structure. - **`scripts/tests/test_comprehensive_coverage.py`**: Verification script to ensure 100% of skills are captured during sync. 3. Core Improvements - **`scripts/generate_index.py`**: Enhanced frontmatter parsing to safely handle unquoted values containing `@` symbols and commas (fixing issues with some Microsoft skill descriptions). - **`package.json`**: Added `sync:microsoft` and `sync:all-official` scripts for easy maintenance. 4. Documentation - Updated `README.md` to reflect the new skill counts (845+) and added Microsoft/Gemini to the provider list. - Updated `CATALOG.md` and `skills_index.json` with the new skills. 🧪 Verification - Ran `scripts/tests/test_comprehensive_coverage.py` to verify all Microsoft skills are detected. - Validated `generate_index.py` fixes by successfully indexing the new skills.
This commit is contained in:
320
skills/official/microsoft/python/compute/botservice/SKILL.md
Normal file
320
skills/official/microsoft/python/compute/botservice/SKILL.md
Normal file
@@ -0,0 +1,320 @@
|
||||
---
|
||||
name: azure-mgmt-botservice-py
|
||||
description: |
|
||||
Azure Bot Service Management SDK for Python. Use for creating, managing, and configuring Azure Bot Service resources.
|
||||
Triggers: "azure-mgmt-botservice", "AzureBotService", "bot management", "conversational AI", "bot channels".
|
||||
---
|
||||
|
||||
# Azure Bot Service Management SDK for Python
|
||||
|
||||
Manage Azure Bot Service resources including bots, channels, and connections.
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
pip install azure-mgmt-botservice
|
||||
pip install azure-identity
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
```bash
|
||||
AZURE_SUBSCRIPTION_ID=<your-subscription-id>
|
||||
AZURE_RESOURCE_GROUP=<your-resource-group>
|
||||
```
|
||||
|
||||
## Authentication
|
||||
|
||||
```python
|
||||
from azure.identity import DefaultAzureCredential
|
||||
from azure.mgmt.botservice import AzureBotService
|
||||
import os
|
||||
|
||||
credential = DefaultAzureCredential()
|
||||
client = AzureBotService(
|
||||
credential=credential,
|
||||
subscription_id=os.environ["AZURE_SUBSCRIPTION_ID"]
|
||||
)
|
||||
```
|
||||
|
||||
## Create a Bot
|
||||
|
||||
```python
|
||||
from azure.mgmt.botservice import AzureBotService
|
||||
from azure.mgmt.botservice.models import Bot, BotProperties, Sku
|
||||
from azure.identity import DefaultAzureCredential
|
||||
import os
|
||||
|
||||
credential = DefaultAzureCredential()
|
||||
client = AzureBotService(
|
||||
credential=credential,
|
||||
subscription_id=os.environ["AZURE_SUBSCRIPTION_ID"]
|
||||
)
|
||||
|
||||
resource_group = os.environ["AZURE_RESOURCE_GROUP"]
|
||||
bot_name = "my-chat-bot"
|
||||
|
||||
bot = client.bots.create(
|
||||
resource_group_name=resource_group,
|
||||
resource_name=bot_name,
|
||||
parameters=Bot(
|
||||
location="global",
|
||||
sku=Sku(name="F0"), # Free tier
|
||||
kind="azurebot",
|
||||
properties=BotProperties(
|
||||
display_name="My Chat Bot",
|
||||
description="A conversational AI bot",
|
||||
endpoint="https://my-bot-app.azurewebsites.net/api/messages",
|
||||
msa_app_id="<your-app-id>",
|
||||
msa_app_type="MultiTenant"
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
print(f"Bot created: {bot.name}")
|
||||
```
|
||||
|
||||
## Get Bot Details
|
||||
|
||||
```python
|
||||
bot = client.bots.get(
|
||||
resource_group_name=resource_group,
|
||||
resource_name=bot_name
|
||||
)
|
||||
|
||||
print(f"Bot: {bot.properties.display_name}")
|
||||
print(f"Endpoint: {bot.properties.endpoint}")
|
||||
print(f"SKU: {bot.sku.name}")
|
||||
```
|
||||
|
||||
## List Bots in Resource Group
|
||||
|
||||
```python
|
||||
bots = client.bots.list_by_resource_group(resource_group_name=resource_group)
|
||||
|
||||
for bot in bots:
|
||||
print(f"Bot: {bot.name} - {bot.properties.display_name}")
|
||||
```
|
||||
|
||||
## List All Bots in Subscription
|
||||
|
||||
```python
|
||||
all_bots = client.bots.list()
|
||||
|
||||
for bot in all_bots:
|
||||
print(f"Bot: {bot.name} in {bot.id.split('/')[4]}")
|
||||
```
|
||||
|
||||
## Update Bot
|
||||
|
||||
```python
|
||||
bot = client.bots.update(
|
||||
resource_group_name=resource_group,
|
||||
resource_name=bot_name,
|
||||
properties=BotProperties(
|
||||
display_name="Updated Bot Name",
|
||||
description="Updated description"
|
||||
)
|
||||
)
|
||||
```
|
||||
|
||||
## Delete Bot
|
||||
|
||||
```python
|
||||
client.bots.delete(
|
||||
resource_group_name=resource_group,
|
||||
resource_name=bot_name
|
||||
)
|
||||
```
|
||||
|
||||
## Configure Channels
|
||||
|
||||
### Add Teams Channel
|
||||
|
||||
```python
|
||||
from azure.mgmt.botservice.models import (
|
||||
BotChannel,
|
||||
MsTeamsChannel,
|
||||
MsTeamsChannelProperties
|
||||
)
|
||||
|
||||
channel = client.channels.create(
|
||||
resource_group_name=resource_group,
|
||||
resource_name=bot_name,
|
||||
channel_name="MsTeamsChannel",
|
||||
parameters=BotChannel(
|
||||
location="global",
|
||||
properties=MsTeamsChannel(
|
||||
properties=MsTeamsChannelProperties(
|
||||
is_enabled=True
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
```
|
||||
|
||||
### Add Direct Line Channel
|
||||
|
||||
```python
|
||||
from azure.mgmt.botservice.models import (
|
||||
BotChannel,
|
||||
DirectLineChannel,
|
||||
DirectLineChannelProperties,
|
||||
DirectLineSite
|
||||
)
|
||||
|
||||
channel = client.channels.create(
|
||||
resource_group_name=resource_group,
|
||||
resource_name=bot_name,
|
||||
channel_name="DirectLineChannel",
|
||||
parameters=BotChannel(
|
||||
location="global",
|
||||
properties=DirectLineChannel(
|
||||
properties=DirectLineChannelProperties(
|
||||
sites=[
|
||||
DirectLineSite(
|
||||
site_name="Default Site",
|
||||
is_enabled=True,
|
||||
is_v1_enabled=False,
|
||||
is_v3_enabled=True
|
||||
)
|
||||
]
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
```
|
||||
|
||||
### Add Web Chat Channel
|
||||
|
||||
```python
|
||||
from azure.mgmt.botservice.models import (
|
||||
BotChannel,
|
||||
WebChatChannel,
|
||||
WebChatChannelProperties,
|
||||
WebChatSite
|
||||
)
|
||||
|
||||
channel = client.channels.create(
|
||||
resource_group_name=resource_group,
|
||||
resource_name=bot_name,
|
||||
channel_name="WebChatChannel",
|
||||
parameters=BotChannel(
|
||||
location="global",
|
||||
properties=WebChatChannel(
|
||||
properties=WebChatChannelProperties(
|
||||
sites=[
|
||||
WebChatSite(
|
||||
site_name="Default Site",
|
||||
is_enabled=True
|
||||
)
|
||||
]
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
```
|
||||
|
||||
## Get Channel Details
|
||||
|
||||
```python
|
||||
channel = client.channels.get(
|
||||
resource_group_name=resource_group,
|
||||
resource_name=bot_name,
|
||||
channel_name="DirectLineChannel"
|
||||
)
|
||||
```
|
||||
|
||||
## List Channel Keys
|
||||
|
||||
```python
|
||||
keys = client.channels.list_with_keys(
|
||||
resource_group_name=resource_group,
|
||||
resource_name=bot_name,
|
||||
channel_name="DirectLineChannel"
|
||||
)
|
||||
|
||||
# Access Direct Line keys
|
||||
if hasattr(keys.properties, 'properties'):
|
||||
for site in keys.properties.properties.sites:
|
||||
print(f"Site: {site.site_name}")
|
||||
print(f"Key: {site.key}")
|
||||
```
|
||||
|
||||
## Bot Connections (OAuth)
|
||||
|
||||
### Create Connection Setting
|
||||
|
||||
```python
|
||||
from azure.mgmt.botservice.models import (
|
||||
ConnectionSetting,
|
||||
ConnectionSettingProperties
|
||||
)
|
||||
|
||||
connection = client.bot_connection.create(
|
||||
resource_group_name=resource_group,
|
||||
resource_name=bot_name,
|
||||
connection_name="graph-connection",
|
||||
parameters=ConnectionSetting(
|
||||
location="global",
|
||||
properties=ConnectionSettingProperties(
|
||||
client_id="<oauth-client-id>",
|
||||
client_secret="<oauth-client-secret>",
|
||||
scopes="User.Read",
|
||||
service_provider_id="<service-provider-id>"
|
||||
)
|
||||
)
|
||||
)
|
||||
```
|
||||
|
||||
### List Connections
|
||||
|
||||
```python
|
||||
connections = client.bot_connection.list_by_bot_service(
|
||||
resource_group_name=resource_group,
|
||||
resource_name=bot_name
|
||||
)
|
||||
|
||||
for conn in connections:
|
||||
print(f"Connection: {conn.name}")
|
||||
```
|
||||
|
||||
## Client Operations
|
||||
|
||||
| Operation | Method |
|
||||
|-----------|--------|
|
||||
| `client.bots` | Bot CRUD operations |
|
||||
| `client.channels` | Channel configuration |
|
||||
| `client.bot_connection` | OAuth connection settings |
|
||||
| `client.direct_line` | Direct Line channel operations |
|
||||
| `client.email` | Email channel operations |
|
||||
| `client.operations` | Available operations |
|
||||
| `client.host_settings` | Host settings operations |
|
||||
|
||||
## SKU Options
|
||||
|
||||
| SKU | Description |
|
||||
|-----|-------------|
|
||||
| `F0` | Free tier (limited messages) |
|
||||
| `S1` | Standard tier (unlimited messages) |
|
||||
|
||||
## Channel Types
|
||||
|
||||
| Channel | Class | Purpose |
|
||||
|---------|-------|---------|
|
||||
| `MsTeamsChannel` | Microsoft Teams | Teams integration |
|
||||
| `DirectLineChannel` | Direct Line | Custom client integration |
|
||||
| `WebChatChannel` | Web Chat | Embeddable web widget |
|
||||
| `SlackChannel` | Slack | Slack workspace integration |
|
||||
| `FacebookChannel` | Facebook | Messenger integration |
|
||||
| `EmailChannel` | Email | Email communication |
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Use DefaultAzureCredential** for authentication
|
||||
2. **Start with F0 SKU** for development, upgrade to S1 for production
|
||||
3. **Store MSA App ID/Secret securely** — use Key Vault
|
||||
4. **Enable only needed channels** — reduces attack surface
|
||||
5. **Rotate Direct Line keys** periodically
|
||||
6. **Use managed identity** when possible for bot connections
|
||||
7. **Configure proper CORS** for Web Chat channel
|
||||
Reference in New Issue
Block a user