@sylix/coworker 2.0.11 → 2.0.14
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.
- package/dist/commands/slash/config.d.ts.map +1 -1
- package/dist/commands/slash/config.js +22 -4
- package/dist/commands/slash/config.js.map +1 -1
- package/dist/core/CoWorkerAgent.d.ts.map +1 -1
- package/dist/core/CoWorkerAgent.js +6 -3
- package/dist/core/CoWorkerAgent.js.map +1 -1
- package/dist/skills/defaults/accessibility/screen-reader-testing.md +545 -0
- package/dist/skills/defaults/accessibility/wcag-audit-patterns.md +555 -0
- package/dist/skills/defaults/ai-ml/rag.md +276 -0
- package/dist/skills/defaults/backend-development/api-design-principles.md +528 -0
- package/dist/skills/defaults/backend-development/api-design.md +285 -0
- package/dist/skills/defaults/backend-development/architecture-patterns.md +494 -0
- package/dist/skills/defaults/backend-development/async-python.md +237 -0
- package/dist/skills/defaults/backend-development/auth-implementation-patterns.md +638 -0
- package/dist/skills/defaults/backend-development/bazel-build-optimization.md +387 -0
- package/dist/skills/defaults/backend-development/billing-automation/SKILL.md +566 -0
- package/dist/skills/defaults/backend-development/code-review-excellence.md +538 -0
- package/dist/skills/defaults/backend-development/cqrs-implementation.md +554 -0
- package/dist/skills/defaults/backend-development/database-design.md +305 -0
- package/dist/skills/defaults/backend-development/debugging-strategies.md +536 -0
- package/dist/skills/defaults/backend-development/e2e-testing-patterns.md +544 -0
- package/dist/skills/defaults/backend-development/error-handling-patterns.md +641 -0
- package/dist/skills/defaults/backend-development/fastapi-templates.md +559 -0
- package/dist/skills/defaults/backend-development/fastapi.md +309 -0
- package/dist/skills/defaults/backend-development/git-advanced-workflows.md +405 -0
- package/dist/skills/defaults/backend-development/microservices-patterns.md +595 -0
- package/dist/skills/defaults/backend-development/microservices.md +284 -0
- package/dist/skills/defaults/backend-development/monorepo-management.md +623 -0
- package/dist/skills/defaults/backend-development/nodejs-backend-patterns.md +1048 -0
- package/dist/skills/defaults/backend-development/nx-workspace-patterns.md +457 -0
- package/dist/skills/defaults/backend-development/paypal-integration/SKILL.md +478 -0
- package/dist/skills/defaults/backend-development/pci-compliance/SKILL.md +480 -0
- package/dist/skills/defaults/backend-development/python-anti-patterns.md +349 -0
- package/dist/skills/defaults/backend-development/python-background-jobs.md +364 -0
- package/dist/skills/defaults/backend-development/python-code-style.md +360 -0
- package/dist/skills/defaults/backend-development/python-configuration.md +368 -0
- package/dist/skills/defaults/backend-development/python-design-patterns.md +296 -0
- package/dist/skills/defaults/backend-development/python-error-handling.md +323 -0
- package/dist/skills/defaults/backend-development/python-packaging.md +887 -0
- package/dist/skills/defaults/backend-development/python-performance-optimization.md +874 -0
- package/dist/skills/defaults/backend-development/python-project-structure.md +252 -0
- package/dist/skills/defaults/backend-development/python-resilience.md +376 -0
- package/dist/skills/defaults/backend-development/python-resource-management.md +421 -0
- package/dist/skills/defaults/backend-development/python-type-safety.md +428 -0
- package/dist/skills/defaults/backend-development/sql-optimization-patterns.md +509 -0
- package/dist/skills/defaults/backend-development/stripe-integration/SKILL.md +522 -0
- package/dist/skills/defaults/backend-development/turborepo-caching.md +376 -0
- package/dist/skills/defaults/blockchain/defi-protocol-templates.md +430 -0
- package/dist/skills/defaults/blockchain/nft-standards.md +364 -0
- package/dist/skills/defaults/blockchain/solidity-security.md +514 -0
- package/dist/skills/defaults/blockchain/web3-testing.md +360 -0
- package/dist/skills/defaults/business/competitive-landscape/SKILL.md +527 -0
- package/dist/skills/defaults/business/market-sizing-analysis/SKILL.md +451 -0
- package/dist/skills/defaults/business/startup-financial-modeling/SKILL.md +494 -0
- package/dist/skills/defaults/business/startup-metrics-framework/SKILL.md +564 -0
- package/dist/skills/defaults/business/team-composition-analysis.md +437 -0
- package/dist/skills/defaults/compliance/employment-contract-templates/SKILL.md +527 -0
- package/dist/skills/defaults/compliance/gdpr-data-handling/SKILL.md +630 -0
- package/dist/skills/defaults/data-engineering/airflow-dag-patterns.md +436 -0
- package/dist/skills/defaults/data-engineering/airflow.md +519 -0
- package/dist/skills/defaults/data-engineering/data-quality.md +583 -0
- package/dist/skills/defaults/data-engineering/dbt-transformation-patterns.md +482 -0
- package/dist/skills/defaults/data-engineering/dbt.md +556 -0
- package/dist/skills/defaults/data-engineering/ml-pipeline-workflow/SKILL.md +247 -0
- package/dist/skills/defaults/data-engineering/spark-optimization.md +348 -0
- package/dist/skills/defaults/data-engineering/spark.md +411 -0
- package/dist/skills/defaults/database/postgresql.md +202 -0
- package/dist/skills/defaults/debugging/systematic-debugging.md +249 -0
- package/dist/skills/defaults/devops/architecture-decision-records.md +448 -0
- package/dist/skills/defaults/devops/changelog-automation.md +580 -0
- package/dist/skills/defaults/devops/cicd.md +314 -0
- package/dist/skills/defaults/devops/cloud.md +263 -0
- package/dist/skills/defaults/devops/code-review-excellence.md +299 -0
- package/dist/skills/defaults/devops/cost-optimization.md +295 -0
- package/dist/skills/defaults/devops/deployment-pipeline-design.md +356 -0
- package/dist/skills/defaults/devops/docker.md +281 -0
- package/dist/skills/defaults/devops/git-workflows.md +205 -0
- package/dist/skills/defaults/devops/github-actions.md +311 -0
- package/dist/skills/defaults/devops/gitlab-ci-patterns.md +266 -0
- package/dist/skills/defaults/devops/hybrid-cloud-networking.md +241 -0
- package/dist/skills/defaults/devops/istio-traffic-management.md +327 -0
- package/dist/skills/defaults/devops/kubernetes.md +339 -0
- package/dist/skills/defaults/devops/linkerd-patterns.md +311 -0
- package/dist/skills/defaults/devops/multi-cloud-architecture.md +181 -0
- package/dist/skills/defaults/devops/observability.md +243 -0
- package/dist/skills/defaults/devops/openapi-spec-generation.md +1024 -0
- package/dist/skills/defaults/devops/postmortem-writing.md +396 -0
- package/dist/skills/defaults/devops/prometheus-configuration.md +265 -0
- package/dist/skills/defaults/devops/secrets-management.md +341 -0
- package/dist/skills/defaults/devops/service-mesh-observability.md +385 -0
- package/dist/skills/defaults/devops/terraform-module-library.md +244 -0
- package/dist/skills/defaults/finance/backtesting-frameworks/SKILL.md +663 -0
- package/dist/skills/defaults/finance/risk-metrics-calculation/SKILL.md +557 -0
- package/dist/skills/defaults/frontend/accessibility-compliance.md +420 -0
- package/dist/skills/defaults/frontend/design-system-patterns.md +337 -0
- package/dist/skills/defaults/frontend/interaction-design.md +327 -0
- package/dist/skills/defaults/frontend/javascript.md +311 -0
- package/dist/skills/defaults/frontend/modern-javascript-patterns.md +927 -0
- package/dist/skills/defaults/frontend/react-native-design.md +440 -0
- package/dist/skills/defaults/frontend/react.md +345 -0
- package/dist/skills/defaults/frontend/responsive-design.md +472 -0
- package/dist/skills/defaults/frontend/tailwind-design-system.md +337 -0
- package/dist/skills/defaults/frontend/typescript-advanced-types.md +724 -0
- package/dist/skills/defaults/frontend/typescript.md +334 -0
- package/dist/skills/defaults/frontend/visual-design-foundations.md +326 -0
- package/dist/skills/defaults/frontend/web-component-design.md +279 -0
- package/dist/skills/defaults/game-development/godot-gdscript-patterns.md +188 -0
- package/dist/skills/defaults/game-development/unity-ecs-patterns.md +594 -0
- package/dist/skills/defaults/kubernetes/gitops-workflow.md +285 -0
- package/dist/skills/defaults/kubernetes/gitops.md +280 -0
- package/dist/skills/defaults/kubernetes/helm-chart-scaffolding.md +553 -0
- package/dist/skills/defaults/kubernetes/helm.md +343 -0
- package/dist/skills/defaults/kubernetes/k8s-manifest-generator.md +501 -0
- package/dist/skills/defaults/kubernetes/k8s-security-policies.md +342 -0
- package/dist/skills/defaults/kubernetes/manifests.md +330 -0
- package/dist/skills/defaults/kubernetes/security.md +337 -0
- package/dist/skills/defaults/llm-application/embedding-strategies.md +608 -0
- package/dist/skills/defaults/llm-application/hybrid-search-implementation.md +570 -0
- package/dist/skills/defaults/llm-application/hybrid-search.md +570 -0
- package/dist/skills/defaults/llm-application/langchain-architecture.md +666 -0
- package/dist/skills/defaults/llm-application/langchain.md +259 -0
- package/dist/skills/defaults/llm-application/llm-evaluation.md +695 -0
- package/dist/skills/defaults/llm-application/prompt-engineering-patterns.md +449 -0
- package/dist/skills/defaults/llm-application/prompt-engineering.md +219 -0
- package/dist/skills/defaults/llm-application/rag-implementation.md +434 -0
- package/dist/skills/defaults/llm-application/similarity-search-patterns.md +560 -0
- package/dist/skills/defaults/llm-application/similarity-search.md +560 -0
- package/dist/skills/defaults/llm-application/vector-index-tuning.md +523 -0
- package/dist/skills/defaults/mobile/mobile-android-design.md +440 -0
- package/dist/skills/defaults/mobile/mobile-ios-design.md +266 -0
- package/dist/skills/defaults/monitoring/distributed-tracing.md +436 -0
- package/dist/skills/defaults/monitoring/grafana-dashboards.md +370 -0
- package/dist/skills/defaults/monitoring/prometheus-configuration.md +379 -0
- package/dist/skills/defaults/monitoring/slo-implementation.md +323 -0
- package/dist/skills/defaults/refactoring/code-refactoring.md +349 -0
- package/dist/skills/defaults/security/anti-reversing-techniques/SKILL.md +559 -0
- package/dist/skills/defaults/security/auditor.md +168 -0
- package/dist/skills/defaults/security/binary-analysis-patterns/SKILL.md +438 -0
- package/dist/skills/defaults/security/memory-forensics/SKILL.md +483 -0
- package/dist/skills/defaults/security/mtls-configuration.md +349 -0
- package/dist/skills/defaults/security/protocol-reverse-engineering/SKILL.md +520 -0
- package/dist/skills/defaults/security/sast-configuration.md +182 -0
- package/dist/skills/defaults/security/security.md +313 -0
- package/dist/skills/defaults/security/stride-analysis.md +273 -0
- package/dist/skills/defaults/security/threat-mitigation-mapping.md +290 -0
- package/dist/skills/defaults/systems/bash-defensive-patterns/SKILL.md +539 -0
- package/dist/skills/defaults/systems/bats-testing-patterns/SKILL.md +631 -0
- package/dist/skills/defaults/systems/go-concurrency-patterns.md +657 -0
- package/dist/skills/defaults/systems/memory-safety-patterns.md +605 -0
- package/dist/skills/defaults/systems/rust-async-patterns.md +519 -0
- package/dist/skills/defaults/systems/shellcheck-configuration/SKILL.md +456 -0
- package/dist/skills/defaults/team-collaboration/multi-reviewer-patterns.md +126 -0
- package/dist/skills/defaults/team-collaboration/parallel-feature-development.md +151 -0
- package/dist/skills/defaults/testing/javascript-testing-patterns.md +1021 -0
- package/dist/skills/defaults/testing/python-testing-patterns.md +351 -0
- package/dist/skills/defaults/testing/testing.md +332 -0
- package/dist/skills/defaults/workflows/context-driven-development.md +384 -0
- package/dist/skills/defaults/workflows/track-management.md +592 -0
- package/dist/skills/defaults/workflows/workflow-patterns.md +622 -0
- package/dist/skills/index.d.ts +11 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +129 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/utils/character.js +4 -4
- package/dist/utils/character.js.map +1 -1
- package/dist/utils/inputbar.d.ts.map +1 -1
- package/dist/utils/inputbar.js +7 -0
- package/dist/utils/inputbar.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: async-patterns
|
|
3
|
+
description: Master async/await patterns in Python for building high-performance concurrent applications.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Async Python Patterns — CoWorker Edition
|
|
7
|
+
|
|
8
|
+
Build performant, concurrent Python applications.
|
|
9
|
+
|
|
10
|
+
## When to Use This Skill
|
|
11
|
+
|
|
12
|
+
- Building async APIs
|
|
13
|
+
- Concurrent data processing
|
|
14
|
+
- Background job systems
|
|
15
|
+
- WebSocket servers
|
|
16
|
+
|
|
17
|
+
## Core Concepts
|
|
18
|
+
|
|
19
|
+
### 1. Async Basics
|
|
20
|
+
|
|
21
|
+
```python
|
|
22
|
+
import asyncio
|
|
23
|
+
|
|
24
|
+
async def fetch_data(url: str) -> dict:
|
|
25
|
+
async with aiohttp.ClientSession() as session:
|
|
26
|
+
async with session.get(url) as response:
|
|
27
|
+
return await response.json()
|
|
28
|
+
|
|
29
|
+
async def main():
|
|
30
|
+
# Sequential
|
|
31
|
+
result1 = await fetch_data("https://api1.example.com")
|
|
32
|
+
result2 = await fetch_data("https://api2.example.com")
|
|
33
|
+
|
|
34
|
+
# Concurrent - gather
|
|
35
|
+
results = await asyncio.gather(
|
|
36
|
+
fetch_data("https://api1.example.com"),
|
|
37
|
+
fetch_data("https://api2.example.com"),
|
|
38
|
+
fetch_data("https://api3.example.com")
|
|
39
|
+
)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### 2. Async Context Managers
|
|
43
|
+
|
|
44
|
+
```python
|
|
45
|
+
class DatabaseConnection:
|
|
46
|
+
def __init__(self, dsn: str):
|
|
47
|
+
self.dsn = dsn
|
|
48
|
+
self.connection = None
|
|
49
|
+
|
|
50
|
+
async def __aenter__(self):
|
|
51
|
+
self.connection = await asyncpg.connect(self.dsn)
|
|
52
|
+
return self.connection
|
|
53
|
+
|
|
54
|
+
async def __aexit__(self, exc_type, exc_val, exc_tb):
|
|
55
|
+
if self.connection:
|
|
56
|
+
await self.connection.close()
|
|
57
|
+
|
|
58
|
+
# Usage
|
|
59
|
+
async def query_data():
|
|
60
|
+
async with DatabaseConnection(DSN) as conn:
|
|
61
|
+
result = await conn.fetch("SELECT * FROM users")
|
|
62
|
+
return result
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### 3. Semaphores for Rate Limiting
|
|
66
|
+
|
|
67
|
+
```python
|
|
68
|
+
import asyncio
|
|
69
|
+
from aiohttp import ClientSession
|
|
70
|
+
|
|
71
|
+
# Limit concurrent requests
|
|
72
|
+
semaphore = asyncio.Semaphore(10)
|
|
73
|
+
|
|
74
|
+
async def fetch_with_limit(session: ClientSession, url: str):
|
|
75
|
+
async with semaphore:
|
|
76
|
+
async with session.get(url) as response:
|
|
77
|
+
return await response.json()
|
|
78
|
+
|
|
79
|
+
async def fetch_all(urls: list[str]):
|
|
80
|
+
async with ClientSession() as session:
|
|
81
|
+
tasks = [fetch_with_limit(session, url) for url in urls]
|
|
82
|
+
return await asyncio.gather(*tasks)
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 4. Background Tasks
|
|
86
|
+
|
|
87
|
+
```python
|
|
88
|
+
import asyncio
|
|
89
|
+
from datetime import datetime
|
|
90
|
+
|
|
91
|
+
class BackgroundTaskRunner:
|
|
92
|
+
def __init__(self):
|
|
93
|
+
self.tasks: set[asyncio.Task] = set()
|
|
94
|
+
|
|
95
|
+
def schedule(self, coro):
|
|
96
|
+
task = asyncio.create_task(coro)
|
|
97
|
+
self.tasks.add(task)
|
|
98
|
+
task.add_done_callback(self.tasks.discard)
|
|
99
|
+
return task
|
|
100
|
+
|
|
101
|
+
async def wait_all(self):
|
|
102
|
+
await asyncio.gather(*self.tasks)
|
|
103
|
+
|
|
104
|
+
# Usage
|
|
105
|
+
runner = BackgroundTaskRunner()
|
|
106
|
+
|
|
107
|
+
def send_notification(user_id: str, message: str):
|
|
108
|
+
async def _send():
|
|
109
|
+
await asyncio.sleep(1) # Simulate sending
|
|
110
|
+
print(f"Sent to {user_id}: {message}")
|
|
111
|
+
|
|
112
|
+
return runner.schedule(_send())
|
|
113
|
+
|
|
114
|
+
async def process_order(order_id: str):
|
|
115
|
+
# Process immediately
|
|
116
|
+
await update_order_status(order_id, "processing")
|
|
117
|
+
|
|
118
|
+
# Schedule background task
|
|
119
|
+
send_notification(order_id, "Your order is being processed!")
|
|
120
|
+
|
|
121
|
+
return {"status": "processing"}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### 5. Async Generators
|
|
125
|
+
|
|
126
|
+
```python
|
|
127
|
+
async def fetch_pages(url: str, page_size: int = 100):
|
|
128
|
+
"""Stream paginated results."""
|
|
129
|
+
offset = 0
|
|
130
|
+
while True:
|
|
131
|
+
rows = await db.fetch(
|
|
132
|
+
"SELECT * FROM orders LIMIT $1 OFFSET $2",
|
|
133
|
+
page_size, offset
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
if not rows:
|
|
137
|
+
break
|
|
138
|
+
|
|
139
|
+
for row in rows:
|
|
140
|
+
yield row
|
|
141
|
+
|
|
142
|
+
offset += page_size
|
|
143
|
+
|
|
144
|
+
# Usage - process streaming
|
|
145
|
+
async def process_all_orders():
|
|
146
|
+
async for order in fetch_pages("https://api.example.com/orders"):
|
|
147
|
+
await process_order(order)
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### 6. Producer-Consumer Pattern
|
|
151
|
+
|
|
152
|
+
```python
|
|
153
|
+
import asyncio
|
|
154
|
+
from collections import deque
|
|
155
|
+
|
|
156
|
+
class AsyncQueue:
|
|
157
|
+
def __init__(self, maxsize: int = 100):
|
|
158
|
+
self.queue: asyncio.Queue = asyncio.Queue(maxsize=maxsize)
|
|
159
|
+
|
|
160
|
+
async def produce(self, items: list):
|
|
161
|
+
for item in items:
|
|
162
|
+
await self.queue.put(item)
|
|
163
|
+
await self.queue.put(None) # Sentinel
|
|
164
|
+
|
|
165
|
+
async def consume(self, processor):
|
|
166
|
+
while True:
|
|
167
|
+
item = await self.queue.get()
|
|
168
|
+
if item is None:
|
|
169
|
+
self.queue.task_done()
|
|
170
|
+
break
|
|
171
|
+
await processor(item)
|
|
172
|
+
self.queue.task_done()
|
|
173
|
+
|
|
174
|
+
async def run(self, items: list, processor):
|
|
175
|
+
await asyncio.gather(
|
|
176
|
+
self.produce(items),
|
|
177
|
+
self.consume(processor)
|
|
178
|
+
)
|
|
179
|
+
|
|
180
|
+
# Usage
|
|
181
|
+
queue = AsyncQueue(maxsize=50)
|
|
182
|
+
|
|
183
|
+
async def process_item(item: dict):
|
|
184
|
+
await asyncio.sleep(0.1) # Simulate work
|
|
185
|
+
return item["id"]
|
|
186
|
+
|
|
187
|
+
await queue.run(large_dataset, process_item)
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### 7. Async Context with Locks
|
|
191
|
+
|
|
192
|
+
```python
|
|
193
|
+
import asyncio
|
|
194
|
+
|
|
195
|
+
class RateLimiter:
|
|
196
|
+
def __init__(self, max_concurrent: int = 5):
|
|
197
|
+
self.semaphore = asyncio.Semaphore(max_concurrent)
|
|
198
|
+
self.lock = asyncio.Lock()
|
|
199
|
+
self.active = 0
|
|
200
|
+
|
|
201
|
+
async def __aenter__(self):
|
|
202
|
+
await self.semaphore.acquire()
|
|
203
|
+
async with self.lock:
|
|
204
|
+
self.active += 1
|
|
205
|
+
return self
|
|
206
|
+
|
|
207
|
+
async def __aexit__(self, *args):
|
|
208
|
+
self.semaphore.release()
|
|
209
|
+
async with self.lock:
|
|
210
|
+
self.active -= 1
|
|
211
|
+
|
|
212
|
+
# Usage - limit concurrent API calls
|
|
213
|
+
async def call_api(url: str):
|
|
214
|
+
async with RateLimiter(max_concurrent=10):
|
|
215
|
+
async with aiohttp.ClientSession() as session:
|
|
216
|
+
async with session.get(url) as resp:
|
|
217
|
+
return await resp.json()
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
## Best Practices
|
|
221
|
+
|
|
222
|
+
1. **Use asyncio.gather** - Concurrent execution
|
|
223
|
+
2. **Avoid blocking calls** - Use async libraries
|
|
224
|
+
3. **Semaphores** - Limit concurrency
|
|
225
|
+
4. **Context managers** - Clean resources
|
|
226
|
+
5. **Async generators** - Memory efficient
|
|
227
|
+
6. **Proper cancellation** - Handle TaskGroup
|
|
228
|
+
7. **Connection pooling** - Reuse connections
|
|
229
|
+
|
|
230
|
+
## Common Mistakes
|
|
231
|
+
|
|
232
|
+
- Blocking sync calls in async code
|
|
233
|
+
- Not using connection pools
|
|
234
|
+
- Too many concurrent tasks
|
|
235
|
+
- Forgetting await
|
|
236
|
+
- Race conditions with shared state
|
|
237
|
+
- Not handling exceptions
|