[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EXR4D6BZM9418F79F07YV2":3,"skill-same:01M6EXR4D6BZM9418F79F07YV2":69},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":33,"linkOnly":34,"markdownContent":35,"markdownBody":36,"frontMatter":37,"refName":40,"commitSha":41,"skillDirectory":42,"forksCount":43,"repositoryHtmlUrl":44,"repositoryHomepageUrl":45,"ownerHtmlUrl":46,"ownerBlogUrl":6,"ownerDescription":47,"updatedAt":48,"install":49,"resources":62},"01M6EXR4D6BZM9418F79F07YV2","azure-servicebus-py",null,"Azure Service Bus SDK for Python messaging. Use for queues, topics, subscriptions, and enterprise messaging patterns.\nTriggers: \"service bus\", \"ServiceBusClient\", \"queue\", \"topic\", \"subscription\", \"message broker\".","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",66,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fsickn33\u002Fazure-servicebus-py\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32],"azure","azure servicebus py","python","sdk","messaging","Enterprise","use","queue","subscriptions","patterns","azure service bus","message","service","triggers","2026-11-10 10:12:30",false,"---\nname: azure-servicebus-py\ndescription: |\n  Azure Service Bus SDK for Python messaging. Use for queues, topics, subscriptions, and enterprise messaging patterns.\n  Triggers: \"service bus\", \"ServiceBusClient\", \"queue\", \"topic\", \"subscription\", \"message broker\".\npackage: azure-servicebus\n---\n\n# Azure Service Bus SDK for Python\n\nEnterprise messaging for reliable cloud communication with queues and pub\u002Fsub topics.\n\n## Installation\n\n```bash\npip install azure-servicebus azure-identity\n```\n\n## Environment Variables\n\n```bash\nSERVICEBUS_FULLY_QUALIFIED_NAMESPACE=\u003Cnamespace>.servicebus.windows.net\nSERVICEBUS_QUEUE_NAME=myqueue\nSERVICEBUS_TOPIC_NAME=mytopic\nSERVICEBUS_SUBSCRIPTION_NAME=mysubscription\n```\n\n## Authentication\n\n```python\nfrom azure.identity import DefaultAzureCredential\nfrom azure.servicebus import ServiceBusClient\n\ncredential = DefaultAzureCredential()\nnamespace = \"\u003Cnamespace>.servicebus.windows.net\"\n\nclient = ServiceBusClient(\n    fully_qualified_namespace=namespace,\n    credential=credential\n)\n```\n\n## Client Types\n\n| Client | Purpose | Get From |\n|--------|---------|----------|\n| `ServiceBusClient` | Connection management | Direct instantiation |\n| `ServiceBusSender` | Send messages | `client.get_queue_sender()` \u002F `get_topic_sender()` |\n| `ServiceBusReceiver` | Receive messages | `client.get_queue_receiver()` \u002F `get_subscription_receiver()` |\n\n## Send Messages (Async)\n\n```python\nimport asyncio\nfrom azure.servicebus.aio import ServiceBusClient\nfrom azure.servicebus import ServiceBusMessage\nfrom azure.identity.aio import DefaultAzureCredential\n\nasync def send_messages():\n    credential = DefaultAzureCredential()\n    \n    async with ServiceBusClient(\n        fully_qualified_namespace=\"\u003Cnamespace>.servicebus.windows.net\",\n        credential=credential\n    ) as client:\n        sender = client.get_queue_sender(queue_name=\"myqueue\")\n        \n        async with sender:\n            # Single message\n            message = ServiceBusMessage(\"Hello, Service Bus!\")\n            await sender.send_messages(message)\n            \n            # Batch of messages\n            messages = [ServiceBusMessage(f\"Message {i}\") for i in range(10)]\n            await sender.send_messages(messages)\n            \n            # Message batch (for size control)\n            batch = await sender.create_message_batch()\n            for i in range(100):\n                try:\n                    batch.add_message(ServiceBusMessage(f\"Batch message {i}\"))\n                except ValueError:  # Batch full\n                    await sender.send_messages(batch)\n                    batch = await sender.create_message_batch()\n                    batch.add_message(ServiceBusMessage(f\"Batch message {i}\"))\n            await sender.send_messages(batch)\n\nasyncio.run(send_messages())\n```\n\n## Receive Messages (Async)\n\n```python\nasync def receive_messages():\n    credential = DefaultAzureCredential()\n    \n    async with ServiceBusClient(\n        fully_qualified_namespace=\"\u003Cnamespace>.servicebus.windows.net\",\n        credential=credential\n    ) as client:\n        receiver = client.get_queue_receiver(queue_name=\"myqueue\")\n        \n        async with receiver:\n            # Receive batch\n            messages = await receiver.receive_messages(\n                max_message_count=10,\n                max_wait_time=5  # seconds\n            )\n            \n            for msg in messages:\n                print(f\"Received: {str(msg)}\")\n                await receiver.complete_message(msg)  # Remove from queue\n\nasyncio.run(receive_messages())\n```\n\n## Receive Modes\n\n| Mode | Behavior | Use Case |\n|------|----------|----------|\n| `PEEK_LOCK` (default) | Message locked, must complete\u002Fabandon | Reliable processing |\n| `RECEIVE_AND_DELETE` | Removed immediately on receive | At-most-once delivery |\n\n```python\nfrom azure.servicebus import ServiceBusReceiveMode\n\nreceiver = client.get_queue_receiver(\n    queue_name=\"myqueue\",\n    receive_mode=ServiceBusReceiveMode.RECEIVE_AND_DELETE\n)\n```\n\n## Message Settlement\n\n```python\nasync with receiver:\n    messages = await receiver.receive_messages(max_message_count=1)\n    \n    for msg in messages:\n        try:\n            # Process message...\n            await receiver.complete_message(msg)  # Success - remove from queue\n        except ProcessingError:\n            await receiver.abandon_message(msg)  # Retry later\n        except PermanentError:\n            await receiver.dead_letter_message(\n                msg,\n                reason=\"ProcessingFailed\",\n                error_description=\"Could not process\"\n            )\n```\n\n| Action | Effect |\n|--------|--------|\n| `complete_message()` | Remove from queue (success) |\n| `abandon_message()` | Release lock, retry immediately |\n| `dead_letter_message()` | Move to dead-letter queue |\n| `defer_message()` | Set aside, receive by sequence number |\n\n## Topics and Subscriptions\n\n```python\n# Send to topic\nsender = client.get_topic_sender(topic_name=\"mytopic\")\nasync with sender:\n    await sender.send_messages(ServiceBusMessage(\"Topic message\"))\n\n# Receive from subscription\nreceiver = client.get_subscription_receiver(\n    topic_name=\"mytopic\",\n    subscription_name=\"mysubscription\"\n)\nasync with receiver:\n    messages = await receiver.receive_messages(max_message_count=10)\n```\n\n## Sessions (FIFO)\n\n```python\n# Send with session\nmessage = ServiceBusMessage(\"Session message\")\nmessage.session_id = \"order-123\"\nawait sender.send_messages(message)\n\n# Receive from specific session\nreceiver = client.get_queue_receiver(\n    queue_name=\"session-queue\",\n    session_id=\"order-123\"\n)\n\n# Receive from next available session\nfrom azure.servicebus import NEXT_AVAILABLE_SESSION\nreceiver = client.get_queue_receiver(\n    queue_name=\"session-queue\",\n    session_id=NEXT_AVAILABLE_SESSION\n)\n```\n\n## Scheduled Messages\n\n```python\nfrom datetime import datetime, timedelta, timezone\n\nmessage = ServiceBusMessage(\"Scheduled message\")\nscheduled_time = datetime.now(timezone.utc) + timedelta(minutes=10)\n\n# Schedule message\nsequence_number = await sender.schedule_messages(message, scheduled_time)\n\n# Cancel scheduled message\nawait sender.cancel_scheduled_messages(sequence_number)\n```\n\n## Dead-Letter Queue\n\n```python\nfrom azure.servicebus import ServiceBusSubQueue\n\n# Receive from dead-letter queue\ndlq_receiver = client.get_queue_receiver(\n    queue_name=\"myqueue\",\n    sub_queue=ServiceBusSubQueue.DEAD_LETTER\n)\n\nasync with dlq_receiver:\n    messages = await dlq_receiver.receive_messages(max_message_count=10)\n    for msg in messages:\n        print(f\"Dead-lettered: {msg.dead_letter_reason}\")\n        await dlq_receiver.complete_message(msg)\n```\n\n## Sync Client (for simple scripts)\n\n```python\nfrom azure.servicebus import ServiceBusClient, ServiceBusMessage\nfrom azure.identity import DefaultAzureCredential\n\nwith ServiceBusClient(\n    fully_qualified_namespace=\"\u003Cnamespace>.servicebus.windows.net\",\n    credential=DefaultAzureCredential()\n) as client:\n    with client.get_queue_sender(\"myqueue\") as sender:\n        sender.send_messages(ServiceBusMessage(\"Sync message\"))\n    \n    with client.get_queue_receiver(\"myqueue\") as receiver:\n        for msg in receiver:\n            print(str(msg))\n            receiver.complete_message(msg)\n```\n\n## Best Practices\n\n1. **Use async client** for production workloads\n2. **Use context managers** (`async with`) for proper cleanup\n3. **Complete messages** after successful processing\n4. **Use dead-letter queue** for poison messages\n5. **Use sessions** for ordered, FIFO processing\n6. **Use message batches** for high-throughput scenarios\n7. **Set `max_wait_time`** to avoid infinite blocking\n\n## Reference Files\n\n| File | Contents |\n|------|----------|\n| [references\u002Fpatterns.md](references\u002Fpatterns.md) | Competing consumers, sessions, retry patterns, request-response, transactions |\n| [references\u002Fdead-letter.md](references\u002Fdead-letter.md) | DLQ handling, poison messages, reprocessing strategies |\n| [scripts\u002Fsetup_servicebus.py](scripts\u002Fsetup_servicebus.py) | CLI for queue\u002Ftopic\u002Fsubscription management and DLQ monitoring |\n","# Azure Service Bus SDK for Python\n\nEnterprise messaging for reliable cloud communication with queues and pub\u002Fsub topics.\n\n## Installation\n\n```bash\npip install azure-servicebus azure-identity\n```\n\n## Environment Variables\n\n```bash\nSERVICEBUS_FULLY_QUALIFIED_NAMESPACE=\u003Cnamespace>.servicebus.windows.net\nSERVICEBUS_QUEUE_NAME=myqueue\nSERVICEBUS_TOPIC_NAME=mytopic\nSERVICEBUS_SUBSCRIPTION_NAME=mysubscription\n```\n\n## Authentication\n\n```python\nfrom azure.identity import DefaultAzureCredential\nfrom azure.servicebus import ServiceBusClient\n\ncredential = DefaultAzureCredential()\nnamespace = \"\u003Cnamespace>.servicebus.windows.net\"\n\nclient = ServiceBusClient(\n    fully_qualified_namespace=namespace,\n    credential=credential\n)\n```\n\n## Client Types\n\n| Client | Purpose | Get From |\n|--------|---------|----------|\n| `ServiceBusClient` | Connection management | Direct instantiation |\n| `ServiceBusSender` | Send messages | `client.get_queue_sender()` \u002F `get_topic_sender()` |\n| `ServiceBusReceiver` | Receive messages | `client.get_queue_receiver()` \u002F `get_subscription_receiver()` |\n\n## Send Messages (Async)\n\n```python\nimport asyncio\nfrom azure.servicebus.aio import ServiceBusClient\nfrom azure.servicebus import ServiceBusMessage\nfrom azure.identity.aio import DefaultAzureCredential\n\nasync def send_messages():\n    credential = DefaultAzureCredential()\n    \n    async with ServiceBusClient(\n        fully_qualified_namespace=\"\u003Cnamespace>.servicebus.windows.net\",\n        credential=credential\n    ) as client:\n        sender = client.get_queue_sender(queue_name=\"myqueue\")\n        \n        async with sender:\n            # Single message\n            message = ServiceBusMessage(\"Hello, Service Bus!\")\n            await sender.send_messages(message)\n            \n            # Batch of messages\n            messages = [ServiceBusMessage(f\"Message {i}\") for i in range(10)]\n            await sender.send_messages(messages)\n            \n            # Message batch (for size control)\n            batch = await sender.create_message_batch()\n            for i in range(100):\n                try:\n                    batch.add_message(ServiceBusMessage(f\"Batch message {i}\"))\n                except ValueError:  # Batch full\n                    await sender.send_messages(batch)\n                    batch = await sender.create_message_batch()\n                    batch.add_message(ServiceBusMessage(f\"Batch message {i}\"))\n            await sender.send_messages(batch)\n\nasyncio.run(send_messages())\n```\n\n## Receive Messages (Async)\n\n```python\nasync def receive_messages():\n    credential = DefaultAzureCredential()\n    \n    async with ServiceBusClient(\n        fully_qualified_namespace=\"\u003Cnamespace>.servicebus.windows.net\",\n        credential=credential\n    ) as client:\n        receiver = client.get_queue_receiver(queue_name=\"myqueue\")\n        \n        async with receiver:\n            # Receive batch\n            messages = await receiver.receive_messages(\n                max_message_count=10,\n                max_wait_time=5  # seconds\n            )\n            \n            for msg in messages:\n                print(f\"Received: {str(msg)}\")\n                await receiver.complete_message(msg)  # Remove from queue\n\nasyncio.run(receive_messages())\n```\n\n## Receive Modes\n\n| Mode | Behavior | Use Case |\n|------|----------|----------|\n| `PEEK_LOCK` (default) | Message locked, must complete\u002Fabandon | Reliable processing |\n| `RECEIVE_AND_DELETE` | Removed immediately on receive | At-most-once delivery |\n\n```python\nfrom azure.servicebus import ServiceBusReceiveMode\n\nreceiver = client.get_queue_receiver(\n    queue_name=\"myqueue\",\n    receive_mode=ServiceBusReceiveMode.RECEIVE_AND_DELETE\n)\n```\n\n## Message Settlement\n\n```python\nasync with receiver:\n    messages = await receiver.receive_messages(max_message_count=1)\n    \n    for msg in messages:\n        try:\n            # Process message...\n            await receiver.complete_message(msg)  # Success - remove from queue\n        except ProcessingError:\n            await receiver.abandon_message(msg)  # Retry later\n        except PermanentError:\n            await receiver.dead_letter_message(\n                msg,\n                reason=\"ProcessingFailed\",\n                error_description=\"Could not process\"\n            )\n```\n\n| Action | Effect |\n|--------|--------|\n| `complete_message()` | Remove from queue (success) |\n| `abandon_message()` | Release lock, retry immediately |\n| `dead_letter_message()` | Move to dead-letter queue |\n| `defer_message()` | Set aside, receive by sequence number |\n\n## Topics and Subscriptions\n\n```python\n# Send to topic\nsender = client.get_topic_sender(topic_name=\"mytopic\")\nasync with sender:\n    await sender.send_messages(ServiceBusMessage(\"Topic message\"))\n\n# Receive from subscription\nreceiver = client.get_subscription_receiver(\n    topic_name=\"mytopic\",\n    subscription_name=\"mysubscription\"\n)\nasync with receiver:\n    messages = await receiver.receive_messages(max_message_count=10)\n```\n\n## Sessions (FIFO)\n\n```python\n# Send with session\nmessage = ServiceBusMessage(\"Session message\")\nmessage.session_id = \"order-123\"\nawait sender.send_messages(message)\n\n# Receive from specific session\nreceiver = client.get_queue_receiver(\n    queue_name=\"session-queue\",\n    session_id=\"order-123\"\n)\n\n# Receive from next available session\nfrom azure.servicebus import NEXT_AVAILABLE_SESSION\nreceiver = client.get_queue_receiver(\n    queue_name=\"session-queue\",\n    session_id=NEXT_AVAILABLE_SESSION\n)\n```\n\n## Scheduled Messages\n\n```python\nfrom datetime import datetime, timedelta, timezone\n\nmessage = ServiceBusMessage(\"Scheduled message\")\nscheduled_time = datetime.now(timezone.utc) + timedelta(minutes=10)\n\n# Schedule message\nsequence_number = await sender.schedule_messages(message, scheduled_time)\n\n# Cancel scheduled message\nawait sender.cancel_scheduled_messages(sequence_number)\n```\n\n## Dead-Letter Queue\n\n```python\nfrom azure.servicebus import ServiceBusSubQueue\n\n# Receive from dead-letter queue\ndlq_receiver = client.get_queue_receiver(\n    queue_name=\"myqueue\",\n    sub_queue=ServiceBusSubQueue.DEAD_LETTER\n)\n\nasync with dlq_receiver:\n    messages = await dlq_receiver.receive_messages(max_message_count=10)\n    for msg in messages:\n        print(f\"Dead-lettered: {msg.dead_letter_reason}\")\n        await dlq_receiver.complete_message(msg)\n```\n\n## Sync Client (for simple scripts)\n\n```python\nfrom azure.servicebus import ServiceBusClient, ServiceBusMessage\nfrom azure.identity import DefaultAzureCredential\n\nwith ServiceBusClient(\n    fully_qualified_namespace=\"\u003Cnamespace>.servicebus.windows.net\",\n    credential=DefaultAzureCredential()\n) as client:\n    with client.get_queue_sender(\"myqueue\") as sender:\n        sender.send_messages(ServiceBusMessage(\"Sync message\"))\n    \n    with client.get_queue_receiver(\"myqueue\") as receiver:\n        for msg in receiver:\n            print(str(msg))\n            receiver.complete_message(msg)\n```\n\n## Best Practices\n\n1. **Use async client** for production workloads\n2. **Use context managers** (`async with`) for proper cleanup\n3. **Complete messages** after successful processing\n4. **Use dead-letter queue** for poison messages\n5. **Use sessions** for ordered, FIFO processing\n6. **Use message batches** for high-throughput scenarios\n7. **Set `max_wait_time`** to avoid infinite blocking\n\n## Reference Files\n\n| File | Contents |\n|------|----------|\n| [references\u002Fpatterns.md](references\u002Fpatterns.md) | Competing consumers, sessions, retry patterns, request-response, transactions |\n| [references\u002Fdead-letter.md](references\u002Fdead-letter.md) | DLQ handling, poison messages, reprocessing strategies |\n| [scripts\u002Fsetup_servicebus.py](scripts\u002Fsetup_servicebus.py) | CLI for queue\u002Ftopic\u002Fsubscription management and DLQ monitoring |\n",{"name":5,"package":38,"description":39},"azure-servicebus","Azure Service Bus SDK for Python messaging. Use for queues, topics, subscriptions, and enterprise messaging patterns.\nTriggers: \"service bus\", \"ServiceBusClient\", \"queue\", \"topic\", \"subscription\", \"message broker\".\n","main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Faiskillstore\u002Fmarketplace\u002Fsickn33\u002Fazure-servicebus-py",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":8,"skillName":5,"commands":50,"prompt":60,"zipAvailable":61},[51,54,57],{"tool":52,"command":53},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill azure-servicebus-py",{"tool":55,"command":56},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill azure-servicebus-py",{"tool":58,"command":59},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill azure-servicebus-py","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fsickn33\u002Fazure-servicebus-py\u002FSKILL.md",true,[63],{"path":64,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":67,"sourceHtmlUrl":68},"skill-report.json","REFERENCE","参考文档",8008,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fsickn33\u002Fazure-servicebus-py\u002Fskill-report.json",[70,84,94,102,108,115],{"skillNo":71,"name":72,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":80,"publishedAt":33},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[75],{"categoryNo":76,"categoryName":77,"taxonomyType":78,"taxonomyTypeDesc":79},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[81,82,83],"model","model hierarchy","model hierarchy skill",{"skillNo":85,"name":86,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":90,"publishedAt":33},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[89],{"categoryNo":76,"categoryName":77,"taxonomyType":78,"taxonomyTypeDesc":79},[91,92,93],"MCP","zoom","zoom mcp",{"skillNo":95,"name":96,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":99,"publishedAt":33},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[22,100,101,92],"zoom apps sdk","apps",{"skillNo":103,"name":104,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":105,"categories":106,"keywords":107,"publishedAt":33},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[104],{"skillNo":109,"name":110,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":114,"publishedAt":33},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[113],{"categoryNo":76,"categoryName":77,"taxonomyType":78,"taxonomyTypeDesc":79},[110],{"skillNo":116,"name":117,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":120,"publishedAt":33},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[117]]