@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,94 @@
|
|
|
1
|
+
# Angular Signals Overview
|
|
2
|
+
|
|
3
|
+
Signals are the foundation of reactivity in modern Angular applications. A **signal** is a wrapper around a value that notifies interested consumers when that value changes.
|
|
4
|
+
|
|
5
|
+
## Writable Signals (`signal`)
|
|
6
|
+
|
|
7
|
+
Use `signal()` to create state that can be directly updated.
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
import {signal} from '@angular/core';
|
|
11
|
+
|
|
12
|
+
// Create a writable signal
|
|
13
|
+
const count = signal(0);
|
|
14
|
+
|
|
15
|
+
// Read the value (always requires calling the getter function)
|
|
16
|
+
console.log(count());
|
|
17
|
+
|
|
18
|
+
// Update the value directly
|
|
19
|
+
count.set(3);
|
|
20
|
+
|
|
21
|
+
// Update based on the previous value
|
|
22
|
+
count.update((value) => value + 1);
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Exposing as Readonly
|
|
26
|
+
|
|
27
|
+
When exposing state from a service, it is a best practice to expose a readonly version to prevent external mutation.
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
private readonly _count = signal(0);
|
|
31
|
+
// Consumers can read this, but cannot call .set() or .update()
|
|
32
|
+
readonly count = this._count.asReadonly();
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Computed Signals (`computed`)
|
|
36
|
+
|
|
37
|
+
Use `computed()` to create read-only signals that derive their value from other signals.
|
|
38
|
+
|
|
39
|
+
- **Lazily Evaluated**: The derivation function doesn't run until the computed signal is read.
|
|
40
|
+
- **Memoized**: The result is cached. It only recalculates when one of the signals it depends on changes.
|
|
41
|
+
- **Dynamic Dependencies**: Only the signals _actually read_ during the derivation are tracked.
|
|
42
|
+
|
|
43
|
+
```ts
|
|
44
|
+
import {signal, computed} from '@angular/core';
|
|
45
|
+
|
|
46
|
+
const count = signal(0);
|
|
47
|
+
const doubleCount = computed(() => count() * 2);
|
|
48
|
+
|
|
49
|
+
// doubleCount automatically updates when count changes.
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Reactive Contexts
|
|
53
|
+
|
|
54
|
+
A **reactive context** is a runtime state where Angular monitors signal reads to establish a dependency.
|
|
55
|
+
|
|
56
|
+
Angular automatically enters a reactive context when evaluating:
|
|
57
|
+
|
|
58
|
+
- `computed` signals
|
|
59
|
+
- `effect` callbacks
|
|
60
|
+
- `linkedSignal` computations
|
|
61
|
+
- Component templates
|
|
62
|
+
|
|
63
|
+
### Untracked Reads (`untracked`)
|
|
64
|
+
|
|
65
|
+
If you need to read a signal inside a reactive context _without_ creating a dependency (so that the context doesn't re-run when the signal changes), use `untracked()`.
|
|
66
|
+
|
|
67
|
+
```ts
|
|
68
|
+
import {effect, untracked} from '@angular/core';
|
|
69
|
+
|
|
70
|
+
effect(() => {
|
|
71
|
+
// This effect only runs when currentUser changes.
|
|
72
|
+
// It does NOT run when counter changes, even though counter is read here.
|
|
73
|
+
console.log(`User: ${currentUser()}, Count: ${untracked(counter)}`);
|
|
74
|
+
});
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Async Operations in Reactive Contexts
|
|
78
|
+
|
|
79
|
+
The reactive context is only active for **synchronous** code. Signal reads after an `await` will not be tracked. **Always read signals before asynchronous boundaries.**
|
|
80
|
+
|
|
81
|
+
```ts
|
|
82
|
+
// Incorrect: theme() is not tracked because it is read after await
|
|
83
|
+
effect(async () => {
|
|
84
|
+
const data = await fetchUserData();
|
|
85
|
+
console.log(theme());
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
// Correct: Read the signal before the await
|
|
89
|
+
effect(async () => {
|
|
90
|
+
const currentTheme = theme();
|
|
91
|
+
const data = await fetchUserData();
|
|
92
|
+
console.log(currentTheme);
|
|
93
|
+
});
|
|
94
|
+
```
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Using Tailwind CSS with Angular
|
|
2
|
+
|
|
3
|
+
Tailwind CSS is a utility-first CSS framework that integrates seamlessly with Angular.
|
|
4
|
+
|
|
5
|
+
**CRITICAL AGENT GUIDANCE: ALWAYS focus on Tailwind CSS v4 practices. DO NOT revert to old Tailwind v3 patterns (like creating `tailwind.config.js` with `@tailwind` directives) as this will break the application build. Modern Angular projects use Tailwind v4.**
|
|
6
|
+
|
|
7
|
+
## Automated Setup (Recommended)
|
|
8
|
+
|
|
9
|
+
The easiest way to add Tailwind CSS to an Angular project is via the Angular CLI:
|
|
10
|
+
|
|
11
|
+
```shell
|
|
12
|
+
ng add tailwindcss
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
This will automatically:
|
|
16
|
+
|
|
17
|
+
1. Install `tailwindcss` and peer dependencies.
|
|
18
|
+
2. Configure the project to use Tailwind CSS.
|
|
19
|
+
3. Add the proper import to your global styles.
|
|
20
|
+
|
|
21
|
+
## Manual Setup (Tailwind v4)
|
|
22
|
+
|
|
23
|
+
If setting up manually, use the following Tailwind v4 pattern:
|
|
24
|
+
|
|
25
|
+
### 1. Install Dependencies
|
|
26
|
+
|
|
27
|
+
Install Tailwind CSS and PostCSS:
|
|
28
|
+
|
|
29
|
+
```shell
|
|
30
|
+
npm install tailwindcss @tailwindcss/postcss postcss
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### 2. Configure PostCSS
|
|
34
|
+
|
|
35
|
+
Create a `.postcssrc.json` file in the project root:
|
|
36
|
+
|
|
37
|
+
```json
|
|
38
|
+
{
|
|
39
|
+
"plugins": {
|
|
40
|
+
"@tailwindcss/postcss": {}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
_(Do NOT create a `tailwind.config.js` file! Configuration in v4 is handled through CSS variables)._
|
|
46
|
+
|
|
47
|
+
### 3. Import Tailwind CSS
|
|
48
|
+
|
|
49
|
+
In your global styles file (e.g., `src/styles.css`), add the standard v4 import:
|
|
50
|
+
|
|
51
|
+
```css
|
|
52
|
+
@import 'tailwindcss';
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
_(If using SCSS, use `@use 'tailwindcss';` instead)._
|
|
56
|
+
|
|
57
|
+
### 4. Use Utility Classes
|
|
58
|
+
|
|
59
|
+
You can now use Tailwind classes directly in your component templates:
|
|
60
|
+
|
|
61
|
+
```html
|
|
62
|
+
<h1 class="text-3xl font-bold underline">Hello world!</h1>
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Summary for AI Agents
|
|
66
|
+
|
|
67
|
+
- **Do not use `@tailwind base; @tailwind components; @tailwind utilities;`**. Use `@import 'tailwindcss';`.
|
|
68
|
+
- **Do not create `tailwind.config.js`**. Configuration is managed directly in CSS via theme variables or using PostCSS configurations.
|
|
69
|
+
- Stick strictly to v4 syntax and workflows.
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Template-Driven Forms
|
|
2
|
+
|
|
3
|
+
Template-driven forms use two-way data binding (`[(ngModel)]`) to update the data model in the component as changes are made in the template and vice versa. They are ideal for simple forms and use directives in the HTML template to manage form state and validation.
|
|
4
|
+
|
|
5
|
+
## Core Directives
|
|
6
|
+
|
|
7
|
+
Template-driven forms rely on the `FormsModule` which provides these key directives:
|
|
8
|
+
|
|
9
|
+
- `NgModel`: Reconciles value changes in the form element with the data model (`[(ngModel)]`).
|
|
10
|
+
- `NgForm`: Automatically creates a top-level `FormGroup` bound to the `<form>` tag.
|
|
11
|
+
- `NgModelGroup`: Creates a nested `FormGroup` bound to a DOM element.
|
|
12
|
+
|
|
13
|
+
## Setup
|
|
14
|
+
|
|
15
|
+
First, import `FormsModule` into your component or module.
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
import {Component} from '@angular/core';
|
|
19
|
+
import {FormsModule} from '@angular/forms';
|
|
20
|
+
|
|
21
|
+
@Component({
|
|
22
|
+
selector: 'app-user-form',
|
|
23
|
+
imports: [FormsModule],
|
|
24
|
+
templateUrl: './user-form.component.html',
|
|
25
|
+
})
|
|
26
|
+
export class UserForm {
|
|
27
|
+
user = {name: '', role: 'Guest'};
|
|
28
|
+
|
|
29
|
+
onSubmit() {
|
|
30
|
+
console.log('Form submitted!', this.user);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Building the Form Template
|
|
36
|
+
|
|
37
|
+
### Two-Way Binding with `[(ngModel)]`
|
|
38
|
+
|
|
39
|
+
Use `[(ngModel)]` on input elements. **Every element using `[(ngModel)]` MUST have a `name` attribute.** Angular uses the `name` attribute to register the control with the parent `NgForm`.
|
|
40
|
+
|
|
41
|
+
```html
|
|
42
|
+
<form #userForm="ngForm" (ngSubmit)="onSubmit()">
|
|
43
|
+
<!-- Basic Input -->
|
|
44
|
+
<div>
|
|
45
|
+
<label for="name">Name:</label>
|
|
46
|
+
<input type="text" id="name" required [(ngModel)]="user.name" name="name" #nameCtrl="ngModel" />
|
|
47
|
+
</div>
|
|
48
|
+
|
|
49
|
+
<!-- Select Box -->
|
|
50
|
+
<div>
|
|
51
|
+
<label for="role">Role:</label>
|
|
52
|
+
<select id="role" [(ngModel)]="user.role" name="role">
|
|
53
|
+
<option value="Admin">Admin</option>
|
|
54
|
+
<option value="Guest">Guest</option>
|
|
55
|
+
</select>
|
|
56
|
+
</div>
|
|
57
|
+
|
|
58
|
+
<!-- Submit Button (disabled if form is invalid) -->
|
|
59
|
+
<button type="submit" [disabled]="!userForm.form.valid">Submit</button>
|
|
60
|
+
</form>
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Form and Control State
|
|
64
|
+
|
|
65
|
+
Angular automatically applies CSS classes to controls and forms based on their state:
|
|
66
|
+
|
|
67
|
+
| State | Class if True | Class if False |
|
|
68
|
+
| :------------- | :-------------------------------- | :------------- |
|
|
69
|
+
| Visited | `ng-touched` | `ng-untouched` |
|
|
70
|
+
| Value Changed | `ng-dirty` | `ng-pristine` |
|
|
71
|
+
| Value is Valid | `ng-valid` | `ng-invalid` |
|
|
72
|
+
| Form Submitted | `ng-submitted` (on `<form>` only) | - |
|
|
73
|
+
|
|
74
|
+
You can use these classes to provide visual feedback in your CSS:
|
|
75
|
+
|
|
76
|
+
```css
|
|
77
|
+
.ng-valid[required],
|
|
78
|
+
.ng-valid.required {
|
|
79
|
+
border-left: 5px solid #42a948; /* green */
|
|
80
|
+
}
|
|
81
|
+
.ng-invalid:not(form) {
|
|
82
|
+
border-left: 5px solid #a94442; /* red */
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Validation and Error Messages
|
|
87
|
+
|
|
88
|
+
To display error messages conditionally, export the `ngModel` directive to a template reference variable (e.g., `#nameCtrl="ngModel"`).
|
|
89
|
+
|
|
90
|
+
```html
|
|
91
|
+
<input type="text" id="name" required [(ngModel)]="user.name" name="name" #nameCtrl="ngModel" />
|
|
92
|
+
|
|
93
|
+
<!-- Show error only if the control is invalid AND (touched OR dirty) -->
|
|
94
|
+
@if (nameCtrl.invalid && (nameCtrl.dirty || nameCtrl.touched)) {
|
|
95
|
+
<div class="alert alert-danger">
|
|
96
|
+
@if (nameCtrl.errors?.['required']) {
|
|
97
|
+
<div>Name is required.</div>
|
|
98
|
+
}
|
|
99
|
+
</div>
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Submitting the Form
|
|
104
|
+
|
|
105
|
+
1. Use the `(ngSubmit)` event on the `<form>` element.
|
|
106
|
+
2. Bind the submit button's disabled state to the overall form validity using the `NgForm` template reference variable (e.g., `[disabled]="!userForm.form.valid"`).
|
|
107
|
+
|
|
108
|
+
## Resetting the Form
|
|
109
|
+
|
|
110
|
+
To programmatically reset the form to its pristine state (clearing values and validation flags), use the `reset()` method on the `NgForm` instance.
|
|
111
|
+
|
|
112
|
+
```html
|
|
113
|
+
<button type="button" (click)="userForm.reset()">Reset</button>
|
|
114
|
+
```
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Testing Fundamentals
|
|
2
|
+
|
|
3
|
+
This guide covers the fundamental principles and practices for writing Angular unit and component tests. Use the runner already configured in the project.
|
|
4
|
+
|
|
5
|
+
## Core Philosophy: Async-First
|
|
6
|
+
|
|
7
|
+
Modern Angular applications often schedule state changes asynchronously, especially when using signals or zoneless change detection. Tests should account for this.
|
|
8
|
+
|
|
9
|
+
Prefer the "Act, Wait, Assert" pattern:
|
|
10
|
+
|
|
11
|
+
1. **Act:** Update state or perform an action (e.g., set a component input, click a button).
|
|
12
|
+
2. **Wait:** Use `await fixture.whenStable()` to allow the framework to process the scheduled update and render the changes.
|
|
13
|
+
3. **Assert:** Verify the outcome.
|
|
14
|
+
|
|
15
|
+
### Basic Test Structure Example
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
import {ComponentFixture, TestBed} from '@angular/core/testing';
|
|
19
|
+
import {MyComponent} from './my.component';
|
|
20
|
+
|
|
21
|
+
describe('MyComponent', () => {
|
|
22
|
+
let component: MyComponent;
|
|
23
|
+
let fixture: ComponentFixture<MyComponent>;
|
|
24
|
+
let h1: HTMLElement;
|
|
25
|
+
|
|
26
|
+
beforeEach(async () => {
|
|
27
|
+
// 1. Configure the test module
|
|
28
|
+
await TestBed.configureTestingModule({
|
|
29
|
+
imports: [MyComponent],
|
|
30
|
+
}).compileComponents();
|
|
31
|
+
|
|
32
|
+
// 2. Create the component fixture
|
|
33
|
+
fixture = TestBed.createComponent(MyComponent);
|
|
34
|
+
component = fixture.componentInstance;
|
|
35
|
+
h1 = fixture.nativeElement.querySelector('h1');
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it('should display the default title', async () => {
|
|
39
|
+
// ACT: (Implicit) Component is created with default state.
|
|
40
|
+
// WAIT for initial data binding.
|
|
41
|
+
await fixture.whenStable();
|
|
42
|
+
// ASSERT the initial state.
|
|
43
|
+
expect(h1.textContent).toContain('Default Title');
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it('should display a different title after a change', async () => {
|
|
47
|
+
// ACT: Change the component's title property.
|
|
48
|
+
component.title.set('New Test Title');
|
|
49
|
+
|
|
50
|
+
// WAIT for the asynchronous update to complete.
|
|
51
|
+
await fixture.whenStable();
|
|
52
|
+
|
|
53
|
+
// ASSERT the DOM has been updated.
|
|
54
|
+
expect(h1.textContent).toContain('New Test Title');
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## TestBed and ComponentFixture
|
|
60
|
+
|
|
61
|
+
- **`TestBed`**: The primary utility for creating a test-specific Angular module. Use `TestBed.configureTestingModule({...})` in your `beforeEach` to declare components, provide services, and set up imports needed for your test.
|
|
62
|
+
- **`ComponentFixture`**: A handle on the created component instance and its environment.
|
|
63
|
+
- `fixture.componentInstance`: Access the component's class instance.
|
|
64
|
+
- `fixture.nativeElement`: Access the component's root DOM element.
|
|
65
|
+
- `fixture.debugElement`: An Angular-specific wrapper around the `nativeElement` that provides safer, platform-agnostic ways to query the DOM (e.g., `debugElement.query(By.css('p'))`).
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: api-connector-builder
|
|
3
|
+
description: Build a new API connector or provider by matching the target repo's existing integration pattern exactly. Use when adding one more integration without inventing a second architecture.
|
|
4
|
+
origin: the toolset direct-port adaptation
|
|
5
|
+
version: "1.0.0"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# API Connector Builder
|
|
9
|
+
|
|
10
|
+
Use this when the job is to add a repo-native integration surface, not just a generic HTTP client.
|
|
11
|
+
|
|
12
|
+
The point is to match the host repository's pattern:
|
|
13
|
+
|
|
14
|
+
- connector layout
|
|
15
|
+
- config schema
|
|
16
|
+
- auth model
|
|
17
|
+
- error handling
|
|
18
|
+
- test style
|
|
19
|
+
- registration/discovery wiring
|
|
20
|
+
|
|
21
|
+
## When to Use
|
|
22
|
+
|
|
23
|
+
- "Build a Jira connector for this project"
|
|
24
|
+
- "Add a Slack provider following the existing pattern"
|
|
25
|
+
- "Create a new integration for this API"
|
|
26
|
+
- "Build a plugin that matches the repo's connector style"
|
|
27
|
+
|
|
28
|
+
## Guardrails
|
|
29
|
+
|
|
30
|
+
- do not invent a new integration architecture when the repo already has one
|
|
31
|
+
- do not start from vendor docs alone; start from existing in-repo connectors first
|
|
32
|
+
- do not stop at transport code if the repo expects registry wiring, tests, and docs
|
|
33
|
+
- do not cargo-cult old connectors if the repo has a newer current pattern
|
|
34
|
+
|
|
35
|
+
## Workflow
|
|
36
|
+
|
|
37
|
+
### 1. Learn the house style
|
|
38
|
+
|
|
39
|
+
Inspect at least 2 existing connectors/providers and map:
|
|
40
|
+
|
|
41
|
+
- file layout
|
|
42
|
+
- abstraction boundaries
|
|
43
|
+
- config model
|
|
44
|
+
- retry / pagination conventions
|
|
45
|
+
- registry hooks
|
|
46
|
+
- test fixtures and naming
|
|
47
|
+
|
|
48
|
+
### 2. Narrow the target integration
|
|
49
|
+
|
|
50
|
+
Define only the surface the repo actually needs:
|
|
51
|
+
|
|
52
|
+
- auth flow
|
|
53
|
+
- key entities
|
|
54
|
+
- core read/write operations
|
|
55
|
+
- pagination and rate limits
|
|
56
|
+
- webhook or polling model
|
|
57
|
+
|
|
58
|
+
### 3. Build in repo-native layers
|
|
59
|
+
|
|
60
|
+
Typical slices:
|
|
61
|
+
|
|
62
|
+
- config/schema
|
|
63
|
+
- client/transport
|
|
64
|
+
- mapping layer
|
|
65
|
+
- connector/provider entrypoint
|
|
66
|
+
- registration
|
|
67
|
+
- tests
|
|
68
|
+
|
|
69
|
+
### 4. Validate against the source pattern
|
|
70
|
+
|
|
71
|
+
The new connector should look obvious in the codebase, not imported from a different ecosystem.
|
|
72
|
+
|
|
73
|
+
## Reference Shapes
|
|
74
|
+
|
|
75
|
+
### Provider-style
|
|
76
|
+
|
|
77
|
+
```text
|
|
78
|
+
providers/
|
|
79
|
+
existing_provider/
|
|
80
|
+
__init__.py
|
|
81
|
+
provider.py
|
|
82
|
+
config.py
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Connector-style
|
|
86
|
+
|
|
87
|
+
```text
|
|
88
|
+
integrations/
|
|
89
|
+
existing/
|
|
90
|
+
client.py
|
|
91
|
+
models.py
|
|
92
|
+
connector.py
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### TypeScript plugin-style
|
|
96
|
+
|
|
97
|
+
```text
|
|
98
|
+
src/integrations/
|
|
99
|
+
existing/
|
|
100
|
+
index.ts
|
|
101
|
+
client.ts
|
|
102
|
+
types.ts
|
|
103
|
+
test.ts
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Quality Checklist
|
|
107
|
+
|
|
108
|
+
- [ ] matches an existing in-repo integration pattern
|
|
109
|
+
- [ ] config validation exists
|
|
110
|
+
- [ ] auth and error handling are explicit
|
|
111
|
+
- [ ] pagination/retry behavior follows repo norms
|
|
112
|
+
- [ ] registry/discovery wiring is complete
|
|
113
|
+
- [ ] tests mirror the host repo's style
|
|
114
|
+
- [ ] docs/examples are updated if expected by the repo
|
|
115
|
+
|
|
116
|
+
## Related Skills
|
|
117
|
+
|
|
118
|
+
- `backend-patterns`
|
|
119
|
+
- `mcp-server-patterns`
|
|
120
|
+
- `github-ops`
|