@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.
- package/CHANGELOG.md +16 -0
- package/CODE_OF_CONDUCT.md +34 -0
- package/CONTRIBUTING.md +38 -0
- package/LICENSE +21 -0
- package/README.md +337 -0
- package/RELEASING.md +93 -0
- package/SECURITY.md +31 -0
- package/STRATEGY.md +26 -0
- package/bin/cli.js +547 -0
- package/lib/packs.js +184 -0
- package/package.json +38 -0
- package/python/app/__init__.py +0 -0
- package/python/app/__pycache__/__init__.cpython-312.pyc +0 -0
- package/python/app/__pycache__/auth.cpython-312.pyc +0 -0
- package/python/app/__pycache__/main.cpython-312.pyc +0 -0
- package/python/app/auth.py +63 -0
- package/python/app/cli.py +78 -0
- package/python/app/db_paths.py +26 -0
- package/python/app/events_cli.py +175 -0
- package/python/app/main.py +647 -0
- package/python/app/materialize.py +138 -0
- package/python/app/mcp_server.py +610 -0
- package/python/app/route_cli.py +117 -0
- package/python/requirements-dev.txt +1 -0
- package/python/requirements.txt +7 -0
- package/python/tests/test_db_paths.py +41 -0
- package/skills/accessibility/SKILL.md +145 -0
- package/skills/agent-architecture-audit/SKILL.md +256 -0
- package/skills/agent-eval/SKILL.md +144 -0
- package/skills/agent-harness-construction/SKILL.md +72 -0
- package/skills/agent-introspection-debugging/SKILL.md +152 -0
- package/skills/agent-payment-x402/SKILL.md +224 -0
- package/skills/agent-sort/SKILL.md +214 -0
- package/skills/agentic-engineering/SKILL.md +62 -0
- package/skills/agentic-os/SKILL.md +386 -0
- package/skills/ai-first-engineering/SKILL.md +50 -0
- package/skills/ai-regression-testing/SKILL.md +384 -0
- package/skills/android-clean-architecture/SKILL.md +338 -0
- package/skills/angular-developer/SKILL.md +153 -0
- package/skills/angular-developer/references/angular-animations.md +160 -0
- package/skills/angular-developer/references/angular-aria.md +410 -0
- package/skills/angular-developer/references/cli.md +86 -0
- package/skills/angular-developer/references/component-harnesses.md +59 -0
- package/skills/angular-developer/references/component-styling.md +91 -0
- package/skills/angular-developer/references/components.md +117 -0
- package/skills/angular-developer/references/creating-services.md +97 -0
- package/skills/angular-developer/references/data-resolvers.md +69 -0
- package/skills/angular-developer/references/define-routes.md +67 -0
- package/skills/angular-developer/references/defining-providers.md +72 -0
- package/skills/angular-developer/references/di-fundamentals.md +120 -0
- package/skills/angular-developer/references/e2e-testing.md +56 -0
- package/skills/angular-developer/references/effects.md +83 -0
- package/skills/angular-developer/references/hierarchical-injectors.md +43 -0
- package/skills/angular-developer/references/host-elements.md +80 -0
- package/skills/angular-developer/references/injection-context.md +63 -0
- package/skills/angular-developer/references/inputs.md +101 -0
- package/skills/angular-developer/references/linked-signal.md +59 -0
- package/skills/angular-developer/references/loading-strategies.md +61 -0
- package/skills/angular-developer/references/mcp.md +108 -0
- package/skills/angular-developer/references/navigate-to-routes.md +69 -0
- package/skills/angular-developer/references/outputs.md +86 -0
- package/skills/angular-developer/references/reactive-forms.md +122 -0
- package/skills/angular-developer/references/rendering-strategies.md +44 -0
- package/skills/angular-developer/references/resource.md +77 -0
- package/skills/angular-developer/references/route-animations.md +56 -0
- package/skills/angular-developer/references/route-guards.md +52 -0
- package/skills/angular-developer/references/router-lifecycle.md +45 -0
- package/skills/angular-developer/references/router-testing.md +87 -0
- package/skills/angular-developer/references/show-routes-with-outlets.md +68 -0
- package/skills/angular-developer/references/signal-forms.md +795 -0
- package/skills/angular-developer/references/signals-overview.md +94 -0
- package/skills/angular-developer/references/tailwind-css.md +69 -0
- package/skills/angular-developer/references/template-driven-forms.md +114 -0
- package/skills/angular-developer/references/testing-fundamentals.md +65 -0
- package/skills/api-connector-builder/SKILL.md +120 -0
- package/skills/api-design/SKILL.md +522 -0
- package/skills/architecture-decision-records/SKILL.md +178 -0
- package/skills/article-writing/SKILL.md +78 -0
- package/skills/automation-audit-ops/SKILL.md +141 -0
- package/skills/autonomous-agent-harness/SKILL.md +272 -0
- package/skills/autonomous-loops/SKILL.md +609 -0
- package/skills/backend-patterns/SKILL.md +560 -0
- package/skills/benchmark/SKILL.md +92 -0
- package/skills/blueprint/SKILL.md +104 -0
- package/skills/browser-qa/SKILL.md +86 -0
- package/skills/bun-runtime/SKILL.md +83 -0
- package/skills/canary-watch/SKILL.md +98 -0
- package/skills/carrier-relationship-management/SKILL.md +211 -0
- package/skills/cisco-ios-patterns/SKILL.md +163 -0
- package/skills/ck/SKILL.md +147 -0
- package/skills/ck/commands/forget.mjs +44 -0
- package/skills/ck/commands/info.mjs +24 -0
- package/skills/ck/commands/init.mjs +143 -0
- package/skills/ck/commands/list.mjs +40 -0
- package/skills/ck/commands/migrate.mjs +202 -0
- package/skills/ck/commands/resume.mjs +36 -0
- package/skills/ck/commands/save.mjs +210 -0
- package/skills/ck/commands/shared.mjs +387 -0
- package/skills/ck/hooks/session-start.mjs +224 -0
- package/skills/claude-devfleet/SKILL.md +103 -0
- package/skills/click-path-audit/SKILL.md +244 -0
- package/skills/clickhouse-io/SKILL.md +438 -0
- package/skills/code-tour/SKILL.md +235 -0
- package/skills/codebase-onboarding/SKILL.md +232 -0
- package/skills/coding-standards/SKILL.md +548 -0
- package/skills/compose-multiplatform-patterns/SKILL.md +298 -0
- package/skills/connections-optimizer/SKILL.md +188 -0
- package/skills/content-engine/SKILL.md +126 -0
- package/skills/content-hash-cache-pattern/SKILL.md +160 -0
- package/skills/context-budget/SKILL.md +134 -0
- package/skills/continuous-agent-loop/SKILL.md +44 -0
- package/skills/continuous-learning/SKILL.md +129 -0
- package/skills/continuous-learning/config.json +18 -0
- package/skills/continuous-learning/evaluate-session.sh +69 -0
- package/skills/continuous-learning-v2/SKILL.md +358 -0
- package/skills/continuous-learning-v2/agents/observer-loop.sh +322 -0
- package/skills/continuous-learning-v2/agents/observer.md +198 -0
- package/skills/continuous-learning-v2/agents/session-guardian.sh +150 -0
- package/skills/continuous-learning-v2/agents/start-observer.sh +248 -0
- package/skills/continuous-learning-v2/config.json +8 -0
- package/skills/continuous-learning-v2/hooks/observe.sh +476 -0
- package/skills/continuous-learning-v2/scripts/detect-project.sh +288 -0
- package/skills/continuous-learning-v2/scripts/instinct-cli.py +1519 -0
- package/skills/continuous-learning-v2/scripts/lib/homunculus-dir.sh +31 -0
- package/skills/continuous-learning-v2/scripts/migrate-homunculus.sh +62 -0
- package/skills/continuous-learning-v2/scripts/test_parse_instinct.py +1018 -0
- package/skills/cost-aware-llm-pipeline/SKILL.md +182 -0
- package/skills/cost-tracking/SKILL.md +147 -0
- package/skills/council/SKILL.md +202 -0
- package/skills/cpp-coding-standards/SKILL.md +722 -0
- package/skills/cpp-testing/SKILL.md +323 -0
- package/skills/crosspost/SKILL.md +110 -0
- package/skills/csharp-testing/SKILL.md +320 -0
- package/skills/customer-billing-ops/SKILL.md +139 -0
- package/skills/customs-trade-compliance/SKILL.md +262 -0
- package/skills/dart-flutter-patterns/SKILL.md +562 -0
- package/skills/dashboard-builder/SKILL.md +108 -0
- package/skills/data-scraper-agent/SKILL.md +764 -0
- package/skills/database-migrations/SKILL.md +428 -0
- package/skills/deep-research/SKILL.md +158 -0
- package/skills/defi-amm-security/SKILL.md +166 -0
- package/skills/deployment-patterns/SKILL.md +426 -0
- package/skills/design-system/SKILL.md +81 -0
- package/skills/django-celery/SKILL.md +456 -0
- package/skills/django-patterns/SKILL.md +733 -0
- package/skills/django-security/SKILL.md +592 -0
- package/skills/django-tdd/SKILL.md +728 -0
- package/skills/django-verification/SKILL.md +468 -0
- package/skills/dmux-workflows/SKILL.md +190 -0
- package/skills/docker-patterns/SKILL.md +363 -0
- package/skills/documentation-lookup/SKILL.md +89 -0
- package/skills/dotnet-patterns/SKILL.md +320 -0
- package/skills/e2e-testing/SKILL.md +325 -0
- package/skills/email-ops/SKILL.md +120 -0
- package/skills/energy-procurement/SKILL.md +227 -0
- package/skills/enterprise-agent-ops/SKILL.md +49 -0
- package/skills/error-handling/SKILL.md +375 -0
- package/skills/eval-harness/SKILL.md +269 -0
- package/skills/evm-token-decimals/SKILL.md +130 -0
- package/skills/exa-search/SKILL.md +106 -0
- package/skills/fal-ai-media/SKILL.md +287 -0
- package/skills/fastapi-patterns/SKILL.md +327 -0
- package/skills/finance-billing-ops/SKILL.md +126 -0
- package/skills/flox-environments/SKILL.md +496 -0
- package/skills/flutter-dart-code-review/SKILL.md +434 -0
- package/skills/foundation-models-on-device/SKILL.md +243 -0
- package/skills/frontend-design-direction/SKILL.md +92 -0
- package/skills/frontend-patterns/SKILL.md +641 -0
- package/skills/frontend-slides/SKILL.md +183 -0
- package/skills/frontend-slides/STYLE_PRESETS.md +330 -0
- package/skills/frontend-slides/animation-patterns.md +122 -0
- package/skills/frontend-slides/html-template.md +419 -0
- package/skills/frontend-slides/scripts/export-pdf.sh +418 -0
- package/skills/frontend-slides/scripts/extract-pptx.py +96 -0
- package/skills/frontend-slides/viewport-base.css +153 -0
- package/skills/fsharp-testing/SKILL.md +279 -0
- package/skills/gan-style-harness/SKILL.md +278 -0
- package/skills/gateguard/SKILL.md +125 -0
- package/skills/git-workflow/SKILL.md +714 -0
- package/skills/github-ops/SKILL.md +143 -0
- package/skills/golang-patterns/SKILL.md +673 -0
- package/skills/golang-testing/SKILL.md +719 -0
- package/skills/google-workspace-ops/SKILL.md +94 -0
- package/skills/healthcare-cdss-patterns/SKILL.md +245 -0
- package/skills/healthcare-emr-patterns/SKILL.md +159 -0
- package/skills/healthcare-eval-harness/SKILL.md +207 -0
- package/skills/healthcare-phi-compliance/SKILL.md +145 -0
- package/skills/hermes-imports/SKILL.md +87 -0
- package/skills/hexagonal-architecture/SKILL.md +275 -0
- package/skills/hipaa-compliance/SKILL.md +78 -0
- package/skills/homelab-network-readiness/SKILL.md +169 -0
- package/skills/homelab-network-setup/SKILL.md +129 -0
- package/skills/homelab-pihole-dns/SKILL.md +274 -0
- package/skills/homelab-vlan-segmentation/SKILL.md +311 -0
- package/skills/homelab-wireguard-vpn/SKILL.md +305 -0
- package/skills/hookify-rules/SKILL.md +128 -0
- package/skills/inventory-demand-planning/SKILL.md +246 -0
- package/skills/investor-materials/SKILL.md +95 -0
- package/skills/investor-outreach/SKILL.md +90 -0
- package/skills/ios-icon-gen/SKILL.md +157 -0
- package/skills/ios-icon-gen/scripts/generate_icons.swift +258 -0
- package/skills/ios-icon-gen/scripts/iconify_gen.sh +235 -0
- package/skills/iterative-retrieval/SKILL.md +209 -0
- package/skills/java-coding-standards/SKILL.md +382 -0
- package/skills/jira-integration/SKILL.md +292 -0
- package/skills/jpa-patterns/SKILL.md +150 -0
- package/skills/knowledge-ops/SKILL.md +153 -0
- package/skills/kotlin-coroutines-flows/SKILL.md +283 -0
- package/skills/kotlin-exposed-patterns/SKILL.md +718 -0
- package/skills/kotlin-ktor-patterns/SKILL.md +688 -0
- package/skills/kotlin-patterns/SKILL.md +710 -0
- package/skills/kotlin-testing/SKILL.md +823 -0
- package/skills/laravel-patterns/SKILL.md +414 -0
- package/skills/laravel-plugin-discovery/SKILL.md +228 -0
- package/skills/laravel-security/SKILL.md +284 -0
- package/skills/laravel-tdd/SKILL.md +282 -0
- package/skills/laravel-verification/SKILL.md +178 -0
- package/skills/lead-intelligence/SKILL.md +320 -0
- package/skills/lead-intelligence/agents/enrichment-agent.md +85 -0
- package/skills/lead-intelligence/agents/mutual-mapper.md +75 -0
- package/skills/lead-intelligence/agents/outreach-drafter.md +98 -0
- package/skills/lead-intelligence/agents/signal-scorer.md +60 -0
- package/skills/liquid-glass-design/SKILL.md +279 -0
- package/skills/llm-trading-agent-security/SKILL.md +146 -0
- package/skills/logistics-exception-management/SKILL.md +221 -0
- package/skills/make-interfaces-feel-better/SKILL.md +151 -0
- package/skills/manim-video/SKILL.md +88 -0
- package/skills/manim-video/assets/network_graph_scene.py +52 -0
- package/skills/market-research/SKILL.md +74 -0
- package/skills/mcp-server-patterns/SKILL.md +68 -0
- package/skills/messages-ops/SKILL.md +103 -0
- package/skills/mle-workflow/SKILL.md +345 -0
- package/skills/motion-advanced/SKILL.md +596 -0
- package/skills/motion-foundations/SKILL.md +299 -0
- package/skills/motion-patterns/SKILL.md +435 -0
- package/skills/motion-ui/SKILL.md +574 -0
- package/skills/mysql-patterns/SKILL.md +411 -0
- package/skills/nanoclaw-repl/SKILL.md +32 -0
- package/skills/nestjs-patterns/SKILL.md +229 -0
- package/skills/netmiko-ssh-automation/SKILL.md +173 -0
- package/skills/network-bgp-diagnostics/SKILL.md +167 -0
- package/skills/network-config-validation/SKILL.md +210 -0
- package/skills/network-interface-health/SKILL.md +152 -0
- package/skills/nextjs-turbopack/SKILL.md +43 -0
- package/skills/nodejs-keccak256/SKILL.md +102 -0
- package/skills/nutrient-document-processing/SKILL.md +166 -0
- package/skills/nuxt4-patterns/SKILL.md +99 -0
- package/skills/openclaw-persona-forge/SKILL.md +288 -0
- package/skills/openclaw-persona-forge/gacha.py +224 -0
- package/skills/openclaw-persona-forge/gacha.sh +5 -0
- package/skills/openclaw-persona-forge/references/avatar-style.md +124 -0
- package/skills/openclaw-persona-forge/references/boundary-rules.md +53 -0
- package/skills/openclaw-persona-forge/references/error-handling.md +53 -0
- package/skills/openclaw-persona-forge/references/identity-tension.md +48 -0
- package/skills/openclaw-persona-forge/references/naming-system.md +39 -0
- package/skills/openclaw-persona-forge/references/output-template.md +166 -0
- package/skills/opensource-pipeline/SKILL.md +254 -0
- package/skills/perl-patterns/SKILL.md +503 -0
- package/skills/perl-security/SKILL.md +502 -0
- package/skills/perl-testing/SKILL.md +474 -0
- package/skills/plan-orchestrate/SKILL.md +253 -0
- package/skills/plankton-code-quality/SKILL.md +236 -0
- package/skills/postgres-patterns/SKILL.md +146 -0
- package/skills/product-capability/SKILL.md +140 -0
- package/skills/product-lens/SKILL.md +91 -0
- package/skills/production-audit/SKILL.md +206 -0
- package/skills/production-scheduling/SKILL.md +237 -0
- package/skills/project-flow-ops/SKILL.md +110 -0
- package/skills/prompt-optimizer/SKILL.md +398 -0
- package/skills/python-patterns/SKILL.md +749 -0
- package/skills/python-testing/SKILL.md +815 -0
- package/skills/pytorch-patterns/SKILL.md +395 -0
- package/skills/quality-nonconformance/SKILL.md +259 -0
- package/skills/quarkus-patterns/SKILL.md +721 -0
- package/skills/quarkus-security/SKILL.md +466 -0
- package/skills/quarkus-tdd/SKILL.md +810 -0
- package/skills/quarkus-verification/SKILL.md +478 -0
- package/skills/ralphinho-rfc-pipeline/SKILL.md +66 -0
- package/skills/redis-patterns/SKILL.md +402 -0
- package/skills/regex-vs-llm-structured-text/SKILL.md +219 -0
- package/skills/remotion-video-creation/SKILL.md +43 -0
- package/skills/remotion-video-creation/rules/3d.md +86 -0
- package/skills/remotion-video-creation/rules/animations.md +29 -0
- package/skills/remotion-video-creation/rules/assets/charts-bar-chart.tsx +173 -0
- package/skills/remotion-video-creation/rules/assets/text-animations-typewriter.tsx +100 -0
- package/skills/remotion-video-creation/rules/assets/text-animations-word-highlight.tsx +108 -0
- package/skills/remotion-video-creation/rules/assets.md +78 -0
- package/skills/remotion-video-creation/rules/audio.md +172 -0
- package/skills/remotion-video-creation/rules/calculate-metadata.md +104 -0
- package/skills/remotion-video-creation/rules/can-decode.md +75 -0
- package/skills/remotion-video-creation/rules/charts.md +58 -0
- package/skills/remotion-video-creation/rules/compositions.md +146 -0
- package/skills/remotion-video-creation/rules/display-captions.md +126 -0
- package/skills/remotion-video-creation/rules/extract-frames.md +229 -0
- package/skills/remotion-video-creation/rules/fonts.md +152 -0
- package/skills/remotion-video-creation/rules/get-audio-duration.md +58 -0
- package/skills/remotion-video-creation/rules/get-video-dimensions.md +68 -0
- package/skills/remotion-video-creation/rules/get-video-duration.md +58 -0
- package/skills/remotion-video-creation/rules/gifs.md +138 -0
- package/skills/remotion-video-creation/rules/images.md +130 -0
- package/skills/remotion-video-creation/rules/import-srt-captions.md +67 -0
- package/skills/remotion-video-creation/rules/lottie.md +67 -0
- package/skills/remotion-video-creation/rules/measuring-dom-nodes.md +34 -0
- package/skills/remotion-video-creation/rules/measuring-text.md +143 -0
- package/skills/remotion-video-creation/rules/sequencing.md +106 -0
- package/skills/remotion-video-creation/rules/tailwind.md +11 -0
- package/skills/remotion-video-creation/rules/text-animations.md +20 -0
- package/skills/remotion-video-creation/rules/timing.md +179 -0
- package/skills/remotion-video-creation/rules/transcribe-captions.md +19 -0
- package/skills/remotion-video-creation/rules/transitions.md +122 -0
- package/skills/remotion-video-creation/rules/trimming.md +52 -0
- package/skills/remotion-video-creation/rules/videos.md +171 -0
- package/skills/repo-scan/SKILL.md +78 -0
- package/skills/research-ops/SKILL.md +111 -0
- package/skills/returns-reverse-logistics/SKILL.md +239 -0
- package/skills/rules-distill/SKILL.md +263 -0
- package/skills/rules-distill/scripts/scan-rules.sh +58 -0
- package/skills/rules-distill/scripts/scan-skills.sh +129 -0
- package/skills/rust-patterns/SKILL.md +498 -0
- package/skills/rust-testing/SKILL.md +499 -0
- package/skills/safety-guard/SKILL.md +74 -0
- package/skills/santa-method/SKILL.md +306 -0
- package/skills/scientific-db-pubmed-database/SKILL.md +175 -0
- package/skills/scientific-db-uspto-database/SKILL.md +177 -0
- package/skills/scientific-pkg-gget/SKILL.md +166 -0
- package/skills/scientific-thinking-literature-review/SKILL.md +192 -0
- package/skills/scientific-thinking-scholar-evaluation/SKILL.md +160 -0
- package/skills/search-first/SKILL.md +181 -0
- package/skills/security-bounty-hunter/SKILL.md +99 -0
- package/skills/security-review/SKILL.md +502 -0
- package/skills/security-review/cloud-infrastructure-security.md +361 -0
- package/skills/seo/SKILL.md +153 -0
- package/skills/skill-comply/SKILL.md +57 -0
- package/skills/skill-comply/fixtures/compliant_trace.jsonl +5 -0
- package/skills/skill-comply/fixtures/noncompliant_trace.jsonl +3 -0
- package/skills/skill-comply/fixtures/tdd_spec.yaml +44 -0
- package/skills/skill-comply/prompts/classifier.md +24 -0
- package/skills/skill-comply/prompts/scenario_generator.md +62 -0
- package/skills/skill-comply/prompts/spec_generator.md +42 -0
- package/skills/skill-comply/pyproject.toml +15 -0
- package/skills/skill-comply/scripts/__init__.py +0 -0
- package/skills/skill-comply/scripts/classifier.py +85 -0
- package/skills/skill-comply/scripts/grader.py +124 -0
- package/skills/skill-comply/scripts/parser.py +107 -0
- package/skills/skill-comply/scripts/report.py +170 -0
- package/skills/skill-comply/scripts/run.py +127 -0
- package/skills/skill-comply/scripts/runner.py +186 -0
- package/skills/skill-comply/scripts/scenario_generator.py +70 -0
- package/skills/skill-comply/scripts/spec_generator.py +72 -0
- package/skills/skill-comply/scripts/utils.py +13 -0
- package/skills/skill-comply/tests/test_grader.py +197 -0
- package/skills/skill-comply/tests/test_parser.py +90 -0
- package/skills/skill-comply/tests/test_runner.py +172 -0
- package/skills/skill-scout/SKILL.md +139 -0
- package/skills/skill-stocktake/SKILL.md +193 -0
- package/skills/skill-stocktake/scripts/quick-diff.sh +87 -0
- package/skills/skill-stocktake/scripts/save-results.sh +56 -0
- package/skills/skill-stocktake/scripts/scan.sh +170 -0
- package/skills/social-graph-ranker/SKILL.md +153 -0
- package/skills/springboot-patterns/SKILL.md +313 -0
- package/skills/springboot-security/SKILL.md +271 -0
- package/skills/springboot-tdd/SKILL.md +157 -0
- package/skills/springboot-verification/SKILL.md +230 -0
- package/skills/strategic-compact/SKILL.md +129 -0
- package/skills/strategic-compact/suggest-compact.sh +54 -0
- package/skills/swift-actor-persistence/SKILL.md +142 -0
- package/skills/swift-concurrency-6-2/SKILL.md +216 -0
- package/skills/swift-protocol-di-testing/SKILL.md +189 -0
- package/skills/swiftui-patterns/SKILL.md +259 -0
- package/skills/tdd-workflow/SKILL.md +462 -0
- package/skills/team-builder/SKILL.md +166 -0
- package/skills/terminal-ops/SKILL.md +108 -0
- package/skills/tinystruct-patterns/SKILL.md +130 -0
- package/skills/tinystruct-patterns/references/architecture.md +77 -0
- package/skills/tinystruct-patterns/references/data-handling.md +35 -0
- package/skills/tinystruct-patterns/references/routing.md +57 -0
- package/skills/tinystruct-patterns/references/system-usage.md +74 -0
- package/skills/tinystruct-patterns/references/testing.md +59 -0
- package/skills/token-budget-advisor/SKILL.md +133 -0
- package/skills/ui-demo/SKILL.md +464 -0
- package/skills/ui-to-vue/SKILL.md +134 -0
- package/skills/unified-notifications-ops/SKILL.md +186 -0
- package/skills/verification-loop/SKILL.md +125 -0
- package/skills/video-editing/SKILL.md +309 -0
- package/skills/videodb/SKILL.md +373 -0
- package/skills/videodb/reference/api-reference.md +550 -0
- package/skills/videodb/reference/capture-reference.md +407 -0
- package/skills/videodb/reference/capture.md +101 -0
- package/skills/videodb/reference/editor.md +443 -0
- package/skills/videodb/reference/generative.md +331 -0
- package/skills/videodb/reference/rtstream-reference.md +564 -0
- package/skills/videodb/reference/rtstream.md +65 -0
- package/skills/videodb/reference/search.md +230 -0
- package/skills/videodb/reference/streaming.md +406 -0
- package/skills/videodb/reference/use-cases.md +118 -0
- package/skills/videodb/scripts/ws_listener.py +282 -0
- package/skills/visa-doc-translate/README.md +86 -0
- package/skills/visa-doc-translate/SKILL.md +117 -0
- package/skills/vite-patterns/SKILL.md +448 -0
- package/skills/windows-desktop-e2e/SKILL.md +787 -0
- package/skills/workspace-surface-audit/SKILL.md +124 -0
- package/skills/x-api/SKILL.md +233 -0
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: fastapi-patterns
|
|
3
|
+
description: FastAPI patterns for async APIs, dependency injection, Pydantic request and response models, OpenAPI docs, tests, security, and production readiness.
|
|
4
|
+
origin: community
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# FastAPI Patterns
|
|
8
|
+
|
|
9
|
+
Production-oriented patterns for FastAPI services.
|
|
10
|
+
|
|
11
|
+
## When to Use
|
|
12
|
+
|
|
13
|
+
- Building or reviewing a FastAPI app.
|
|
14
|
+
- Splitting routers, schemas, dependencies, and database access.
|
|
15
|
+
- Writing async endpoints that call a database or external service.
|
|
16
|
+
- Adding authentication, authorization, OpenAPI docs, tests, or deployment settings.
|
|
17
|
+
- Checking a FastAPI PR for copy-pasteable examples and production risks.
|
|
18
|
+
|
|
19
|
+
## How It Works
|
|
20
|
+
|
|
21
|
+
Treat the FastAPI app as a thin HTTP layer over explicit dependencies and service code:
|
|
22
|
+
|
|
23
|
+
- `main.py` owns app construction, middleware, exception handlers, and router registration.
|
|
24
|
+
- `schemas/` owns Pydantic request and response models.
|
|
25
|
+
- `dependencies.py` owns database, auth, pagination, and request-scoped dependencies.
|
|
26
|
+
- `services/` or `crud/` owns business and persistence operations.
|
|
27
|
+
- `tests/` overrides dependencies instead of opening production resources.
|
|
28
|
+
|
|
29
|
+
Prefer small routers and explicit `response_model` declarations. Keep raw ORM objects, secrets, and framework globals out of response schemas.
|
|
30
|
+
|
|
31
|
+
## Project Layout
|
|
32
|
+
|
|
33
|
+
```text
|
|
34
|
+
app/
|
|
35
|
+
|-- main.py
|
|
36
|
+
|-- config.py
|
|
37
|
+
|-- dependencies.py
|
|
38
|
+
|-- exceptions.py
|
|
39
|
+
|-- api/
|
|
40
|
+
| `-- routes/
|
|
41
|
+
| |-- users.py
|
|
42
|
+
| `-- health.py
|
|
43
|
+
|-- core/
|
|
44
|
+
| |-- security.py
|
|
45
|
+
| `-- middleware.py
|
|
46
|
+
|-- db/
|
|
47
|
+
| |-- session.py
|
|
48
|
+
| `-- crud.py
|
|
49
|
+
|-- models/
|
|
50
|
+
|-- schemas/
|
|
51
|
+
`-- tests/
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Application Factory
|
|
55
|
+
|
|
56
|
+
Use a factory so tests and workers can build the app with controlled settings.
|
|
57
|
+
|
|
58
|
+
```python
|
|
59
|
+
from contextlib import asynccontextmanager
|
|
60
|
+
|
|
61
|
+
from fastapi import FastAPI
|
|
62
|
+
from fastapi.middleware.cors import CORSMiddleware
|
|
63
|
+
|
|
64
|
+
from app.api.routes import health, users
|
|
65
|
+
from app.config import settings
|
|
66
|
+
from app.db.session import close_db, init_db
|
|
67
|
+
from app.exceptions import register_exception_handlers
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
@asynccontextmanager
|
|
71
|
+
async def lifespan(app: FastAPI):
|
|
72
|
+
await init_db()
|
|
73
|
+
yield
|
|
74
|
+
await close_db()
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def create_app() -> FastAPI:
|
|
78
|
+
app = FastAPI(
|
|
79
|
+
title=settings.api_title,
|
|
80
|
+
version=settings.api_version,
|
|
81
|
+
lifespan=lifespan,
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
app.add_middleware(
|
|
85
|
+
CORSMiddleware,
|
|
86
|
+
allow_origins=settings.cors_origins,
|
|
87
|
+
allow_credentials=bool(settings.cors_origins),
|
|
88
|
+
allow_methods=["GET", "POST", "PUT", "PATCH", "DELETE"],
|
|
89
|
+
allow_headers=["Authorization", "Content-Type"],
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
register_exception_handlers(app)
|
|
93
|
+
app.include_router(health.router, prefix="/health", tags=["health"])
|
|
94
|
+
app.include_router(users.router, prefix="/api/v1/users", tags=["users"])
|
|
95
|
+
return app
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
app = create_app()
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Do not use `allow_origins=["*"]` with `allow_credentials=True`; browsers reject that combination and Starlette disallows it for credentialed requests.
|
|
102
|
+
|
|
103
|
+
## Pydantic Schemas
|
|
104
|
+
|
|
105
|
+
Keep request, update, and response models separate.
|
|
106
|
+
|
|
107
|
+
```python
|
|
108
|
+
from datetime import datetime
|
|
109
|
+
from typing import Annotated
|
|
110
|
+
from uuid import UUID
|
|
111
|
+
|
|
112
|
+
from pydantic import BaseModel, ConfigDict, EmailStr, Field
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
class UserBase(BaseModel):
|
|
116
|
+
email: EmailStr
|
|
117
|
+
full_name: Annotated[str, Field(min_length=1, max_length=100)]
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
class UserCreate(UserBase):
|
|
121
|
+
password: Annotated[str, Field(min_length=12, max_length=128)]
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
class UserUpdate(BaseModel):
|
|
125
|
+
email: EmailStr | None = None
|
|
126
|
+
full_name: Annotated[str | None, Field(min_length=1, max_length=100)] = None
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
class UserResponse(UserBase):
|
|
130
|
+
model_config = ConfigDict(from_attributes=True)
|
|
131
|
+
|
|
132
|
+
id: UUID
|
|
133
|
+
created_at: datetime
|
|
134
|
+
updated_at: datetime
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Response models must never include password hashes, access tokens, refresh tokens, or internal authorization state.
|
|
138
|
+
|
|
139
|
+
## Dependencies
|
|
140
|
+
|
|
141
|
+
Use dependency injection for request-scoped resources.
|
|
142
|
+
|
|
143
|
+
```python
|
|
144
|
+
from collections.abc import AsyncIterator
|
|
145
|
+
from uuid import UUID
|
|
146
|
+
|
|
147
|
+
from fastapi import Depends, HTTPException, status
|
|
148
|
+
from fastapi.security import OAuth2PasswordBearer
|
|
149
|
+
from sqlalchemy.ext.asyncio import AsyncSession
|
|
150
|
+
|
|
151
|
+
from app.core.security import decode_token
|
|
152
|
+
from app.db.session import session_factory
|
|
153
|
+
from app.models.user import User
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/api/v1/auth/login")
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
async def get_db() -> AsyncIterator[AsyncSession]:
|
|
160
|
+
async with session_factory() as session:
|
|
161
|
+
try:
|
|
162
|
+
yield session
|
|
163
|
+
await session.commit()
|
|
164
|
+
except Exception:
|
|
165
|
+
await session.rollback()
|
|
166
|
+
raise
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
async def get_current_user(
|
|
170
|
+
token: str = Depends(oauth2_scheme),
|
|
171
|
+
db: AsyncSession = Depends(get_db),
|
|
172
|
+
) -> User:
|
|
173
|
+
payload = decode_token(token)
|
|
174
|
+
user_id = UUID(payload["sub"])
|
|
175
|
+
user = await db.get(User, user_id)
|
|
176
|
+
if user is None:
|
|
177
|
+
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid token")
|
|
178
|
+
return user
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
Avoid creating sessions, clients, or credentials inline inside route handlers.
|
|
182
|
+
|
|
183
|
+
## Async Endpoints
|
|
184
|
+
|
|
185
|
+
Keep route handlers async when they perform I/O, and use async libraries inside them.
|
|
186
|
+
|
|
187
|
+
```python
|
|
188
|
+
from fastapi import APIRouter, Depends, Query
|
|
189
|
+
from sqlalchemy import select
|
|
190
|
+
from sqlalchemy.ext.asyncio import AsyncSession
|
|
191
|
+
|
|
192
|
+
from app.dependencies import get_current_user, get_db
|
|
193
|
+
from app.models.user import User
|
|
194
|
+
from app.schemas.user import UserResponse
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
router = APIRouter()
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
@router.get("/", response_model=list[UserResponse])
|
|
201
|
+
async def list_users(
|
|
202
|
+
limit: int = Query(default=50, ge=1, le=100),
|
|
203
|
+
offset: int = Query(default=0, ge=0),
|
|
204
|
+
db: AsyncSession = Depends(get_db),
|
|
205
|
+
current_user: User = Depends(get_current_user),
|
|
206
|
+
):
|
|
207
|
+
result = await db.execute(
|
|
208
|
+
select(User).order_by(User.created_at.desc()).limit(limit).offset(offset)
|
|
209
|
+
)
|
|
210
|
+
return result.scalars().all()
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
Use `httpx.AsyncClient` for external HTTP calls from async handlers. Do not call `requests` in an async route.
|
|
214
|
+
|
|
215
|
+
## Error Handling
|
|
216
|
+
|
|
217
|
+
Centralize domain exceptions and keep response shapes stable.
|
|
218
|
+
|
|
219
|
+
```python
|
|
220
|
+
from fastapi import FastAPI, Request
|
|
221
|
+
from fastapi.responses import JSONResponse
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
class ApiError(Exception):
|
|
225
|
+
def __init__(self, status_code: int, code: str, message: str):
|
|
226
|
+
self.status_code = status_code
|
|
227
|
+
self.code = code
|
|
228
|
+
self.message = message
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
def register_exception_handlers(app: FastAPI) -> None:
|
|
232
|
+
@app.exception_handler(ApiError)
|
|
233
|
+
async def api_error_handler(request: Request, exc: ApiError):
|
|
234
|
+
return JSONResponse(
|
|
235
|
+
status_code=exc.status_code,
|
|
236
|
+
content={"error": {"code": exc.code, "message": exc.message}},
|
|
237
|
+
)
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
## OpenAPI Customization
|
|
241
|
+
|
|
242
|
+
Assign the custom OpenAPI callable to `app.openapi`; do not just call the function once.
|
|
243
|
+
|
|
244
|
+
```python
|
|
245
|
+
from fastapi import FastAPI
|
|
246
|
+
from fastapi.openapi.utils import get_openapi
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
def install_openapi(app: FastAPI) -> None:
|
|
250
|
+
def custom_openapi():
|
|
251
|
+
if app.openapi_schema:
|
|
252
|
+
return app.openapi_schema
|
|
253
|
+
app.openapi_schema = get_openapi(
|
|
254
|
+
title="Service API",
|
|
255
|
+
version="1.0.0",
|
|
256
|
+
routes=app.routes,
|
|
257
|
+
)
|
|
258
|
+
return app.openapi_schema
|
|
259
|
+
|
|
260
|
+
app.openapi = custom_openapi
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
## Testing
|
|
264
|
+
|
|
265
|
+
Override the dependency used by `Depends`, not an internal helper that route handlers never reference.
|
|
266
|
+
|
|
267
|
+
```python
|
|
268
|
+
import pytest
|
|
269
|
+
from httpx import ASGITransport, AsyncClient
|
|
270
|
+
from sqlalchemy.ext.asyncio import AsyncSession
|
|
271
|
+
|
|
272
|
+
from app.dependencies import get_db
|
|
273
|
+
from app.main import create_app
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
@pytest.fixture
|
|
277
|
+
async def client(test_session: AsyncSession):
|
|
278
|
+
app = create_app()
|
|
279
|
+
|
|
280
|
+
async def override_get_db():
|
|
281
|
+
yield test_session
|
|
282
|
+
|
|
283
|
+
app.dependency_overrides[get_db] = override_get_db
|
|
284
|
+
async with AsyncClient(
|
|
285
|
+
transport=ASGITransport(app=app),
|
|
286
|
+
base_url="http://test",
|
|
287
|
+
) as test_client:
|
|
288
|
+
yield test_client
|
|
289
|
+
app.dependency_overrides.clear()
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
## Security Checklist
|
|
293
|
+
|
|
294
|
+
- Hash passwords with `argon2-cffi`, `bcrypt`, or a current passlib-compatible hasher.
|
|
295
|
+
- Validate JWT issuer, audience, expiry, and signing algorithm.
|
|
296
|
+
- Keep CORS origins environment-specific.
|
|
297
|
+
- Put rate limits on auth and write-heavy endpoints.
|
|
298
|
+
- Use Pydantic models for all request bodies.
|
|
299
|
+
- Use ORM parameter binding or SQLAlchemy Core expressions; never build SQL with f-strings.
|
|
300
|
+
- Redact tokens, authorization headers, cookies, and passwords from logs.
|
|
301
|
+
- Run dependency audit tooling in CI.
|
|
302
|
+
|
|
303
|
+
## Performance Checklist
|
|
304
|
+
|
|
305
|
+
- Configure database connection pooling explicitly.
|
|
306
|
+
- Add pagination to list endpoints.
|
|
307
|
+
- Watch for N+1 queries and use eager loading intentionally.
|
|
308
|
+
- Use async HTTP/database clients in async paths.
|
|
309
|
+
- Add compression only after checking payload size and CPU tradeoffs.
|
|
310
|
+
- Cache stable expensive reads behind explicit invalidation.
|
|
311
|
+
|
|
312
|
+
## Examples
|
|
313
|
+
|
|
314
|
+
Use these examples as patterns, not as project-wide templates:
|
|
315
|
+
|
|
316
|
+
- Application factory: configure middleware and routers once in `create_app`.
|
|
317
|
+
- Schema split: `UserCreate`, `UserUpdate`, and `UserResponse` have different responsibilities.
|
|
318
|
+
- Dependency override: tests override `get_db` directly.
|
|
319
|
+
- OpenAPI customization: assign `app.openapi = custom_openapi`.
|
|
320
|
+
|
|
321
|
+
## See Also
|
|
322
|
+
|
|
323
|
+
- Agent: `fastapi-reviewer`
|
|
324
|
+
- Command: `/fastapi-review`
|
|
325
|
+
- Skill: `python-patterns`
|
|
326
|
+
- Skill: `python-testing`
|
|
327
|
+
- Skill: `api-design`
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: finance-billing-ops
|
|
3
|
+
description: Evidence-first revenue, pricing, refunds, team-billing, and billing-model truth workflow for the toolset. Use when the user wants a sales snapshot, pricing comparison, duplicate-charge diagnosis, or code-backed billing reality instead of generic payments advice.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Finance Billing Ops
|
|
7
|
+
|
|
8
|
+
Use this when the user wants to understand money, pricing, refunds, team-seat logic, or whether the product actually behaves the way the website and sales copy imply.
|
|
9
|
+
|
|
10
|
+
This is broader than `customer-billing-ops`. That skill is for customer remediation. This skill is for operator truth: revenue state, pricing decisions, team billing, and code-backed billing behavior.
|
|
11
|
+
|
|
12
|
+
## Skill Stack
|
|
13
|
+
|
|
14
|
+
Pull these the toolset-native skills into the workflow when relevant:
|
|
15
|
+
|
|
16
|
+
- `customer-billing-ops` for customer-specific remediation and follow-up
|
|
17
|
+
- `research-ops` when competitor pricing or current market evidence matters
|
|
18
|
+
- `market-research` when the answer should end in a pricing recommendation
|
|
19
|
+
- `github-ops` when the billing truth depends on code, backlog, or release state in sibling repos
|
|
20
|
+
- `verification-loop` when the answer depends on proving checkout, seat handling, or entitlement behavior
|
|
21
|
+
|
|
22
|
+
## When to Use
|
|
23
|
+
|
|
24
|
+
- user asks for Stripe sales, refunds, MRR, or recent customer activity
|
|
25
|
+
- user asks whether team billing, per-seat billing, or quota stacking is real in code
|
|
26
|
+
- user wants competitor pricing comparisons or pricing-model benchmarks
|
|
27
|
+
- the question mixes revenue facts with product implementation truth
|
|
28
|
+
|
|
29
|
+
## Guardrails
|
|
30
|
+
|
|
31
|
+
- distinguish live data from saved snapshots
|
|
32
|
+
- separate:
|
|
33
|
+
- revenue fact
|
|
34
|
+
- customer impact
|
|
35
|
+
- code-backed product truth
|
|
36
|
+
- recommendation
|
|
37
|
+
- do not say "per seat" unless the actual entitlement path enforces it
|
|
38
|
+
- do not assume duplicate subscriptions imply duplicate value
|
|
39
|
+
|
|
40
|
+
## Workflow
|
|
41
|
+
|
|
42
|
+
### 1. Start from the freshest billing evidence
|
|
43
|
+
|
|
44
|
+
Prefer live billing data. If the data is not live, state the snapshot timestamp explicitly.
|
|
45
|
+
|
|
46
|
+
Normalize the picture:
|
|
47
|
+
|
|
48
|
+
- paid sales
|
|
49
|
+
- active subscriptions
|
|
50
|
+
- failed or incomplete checkouts
|
|
51
|
+
- refunds
|
|
52
|
+
- disputes
|
|
53
|
+
- duplicate subscriptions
|
|
54
|
+
|
|
55
|
+
### 2. Separate customer incidents from product truth
|
|
56
|
+
|
|
57
|
+
If the question is customer-specific, classify first:
|
|
58
|
+
|
|
59
|
+
- duplicate checkout
|
|
60
|
+
- real team intent
|
|
61
|
+
- broken self-serve controls
|
|
62
|
+
- unmet product value
|
|
63
|
+
- failed payment or incomplete setup
|
|
64
|
+
|
|
65
|
+
Then separate that from the broader product question:
|
|
66
|
+
|
|
67
|
+
- does team billing really exist?
|
|
68
|
+
- are seats actually counted?
|
|
69
|
+
- does checkout quantity change entitlement?
|
|
70
|
+
- does the site overstate current behavior?
|
|
71
|
+
|
|
72
|
+
### 3. Inspect code-backed billing behavior
|
|
73
|
+
|
|
74
|
+
If the answer depends on implementation truth, inspect the code path:
|
|
75
|
+
|
|
76
|
+
- checkout
|
|
77
|
+
- pricing page
|
|
78
|
+
- entitlement calculation
|
|
79
|
+
- seat or quota handling
|
|
80
|
+
- installation vs user usage logic
|
|
81
|
+
- billing portal or self-serve management support
|
|
82
|
+
|
|
83
|
+
### 4. End with a decision and product gap
|
|
84
|
+
|
|
85
|
+
Report:
|
|
86
|
+
|
|
87
|
+
- sales snapshot
|
|
88
|
+
- issue diagnosis
|
|
89
|
+
- product truth
|
|
90
|
+
- recommended operator action
|
|
91
|
+
- product or backlog gap
|
|
92
|
+
|
|
93
|
+
## Output Format
|
|
94
|
+
|
|
95
|
+
```text
|
|
96
|
+
SNAPSHOT
|
|
97
|
+
- timestamp
|
|
98
|
+
- revenue / subscriptions / anomalies
|
|
99
|
+
|
|
100
|
+
CUSTOMER IMPACT
|
|
101
|
+
- who is affected
|
|
102
|
+
- what happened
|
|
103
|
+
|
|
104
|
+
PRODUCT TRUTH
|
|
105
|
+
- what the code actually does
|
|
106
|
+
- what the website or sales copy claims
|
|
107
|
+
|
|
108
|
+
DECISION
|
|
109
|
+
- refund / preserve / convert / no-op
|
|
110
|
+
|
|
111
|
+
PRODUCT GAP
|
|
112
|
+
- exact follow-up item to build or fix
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Pitfalls
|
|
116
|
+
|
|
117
|
+
- do not conflate failed attempts with net revenue
|
|
118
|
+
- do not infer team billing from marketing language alone
|
|
119
|
+
- do not compare competitor pricing from memory when current evidence is available
|
|
120
|
+
- do not jump from diagnosis straight to refund without classifying the issue
|
|
121
|
+
|
|
122
|
+
## Verification
|
|
123
|
+
|
|
124
|
+
- the answer includes a live-data statement or snapshot timestamp
|
|
125
|
+
- product-truth claims are code-backed
|
|
126
|
+
- customer-impact and broader pricing/product conclusions are separated cleanly
|