@heytherevibin/skillforge 0.2.1

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.
Files changed (402) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/CODE_OF_CONDUCT.md +34 -0
  3. package/CONTRIBUTING.md +38 -0
  4. package/LICENSE +21 -0
  5. package/README.md +337 -0
  6. package/RELEASING.md +93 -0
  7. package/SECURITY.md +31 -0
  8. package/STRATEGY.md +26 -0
  9. package/bin/cli.js +547 -0
  10. package/lib/packs.js +184 -0
  11. package/package.json +38 -0
  12. package/python/app/__init__.py +0 -0
  13. package/python/app/__pycache__/__init__.cpython-312.pyc +0 -0
  14. package/python/app/__pycache__/auth.cpython-312.pyc +0 -0
  15. package/python/app/__pycache__/main.cpython-312.pyc +0 -0
  16. package/python/app/auth.py +63 -0
  17. package/python/app/cli.py +78 -0
  18. package/python/app/db_paths.py +26 -0
  19. package/python/app/events_cli.py +175 -0
  20. package/python/app/main.py +647 -0
  21. package/python/app/materialize.py +138 -0
  22. package/python/app/mcp_server.py +610 -0
  23. package/python/app/route_cli.py +117 -0
  24. package/python/requirements-dev.txt +1 -0
  25. package/python/requirements.txt +7 -0
  26. package/python/tests/test_db_paths.py +41 -0
  27. package/skills/accessibility/SKILL.md +145 -0
  28. package/skills/agent-architecture-audit/SKILL.md +256 -0
  29. package/skills/agent-eval/SKILL.md +144 -0
  30. package/skills/agent-harness-construction/SKILL.md +72 -0
  31. package/skills/agent-introspection-debugging/SKILL.md +152 -0
  32. package/skills/agent-payment-x402/SKILL.md +224 -0
  33. package/skills/agent-sort/SKILL.md +214 -0
  34. package/skills/agentic-engineering/SKILL.md +62 -0
  35. package/skills/agentic-os/SKILL.md +386 -0
  36. package/skills/ai-first-engineering/SKILL.md +50 -0
  37. package/skills/ai-regression-testing/SKILL.md +384 -0
  38. package/skills/android-clean-architecture/SKILL.md +338 -0
  39. package/skills/angular-developer/SKILL.md +153 -0
  40. package/skills/angular-developer/references/angular-animations.md +160 -0
  41. package/skills/angular-developer/references/angular-aria.md +410 -0
  42. package/skills/angular-developer/references/cli.md +86 -0
  43. package/skills/angular-developer/references/component-harnesses.md +59 -0
  44. package/skills/angular-developer/references/component-styling.md +91 -0
  45. package/skills/angular-developer/references/components.md +117 -0
  46. package/skills/angular-developer/references/creating-services.md +97 -0
  47. package/skills/angular-developer/references/data-resolvers.md +69 -0
  48. package/skills/angular-developer/references/define-routes.md +67 -0
  49. package/skills/angular-developer/references/defining-providers.md +72 -0
  50. package/skills/angular-developer/references/di-fundamentals.md +120 -0
  51. package/skills/angular-developer/references/e2e-testing.md +56 -0
  52. package/skills/angular-developer/references/effects.md +83 -0
  53. package/skills/angular-developer/references/hierarchical-injectors.md +43 -0
  54. package/skills/angular-developer/references/host-elements.md +80 -0
  55. package/skills/angular-developer/references/injection-context.md +63 -0
  56. package/skills/angular-developer/references/inputs.md +101 -0
  57. package/skills/angular-developer/references/linked-signal.md +59 -0
  58. package/skills/angular-developer/references/loading-strategies.md +61 -0
  59. package/skills/angular-developer/references/mcp.md +108 -0
  60. package/skills/angular-developer/references/navigate-to-routes.md +69 -0
  61. package/skills/angular-developer/references/outputs.md +86 -0
  62. package/skills/angular-developer/references/reactive-forms.md +122 -0
  63. package/skills/angular-developer/references/rendering-strategies.md +44 -0
  64. package/skills/angular-developer/references/resource.md +77 -0
  65. package/skills/angular-developer/references/route-animations.md +56 -0
  66. package/skills/angular-developer/references/route-guards.md +52 -0
  67. package/skills/angular-developer/references/router-lifecycle.md +45 -0
  68. package/skills/angular-developer/references/router-testing.md +87 -0
  69. package/skills/angular-developer/references/show-routes-with-outlets.md +68 -0
  70. package/skills/angular-developer/references/signal-forms.md +795 -0
  71. package/skills/angular-developer/references/signals-overview.md +94 -0
  72. package/skills/angular-developer/references/tailwind-css.md +69 -0
  73. package/skills/angular-developer/references/template-driven-forms.md +114 -0
  74. package/skills/angular-developer/references/testing-fundamentals.md +65 -0
  75. package/skills/api-connector-builder/SKILL.md +120 -0
  76. package/skills/api-design/SKILL.md +522 -0
  77. package/skills/architecture-decision-records/SKILL.md +178 -0
  78. package/skills/article-writing/SKILL.md +78 -0
  79. package/skills/automation-audit-ops/SKILL.md +141 -0
  80. package/skills/autonomous-agent-harness/SKILL.md +272 -0
  81. package/skills/autonomous-loops/SKILL.md +609 -0
  82. package/skills/backend-patterns/SKILL.md +560 -0
  83. package/skills/benchmark/SKILL.md +92 -0
  84. package/skills/blueprint/SKILL.md +104 -0
  85. package/skills/browser-qa/SKILL.md +86 -0
  86. package/skills/bun-runtime/SKILL.md +83 -0
  87. package/skills/canary-watch/SKILL.md +98 -0
  88. package/skills/carrier-relationship-management/SKILL.md +211 -0
  89. package/skills/cisco-ios-patterns/SKILL.md +163 -0
  90. package/skills/ck/SKILL.md +147 -0
  91. package/skills/ck/commands/forget.mjs +44 -0
  92. package/skills/ck/commands/info.mjs +24 -0
  93. package/skills/ck/commands/init.mjs +143 -0
  94. package/skills/ck/commands/list.mjs +40 -0
  95. package/skills/ck/commands/migrate.mjs +202 -0
  96. package/skills/ck/commands/resume.mjs +36 -0
  97. package/skills/ck/commands/save.mjs +210 -0
  98. package/skills/ck/commands/shared.mjs +387 -0
  99. package/skills/ck/hooks/session-start.mjs +224 -0
  100. package/skills/claude-devfleet/SKILL.md +103 -0
  101. package/skills/click-path-audit/SKILL.md +244 -0
  102. package/skills/clickhouse-io/SKILL.md +438 -0
  103. package/skills/code-tour/SKILL.md +235 -0
  104. package/skills/codebase-onboarding/SKILL.md +232 -0
  105. package/skills/coding-standards/SKILL.md +548 -0
  106. package/skills/compose-multiplatform-patterns/SKILL.md +298 -0
  107. package/skills/connections-optimizer/SKILL.md +188 -0
  108. package/skills/content-engine/SKILL.md +126 -0
  109. package/skills/content-hash-cache-pattern/SKILL.md +160 -0
  110. package/skills/context-budget/SKILL.md +134 -0
  111. package/skills/continuous-agent-loop/SKILL.md +44 -0
  112. package/skills/continuous-learning/SKILL.md +129 -0
  113. package/skills/continuous-learning/config.json +18 -0
  114. package/skills/continuous-learning/evaluate-session.sh +69 -0
  115. package/skills/continuous-learning-v2/SKILL.md +358 -0
  116. package/skills/continuous-learning-v2/agents/observer-loop.sh +322 -0
  117. package/skills/continuous-learning-v2/agents/observer.md +198 -0
  118. package/skills/continuous-learning-v2/agents/session-guardian.sh +150 -0
  119. package/skills/continuous-learning-v2/agents/start-observer.sh +248 -0
  120. package/skills/continuous-learning-v2/config.json +8 -0
  121. package/skills/continuous-learning-v2/hooks/observe.sh +476 -0
  122. package/skills/continuous-learning-v2/scripts/detect-project.sh +288 -0
  123. package/skills/continuous-learning-v2/scripts/instinct-cli.py +1519 -0
  124. package/skills/continuous-learning-v2/scripts/lib/homunculus-dir.sh +31 -0
  125. package/skills/continuous-learning-v2/scripts/migrate-homunculus.sh +62 -0
  126. package/skills/continuous-learning-v2/scripts/test_parse_instinct.py +1018 -0
  127. package/skills/cost-aware-llm-pipeline/SKILL.md +182 -0
  128. package/skills/cost-tracking/SKILL.md +147 -0
  129. package/skills/council/SKILL.md +202 -0
  130. package/skills/cpp-coding-standards/SKILL.md +722 -0
  131. package/skills/cpp-testing/SKILL.md +323 -0
  132. package/skills/crosspost/SKILL.md +110 -0
  133. package/skills/csharp-testing/SKILL.md +320 -0
  134. package/skills/customer-billing-ops/SKILL.md +139 -0
  135. package/skills/customs-trade-compliance/SKILL.md +262 -0
  136. package/skills/dart-flutter-patterns/SKILL.md +562 -0
  137. package/skills/dashboard-builder/SKILL.md +108 -0
  138. package/skills/data-scraper-agent/SKILL.md +764 -0
  139. package/skills/database-migrations/SKILL.md +428 -0
  140. package/skills/deep-research/SKILL.md +158 -0
  141. package/skills/defi-amm-security/SKILL.md +166 -0
  142. package/skills/deployment-patterns/SKILL.md +426 -0
  143. package/skills/design-system/SKILL.md +81 -0
  144. package/skills/django-celery/SKILL.md +456 -0
  145. package/skills/django-patterns/SKILL.md +733 -0
  146. package/skills/django-security/SKILL.md +592 -0
  147. package/skills/django-tdd/SKILL.md +728 -0
  148. package/skills/django-verification/SKILL.md +468 -0
  149. package/skills/dmux-workflows/SKILL.md +190 -0
  150. package/skills/docker-patterns/SKILL.md +363 -0
  151. package/skills/documentation-lookup/SKILL.md +89 -0
  152. package/skills/dotnet-patterns/SKILL.md +320 -0
  153. package/skills/e2e-testing/SKILL.md +325 -0
  154. package/skills/email-ops/SKILL.md +120 -0
  155. package/skills/energy-procurement/SKILL.md +227 -0
  156. package/skills/enterprise-agent-ops/SKILL.md +49 -0
  157. package/skills/error-handling/SKILL.md +375 -0
  158. package/skills/eval-harness/SKILL.md +269 -0
  159. package/skills/evm-token-decimals/SKILL.md +130 -0
  160. package/skills/exa-search/SKILL.md +106 -0
  161. package/skills/fal-ai-media/SKILL.md +287 -0
  162. package/skills/fastapi-patterns/SKILL.md +327 -0
  163. package/skills/finance-billing-ops/SKILL.md +126 -0
  164. package/skills/flox-environments/SKILL.md +496 -0
  165. package/skills/flutter-dart-code-review/SKILL.md +434 -0
  166. package/skills/foundation-models-on-device/SKILL.md +243 -0
  167. package/skills/frontend-design-direction/SKILL.md +92 -0
  168. package/skills/frontend-patterns/SKILL.md +641 -0
  169. package/skills/frontend-slides/SKILL.md +183 -0
  170. package/skills/frontend-slides/STYLE_PRESETS.md +330 -0
  171. package/skills/frontend-slides/animation-patterns.md +122 -0
  172. package/skills/frontend-slides/html-template.md +419 -0
  173. package/skills/frontend-slides/scripts/export-pdf.sh +418 -0
  174. package/skills/frontend-slides/scripts/extract-pptx.py +96 -0
  175. package/skills/frontend-slides/viewport-base.css +153 -0
  176. package/skills/fsharp-testing/SKILL.md +279 -0
  177. package/skills/gan-style-harness/SKILL.md +278 -0
  178. package/skills/gateguard/SKILL.md +125 -0
  179. package/skills/git-workflow/SKILL.md +714 -0
  180. package/skills/github-ops/SKILL.md +143 -0
  181. package/skills/golang-patterns/SKILL.md +673 -0
  182. package/skills/golang-testing/SKILL.md +719 -0
  183. package/skills/google-workspace-ops/SKILL.md +94 -0
  184. package/skills/healthcare-cdss-patterns/SKILL.md +245 -0
  185. package/skills/healthcare-emr-patterns/SKILL.md +159 -0
  186. package/skills/healthcare-eval-harness/SKILL.md +207 -0
  187. package/skills/healthcare-phi-compliance/SKILL.md +145 -0
  188. package/skills/hermes-imports/SKILL.md +87 -0
  189. package/skills/hexagonal-architecture/SKILL.md +275 -0
  190. package/skills/hipaa-compliance/SKILL.md +78 -0
  191. package/skills/homelab-network-readiness/SKILL.md +169 -0
  192. package/skills/homelab-network-setup/SKILL.md +129 -0
  193. package/skills/homelab-pihole-dns/SKILL.md +274 -0
  194. package/skills/homelab-vlan-segmentation/SKILL.md +311 -0
  195. package/skills/homelab-wireguard-vpn/SKILL.md +305 -0
  196. package/skills/hookify-rules/SKILL.md +128 -0
  197. package/skills/inventory-demand-planning/SKILL.md +246 -0
  198. package/skills/investor-materials/SKILL.md +95 -0
  199. package/skills/investor-outreach/SKILL.md +90 -0
  200. package/skills/ios-icon-gen/SKILL.md +157 -0
  201. package/skills/ios-icon-gen/scripts/generate_icons.swift +258 -0
  202. package/skills/ios-icon-gen/scripts/iconify_gen.sh +235 -0
  203. package/skills/iterative-retrieval/SKILL.md +209 -0
  204. package/skills/java-coding-standards/SKILL.md +382 -0
  205. package/skills/jira-integration/SKILL.md +292 -0
  206. package/skills/jpa-patterns/SKILL.md +150 -0
  207. package/skills/knowledge-ops/SKILL.md +153 -0
  208. package/skills/kotlin-coroutines-flows/SKILL.md +283 -0
  209. package/skills/kotlin-exposed-patterns/SKILL.md +718 -0
  210. package/skills/kotlin-ktor-patterns/SKILL.md +688 -0
  211. package/skills/kotlin-patterns/SKILL.md +710 -0
  212. package/skills/kotlin-testing/SKILL.md +823 -0
  213. package/skills/laravel-patterns/SKILL.md +414 -0
  214. package/skills/laravel-plugin-discovery/SKILL.md +228 -0
  215. package/skills/laravel-security/SKILL.md +284 -0
  216. package/skills/laravel-tdd/SKILL.md +282 -0
  217. package/skills/laravel-verification/SKILL.md +178 -0
  218. package/skills/lead-intelligence/SKILL.md +320 -0
  219. package/skills/lead-intelligence/agents/enrichment-agent.md +85 -0
  220. package/skills/lead-intelligence/agents/mutual-mapper.md +75 -0
  221. package/skills/lead-intelligence/agents/outreach-drafter.md +98 -0
  222. package/skills/lead-intelligence/agents/signal-scorer.md +60 -0
  223. package/skills/liquid-glass-design/SKILL.md +279 -0
  224. package/skills/llm-trading-agent-security/SKILL.md +146 -0
  225. package/skills/logistics-exception-management/SKILL.md +221 -0
  226. package/skills/make-interfaces-feel-better/SKILL.md +151 -0
  227. package/skills/manim-video/SKILL.md +88 -0
  228. package/skills/manim-video/assets/network_graph_scene.py +52 -0
  229. package/skills/market-research/SKILL.md +74 -0
  230. package/skills/mcp-server-patterns/SKILL.md +68 -0
  231. package/skills/messages-ops/SKILL.md +103 -0
  232. package/skills/mle-workflow/SKILL.md +345 -0
  233. package/skills/motion-advanced/SKILL.md +596 -0
  234. package/skills/motion-foundations/SKILL.md +299 -0
  235. package/skills/motion-patterns/SKILL.md +435 -0
  236. package/skills/motion-ui/SKILL.md +574 -0
  237. package/skills/mysql-patterns/SKILL.md +411 -0
  238. package/skills/nanoclaw-repl/SKILL.md +32 -0
  239. package/skills/nestjs-patterns/SKILL.md +229 -0
  240. package/skills/netmiko-ssh-automation/SKILL.md +173 -0
  241. package/skills/network-bgp-diagnostics/SKILL.md +167 -0
  242. package/skills/network-config-validation/SKILL.md +210 -0
  243. package/skills/network-interface-health/SKILL.md +152 -0
  244. package/skills/nextjs-turbopack/SKILL.md +43 -0
  245. package/skills/nodejs-keccak256/SKILL.md +102 -0
  246. package/skills/nutrient-document-processing/SKILL.md +166 -0
  247. package/skills/nuxt4-patterns/SKILL.md +99 -0
  248. package/skills/openclaw-persona-forge/SKILL.md +288 -0
  249. package/skills/openclaw-persona-forge/gacha.py +224 -0
  250. package/skills/openclaw-persona-forge/gacha.sh +5 -0
  251. package/skills/openclaw-persona-forge/references/avatar-style.md +124 -0
  252. package/skills/openclaw-persona-forge/references/boundary-rules.md +53 -0
  253. package/skills/openclaw-persona-forge/references/error-handling.md +53 -0
  254. package/skills/openclaw-persona-forge/references/identity-tension.md +48 -0
  255. package/skills/openclaw-persona-forge/references/naming-system.md +39 -0
  256. package/skills/openclaw-persona-forge/references/output-template.md +166 -0
  257. package/skills/opensource-pipeline/SKILL.md +254 -0
  258. package/skills/perl-patterns/SKILL.md +503 -0
  259. package/skills/perl-security/SKILL.md +502 -0
  260. package/skills/perl-testing/SKILL.md +474 -0
  261. package/skills/plan-orchestrate/SKILL.md +253 -0
  262. package/skills/plankton-code-quality/SKILL.md +236 -0
  263. package/skills/postgres-patterns/SKILL.md +146 -0
  264. package/skills/product-capability/SKILL.md +140 -0
  265. package/skills/product-lens/SKILL.md +91 -0
  266. package/skills/production-audit/SKILL.md +206 -0
  267. package/skills/production-scheduling/SKILL.md +237 -0
  268. package/skills/project-flow-ops/SKILL.md +110 -0
  269. package/skills/prompt-optimizer/SKILL.md +398 -0
  270. package/skills/python-patterns/SKILL.md +749 -0
  271. package/skills/python-testing/SKILL.md +815 -0
  272. package/skills/pytorch-patterns/SKILL.md +395 -0
  273. package/skills/quality-nonconformance/SKILL.md +259 -0
  274. package/skills/quarkus-patterns/SKILL.md +721 -0
  275. package/skills/quarkus-security/SKILL.md +466 -0
  276. package/skills/quarkus-tdd/SKILL.md +810 -0
  277. package/skills/quarkus-verification/SKILL.md +478 -0
  278. package/skills/ralphinho-rfc-pipeline/SKILL.md +66 -0
  279. package/skills/redis-patterns/SKILL.md +402 -0
  280. package/skills/regex-vs-llm-structured-text/SKILL.md +219 -0
  281. package/skills/remotion-video-creation/SKILL.md +43 -0
  282. package/skills/remotion-video-creation/rules/3d.md +86 -0
  283. package/skills/remotion-video-creation/rules/animations.md +29 -0
  284. package/skills/remotion-video-creation/rules/assets/charts-bar-chart.tsx +173 -0
  285. package/skills/remotion-video-creation/rules/assets/text-animations-typewriter.tsx +100 -0
  286. package/skills/remotion-video-creation/rules/assets/text-animations-word-highlight.tsx +108 -0
  287. package/skills/remotion-video-creation/rules/assets.md +78 -0
  288. package/skills/remotion-video-creation/rules/audio.md +172 -0
  289. package/skills/remotion-video-creation/rules/calculate-metadata.md +104 -0
  290. package/skills/remotion-video-creation/rules/can-decode.md +75 -0
  291. package/skills/remotion-video-creation/rules/charts.md +58 -0
  292. package/skills/remotion-video-creation/rules/compositions.md +146 -0
  293. package/skills/remotion-video-creation/rules/display-captions.md +126 -0
  294. package/skills/remotion-video-creation/rules/extract-frames.md +229 -0
  295. package/skills/remotion-video-creation/rules/fonts.md +152 -0
  296. package/skills/remotion-video-creation/rules/get-audio-duration.md +58 -0
  297. package/skills/remotion-video-creation/rules/get-video-dimensions.md +68 -0
  298. package/skills/remotion-video-creation/rules/get-video-duration.md +58 -0
  299. package/skills/remotion-video-creation/rules/gifs.md +138 -0
  300. package/skills/remotion-video-creation/rules/images.md +130 -0
  301. package/skills/remotion-video-creation/rules/import-srt-captions.md +67 -0
  302. package/skills/remotion-video-creation/rules/lottie.md +67 -0
  303. package/skills/remotion-video-creation/rules/measuring-dom-nodes.md +34 -0
  304. package/skills/remotion-video-creation/rules/measuring-text.md +143 -0
  305. package/skills/remotion-video-creation/rules/sequencing.md +106 -0
  306. package/skills/remotion-video-creation/rules/tailwind.md +11 -0
  307. package/skills/remotion-video-creation/rules/text-animations.md +20 -0
  308. package/skills/remotion-video-creation/rules/timing.md +179 -0
  309. package/skills/remotion-video-creation/rules/transcribe-captions.md +19 -0
  310. package/skills/remotion-video-creation/rules/transitions.md +122 -0
  311. package/skills/remotion-video-creation/rules/trimming.md +52 -0
  312. package/skills/remotion-video-creation/rules/videos.md +171 -0
  313. package/skills/repo-scan/SKILL.md +78 -0
  314. package/skills/research-ops/SKILL.md +111 -0
  315. package/skills/returns-reverse-logistics/SKILL.md +239 -0
  316. package/skills/rules-distill/SKILL.md +263 -0
  317. package/skills/rules-distill/scripts/scan-rules.sh +58 -0
  318. package/skills/rules-distill/scripts/scan-skills.sh +129 -0
  319. package/skills/rust-patterns/SKILL.md +498 -0
  320. package/skills/rust-testing/SKILL.md +499 -0
  321. package/skills/safety-guard/SKILL.md +74 -0
  322. package/skills/santa-method/SKILL.md +306 -0
  323. package/skills/scientific-db-pubmed-database/SKILL.md +175 -0
  324. package/skills/scientific-db-uspto-database/SKILL.md +177 -0
  325. package/skills/scientific-pkg-gget/SKILL.md +166 -0
  326. package/skills/scientific-thinking-literature-review/SKILL.md +192 -0
  327. package/skills/scientific-thinking-scholar-evaluation/SKILL.md +160 -0
  328. package/skills/search-first/SKILL.md +181 -0
  329. package/skills/security-bounty-hunter/SKILL.md +99 -0
  330. package/skills/security-review/SKILL.md +502 -0
  331. package/skills/security-review/cloud-infrastructure-security.md +361 -0
  332. package/skills/seo/SKILL.md +153 -0
  333. package/skills/skill-comply/SKILL.md +57 -0
  334. package/skills/skill-comply/fixtures/compliant_trace.jsonl +5 -0
  335. package/skills/skill-comply/fixtures/noncompliant_trace.jsonl +3 -0
  336. package/skills/skill-comply/fixtures/tdd_spec.yaml +44 -0
  337. package/skills/skill-comply/prompts/classifier.md +24 -0
  338. package/skills/skill-comply/prompts/scenario_generator.md +62 -0
  339. package/skills/skill-comply/prompts/spec_generator.md +42 -0
  340. package/skills/skill-comply/pyproject.toml +15 -0
  341. package/skills/skill-comply/scripts/__init__.py +0 -0
  342. package/skills/skill-comply/scripts/classifier.py +85 -0
  343. package/skills/skill-comply/scripts/grader.py +124 -0
  344. package/skills/skill-comply/scripts/parser.py +107 -0
  345. package/skills/skill-comply/scripts/report.py +170 -0
  346. package/skills/skill-comply/scripts/run.py +127 -0
  347. package/skills/skill-comply/scripts/runner.py +186 -0
  348. package/skills/skill-comply/scripts/scenario_generator.py +70 -0
  349. package/skills/skill-comply/scripts/spec_generator.py +72 -0
  350. package/skills/skill-comply/scripts/utils.py +13 -0
  351. package/skills/skill-comply/tests/test_grader.py +197 -0
  352. package/skills/skill-comply/tests/test_parser.py +90 -0
  353. package/skills/skill-comply/tests/test_runner.py +172 -0
  354. package/skills/skill-scout/SKILL.md +139 -0
  355. package/skills/skill-stocktake/SKILL.md +193 -0
  356. package/skills/skill-stocktake/scripts/quick-diff.sh +87 -0
  357. package/skills/skill-stocktake/scripts/save-results.sh +56 -0
  358. package/skills/skill-stocktake/scripts/scan.sh +170 -0
  359. package/skills/social-graph-ranker/SKILL.md +153 -0
  360. package/skills/springboot-patterns/SKILL.md +313 -0
  361. package/skills/springboot-security/SKILL.md +271 -0
  362. package/skills/springboot-tdd/SKILL.md +157 -0
  363. package/skills/springboot-verification/SKILL.md +230 -0
  364. package/skills/strategic-compact/SKILL.md +129 -0
  365. package/skills/strategic-compact/suggest-compact.sh +54 -0
  366. package/skills/swift-actor-persistence/SKILL.md +142 -0
  367. package/skills/swift-concurrency-6-2/SKILL.md +216 -0
  368. package/skills/swift-protocol-di-testing/SKILL.md +189 -0
  369. package/skills/swiftui-patterns/SKILL.md +259 -0
  370. package/skills/tdd-workflow/SKILL.md +462 -0
  371. package/skills/team-builder/SKILL.md +166 -0
  372. package/skills/terminal-ops/SKILL.md +108 -0
  373. package/skills/tinystruct-patterns/SKILL.md +130 -0
  374. package/skills/tinystruct-patterns/references/architecture.md +77 -0
  375. package/skills/tinystruct-patterns/references/data-handling.md +35 -0
  376. package/skills/tinystruct-patterns/references/routing.md +57 -0
  377. package/skills/tinystruct-patterns/references/system-usage.md +74 -0
  378. package/skills/tinystruct-patterns/references/testing.md +59 -0
  379. package/skills/token-budget-advisor/SKILL.md +133 -0
  380. package/skills/ui-demo/SKILL.md +464 -0
  381. package/skills/ui-to-vue/SKILL.md +134 -0
  382. package/skills/unified-notifications-ops/SKILL.md +186 -0
  383. package/skills/verification-loop/SKILL.md +125 -0
  384. package/skills/video-editing/SKILL.md +309 -0
  385. package/skills/videodb/SKILL.md +373 -0
  386. package/skills/videodb/reference/api-reference.md +550 -0
  387. package/skills/videodb/reference/capture-reference.md +407 -0
  388. package/skills/videodb/reference/capture.md +101 -0
  389. package/skills/videodb/reference/editor.md +443 -0
  390. package/skills/videodb/reference/generative.md +331 -0
  391. package/skills/videodb/reference/rtstream-reference.md +564 -0
  392. package/skills/videodb/reference/rtstream.md +65 -0
  393. package/skills/videodb/reference/search.md +230 -0
  394. package/skills/videodb/reference/streaming.md +406 -0
  395. package/skills/videodb/reference/use-cases.md +118 -0
  396. package/skills/videodb/scripts/ws_listener.py +282 -0
  397. package/skills/visa-doc-translate/README.md +86 -0
  398. package/skills/visa-doc-translate/SKILL.md +117 -0
  399. package/skills/vite-patterns/SKILL.md +448 -0
  400. package/skills/windows-desktop-e2e/SKILL.md +787 -0
  401. package/skills/workspace-surface-audit/SKILL.md +124 -0
  402. package/skills/x-api/SKILL.md +233 -0
@@ -0,0 +1,456 @@
1
+ ---
2
+ name: django-celery
3
+ description: Django + Celery async task patterns — configuration, task design, beat scheduling, retries, canvas workflows, monitoring, and testing. Use when adding background jobs, scheduled tasks, or async processing to a Django app.
4
+ ---
5
+
6
+ # Django + Celery Async Task Patterns
7
+
8
+ Production-grade patterns for background task processing in Django using Celery with Redis or RabbitMQ.
9
+
10
+ ## When to Activate
11
+
12
+ - Adding background jobs or async processing to a Django app
13
+ - Implementing periodic/scheduled tasks
14
+ - Offloading slow operations (email, PDF generation, API calls) from request cycle
15
+ - Setting up Celery Beat for cron-like scheduling
16
+ - Debugging task failures, retries, or queue backlogs
17
+ - Writing tests for Celery tasks
18
+
19
+ ## Project Setup
20
+
21
+ ### Installation
22
+
23
+ ```bash
24
+ pip install celery[redis] django-celery-results django-celery-beat
25
+ ```
26
+
27
+ ### `celery.py` — App Entrypoint
28
+
29
+ ```python
30
+ # config/celery.py
31
+ import os
32
+ from celery import Celery
33
+
34
+ os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.development')
35
+
36
+ app = Celery('myproject')
37
+ app.config_from_object('django.conf:settings', namespace='CELERY')
38
+ app.autodiscover_tasks() # Discovers tasks.py in each INSTALLED_APP
39
+
40
+ @app.task(bind=True, ignore_result=True)
41
+ def debug_task(self):
42
+ print(f'Request: {self.request!r}')
43
+ ```
44
+
45
+ ```python
46
+ # config/__init__.py
47
+ from .celery import app as celery_app
48
+
49
+ __all__ = ('celery_app',)
50
+ ```
51
+
52
+ ### Django Settings
53
+
54
+ ```python
55
+ # config/settings/base.py
56
+
57
+ # Broker (Redis recommended for production)
58
+ CELERY_BROKER_URL = env('CELERY_BROKER_URL', default='redis://localhost:6379/0')
59
+ CELERY_RESULT_BACKEND = env('CELERY_RESULT_BACKEND', default='django-db')
60
+
61
+ # Serialization
62
+ CELERY_ACCEPT_CONTENT = ['json']
63
+ CELERY_TASK_SERIALIZER = 'json'
64
+ CELERY_RESULT_SERIALIZER = 'json'
65
+
66
+ # Task behavior
67
+ CELERY_TASK_TRACK_STARTED = True
68
+ CELERY_TASK_TIME_LIMIT = 30 * 60 # Hard limit: 30 min
69
+ CELERY_TASK_SOFT_TIME_LIMIT = 25 * 60 # Soft limit: sends SoftTimeLimitExceeded
70
+ CELERY_WORKER_PREFETCH_MULTIPLIER = 1 # Prevent worker hoarding long tasks
71
+ CELERY_TASK_ACKS_LATE = True # Re-queue on worker crash
72
+
73
+ # Result persistence
74
+ CELERY_RESULT_EXPIRES = 60 * 60 * 24 # Keep results 24 hours
75
+
76
+ # Beat scheduler (for periodic tasks)
77
+ CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'
78
+
79
+ # Installed apps
80
+ INSTALLED_APPS += [
81
+ 'django_celery_results',
82
+ 'django_celery_beat',
83
+ ]
84
+ ```
85
+
86
+ ### Running Workers
87
+
88
+ ```bash
89
+ # Start worker (development)
90
+ celery -A config worker --loglevel=info
91
+
92
+ # Start beat scheduler (periodic tasks)
93
+ celery -A config beat --loglevel=info --scheduler django_celery_beat.schedulers:DatabaseScheduler
94
+
95
+ # Combined worker + beat (dev only, never production)
96
+ celery -A config worker --beat --loglevel=info
97
+
98
+ # Production: multiple workers with concurrency
99
+ celery -A config worker --loglevel=warning --concurrency=4 -Q default,high_priority
100
+ ```
101
+
102
+ ## Task Design Patterns
103
+
104
+ ### Basic Task
105
+
106
+ ```python
107
+ # apps/notifications/tasks.py
108
+ from celery import shared_task
109
+ import logging
110
+
111
+ logger = logging.getLogger(__name__)
112
+
113
+ @shared_task(name='notifications.send_welcome_email')
114
+ def send_welcome_email(user_id: int) -> None:
115
+ """Send welcome email to newly registered user."""
116
+ from apps.users.models import User
117
+ from apps.notifications.services import EmailService
118
+
119
+ try:
120
+ user = User.objects.get(pk=user_id)
121
+ except User.DoesNotExist:
122
+ logger.warning('send_welcome_email: user %s not found', user_id)
123
+ return # Idempotent — do not raise, task already impossible to complete
124
+
125
+ EmailService.send_welcome(user)
126
+ logger.info('Welcome email sent to user %s', user_id)
127
+ ```
128
+
129
+ ### Retryable Task
130
+
131
+ ```python
132
+ @shared_task(
133
+ bind=True,
134
+ name='integrations.sync_to_crm',
135
+ max_retries=5,
136
+ default_retry_delay=60, # seconds before first retry
137
+ autoretry_for=(ConnectionError, TimeoutError),
138
+ retry_backoff=True, # exponential backoff
139
+ retry_backoff_max=600, # cap at 10 minutes
140
+ retry_jitter=True, # randomise to avoid thundering herd
141
+ )
142
+ def sync_contact_to_crm(self, contact_id: int) -> dict:
143
+ """Sync contact to external CRM with retry on transient failures."""
144
+ from apps.crm.services import CRMClient
145
+
146
+ try:
147
+ result = CRMClient().sync(contact_id)
148
+ return result
149
+ except CRMClient.RateLimitError as exc:
150
+ # Specific retry delay from response header
151
+ raise self.retry(exc=exc, countdown=int(exc.retry_after))
152
+ ```
153
+
154
+ ### Idempotent Task Pattern
155
+
156
+ Design tasks so they can safely run multiple times with the same inputs:
157
+
158
+ ```python
159
+ @shared_task(name='orders.mark_shipped')
160
+ def mark_order_shipped(order_id: int, tracking_number: str) -> None:
161
+ """Mark order as shipped — safe to run multiple times."""
162
+ from apps.orders.models import Order
163
+
164
+ updated = Order.objects.filter(
165
+ pk=order_id,
166
+ status=Order.Status.PROCESSING, # Guard: only update if not already shipped
167
+ ).update(
168
+ status=Order.Status.SHIPPED,
169
+ tracking_number=tracking_number,
170
+ )
171
+
172
+ if not updated:
173
+ logger.info('mark_order_shipped: order %s already shipped or not found', order_id)
174
+ ```
175
+
176
+ ### Task with Soft Time Limit
177
+
178
+ ```python
179
+ from celery.exceptions import SoftTimeLimitExceeded
180
+
181
+ @shared_task(
182
+ bind=True,
183
+ name='reports.generate_pdf',
184
+ soft_time_limit=120,
185
+ time_limit=150,
186
+ )
187
+ def generate_pdf_report(self, report_id: int) -> str:
188
+ """Generate PDF report with graceful timeout handling."""
189
+ from apps.reports.services import PDFGenerator
190
+
191
+ try:
192
+ path = PDFGenerator.build(report_id)
193
+ return path
194
+ except SoftTimeLimitExceeded:
195
+ # Clean up partial files before hard kill
196
+ PDFGenerator.cleanup(report_id)
197
+ raise
198
+ ```
199
+
200
+ ## Calling Tasks
201
+
202
+ ```python
203
+ from datetime import timedelta
204
+ from django.utils import timezone
205
+
206
+ # Fire and forget (async)
207
+ send_welcome_email.delay(user.pk)
208
+
209
+ # Schedule in the future
210
+ send_reminder.apply_async(args=[user.pk], countdown=3600) # 1 hour from now
211
+ send_reminder.apply_async(args=[user.pk], eta=timezone.now() + timedelta(days=1))
212
+
213
+ # Apply with queue routing
214
+ sync_contact_to_crm.apply_async(args=[contact.pk], queue='high_priority')
215
+
216
+ # Run synchronously (tests / debugging only)
217
+ result = generate_pdf_report.apply(args=[report.pk])
218
+ ```
219
+
220
+ ## Beat Scheduling (Periodic Tasks)
221
+
222
+ ### Code-Defined Schedule
223
+
224
+ ```python
225
+ # config/settings/base.py
226
+ from celery.schedules import crontab
227
+
228
+ CELERY_BEAT_SCHEDULE = {
229
+ 'cleanup-expired-sessions': {
230
+ 'task': 'users.cleanup_expired_sessions',
231
+ 'schedule': crontab(hour=2, minute=0), # 2am daily
232
+ },
233
+ 'sync-inventory': {
234
+ 'task': 'products.sync_inventory',
235
+ 'schedule': 60.0, # every 60 seconds
236
+ },
237
+ 'weekly-digest': {
238
+ 'task': 'notifications.send_weekly_digest',
239
+ 'schedule': crontab(day_of_week='monday', hour=8, minute=0),
240
+ },
241
+ }
242
+ ```
243
+
244
+ ### Database-Defined Schedule (via django-celery-beat)
245
+
246
+ ```python
247
+ # Manage periodic tasks from Django admin or code
248
+ from django_celery_beat.models import PeriodicTask, CrontabSchedule
249
+ import json
250
+
251
+ schedule, _ = CrontabSchedule.objects.get_or_create(
252
+ hour='*/6', minute='0',
253
+ timezone='UTC',
254
+ )
255
+
256
+ PeriodicTask.objects.update_or_create(
257
+ name='Sync inventory every 6 hours',
258
+ defaults={
259
+ 'crontab': schedule,
260
+ 'task': 'products.sync_inventory',
261
+ 'args': json.dumps([]),
262
+ 'enabled': True,
263
+ }
264
+ )
265
+ ```
266
+
267
+ ## Canvas: Chaining and Grouping Tasks
268
+
269
+ ```python
270
+ from celery import chain, group, chord
271
+
272
+ # Chain: run tasks sequentially, passing results
273
+ pipeline = chain(
274
+ fetch_data.s(source_id),
275
+ transform_data.s(), # receives fetch_data result as first arg
276
+ load_to_warehouse.s(),
277
+ )
278
+ pipeline.delay()
279
+
280
+ # Group: run tasks in parallel
281
+ parallel = group(
282
+ send_welcome_email.s(user_id)
283
+ for user_id in new_user_ids
284
+ )
285
+ parallel.delay()
286
+
287
+ # Chord: parallel tasks + callback when all complete
288
+ result = chord(
289
+ group(process_chunk.s(chunk) for chunk in data_chunks),
290
+ aggregate_results.s(), # called with list of chunk results
291
+ )
292
+ result.delay()
293
+ ```
294
+
295
+ ## Error Handling and Dead Letter Queue
296
+
297
+ ```python
298
+ # apps/core/tasks.py
299
+ from celery.signals import task_failure
300
+
301
+ @task_failure.connect
302
+ def on_task_failure(sender, task_id, exception, args, kwargs, traceback, einfo, **kw):
303
+ """Log all task failures to Sentry / alerting."""
304
+ import sentry_sdk
305
+ with sentry_sdk.new_scope() as scope:
306
+ scope.set_context('celery', {
307
+ 'task': sender.name,
308
+ 'task_id': task_id,
309
+ 'args': args,
310
+ 'kwargs': kwargs,
311
+ })
312
+ sentry_sdk.capture_exception(exception)
313
+ ```
314
+
315
+ ```python
316
+ # Route failed tasks to dead-letter queue after max retries
317
+ @shared_task(
318
+ bind=True,
319
+ max_retries=3,
320
+ name='payments.charge_card',
321
+ )
322
+ def charge_card(self, order_id: int) -> None:
323
+ from apps.payments.models import Order, FailedCharge
324
+
325
+ try:
326
+ _do_charge(order_id)
327
+ except Exception as exc:
328
+ if self.request.retries >= self.max_retries:
329
+ # Persist to dead-letter table for manual review
330
+ FailedCharge.objects.create(
331
+ order_id=order_id,
332
+ error=str(exc),
333
+ task_id=self.request.id,
334
+ )
335
+ return # Don't raise — task is permanently failed
336
+ raise self.retry(exc=exc)
337
+ ```
338
+
339
+ ## Testing Celery Tasks
340
+
341
+ ### Unit Testing (No Broker)
342
+
343
+ ```python
344
+ # tests/test_tasks.py
345
+ import pytest
346
+ from unittest.mock import patch, MagicMock
347
+ from apps.notifications.tasks import send_welcome_email
348
+
349
+ class TestSendWelcomeEmail:
350
+
351
+ @pytest.mark.django_db
352
+ def test_sends_email_to_existing_user(self, user):
353
+ with patch('apps.notifications.services.EmailService') as mock_email:
354
+ send_welcome_email(user.pk)
355
+ mock_email.send_welcome.assert_called_once_with(user)
356
+
357
+ @pytest.mark.django_db
358
+ def test_skips_missing_user_gracefully(self):
359
+ """Should not raise when user is deleted between enqueue and execute."""
360
+ send_welcome_email(99999) # Non-existent user — must not raise
361
+ ```
362
+
363
+ ### Integration Testing with CELERY_TASK_ALWAYS_EAGER
364
+
365
+ ```python
366
+ # config/settings/test.py
367
+ CELERY_TASK_ALWAYS_EAGER = True # Run tasks synchronously in tests
368
+ CELERY_TASK_EAGER_PROPAGATES = True # Re-raise exceptions from tasks
369
+
370
+ # tests/test_integration.py
371
+ @pytest.mark.django_db
372
+ def test_registration_triggers_welcome_email(client):
373
+ with patch('apps.notifications.services.EmailService') as mock_email:
374
+ response = client.post('/api/users/', {
375
+ 'email': 'new@example.com',
376
+ 'password': 'strongpass123',
377
+ })
378
+
379
+ assert response.status_code == 201
380
+ mock_email.send_welcome.assert_called_once()
381
+ ```
382
+
383
+ ### Testing Retries
384
+
385
+ ```python
386
+ @pytest.mark.django_db
387
+ def test_task_retries_on_connection_error():
388
+ with patch('apps.crm.services.CRMClient.sync') as mock_sync:
389
+ mock_sync.side_effect = ConnectionError('timeout')
390
+
391
+ with pytest.raises(ConnectionError):
392
+ sync_contact_to_crm.apply(args=[1], throw=True)
393
+
394
+ assert mock_sync.call_count == 1 # First attempt only when eager
395
+ ```
396
+
397
+ ## Monitoring
398
+
399
+ ```bash
400
+ # Inspect active workers and queues
401
+ celery -A config inspect active
402
+ celery -A config inspect stats
403
+ celery -A config inspect reserved
404
+
405
+ # Check queue lengths (Redis)
406
+ redis-cli llen celery
407
+
408
+ # Flower: web-based real-time monitor
409
+ pip install flower
410
+ celery -A config flower --port=5555
411
+ ```
412
+
413
+ ## Anti-Patterns
414
+
415
+ ```python
416
+ # BAD: Passing model instances — they may be stale by execution time
417
+ send_welcome_email.delay(user) # Never pass ORM objects
418
+ send_welcome_email.delay(user.pk) # Always pass PKs
419
+
420
+ # BAD: Calling tasks synchronously in production views
421
+ result = generate_report.apply() # Blocks the request thread
422
+
423
+ # BAD: Non-idempotent task without guards
424
+ @shared_task
425
+ def charge_and_fulfill(order_id):
426
+ order.charge() # May charge twice if task retries!
427
+ order.fulfill()
428
+
429
+ # GOOD: Idempotent with status guard
430
+ @shared_task
431
+ def charge_and_fulfill(order_id):
432
+ order = Order.objects.select_for_update().get(pk=order_id)
433
+ if order.status != Order.Status.PENDING:
434
+ return # Already processed
435
+ order.charge()
436
+ order.fulfill()
437
+ ```
438
+
439
+ ## Production Checklist
440
+
441
+ | Check | Setting |
442
+ |-------|---------|
443
+ | Worker restarts on crash | `supervisord` or `systemd` unit |
444
+ | `CELERY_TASK_ACKS_LATE = True` | Re-queue tasks on worker crash |
445
+ | `CELERY_WORKER_PREFETCH_MULTIPLIER = 1` | Fair distribution of long tasks |
446
+ | Separate queues per priority | `-Q default,high_priority,low_priority` |
447
+ | `CELERY_TASK_SOFT_TIME_LIMIT` set | Graceful timeout before hard kill |
448
+ | Sentry integration | Capture all `task_failure` signals |
449
+ | Flower or other monitor | Visibility into queue depths |
450
+ | Beat runs on single node only | Prevents duplicate scheduled task execution |
451
+
452
+ ## Related Skills
453
+
454
+ - `django-patterns` — ORM, service layer, and project structure
455
+ - `django-tdd` — Testing Django models, views, and services
456
+ - `python-testing` — pytest configuration and fixtures