arboris-cli 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.mjs +382 -0
- package/manifest.json +323 -0
- package/package.json +22 -10
- package/prisma/skills/accessibility/SKILL.md +147 -0
- package/prisma/skills/agent-architecture-audit/SKILL.md +257 -0
- package/prisma/skills/agent-eval/SKILL.md +146 -0
- package/prisma/skills/agent-harness-construction/SKILL.md +74 -0
- package/prisma/skills/agent-introspection-debugging/SKILL.md +154 -0
- package/prisma/skills/agent-payment-x402/SKILL.md +225 -0
- package/prisma/skills/agent-self-evaluation/SKILL.md +182 -0
- package/prisma/skills/agent-self-evaluation/examples/high-score-example.md +87 -0
- package/prisma/skills/agent-self-evaluation/examples/low-score-example.md +86 -0
- package/prisma/skills/agent-self-evaluation/references/evaluation-criteria.md +71 -0
- package/prisma/skills/agent-self-evaluation/references/hook-integration.md +64 -0
- package/prisma/skills/agent-self-evaluation/scripts/evaluate.py +408 -0
- package/prisma/skills/agent-self-evaluation/templates/evaluation-report.md +86 -0
- package/prisma/skills/agent-sort/SKILL.md +216 -0
- package/prisma/skills/agentic-engineering/SKILL.md +64 -0
- package/prisma/skills/agentic-os/SKILL.md +388 -0
- package/prisma/skills/ai-first-engineering/SKILL.md +52 -0
- package/prisma/skills/ai-regression-testing/SKILL.md +386 -0
- package/prisma/skills/android-clean-architecture/SKILL.md +340 -0
- package/prisma/skills/angular-developer/SKILL.md +155 -0
- package/prisma/skills/angular-developer/references/angular-animations.md +160 -0
- package/prisma/skills/angular-developer/references/angular-aria.md +410 -0
- package/prisma/skills/angular-developer/references/cli.md +86 -0
- package/prisma/skills/angular-developer/references/component-harnesses.md +59 -0
- package/prisma/skills/angular-developer/references/component-styling.md +91 -0
- package/prisma/skills/angular-developer/references/components.md +117 -0
- package/prisma/skills/angular-developer/references/creating-services.md +97 -0
- package/prisma/skills/angular-developer/references/data-resolvers.md +69 -0
- package/prisma/skills/angular-developer/references/define-routes.md +67 -0
- package/prisma/skills/angular-developer/references/defining-providers.md +72 -0
- package/prisma/skills/angular-developer/references/di-fundamentals.md +120 -0
- package/prisma/skills/angular-developer/references/e2e-testing.md +56 -0
- package/prisma/skills/angular-developer/references/effects.md +83 -0
- package/prisma/skills/angular-developer/references/hierarchical-injectors.md +43 -0
- package/prisma/skills/angular-developer/references/host-elements.md +80 -0
- package/prisma/skills/angular-developer/references/injection-context.md +63 -0
- package/prisma/skills/angular-developer/references/inputs.md +101 -0
- package/prisma/skills/angular-developer/references/linked-signal.md +59 -0
- package/prisma/skills/angular-developer/references/loading-strategies.md +61 -0
- package/prisma/skills/angular-developer/references/mcp.md +108 -0
- package/prisma/skills/angular-developer/references/navigate-to-routes.md +69 -0
- package/prisma/skills/angular-developer/references/outputs.md +86 -0
- package/prisma/skills/angular-developer/references/reactive-forms.md +122 -0
- package/prisma/skills/angular-developer/references/rendering-strategies.md +44 -0
- package/prisma/skills/angular-developer/references/resource.md +77 -0
- package/prisma/skills/angular-developer/references/route-animations.md +56 -0
- package/prisma/skills/angular-developer/references/route-guards.md +52 -0
- package/prisma/skills/angular-developer/references/router-lifecycle.md +45 -0
- package/prisma/skills/angular-developer/references/router-testing.md +87 -0
- package/prisma/skills/angular-developer/references/show-routes-with-outlets.md +68 -0
- package/prisma/skills/angular-developer/references/signal-forms.md +795 -0
- package/prisma/skills/angular-developer/references/signals-overview.md +94 -0
- package/prisma/skills/angular-developer/references/tailwind-css.md +69 -0
- package/prisma/skills/angular-developer/references/template-driven-forms.md +114 -0
- package/prisma/skills/angular-developer/references/testing-fundamentals.md +65 -0
- package/prisma/skills/api-connector-builder/SKILL.md +121 -0
- package/prisma/skills/api-design/SKILL.md +524 -0
- package/prisma/skills/architecture-decision-records/SKILL.md +180 -0
- package/prisma/skills/article-writing/SKILL.md +80 -0
- package/prisma/skills/automation-audit-ops/SKILL.md +143 -0
- package/prisma/skills/autonomous-agent-harness/SKILL.md +274 -0
- package/prisma/skills/autonomous-loops/SKILL.md +611 -0
- package/prisma/skills/backend-patterns/SKILL.md +562 -0
- package/prisma/skills/benchmark/SKILL.md +94 -0
- package/prisma/skills/benchmark-methodology/SKILL.md +190 -0
- package/prisma/skills/benchmark-optimization-loop/SKILL.md +70 -0
- package/prisma/skills/blender-motion-state-inspection/SKILL.md +165 -0
- package/prisma/skills/blueprint/SKILL.md +106 -0
- package/prisma/skills/brand-discovery/SKILL.md +145 -0
- package/prisma/skills/brand-discovery/references/10_purpose-why.md +40 -0
- package/prisma/skills/brand-discovery/references/20_positioning.md +44 -0
- package/prisma/skills/brand-discovery/references/30_audience-niche.md +52 -0
- package/prisma/skills/brand-discovery/references/40_personality-archetype.md +57 -0
- package/prisma/skills/brand-discovery/references/50_voice-tone.md +59 -0
- package/prisma/skills/brand-discovery/references/60_narrative-story.md +50 -0
- package/prisma/skills/brand-discovery/references/70_founder-tension.md +49 -0
- package/prisma/skills/brand-discovery/references/90_SYNTHESIS.md +133 -0
- package/prisma/skills/brand-voice/SKILL.md +98 -0
- package/prisma/skills/brand-voice/references/voice-profile-schema.md +55 -0
- package/prisma/skills/browser-qa/SKILL.md +105 -0
- package/prisma/skills/bun-runtime/SKILL.md +85 -0
- package/prisma/skills/canary-watch/SKILL.md +108 -0
- package/prisma/skills/carrier-relationship-management/SKILL.md +212 -0
- package/prisma/skills/cisco-ios-patterns/SKILL.md +164 -0
- package/prisma/skills/ck/SKILL.md +148 -0
- package/prisma/skills/ck/commands/forget.mjs +44 -0
- package/prisma/skills/ck/commands/info.mjs +24 -0
- package/prisma/skills/ck/commands/init.mjs +143 -0
- package/prisma/skills/ck/commands/list.mjs +40 -0
- package/prisma/skills/ck/commands/migrate.mjs +202 -0
- package/prisma/skills/ck/commands/resume.mjs +36 -0
- package/prisma/skills/ck/commands/save.mjs +210 -0
- package/prisma/skills/ck/commands/shared.mjs +387 -0
- package/prisma/skills/ck/hooks/session-start.mjs +224 -0
- package/prisma/skills/claude-devfleet/SKILL.md +112 -0
- package/prisma/skills/click-path-audit/SKILL.md +245 -0
- package/prisma/skills/clickhouse-io/SKILL.md +440 -0
- package/prisma/skills/code-tour/SKILL.md +254 -0
- package/prisma/skills/codebase-onboarding/SKILL.md +234 -0
- package/prisma/skills/codehealth-mcp/SKILL.md +167 -0
- package/prisma/skills/coding-standards/SKILL.md +551 -0
- package/prisma/skills/competitive-platform-analysis/SKILL.md +214 -0
- package/prisma/skills/competitive-report-structure/SKILL.md +162 -0
- package/prisma/skills/compose-multiplatform-patterns/SKILL.md +300 -0
- package/prisma/skills/config-gc/SKILL.md +120 -0
- package/prisma/skills/configure-ecc/SKILL.md +385 -0
- package/prisma/skills/connections-optimizer/SKILL.md +190 -0
- package/prisma/skills/content-engine/SKILL.md +132 -0
- package/prisma/skills/content-hash-cache-pattern/SKILL.md +162 -0
- package/prisma/skills/context-budget/SKILL.md +136 -0
- package/prisma/skills/continuous-agent-loop/SKILL.md +46 -0
- package/prisma/skills/continuous-learning/SKILL.md +132 -0
- package/prisma/skills/continuous-learning/config.json +18 -0
- package/prisma/skills/continuous-learning/evaluate-session.sh +69 -0
- package/prisma/skills/continuous-learning-v2/SKILL.md +361 -0
- package/prisma/skills/continuous-learning-v2/agents/observer-loop.sh +359 -0
- package/prisma/skills/continuous-learning-v2/agents/observer.md +189 -0
- package/prisma/skills/continuous-learning-v2/agents/session-guardian.sh +150 -0
- package/prisma/skills/continuous-learning-v2/agents/start-observer.sh +248 -0
- package/prisma/skills/continuous-learning-v2/config.json +8 -0
- package/prisma/skills/continuous-learning-v2/hooks/observe.sh +585 -0
- package/prisma/skills/continuous-learning-v2/scripts/detect-project.sh +322 -0
- package/prisma/skills/continuous-learning-v2/scripts/instinct-cli.py +1956 -0
- package/prisma/skills/continuous-learning-v2/scripts/lib/homunculus-dir.sh +31 -0
- package/prisma/skills/continuous-learning-v2/scripts/migrate-homunculus.sh +68 -0
- package/prisma/skills/continuous-learning-v2/scripts/test_parse_instinct.py +1421 -0
- package/prisma/skills/cost-aware-llm-pipeline/SKILL.md +184 -0
- package/prisma/skills/cost-tracking/SKILL.md +97 -0
- package/prisma/skills/council/SKILL.md +204 -0
- package/prisma/skills/cpp-coding-standards/SKILL.md +724 -0
- package/prisma/skills/cpp-testing/SKILL.md +325 -0
- package/prisma/skills/crosspost/SKILL.md +112 -0
- package/prisma/skills/csharp-testing/SKILL.md +322 -0
- package/prisma/skills/customer-billing-ops/SKILL.md +141 -0
- package/prisma/skills/customs-trade-compliance/SKILL.md +263 -0
- package/prisma/skills/dart-flutter-patterns/SKILL.md +564 -0
- package/prisma/skills/dashboard-builder/SKILL.md +109 -0
- package/prisma/skills/data-scraper-agent/SKILL.md +765 -0
- package/prisma/skills/data-throughput-accelerator/SKILL.md +73 -0
- package/prisma/skills/database-migrations/SKILL.md +430 -0
- package/prisma/skills/deep-research/SKILL.md +160 -0
- package/prisma/skills/defi-amm-security/SKILL.md +167 -0
- package/prisma/skills/delivery-gate/SKILL.md +126 -0
- package/prisma/skills/delivery-gate/hooks/quality-gate.py +220 -0
- package/prisma/skills/deployment-patterns/SKILL.md +428 -0
- package/prisma/skills/design-system/SKILL.md +83 -0
- package/prisma/skills/django-celery/SKILL.md +458 -0
- package/prisma/skills/django-patterns/SKILL.md +735 -0
- package/prisma/skills/django-security/SKILL.md +644 -0
- package/prisma/skills/django-tdd/SKILL.md +730 -0
- package/prisma/skills/django-verification/SKILL.md +470 -0
- package/prisma/skills/dmux-workflows/SKILL.md +192 -0
- package/prisma/skills/docker-patterns/SKILL.md +365 -0
- package/prisma/skills/documentation-lookup/SKILL.md +91 -0
- package/prisma/skills/dotnet-patterns/SKILL.md +322 -0
- package/prisma/skills/dynamic-workflow-mode/SKILL.md +124 -0
- package/prisma/skills/e2e-testing/SKILL.md +327 -0
- package/prisma/skills/ecc-guide/SKILL.md +190 -0
- package/prisma/skills/ecc-recipes/SKILL.md +149 -0
- package/prisma/skills/ecc-tools-cost-audit/SKILL.md +161 -0
- package/prisma/skills/email-ops/SKILL.md +122 -0
- package/prisma/skills/energy-procurement/SKILL.md +228 -0
- package/prisma/skills/enterprise-agent-ops/SKILL.md +51 -0
- package/prisma/skills/error-handling/SKILL.md +377 -0
- package/prisma/skills/eval-harness/SKILL.md +271 -0
- package/prisma/skills/evm-token-decimals/SKILL.md +131 -0
- package/prisma/skills/exa-search/SKILL.md +108 -0
- package/prisma/skills/fal-ai-media/SKILL.md +289 -0
- package/prisma/skills/fastapi-patterns/SKILL.md +514 -0
- package/prisma/skills/finance-billing-ops/SKILL.md +128 -0
- package/prisma/skills/flox-environments/SKILL.md +497 -0
- package/prisma/skills/flutter-dart-code-review/SKILL.md +436 -0
- package/prisma/skills/foundation-models-on-device/SKILL.md +243 -0
- package/prisma/skills/frontend-a11y/SKILL.md +446 -0
- package/prisma/skills/frontend-design-direction/SKILL.md +93 -0
- package/prisma/skills/frontend-patterns/SKILL.md +657 -0
- package/prisma/skills/frontend-slides/SKILL.md +185 -0
- package/prisma/skills/frontend-slides/STYLE_PRESETS.md +330 -0
- package/prisma/skills/frontend-slides/animation-patterns.md +122 -0
- package/prisma/skills/frontend-slides/html-template.md +419 -0
- package/prisma/skills/frontend-slides/scripts/export-pdf.sh +418 -0
- package/prisma/skills/frontend-slides/scripts/extract-pptx.py +96 -0
- package/prisma/skills/frontend-slides/viewport-base.css +153 -0
- package/prisma/skills/fsharp-testing/SKILL.md +281 -0
- package/prisma/skills/gan-style-harness/SKILL.md +279 -0
- package/prisma/skills/gateguard/SKILL.md +133 -0
- package/prisma/skills/generating-python-installer/SKILL.md +820 -0
- package/prisma/skills/git-workflow/SKILL.md +716 -0
- package/prisma/skills/github-ops/SKILL.md +145 -0
- package/prisma/skills/golang-patterns/SKILL.md +675 -0
- package/prisma/skills/golang-testing/SKILL.md +721 -0
- package/prisma/skills/google-workspace-ops/SKILL.md +96 -0
- package/prisma/skills/growth-log/SKILL.md +128 -0
- package/prisma/skills/healthcare-cdss-patterns/SKILL.md +246 -0
- package/prisma/skills/healthcare-emr-patterns/SKILL.md +160 -0
- package/prisma/skills/healthcare-eval-harness/SKILL.md +208 -0
- package/prisma/skills/healthcare-phi-compliance/SKILL.md +146 -0
- package/prisma/skills/hermes-imports/SKILL.md +89 -0
- package/prisma/skills/hexagonal-architecture/SKILL.md +277 -0
- package/prisma/skills/hipaa-compliance/SKILL.md +79 -0
- package/prisma/skills/homelab-network-readiness/SKILL.md +170 -0
- package/prisma/skills/homelab-network-setup/SKILL.md +130 -0
- package/prisma/skills/homelab-pihole-dns/SKILL.md +275 -0
- package/prisma/skills/homelab-vlan-segmentation/SKILL.md +312 -0
- package/prisma/skills/homelab-wireguard-vpn/SKILL.md +306 -0
- package/prisma/skills/hookify-rules/SKILL.md +128 -0
- package/prisma/skills/inherit-legacy-style/SKILL.md +157 -0
- package/prisma/skills/intent-driven-development/SKILL.md +360 -0
- package/prisma/skills/inventory-demand-planning/SKILL.md +247 -0
- package/prisma/skills/investor-materials/SKILL.md +97 -0
- package/prisma/skills/investor-outreach/SKILL.md +92 -0
- package/prisma/skills/ios-icon-gen/SKILL.md +158 -0
- package/prisma/skills/ios-icon-gen/scripts/generate_icons.swift +258 -0
- package/prisma/skills/ios-icon-gen/scripts/iconify_gen.sh +235 -0
- package/prisma/skills/iterative-retrieval/SKILL.md +212 -0
- package/prisma/skills/ito-basket-compare/SKILL.md +64 -0
- package/prisma/skills/ito-data-atlas-agent/SKILL.md +64 -0
- package/prisma/skills/ito-market-intelligence/SKILL.md +61 -0
- package/prisma/skills/ito-trade-planner/SKILL.md +68 -0
- package/prisma/skills/java-coding-standards/SKILL.md +384 -0
- package/prisma/skills/jira-integration/SKILL.md +303 -0
- package/prisma/skills/jpa-patterns/SKILL.md +152 -0
- package/prisma/skills/knowledge-ops/SKILL.md +155 -0
- package/prisma/skills/kotlin-coroutines-flows/SKILL.md +285 -0
- package/prisma/skills/kotlin-exposed-patterns/SKILL.md +720 -0
- package/prisma/skills/kotlin-ktor-patterns/SKILL.md +690 -0
- package/prisma/skills/kotlin-patterns/SKILL.md +712 -0
- package/prisma/skills/kotlin-testing/SKILL.md +825 -0
- package/prisma/skills/kubernetes-patterns/SKILL.md +756 -0
- package/prisma/skills/laravel-patterns/SKILL.md +416 -0
- package/prisma/skills/laravel-plugin-discovery/SKILL.md +230 -0
- package/prisma/skills/laravel-security/SKILL.md +948 -0
- package/prisma/skills/laravel-tdd/SKILL.md +675 -0
- package/prisma/skills/laravel-verification/SKILL.md +180 -0
- package/prisma/skills/latency-critical-systems/SKILL.md +74 -0
- package/prisma/skills/lead-intelligence/SKILL.md +322 -0
- package/prisma/skills/lead-intelligence/agents/enrichment-agent.md +85 -0
- package/prisma/skills/lead-intelligence/agents/mutual-mapper.md +75 -0
- package/prisma/skills/lead-intelligence/agents/outreach-drafter.md +98 -0
- package/prisma/skills/lead-intelligence/agents/signal-scorer.md +60 -0
- package/prisma/skills/liquid-glass-design/SKILL.md +279 -0
- package/prisma/skills/llm-trading-agent-security/SKILL.md +147 -0
- package/prisma/skills/logistics-exception-management/SKILL.md +222 -0
- package/prisma/skills/loop-design-check/SKILL.md +143 -0
- package/prisma/skills/mailtrap-email-integration/SKILL.md +77 -0
- package/prisma/skills/make-interfaces-feel-better/SKILL.md +152 -0
- package/prisma/skills/manim-video/SKILL.md +90 -0
- package/prisma/skills/manim-video/assets/network_graph_scene.py +52 -0
- package/prisma/skills/market-research/SKILL.md +76 -0
- package/prisma/skills/marketing-campaign/SKILL.md +114 -0
- package/prisma/skills/mcp-server-patterns/SKILL.md +70 -0
- package/prisma/skills/messages-ops/SKILL.md +105 -0
- package/prisma/skills/ml-adoption-playbook/SKILL.md +57 -0
- package/prisma/skills/mle-workflow/SKILL.md +347 -0
- package/prisma/skills/motion-advanced/SKILL.md +596 -0
- package/prisma/skills/motion-foundations/SKILL.md +299 -0
- package/prisma/skills/motion-patterns/SKILL.md +434 -0
- package/prisma/skills/motion-ui/SKILL.md +576 -0
- package/prisma/skills/mysql-patterns/SKILL.md +413 -0
- package/prisma/skills/nanoclaw-repl/SKILL.md +34 -0
- package/prisma/skills/nestjs-patterns/SKILL.md +231 -0
- package/prisma/skills/netmiko-ssh-automation/SKILL.md +174 -0
- package/prisma/skills/network-bgp-diagnostics/SKILL.md +168 -0
- package/prisma/skills/network-config-validation/SKILL.md +211 -0
- package/prisma/skills/network-interface-health/SKILL.md +153 -0
- package/prisma/skills/nextjs-turbopack/SKILL.md +58 -0
- package/prisma/skills/nodejs-keccak256/SKILL.md +103 -0
- package/prisma/skills/nutrient-document-processing/SKILL.md +168 -0
- package/prisma/skills/nuxt4-patterns/SKILL.md +101 -0
- package/prisma/skills/openclaw-persona-forge/SKILL.md +289 -0
- package/prisma/skills/openclaw-persona-forge/gacha.py +224 -0
- package/prisma/skills/openclaw-persona-forge/gacha.sh +5 -0
- package/prisma/skills/openclaw-persona-forge/references/avatar-style.md +124 -0
- package/prisma/skills/openclaw-persona-forge/references/boundary-rules.md +53 -0
- package/prisma/skills/openclaw-persona-forge/references/error-handling.md +53 -0
- package/prisma/skills/openclaw-persona-forge/references/identity-tension.md +48 -0
- package/prisma/skills/openclaw-persona-forge/references/naming-system.md +39 -0
- package/prisma/skills/openclaw-persona-forge/references/output-template.md +166 -0
- package/prisma/skills/opensource-pipeline/SKILL.md +256 -0
- package/prisma/skills/orch-add-feature/SKILL.md +45 -0
- package/prisma/skills/orch-build-mvp/SKILL.md +49 -0
- package/prisma/skills/orch-change-feature/SKILL.md +43 -0
- package/prisma/skills/orch-fix-defect/SKILL.md +43 -0
- package/prisma/skills/orch-pipeline/SKILL.md +121 -0
- package/prisma/skills/orch-refine-code/SKILL.md +44 -0
- package/prisma/skills/parallel-execution-optimizer/SKILL.md +73 -0
- package/prisma/skills/perl-patterns/SKILL.md +505 -0
- package/prisma/skills/perl-security/SKILL.md +504 -0
- package/prisma/skills/perl-testing/SKILL.md +476 -0
- package/prisma/skills/plan-orchestrate/SKILL.md +263 -0
- package/prisma/skills/plankton-code-quality/SKILL.md +237 -0
- package/prisma/skills/postgres-patterns/SKILL.md +148 -0
- package/prisma/skills/prediction-market-oracle-research/SKILL.md +64 -0
- package/prisma/skills/prediction-market-risk-review/SKILL.md +61 -0
- package/prisma/skills/prisma-patterns/SKILL.md +401 -0
- package/prisma/skills/product-capability/SKILL.md +142 -0
- package/prisma/skills/product-lens/SKILL.md +93 -0
- package/prisma/skills/production-audit/SKILL.md +207 -0
- package/prisma/skills/production-scheduling/SKILL.md +238 -0
- package/prisma/skills/project-flow-ops/SKILL.md +112 -0
- package/prisma/skills/prompt-optimizer/SKILL.md +398 -0
- package/prisma/skills/python-patterns/SKILL.md +751 -0
- package/prisma/skills/python-testing/SKILL.md +817 -0
- package/prisma/skills/pytorch-patterns/SKILL.md +397 -0
- package/prisma/skills/quality-nonconformance/SKILL.md +260 -0
- package/prisma/skills/quarkus-patterns/SKILL.md +723 -0
- package/prisma/skills/quarkus-security/SKILL.md +468 -0
- package/prisma/skills/quarkus-tdd/SKILL.md +812 -0
- package/prisma/skills/quarkus-verification/SKILL.md +480 -0
- package/prisma/skills/ralphinho-rfc-pipeline/SKILL.md +68 -0
- package/prisma/skills/react-native-patterns/SKILL.md +326 -0
- package/prisma/skills/react-patterns/SKILL.md +342 -0
- package/prisma/skills/react-performance/SKILL.md +575 -0
- package/prisma/skills/react-testing/SKILL.md +424 -0
- package/prisma/skills/recsys-pipeline-architect/SKILL.md +115 -0
- package/prisma/skills/recursive-decision-ledger/SKILL.md +80 -0
- package/prisma/skills/redis-patterns/SKILL.md +404 -0
- package/prisma/skills/regex-vs-llm-structured-text/SKILL.md +221 -0
- package/prisma/skills/remotion-video-creation/SKILL.md +43 -0
- package/prisma/skills/remotion-video-creation/rules/3d.md +86 -0
- package/prisma/skills/remotion-video-creation/rules/animations.md +29 -0
- package/prisma/skills/remotion-video-creation/rules/assets/charts-bar-chart.tsx +173 -0
- package/prisma/skills/remotion-video-creation/rules/assets/text-animations-typewriter.tsx +100 -0
- package/prisma/skills/remotion-video-creation/rules/assets/text-animations-word-highlight.tsx +108 -0
- package/prisma/skills/remotion-video-creation/rules/assets.md +78 -0
- package/prisma/skills/remotion-video-creation/rules/audio.md +172 -0
- package/prisma/skills/remotion-video-creation/rules/calculate-metadata.md +104 -0
- package/prisma/skills/remotion-video-creation/rules/can-decode.md +75 -0
- package/prisma/skills/remotion-video-creation/rules/charts.md +58 -0
- package/prisma/skills/remotion-video-creation/rules/compositions.md +146 -0
- package/prisma/skills/remotion-video-creation/rules/display-captions.md +126 -0
- package/prisma/skills/remotion-video-creation/rules/extract-frames.md +229 -0
- package/prisma/skills/remotion-video-creation/rules/fonts.md +152 -0
- package/prisma/skills/remotion-video-creation/rules/get-audio-duration.md +58 -0
- package/prisma/skills/remotion-video-creation/rules/get-video-dimensions.md +68 -0
- package/prisma/skills/remotion-video-creation/rules/get-video-duration.md +58 -0
- package/prisma/skills/remotion-video-creation/rules/gifs.md +138 -0
- package/prisma/skills/remotion-video-creation/rules/images.md +130 -0
- package/prisma/skills/remotion-video-creation/rules/import-srt-captions.md +67 -0
- package/prisma/skills/remotion-video-creation/rules/lottie.md +67 -0
- package/prisma/skills/remotion-video-creation/rules/measuring-dom-nodes.md +34 -0
- package/prisma/skills/remotion-video-creation/rules/measuring-text.md +143 -0
- package/prisma/skills/remotion-video-creation/rules/sequencing.md +106 -0
- package/prisma/skills/remotion-video-creation/rules/tailwind.md +11 -0
- package/prisma/skills/remotion-video-creation/rules/text-animations.md +20 -0
- package/prisma/skills/remotion-video-creation/rules/timing.md +179 -0
- package/prisma/skills/remotion-video-creation/rules/transcribe-captions.md +19 -0
- package/prisma/skills/remotion-video-creation/rules/transitions.md +122 -0
- package/prisma/skills/remotion-video-creation/rules/trimming.md +52 -0
- package/prisma/skills/remotion-video-creation/rules/videos.md +171 -0
- package/prisma/skills/repo-scan/SKILL.md +79 -0
- package/prisma/skills/research-ops/SKILL.md +113 -0
- package/prisma/skills/returns-reverse-logistics/SKILL.md +240 -0
- package/prisma/skills/rules-distill/SKILL.md +265 -0
- package/prisma/skills/rules-distill/scripts/scan-rules.sh +58 -0
- package/prisma/skills/rules-distill/scripts/scan-skills.sh +129 -0
- package/prisma/skills/rust-patterns/SKILL.md +500 -0
- package/prisma/skills/rust-testing/SKILL.md +501 -0
- package/prisma/skills/safety-guard/SKILL.md +76 -0
- package/prisma/skills/santa-method/SKILL.md +307 -0
- package/prisma/skills/scientific-db-pubmed-database/SKILL.md +176 -0
- package/prisma/skills/scientific-db-uspto-database/SKILL.md +178 -0
- package/prisma/skills/scientific-pkg-gget/SKILL.md +167 -0
- package/prisma/skills/scientific-thinking-literature-review/SKILL.md +193 -0
- package/prisma/skills/scientific-thinking-scholar-evaluation/SKILL.md +161 -0
- package/prisma/skills/search-first/SKILL.md +183 -0
- package/prisma/skills/security-bounty-hunter/SKILL.md +100 -0
- package/prisma/skills/security-review/SKILL.md +504 -0
- package/prisma/skills/security-review/cloud-infrastructure-security.md +361 -0
- package/prisma/skills/security-scan/SKILL.md +166 -0
- package/prisma/skills/seo/SKILL.md +155 -0
- package/prisma/skills/skill-comply/SKILL.md +59 -0
- package/prisma/skills/skill-comply/fixtures/compliant_trace.jsonl +5 -0
- package/prisma/skills/skill-comply/fixtures/noncompliant_trace.jsonl +3 -0
- package/prisma/skills/skill-comply/fixtures/tdd_spec.yaml +44 -0
- package/prisma/skills/skill-comply/prompts/classifier.md +24 -0
- package/prisma/skills/skill-comply/prompts/scenario_generator.md +62 -0
- package/prisma/skills/skill-comply/prompts/spec_generator.md +42 -0
- package/prisma/skills/skill-comply/pyproject.toml +15 -0
- package/prisma/skills/skill-comply/scripts/__init__.py +0 -0
- package/prisma/skills/skill-comply/scripts/classifier.py +85 -0
- package/prisma/skills/skill-comply/scripts/grader.py +124 -0
- package/prisma/skills/skill-comply/scripts/parser.py +107 -0
- package/prisma/skills/skill-comply/scripts/report.py +170 -0
- package/prisma/skills/skill-comply/scripts/run.py +127 -0
- package/prisma/skills/skill-comply/scripts/runner.py +194 -0
- package/prisma/skills/skill-comply/scripts/scenario_generator.py +70 -0
- package/prisma/skills/skill-comply/scripts/spec_generator.py +72 -0
- package/prisma/skills/skill-comply/scripts/utils.py +13 -0
- package/prisma/skills/skill-comply/tests/test_grader.py +197 -0
- package/prisma/skills/skill-comply/tests/test_parser.py +90 -0
- package/prisma/skills/skill-comply/tests/test_runner.py +172 -0
- package/prisma/skills/skill-scout/SKILL.md +141 -0
- package/prisma/skills/skill-stocktake/SKILL.md +195 -0
- package/prisma/skills/skill-stocktake/scripts/quick-diff.sh +87 -0
- package/prisma/skills/skill-stocktake/scripts/save-results.sh +56 -0
- package/prisma/skills/skill-stocktake/scripts/scan.sh +170 -0
- package/prisma/skills/social-graph-ranker/SKILL.md +155 -0
- package/prisma/skills/social-publisher/SKILL.md +130 -0
- package/prisma/skills/springboot-patterns/SKILL.md +315 -0
- package/prisma/skills/springboot-security/SKILL.md +273 -0
- package/prisma/skills/springboot-tdd/SKILL.md +159 -0
- package/prisma/skills/springboot-verification/SKILL.md +232 -0
- package/prisma/skills/strategic-compact/SKILL.md +136 -0
- package/prisma/skills/swift-actor-persistence/SKILL.md +144 -0
- package/prisma/skills/swift-concurrency-6-2/SKILL.md +216 -0
- package/prisma/skills/swift-protocol-di-testing/SKILL.md +191 -0
- package/prisma/skills/swiftui-patterns/SKILL.md +259 -0
- package/prisma/skills/taste/SKILL.md +264 -0
- package/prisma/skills/taste/references/genre-taxonomy.md +87 -0
- package/prisma/skills/tdd-workflow/SKILL.md +583 -0
- package/prisma/skills/team-agent-orchestration/SKILL.md +111 -0
- package/prisma/skills/team-builder/SKILL.md +169 -0
- package/prisma/skills/terminal-ops/SKILL.md +110 -0
- package/prisma/skills/tinystruct-patterns/SKILL.md +279 -0
- package/prisma/skills/tinystruct-patterns/references/architecture.md +90 -0
- package/prisma/skills/tinystruct-patterns/references/data-handling.md +60 -0
- package/prisma/skills/tinystruct-patterns/references/database.md +99 -0
- package/prisma/skills/tinystruct-patterns/references/routing.md +64 -0
- package/prisma/skills/tinystruct-patterns/references/system-usage.md +97 -0
- package/prisma/skills/tinystruct-patterns/references/testing.md +72 -0
- package/prisma/skills/token-budget-advisor/SKILL.md +134 -0
- package/prisma/skills/ui-demo/SKILL.md +466 -0
- package/prisma/skills/ui-to-vue/SKILL.md +135 -0
- package/prisma/skills/uncloud/SKILL.md +344 -0
- package/prisma/skills/unified-notifications-ops/SKILL.md +188 -0
- package/prisma/skills/verification-loop/SKILL.md +127 -0
- package/prisma/skills/video-editing/SKILL.md +311 -0
- package/prisma/skills/videodb/SKILL.md +375 -0
- package/prisma/skills/videodb/reference/api-reference.md +550 -0
- package/prisma/skills/videodb/reference/capture-reference.md +407 -0
- package/prisma/skills/videodb/reference/capture.md +101 -0
- package/prisma/skills/videodb/reference/editor.md +443 -0
- package/prisma/skills/videodb/reference/generative.md +331 -0
- package/prisma/skills/videodb/reference/rtstream-reference.md +564 -0
- package/prisma/skills/videodb/reference/rtstream.md +65 -0
- package/prisma/skills/videodb/reference/search.md +230 -0
- package/prisma/skills/videodb/reference/streaming.md +406 -0
- package/prisma/skills/videodb/reference/use-cases.md +118 -0
- package/prisma/skills/videodb/scripts/ws_listener.py +282 -0
- package/prisma/skills/visa-doc-translate/README.md +86 -0
- package/prisma/skills/visa-doc-translate/SKILL.md +117 -0
- package/prisma/skills/vite-patterns/SKILL.md +450 -0
- package/prisma/skills/vue-patterns/SKILL.md +471 -0
- package/prisma/skills/windows-desktop-e2e/SKILL.md +888 -0
- package/prisma/skills/workspace-surface-audit/SKILL.md +126 -0
- package/prisma/skills/x-api/SKILL.md +235 -0
- package/run.mjs +0 -10
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: prediction-market-oracle-research
|
|
3
|
+
description: Research prediction markets as data sources or oracle signals for products, agents, dashboards, and corporate decision intelligence. Use for source-grounded analysis of market-implied probabilities, caveats, and integration patterns without investment advice.
|
|
4
|
+
metadata:
|
|
5
|
+
origin: ECC
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Prediction Market Oracle Research
|
|
9
|
+
|
|
10
|
+
Use this skill when prediction markets are being considered as a data source,
|
|
11
|
+
forecasting input, oracle-like signal, or decision-intelligence layer.
|
|
12
|
+
|
|
13
|
+
## Guardrails
|
|
14
|
+
|
|
15
|
+
- Do not treat market prices as objective truth.
|
|
16
|
+
- Do not provide investment advice or trading recommendations.
|
|
17
|
+
- Separate venue mechanics, liquidity, incentives, and resolution rules from the
|
|
18
|
+
implied signal.
|
|
19
|
+
- Call out manipulation, thin liquidity, stale markets, and ambiguous outcomes.
|
|
20
|
+
- For on-chain or execution-linked systems, run `llm-trading-agent-security`
|
|
21
|
+
before granting any write authority.
|
|
22
|
+
|
|
23
|
+
## Research Workflow
|
|
24
|
+
|
|
25
|
+
1. Define the decision the signal is meant to inform.
|
|
26
|
+
2. Find relevant markets, events, tags, and venues.
|
|
27
|
+
3. Record market-implied probabilities with timestamps and source links.
|
|
28
|
+
4. Evaluate signal quality:
|
|
29
|
+
- liquidity
|
|
30
|
+
- spread
|
|
31
|
+
- market age
|
|
32
|
+
- trader/incentive concentration if known
|
|
33
|
+
- resolution authority
|
|
34
|
+
- geography or account restrictions
|
|
35
|
+
5. Compare against non-market sources such as filings, news, polls, research,
|
|
36
|
+
customer data, or internal KPIs.
|
|
37
|
+
6. Recommend whether the signal is usable, weak, or unsuitable for the stated
|
|
38
|
+
decision.
|
|
39
|
+
|
|
40
|
+
## Integration Patterns
|
|
41
|
+
|
|
42
|
+
- Research assistant: source-grounded context for a human analyst.
|
|
43
|
+
- Dashboard signal: market-implied probability alongside internal metrics.
|
|
44
|
+
- Agent memory input: a time-stamped signal that can be retrieved later.
|
|
45
|
+
- Alerting input: notify when probabilities, spreads, or liquidity cross a
|
|
46
|
+
threshold.
|
|
47
|
+
- Scenario planning: compare multiple event outcomes without automating trades.
|
|
48
|
+
|
|
49
|
+
## Output Contract
|
|
50
|
+
|
|
51
|
+
Use:
|
|
52
|
+
|
|
53
|
+
1. decision context
|
|
54
|
+
2. market sources
|
|
55
|
+
3. signal quality
|
|
56
|
+
4. comparison sources
|
|
57
|
+
5. integration recommendation
|
|
58
|
+
6. caveats
|
|
59
|
+
|
|
60
|
+
End with:
|
|
61
|
+
|
|
62
|
+
```text
|
|
63
|
+
Prediction-market signals are informational inputs, not investment advice.
|
|
64
|
+
```
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: prediction-market-risk-review
|
|
3
|
+
description: Review prediction-market, basket, oracle, and trading-agent workflows for compliance, safety, data-quality, privacy, and execution risk. Use before any workflow handles venue auth, user portfolio data, API keys, or trade planning.
|
|
4
|
+
metadata:
|
|
5
|
+
origin: ECC
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Prediction Market Risk Review
|
|
9
|
+
|
|
10
|
+
Use this skill before a prediction-market workflow touches user financial
|
|
11
|
+
context, venue authentication, portfolio data, automation, or execution-capable
|
|
12
|
+
tools.
|
|
13
|
+
|
|
14
|
+
## Review Gates
|
|
15
|
+
|
|
16
|
+
### Advice Boundary
|
|
17
|
+
|
|
18
|
+
- Confirm the output is informational.
|
|
19
|
+
- Remove buy/sell/hold/size recommendations.
|
|
20
|
+
- Keep manual user decision points explicit.
|
|
21
|
+
|
|
22
|
+
### Venue And Regulatory Boundary
|
|
23
|
+
|
|
24
|
+
- Identify venue terms, geography restrictions, account limits, and API rules.
|
|
25
|
+
- Flag betting, derivatives, securities, or commodities ambiguity for legal
|
|
26
|
+
review when relevant.
|
|
27
|
+
- Do not bypass venue restrictions or rate limits.
|
|
28
|
+
|
|
29
|
+
### Data Quality
|
|
30
|
+
|
|
31
|
+
- Check market liquidity, spread, resolution rules, stale prices, and source
|
|
32
|
+
timestamps.
|
|
33
|
+
- Separate public venue data from Itô gated data.
|
|
34
|
+
- Do not mix public and private sources without labels.
|
|
35
|
+
|
|
36
|
+
### Security
|
|
37
|
+
|
|
38
|
+
- Do not request or store private keys, seed phrases, or passwords.
|
|
39
|
+
- Keep `ITO_API_KEY` and venue API keys out of logs and docs.
|
|
40
|
+
- Use read-only scopes by default.
|
|
41
|
+
- Require circuit breakers, spend limits, dry runs, and human approval before
|
|
42
|
+
any private implementation adds execution.
|
|
43
|
+
|
|
44
|
+
### Privacy
|
|
45
|
+
|
|
46
|
+
- Minimize user portfolio, financial, and knowledge-base data.
|
|
47
|
+
- Redact private sources in public artifacts.
|
|
48
|
+
- Preserve only the fields needed for the review.
|
|
49
|
+
|
|
50
|
+
## Output Contract
|
|
51
|
+
|
|
52
|
+
Return:
|
|
53
|
+
|
|
54
|
+
1. scope reviewed
|
|
55
|
+
2. pass/warn/fail findings
|
|
56
|
+
3. blocked actions
|
|
57
|
+
4. required mitigations
|
|
58
|
+
5. safe next step
|
|
59
|
+
|
|
60
|
+
If any execution-capable step is requested, require a separate implementation
|
|
61
|
+
plan and explicit user approval.
|
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: prisma-patterns
|
|
3
|
+
description: Prisma ORM patterns for TypeScript backends — schema design, query optimization, transactions, pagination, and critical traps like updateMany returning count not records, $transaction timeouts, migrate dev resetting the DB, @updatedAt skipped on bulk writes, and serverless connection exhaustion.
|
|
4
|
+
metadata:
|
|
5
|
+
origin: ECC
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Prisma Patterns
|
|
9
|
+
|
|
10
|
+
Production patterns and non-obvious traps for Prisma ORM in TypeScript backends.
|
|
11
|
+
|
|
12
|
+
> **Check your version before applying patterns.** The Prisma API surface has evolved across major releases:
|
|
13
|
+
>
|
|
14
|
+
> ```bash
|
|
15
|
+
> npx prisma --version
|
|
16
|
+
> ```
|
|
17
|
+
>
|
|
18
|
+
> Notable API differences across versions:
|
|
19
|
+
> - `relationJoins` can load relations via JOIN rather than separate queries, but may cause row explosion on large 1:N relations or deep `include` — benchmark both approaches
|
|
20
|
+
> - `omit` field modifier and `prisma.$extends` Client Extensions API were added
|
|
21
|
+
> - **Newer installs**: the package may be named `prisma` instead of `@prisma/client`; `PrismaClient` may require a driver adapter (e.g. `@prisma/adapter-pg`); `datasource.url` may live in `prisma.config.ts` instead of `schema.prisma`
|
|
22
|
+
> - CLI commands (`migrate dev`, `migrate deploy`, `generate`) are unchanged across versions
|
|
23
|
+
|
|
24
|
+
## When to Activate
|
|
25
|
+
|
|
26
|
+
- Designing or modifying Prisma schema models and relations
|
|
27
|
+
- Writing queries, transactions, or pagination logic
|
|
28
|
+
- Using `updateMany`, `deleteMany`, or any bulk operation
|
|
29
|
+
- Running or planning database migrations
|
|
30
|
+
- Deploying to serverless environments (Vercel, Lambda, Cloudflare Workers)
|
|
31
|
+
- Implementing soft delete or multi-tenant row filtering
|
|
32
|
+
|
|
33
|
+
## Core Concepts
|
|
34
|
+
|
|
35
|
+
### ID Strategy
|
|
36
|
+
|
|
37
|
+
| Strategy | Use When | Avoid When |
|
|
38
|
+
|---|---|---|
|
|
39
|
+
| `@default(cuid())` | Default choice — URL-safe, sortable, no collisions | Sequential IDs needed for external systems |
|
|
40
|
+
| `@default(uuid())` | Interoperability with non-Prisma systems required | High-write tables (random UUIDs fragment B-tree indexes) |
|
|
41
|
+
| `@default(autoincrement())` | Internal join tables, audit logs | Public-facing IDs (exposes record count) |
|
|
42
|
+
|
|
43
|
+
### Schema Defaults
|
|
44
|
+
|
|
45
|
+
```prisma
|
|
46
|
+
model User {
|
|
47
|
+
id String @id @default(cuid())
|
|
48
|
+
email String @unique // @unique already creates an index — no @@index needed
|
|
49
|
+
name String
|
|
50
|
+
role Role @default(USER)
|
|
51
|
+
posts Post[]
|
|
52
|
+
createdAt DateTime @default(now())
|
|
53
|
+
updatedAt DateTime @updatedAt
|
|
54
|
+
deletedAt DateTime?
|
|
55
|
+
|
|
56
|
+
@@index([createdAt])
|
|
57
|
+
@@index([deletedAt, createdAt]) // composite for soft-delete + sort queries
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
- Add `@@index` on every foreign key and column used in `WHERE` or `ORDER BY`.
|
|
62
|
+
- Declare `deletedAt DateTime?` upfront when soft delete is a foreseeable requirement — adding it later requires a migration on a live table.
|
|
63
|
+
- `updatedAt @updatedAt` is set automatically by Prisma on `update` and `upsert` only (see Anti-Patterns for bulk update trap).
|
|
64
|
+
|
|
65
|
+
### `include` vs `select`
|
|
66
|
+
|
|
67
|
+
| | `include` | `select` |
|
|
68
|
+
|---|---|---|
|
|
69
|
+
| Returns | All scalar fields + specified relations | Only specified fields |
|
|
70
|
+
| Use when | You need most fields plus a relation | Hot paths, large tables, avoiding over-fetch |
|
|
71
|
+
| Performance | May over-fetch on wide tables | Minimal payload, faster on large datasets |
|
|
72
|
+
| Prisma 5 note | Uses JOIN by default (`relationJoins`) | Same |
|
|
73
|
+
|
|
74
|
+
```ts
|
|
75
|
+
// include — all columns + relation
|
|
76
|
+
const user = await prisma.user.findUnique({
|
|
77
|
+
where: { id },
|
|
78
|
+
include: { posts: { select: { id: true, title: true } } },
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
// select — explicit allowlist
|
|
82
|
+
const user = await prisma.user.findUnique({
|
|
83
|
+
where: { id },
|
|
84
|
+
select: { id: true, email: true, name: true },
|
|
85
|
+
});
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Never return raw Prisma entities from API responses — map to response DTOs to control exposed fields:
|
|
89
|
+
|
|
90
|
+
```ts
|
|
91
|
+
// BAD: leaks passwordHash, deletedAt, internal fields
|
|
92
|
+
return await prisma.user.findUniqueOrThrow({ where: { id } });
|
|
93
|
+
|
|
94
|
+
// GOOD: explicit DTO mapping
|
|
95
|
+
const user = await prisma.user.findUniqueOrThrow({ where: { id } });
|
|
96
|
+
return { id: user.id, name: user.name, email: user.email };
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Transaction Form Selection
|
|
100
|
+
|
|
101
|
+
| Situation | Use |
|
|
102
|
+
|---|---|
|
|
103
|
+
| Independent operations, no inter-dependency | Array form |
|
|
104
|
+
| Later step depends on earlier result | Interactive form |
|
|
105
|
+
| External calls (email, HTTP) involved | Outside transaction entirely |
|
|
106
|
+
|
|
107
|
+
```ts
|
|
108
|
+
// Array form — batched in one round trip
|
|
109
|
+
const [user, post] = await prisma.$transaction([
|
|
110
|
+
prisma.user.update({ where: { id }, data: { name } }),
|
|
111
|
+
prisma.post.create({ data: { title, authorId: id } }),
|
|
112
|
+
]);
|
|
113
|
+
|
|
114
|
+
// Interactive form — use tx client only, never the outer prisma client
|
|
115
|
+
const post = await prisma.$transaction(async (tx) => {
|
|
116
|
+
const user = await tx.user.findUniqueOrThrow({ where: { id } });
|
|
117
|
+
if (user.role !== 'ADMIN') throw new Error('Forbidden');
|
|
118
|
+
return tx.post.create({ data: { title, authorId: user.id } });
|
|
119
|
+
});
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### PrismaClient Singleton
|
|
123
|
+
|
|
124
|
+
Each `PrismaClient` instance opens its own connection pool. Instantiate once.
|
|
125
|
+
|
|
126
|
+
```ts
|
|
127
|
+
// lib/prisma.ts
|
|
128
|
+
|
|
129
|
+
// Option A — adapter-based initialization (required by newer Prisma installs)
|
|
130
|
+
import { PrismaClient } from '@prisma/client'; // or the generated client path for your setup
|
|
131
|
+
import { PrismaPg } from '@prisma/adapter-pg';
|
|
132
|
+
|
|
133
|
+
function createPrismaClient() {
|
|
134
|
+
const adapter = new PrismaPg({
|
|
135
|
+
connectionString: process.env.DATABASE_URL!,
|
|
136
|
+
});
|
|
137
|
+
return new PrismaClient({
|
|
138
|
+
adapter,
|
|
139
|
+
log: process.env.NODE_ENV === 'development' ? ['query', 'error'] : ['error'],
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
const globalForPrisma = globalThis as unknown as { prisma?: PrismaClient };
|
|
144
|
+
|
|
145
|
+
export const prisma = globalForPrisma.prisma ?? createPrismaClient();
|
|
146
|
+
|
|
147
|
+
if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma;
|
|
148
|
+
|
|
149
|
+
// Option B — direct initialization (older installs, no adapter needed)
|
|
150
|
+
// import { PrismaClient } from '@prisma/client';
|
|
151
|
+
// export const prisma = globalForPrisma.prisma ?? new PrismaClient({ ... });
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Use Option A if your Prisma install requires an `adapter` argument in the `PrismaClient` constructor.
|
|
155
|
+
Use Option B if `new PrismaClient()` works without arguments. Let the compiler tell you which is correct.
|
|
156
|
+
|
|
157
|
+
The `globalThis` pattern prevents duplicate instances during hot reload (Next.js, nodemon, ts-node-dev).
|
|
158
|
+
|
|
159
|
+
### N+1 Problem
|
|
160
|
+
|
|
161
|
+
Loading relations inside a loop issues one query per row.
|
|
162
|
+
|
|
163
|
+
```ts
|
|
164
|
+
// BAD: N+1 — one extra query per user
|
|
165
|
+
const users = await prisma.user.findMany();
|
|
166
|
+
for (const user of users) {
|
|
167
|
+
const posts = await prisma.post.findMany({ where: { authorId: user.id } });
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// GOOD: single query
|
|
171
|
+
const users = await prisma.user.findMany({ include: { posts: true } });
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
With Prisma 5+ `relationJoins`, the `include` form uses a single JOIN. On large 1:N sets this may increase result set size — benchmark both approaches if the relation can return many rows per parent.
|
|
175
|
+
|
|
176
|
+
## Code Examples
|
|
177
|
+
|
|
178
|
+
### Cursor Pagination (preferred for feeds and large datasets)
|
|
179
|
+
|
|
180
|
+
```ts
|
|
181
|
+
async function getPosts(cursor?: string, limit = 20) {
|
|
182
|
+
const items = await prisma.post.findMany({
|
|
183
|
+
where: { published: true },
|
|
184
|
+
orderBy: [
|
|
185
|
+
{ createdAt: 'desc' },
|
|
186
|
+
{ id: 'desc' }, // secondary sort prevents unstable pagination on duplicate timestamps
|
|
187
|
+
],
|
|
188
|
+
take: limit + 1,
|
|
189
|
+
...(cursor && { cursor: { id: cursor }, skip: 1 }),
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
const hasNextPage = items.length > limit;
|
|
193
|
+
if (hasNextPage) items.pop();
|
|
194
|
+
|
|
195
|
+
return { items, nextCursor: hasNextPage ? items[items.length - 1].id : null };
|
|
196
|
+
}
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Fetch `limit + 1` and pop — canonical way to detect `hasNextPage` without an extra count query. Always include a unique field (e.g. `id`) as a secondary `orderBy` to prevent unstable pagination when multiple rows share the same timestamp. Use offset pagination only when users need to jump to arbitrary pages (admin tables).
|
|
200
|
+
|
|
201
|
+
### Soft Delete
|
|
202
|
+
|
|
203
|
+
```ts
|
|
204
|
+
// Always filter explicitly — do not rely on middleware (hides behavior, hard to debug)
|
|
205
|
+
const activeUsers = await prisma.user.findMany({ where: { deletedAt: null } });
|
|
206
|
+
|
|
207
|
+
await prisma.user.update({ where: { id }, data: { deletedAt: new Date() } });
|
|
208
|
+
await prisma.user.update({ where: { id }, data: { deletedAt: null } }); // restore
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### Error Handling
|
|
212
|
+
|
|
213
|
+
```ts
|
|
214
|
+
import { Prisma } from '@prisma/client'; // or the generated client path for your setup
|
|
215
|
+
|
|
216
|
+
try {
|
|
217
|
+
await prisma.user.create({ data: { email } });
|
|
218
|
+
} catch (e) {
|
|
219
|
+
if (e instanceof Prisma.PrismaClientKnownRequestError) {
|
|
220
|
+
if (e.code === 'P2002') throw new ConflictError('Email already exists');
|
|
221
|
+
if (e.code === 'P2025') throw new NotFoundError('Record not found');
|
|
222
|
+
if (e.code === 'P2003') throw new BadRequestError('Referenced record does not exist');
|
|
223
|
+
}
|
|
224
|
+
throw e;
|
|
225
|
+
}
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
Common codes: `P2002` unique violation · `P2025` not found · `P2003` foreign key violation.
|
|
229
|
+
|
|
230
|
+
Catch at the service boundary and translate to domain errors. Never expose raw Prisma messages to API consumers.
|
|
231
|
+
|
|
232
|
+
### Connection Pool — Serverless
|
|
233
|
+
|
|
234
|
+
Embed connection params directly in `DATABASE_URL` — string concatenation breaks if the URL already has query parameters (e.g. `?schema=public`):
|
|
235
|
+
|
|
236
|
+
```bash
|
|
237
|
+
# .env — preferred: embed params in the URL
|
|
238
|
+
DATABASE_URL="postgresql://user:pass@host/db?connection_limit=1&pool_timeout=20"
|
|
239
|
+
|
|
240
|
+
# With an external pooler (PgBouncer, Supabase pooler)
|
|
241
|
+
DATABASE_URL="postgresql://user:pass@host/db?pgbouncer=true&connection_limit=1"
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
```ts
|
|
245
|
+
// Vercel, AWS Lambda, and similar serverless runtimes:
|
|
246
|
+
// cap pool to 1 per instance; connection_limit and pool_timeout controlled via DATABASE_URL
|
|
247
|
+
|
|
248
|
+
// Adapter-based setup (if your Prisma install requires an adapter):
|
|
249
|
+
import { PrismaClient } from '@prisma/client';
|
|
250
|
+
import { PrismaPg } from '@prisma/adapter-pg';
|
|
251
|
+
|
|
252
|
+
const prisma = new PrismaClient({
|
|
253
|
+
adapter: new PrismaPg({ connectionString: process.env.DATABASE_URL }),
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
// Direct setup (if your Prisma install does not require an adapter):
|
|
257
|
+
// const prisma = new PrismaClient();
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
## Anti-Patterns
|
|
261
|
+
|
|
262
|
+
### `updateMany` returns a count, not records
|
|
263
|
+
|
|
264
|
+
```ts
|
|
265
|
+
// BAD: result is { count: 2 } — users[0] is undefined
|
|
266
|
+
const users = await prisma.user.updateMany({ where: { role: 'GUEST' }, data: { role: 'USER' } });
|
|
267
|
+
|
|
268
|
+
// GOOD: capture IDs first, then update, then fetch only the affected rows
|
|
269
|
+
const targets = await prisma.user.findMany({
|
|
270
|
+
where: { role: 'GUEST' },
|
|
271
|
+
select: { id: true },
|
|
272
|
+
});
|
|
273
|
+
const ids = targets.map((u) => u.id);
|
|
274
|
+
await prisma.user.updateMany({ where: { id: { in: ids } }, data: { role: 'USER' } });
|
|
275
|
+
const updated = await prisma.user.findMany({ where: { id: { in: ids } } });
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
Same applies to `deleteMany` — returns `{ count: n }`, never the deleted rows.
|
|
279
|
+
|
|
280
|
+
### `$transaction` interactive form times out after 5 seconds
|
|
281
|
+
|
|
282
|
+
```ts
|
|
283
|
+
// BAD: external call inside transaction exceeds 5s default → "Transaction already closed"
|
|
284
|
+
await prisma.$transaction(async (tx) => {
|
|
285
|
+
const user = await tx.user.findUniqueOrThrow({ where: { id } });
|
|
286
|
+
await sendWelcomeEmail(user.email); // external call
|
|
287
|
+
await tx.user.update({ where: { id }, data: { emailSent: true } });
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
// GOOD: external calls outside the transaction
|
|
291
|
+
const user = await prisma.user.findUniqueOrThrow({ where: { id } });
|
|
292
|
+
await sendWelcomeEmail(user.email);
|
|
293
|
+
await prisma.user.update({ where: { id }, data: { emailSent: true } });
|
|
294
|
+
|
|
295
|
+
// Only raise timeout when bulk processing genuinely needs it
|
|
296
|
+
await prisma.$transaction(async (tx) => { ... }, { timeout: 30_000 });
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
### `migrate dev` can reset the database
|
|
300
|
+
|
|
301
|
+
`migrate dev` detects schema drift and may prompt to reset the DB, dropping all data.
|
|
302
|
+
|
|
303
|
+
```bash
|
|
304
|
+
# NEVER on shared dev, staging, or production
|
|
305
|
+
npx prisma migrate dev --name add_column
|
|
306
|
+
|
|
307
|
+
# Safe everywhere except local solo dev
|
|
308
|
+
npx prisma migrate deploy
|
|
309
|
+
|
|
310
|
+
# Check drift without applying
|
|
311
|
+
npx prisma migrate diff \
|
|
312
|
+
--from-migrations ./prisma/migrations \
|
|
313
|
+
--to-schema-datamodel ./prisma/schema.prisma \
|
|
314
|
+
--shadow-database-url "$SHADOW_DATABASE_URL"
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
### Manually editing a migration file breaks future deploys
|
|
318
|
+
|
|
319
|
+
Prisma checksums every migration file. Editing after apply causes `P3006 checksum mismatch` on every environment where the original already ran. Create a new migration instead.
|
|
320
|
+
|
|
321
|
+
### Breaking schema changes require multi-step migration
|
|
322
|
+
|
|
323
|
+
Adding `NOT NULL` to an existing column or renaming a column in one migration will lock the table or drop data. Use expand-and-contract:
|
|
324
|
+
|
|
325
|
+
```bash
|
|
326
|
+
# Step 1: create migration locally, then deploy
|
|
327
|
+
npx prisma migrate dev --name add_new_column # local only
|
|
328
|
+
npx prisma migrate deploy # staging / production
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
```ts
|
|
332
|
+
// Step 2: backfill data (run in a script or migration job, not in the shell)
|
|
333
|
+
await prisma.user.updateMany({ data: { newColumn: derivedValue } });
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
```bash
|
|
337
|
+
# Step 3: create the NOT NULL constraint migration locally, then deploy
|
|
338
|
+
npx prisma migrate dev --name make_new_column_required # local only
|
|
339
|
+
npx prisma migrate deploy # staging / production
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
### `@updatedAt` does not fire on `updateMany`
|
|
343
|
+
|
|
344
|
+
`@updatedAt` is set automatically only on `update` and `upsert`. Bulk writes leave it stale.
|
|
345
|
+
|
|
346
|
+
```ts
|
|
347
|
+
// BAD: updatedAt stays at its old value
|
|
348
|
+
await prisma.post.updateMany({ where: { authorId }, data: { published: true } });
|
|
349
|
+
|
|
350
|
+
// GOOD
|
|
351
|
+
await prisma.post.updateMany({
|
|
352
|
+
where: { authorId },
|
|
353
|
+
data: { published: true, updatedAt: new Date() },
|
|
354
|
+
});
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
### Soft delete + `findUniqueOrThrow` leaks deleted records
|
|
358
|
+
|
|
359
|
+
`findUniqueOrThrow` throws `P2025` only when the row does not exist in the DB. Soft-deleted rows still exist and are returned without error.
|
|
360
|
+
|
|
361
|
+
`findUniqueOrThrow` requires a unique constraint field in `where` — adding `deletedAt: null` alongside `id` breaks the type because `{ id, deletedAt }` is not a compound unique constraint. Use `findFirstOrThrow` instead.
|
|
362
|
+
|
|
363
|
+
```ts
|
|
364
|
+
// BAD: returns soft-deleted user
|
|
365
|
+
const user = await prisma.user.findUniqueOrThrow({ where: { id } });
|
|
366
|
+
|
|
367
|
+
// BAD: Prisma type error — { id, deletedAt } is not a unique constraint
|
|
368
|
+
const user = await prisma.user.findUniqueOrThrow({ where: { id, deletedAt: null } });
|
|
369
|
+
|
|
370
|
+
// GOOD: findFirstOrThrow supports arbitrary where conditions
|
|
371
|
+
const user = await prisma.user.findFirstOrThrow({ where: { id, deletedAt: null } });
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
### `deleteMany` without `where` deletes every row
|
|
375
|
+
|
|
376
|
+
```ts
|
|
377
|
+
// BAD: silently wipes the table
|
|
378
|
+
await prisma.post.deleteMany();
|
|
379
|
+
|
|
380
|
+
// GOOD
|
|
381
|
+
await prisma.post.deleteMany({ where: { authorId: userId } });
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
## Best Practices
|
|
385
|
+
|
|
386
|
+
| Rule | Reason |
|
|
387
|
+
|---|---|
|
|
388
|
+
| `migrate deploy` in CI/CD, `migrate dev` only locally | `migrate dev` can reset the DB on drift |
|
|
389
|
+
| Map entities to response DTOs | Prevents leaking internal fields |
|
|
390
|
+
| Catch `PrismaClientKnownRequestError` at service boundary | Translate to domain errors |
|
|
391
|
+
| Prefer `*OrThrow` methods over manual null checks | Throws P2025 automatically; use `findFirstOrThrow` when filtering non-unique fields |
|
|
392
|
+
| `connection_limit=1` + external pooler in serverless | Prevents connection exhaustion |
|
|
393
|
+
| Always provide `where` on `deleteMany` | Prevents accidental table wipe |
|
|
394
|
+
| Set `updatedAt: new Date()` manually in `updateMany` | `@updatedAt` skips bulk writes |
|
|
395
|
+
|
|
396
|
+
## Related Skills
|
|
397
|
+
|
|
398
|
+
- `nestjs-patterns` — NestJS service layer that integrates Prisma
|
|
399
|
+
- `postgres-patterns` — PostgreSQL-level indexing and connection tuning
|
|
400
|
+
- `database-migrations` — multi-step migration planning for production
|
|
401
|
+
- `backend-patterns` — general API and service layer design
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: product-capability
|
|
3
|
+
description: Translate PRD intent, roadmap asks, or product discussions into an implementation-ready capability plan that exposes constraints, invariants, interfaces, and unresolved decisions before multi-service work starts. Use when the user needs an ECC-native PRD-to-SRS lane instead of vague planning prose.
|
|
4
|
+
metadata:
|
|
5
|
+
origin: ECC
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Product Capability
|
|
9
|
+
|
|
10
|
+
This skill turns product intent into explicit engineering constraints.
|
|
11
|
+
|
|
12
|
+
Use it when the gap is not "what should we build?" but "what exactly must be true before implementation starts?"
|
|
13
|
+
|
|
14
|
+
## When to Use
|
|
15
|
+
|
|
16
|
+
- A PRD, roadmap item, discussion, or founder note exists, but the implementation constraints are still implicit
|
|
17
|
+
- A feature crosses multiple services, repos, or teams and needs a capability contract before coding
|
|
18
|
+
- Product intent is clear, but architecture, data, lifecycle, or policy implications are still fuzzy
|
|
19
|
+
- Senior engineers keep restating the same hidden assumptions during review
|
|
20
|
+
- You need a reusable artifact that can survive across harnesses and sessions
|
|
21
|
+
|
|
22
|
+
## Canonical Artifact
|
|
23
|
+
|
|
24
|
+
If the repo has a durable product-context file such as `PRODUCT.md`, `docs/product/`, or a program-spec directory, update it there.
|
|
25
|
+
|
|
26
|
+
If no capability manifest exists yet, create one using the template at:
|
|
27
|
+
|
|
28
|
+
- `docs/examples/product-capability-template.md`
|
|
29
|
+
|
|
30
|
+
The goal is not to create another planning stack. The goal is to make hidden capability constraints durable and reusable.
|
|
31
|
+
|
|
32
|
+
## Non-Negotiable Rules
|
|
33
|
+
|
|
34
|
+
- Do not invent product truth. Mark unresolved questions explicitly.
|
|
35
|
+
- Separate user-visible promises from implementation details.
|
|
36
|
+
- Call out what is fixed policy, what is architecture preference, and what is still open.
|
|
37
|
+
- If the request conflicts with existing repo constraints, say so clearly instead of smoothing it over.
|
|
38
|
+
- Prefer one reusable capability artifact over scattered ad hoc notes.
|
|
39
|
+
|
|
40
|
+
## Inputs
|
|
41
|
+
|
|
42
|
+
Read only what is needed:
|
|
43
|
+
|
|
44
|
+
1. Product intent
|
|
45
|
+
- issue, discussion, PRD, roadmap note, founder message
|
|
46
|
+
2. Current architecture
|
|
47
|
+
- relevant repo docs, contracts, schemas, routes, existing workflows
|
|
48
|
+
3. Existing capability context
|
|
49
|
+
- `PRODUCT.md`, design docs, RFCs, migration notes, operating-model docs
|
|
50
|
+
4. Delivery constraints
|
|
51
|
+
- auth, billing, compliance, rollout, backwards compatibility, performance, review policy
|
|
52
|
+
|
|
53
|
+
## Core Workflow
|
|
54
|
+
|
|
55
|
+
### 1. Restate the capability
|
|
56
|
+
|
|
57
|
+
Compress the ask into one precise statement:
|
|
58
|
+
|
|
59
|
+
- who the user or operator is
|
|
60
|
+
- what new capability exists after this ships
|
|
61
|
+
- what outcome changes because of it
|
|
62
|
+
|
|
63
|
+
If this statement is weak, the implementation will drift.
|
|
64
|
+
|
|
65
|
+
### 2. Resolve capability constraints
|
|
66
|
+
|
|
67
|
+
Extract the constraints that must hold before implementation:
|
|
68
|
+
|
|
69
|
+
- business rules
|
|
70
|
+
- scope boundaries
|
|
71
|
+
- invariants
|
|
72
|
+
- trust boundaries
|
|
73
|
+
- data ownership
|
|
74
|
+
- lifecycle transitions
|
|
75
|
+
- rollout / migration requirements
|
|
76
|
+
- failure and recovery expectations
|
|
77
|
+
|
|
78
|
+
These are the things that often live only in senior-engineer memory.
|
|
79
|
+
|
|
80
|
+
### 3. Define the implementation-facing contract
|
|
81
|
+
|
|
82
|
+
Produce an SRS-style capability plan with:
|
|
83
|
+
|
|
84
|
+
- capability summary
|
|
85
|
+
- explicit non-goals
|
|
86
|
+
- actors and surfaces
|
|
87
|
+
- required states and transitions
|
|
88
|
+
- interfaces / inputs / outputs
|
|
89
|
+
- data model implications
|
|
90
|
+
- security / billing / policy constraints
|
|
91
|
+
- observability and operator requirements
|
|
92
|
+
- open questions blocking implementation
|
|
93
|
+
|
|
94
|
+
### 4. Translate into execution
|
|
95
|
+
|
|
96
|
+
End with the exact handoff:
|
|
97
|
+
|
|
98
|
+
- ready for direct implementation
|
|
99
|
+
- needs architecture review first
|
|
100
|
+
- needs product clarification first
|
|
101
|
+
|
|
102
|
+
If useful, point to the next ECC-native lane:
|
|
103
|
+
|
|
104
|
+
- `project-flow-ops`
|
|
105
|
+
- `workspace-surface-audit`
|
|
106
|
+
- `api-connector-builder`
|
|
107
|
+
- `dashboard-builder`
|
|
108
|
+
- `tdd-workflow`
|
|
109
|
+
- `verification-loop`
|
|
110
|
+
|
|
111
|
+
## Output Format
|
|
112
|
+
|
|
113
|
+
Return the result in this order:
|
|
114
|
+
|
|
115
|
+
```text
|
|
116
|
+
CAPABILITY
|
|
117
|
+
- one-paragraph restatement
|
|
118
|
+
|
|
119
|
+
CONSTRAINTS
|
|
120
|
+
- fixed rules, invariants, and boundaries
|
|
121
|
+
|
|
122
|
+
IMPLEMENTATION CONTRACT
|
|
123
|
+
- actors
|
|
124
|
+
- surfaces
|
|
125
|
+
- states and transitions
|
|
126
|
+
- interface/data implications
|
|
127
|
+
|
|
128
|
+
NON-GOALS
|
|
129
|
+
- what this lane explicitly does not own
|
|
130
|
+
|
|
131
|
+
OPEN QUESTIONS
|
|
132
|
+
- blockers or product decisions still required
|
|
133
|
+
|
|
134
|
+
HANDOFF
|
|
135
|
+
- what should happen next and which ECC lane should take it
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Good Outcomes
|
|
139
|
+
|
|
140
|
+
- Product intent is now concrete enough to implement without rediscovering hidden constraints mid-PR.
|
|
141
|
+
- Engineering review has a durable artifact instead of relying on memory or Slack context.
|
|
142
|
+
- The resulting plan is reusable across Claude Code, Codex, Cursor, OpenCode, and ECC 2.0 planning surfaces.
|