@1aboveio/skills 0.10.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/LICENSE +3 -0
- package/README.md +90 -0
- package/bin/1aboveio-skills.mjs +18 -0
- package/package.json +28 -0
- package/runtime/skills/distribution/generated/recipes.json +1189 -0
- package/runtime/skills/distribution/scripts/bundles.mjs +280 -0
- package/runtime/skills/engineering/engineering-runtime/scripts/main-module.mjs +80 -0
- package/skills/backend/airflow-dag-develop/LICENSE +3 -0
- package/skills/backend/airflow-dag-develop/SKILL.md +111 -0
- package/skills/backend/app-debug/LICENSE +3 -0
- package/skills/backend/app-debug/SKILL.md +109 -0
- package/skills/backend/app-debug/references/common-errors.md +128 -0
- package/skills/backend/python-backend/LICENSE +3 -0
- package/skills/backend/python-backend/SKILL.md +326 -0
- package/skills/cicd-pipeline/cloud-build/LICENSE +3 -0
- package/skills/cicd-pipeline/cloud-build/SKILL.md +707 -0
- package/skills/cicd-pipeline/cloud-debug/LICENSE +3 -0
- package/skills/cicd-pipeline/cloud-debug/SKILL.md +316 -0
- package/skills/cicd-pipeline/cloud-debug/references/build-failures.md +238 -0
- package/skills/cicd-pipeline/cloud-debug/references/deploy-failures.md +376 -0
- package/skills/cicd-pipeline/cloud-debug/references/pipeline-failures.md +378 -0
- package/skills/cicd-pipeline/cloud-deploy/LICENSE +3 -0
- package/skills/cicd-pipeline/cloud-deploy/SKILL.md +229 -0
- package/skills/cicd-pipeline/cloud-deploy/references/config-templates.md +257 -0
- package/skills/cicd-pipeline/docker/LICENSE +3 -0
- package/skills/cicd-pipeline/docker/SKILL.md +126 -0
- package/skills/cicd-pipeline/google-cloud/LICENSE +3 -0
- package/skills/cicd-pipeline/google-cloud/SKILL.md +118 -0
- package/skills/cicd-pipeline/google-cloud/references/gcs.md +469 -0
- package/skills/cicd-pipeline/google-cloud/references/iam.md +451 -0
- package/skills/cicd-pipeline/google-cloud/references/project.md +349 -0
- package/skills/cicd-pipeline/google-cloud/references/secrets.md +336 -0
- package/skills/cicd-pipeline/google-cloud/references/vpc.md +312 -0
- package/skills/cicd-pipeline/google-cloud/scripts/create-sa.sh +36 -0
- package/skills/cicd-pipeline/google-cloud/scripts/gcp-config.sh +31 -0
- package/skills/cicd-pipeline/google-cloud/scripts/grant-iap.sh +41 -0
- package/skills/cicd-pipeline/google-cloud/scripts/setup-secrets.sh +48 -0
- package/skills/cicd-pipeline/mergify/LICENSE +3 -0
- package/skills/cicd-pipeline/mergify/SKILL.md +138 -0
- package/skills/cicd-pipeline/mergify/assets/templates/mergify.yml +237 -0
- package/skills/cicd-pipeline/mergify/assets/templates/ruleset.json +46 -0
- package/skills/cicd-pipeline/mergify/references/branch-protection.md +277 -0
- package/skills/cicd-pipeline/mergify/references/configuration.md +183 -0
- package/skills/cicd-pipeline/mergify/references/diagnosis.md +73 -0
- package/skills/cicd-pipeline/mergify/references/traps.md +78 -0
- package/skills/cicd-pipeline/mergify/references/watch-contract.md +218 -0
- package/skills/cicd-pipeline/mergify/scripts/audit-core.mjs +131 -0
- package/skills/cicd-pipeline/mergify/scripts/audit.mjs +4 -0
- package/skills/cicd-pipeline/mergify/scripts/watch-pr-delivery-core.mjs +663 -0
- package/skills/cicd-pipeline/mergify/scripts/watch-pr-delivery.mjs +4 -0
- package/skills/cicd-pipeline/podman/LICENSE +3 -0
- package/skills/cicd-pipeline/podman/SKILL.md +70 -0
- package/skills/cicd-pipeline/podman/agents/openai.yaml +4 -0
- package/skills/cicd-pipeline/podman/assets/templates/podman-compose-socket-directory.yml +6 -0
- package/skills/cicd-pipeline/podman/assets/templates/podman-service-override.conf +3 -0
- package/skills/cicd-pipeline/podman/references/compose-compatibility.md +70 -0
- package/skills/cicd-pipeline/podman/references/networking-and-ports.md +74 -0
- package/skills/cicd-pipeline/podman/references/rootless-services-and-sockets.md +156 -0
- package/skills/cicd-pipeline/podman/references/troubleshooting.md +98 -0
- package/skills/engineering/e2e-test/LICENSE +3 -0
- package/skills/engineering/e2e-test/SKILL.md +156 -0
- package/skills/engineering/e2e-test/assets/ci-gates.cloudbuild.yaml +272 -0
- package/skills/engineering/e2e-test/assets/ci-gates.github.yml +451 -0
- package/skills/engineering/e2e-test/assets/e2e-workflow.yml +282 -0
- package/skills/engineering/e2e-test/references/authoring/auth-flows.md +159 -0
- package/skills/engineering/e2e-test/references/authoring/playwright-config.md +71 -0
- package/skills/engineering/e2e-test/references/authoring/playwright-patterns.md +219 -0
- package/skills/engineering/e2e-test/references/authoring/test-skipping.md +44 -0
- package/skills/engineering/e2e-test/references/ci-integration.md +121 -0
- package/skills/engineering/e2e-test/references/ci-playwright-container.md +280 -0
- package/skills/engineering/e2e-test/references/debugging.md +36 -0
- package/skills/engineering/e2e-test/references/presentation-sweep.md +131 -0
- package/skills/engineering/e2e-test/references/reviewing.md +39 -0
- package/skills/engineering/e2e-test/references/route-discovery.md +50 -0
- package/skills/engineering/e2e-test/references/route-manifest.md +44 -0
- package/skills/engineering/e2e-test/scripts/detect-routes-fastapi.py +290 -0
- package/skills/engineering/e2e-test/scripts/detect-routes-nextjs.mjs +200 -0
- package/skills/engineering/e2e-test/scripts/post-visual-evidence.mjs +158 -0
- package/skills/engineering/e2e-test/scripts/presentation-checks.mjs +171 -0
- package/skills/engineering/e2e-test/scripts/presentation-perceivability.mjs +179 -0
- package/skills/engineering/e2e-test/scripts/presentation-reachability.mjs +154 -0
- package/skills/engineering/e2e-test/scripts/presentation-render-health.mjs +141 -0
- package/skills/engineering/e2e-test/scripts/presentation-sweep.mjs +148 -0
- package/skills/engineering/e2e-test/scripts/presentation-temporal.mjs +127 -0
- package/skills/engineering/e2e-test/scripts/presentation-visual.mjs +84 -0
- package/skills/engineering/e2e-test/scripts/project-route-manifest.mjs +75 -0
- package/skills/engineering/e2e-test/scripts/validate-manifest.mjs +106 -0
- package/skills/engineering/engineering-runtime/LICENSE +3 -0
- package/skills/engineering/engineering-runtime/SKILL.md +10 -0
- package/skills/engineering/engineering-runtime/agents/openai.yaml +6 -0
- package/skills/engineering/engineering-runtime/coherence/workflow.json +553 -0
- package/skills/engineering/engineering-runtime/scripts/exact-head-artifact.mjs +131 -0
- package/skills/engineering/engineering-runtime/scripts/head-check-set.mjs +398 -0
- package/skills/engineering/engineering-runtime/scripts/main-module.mjs +80 -0
- package/skills/engineering/engineering-runtime/scripts/mergify-yaml.mjs +11 -0
- package/skills/engineering/engineering-runtime/scripts/package-lock.json +43 -0
- package/skills/engineering/engineering-runtime/scripts/package.json +10 -0
- package/skills/engineering/engineering-runtime/scripts/required-check-plan.mjs +223 -0
- package/skills/engineering/engineering-runtime/scripts/workflow-coherence.mjs +576 -0
- package/skills/engineering/engineering-runtime/scripts/workflow-policy.mjs +166 -0
- package/skills/engineering/ensure-coverage/LICENSE +3 -0
- package/skills/engineering/ensure-coverage/SKILL.md +136 -0
- package/skills/engineering/ensure-coverage/evals/evals.json +125 -0
- package/skills/engineering/ensure-coverage/references/breadth/coverage-ledger.md +91 -0
- package/skills/engineering/ensure-coverage/references/breadth/inventory-contract.md +83 -0
- package/skills/engineering/ensure-coverage/references/breadth/surface-baseline.md +44 -0
- package/skills/engineering/ensure-coverage/references/breadth/surface-discovery.md +16 -0
- package/skills/engineering/ensure-coverage/references/depth/characterization.md +68 -0
- package/skills/engineering/ensure-coverage/references/depth/coverage.config.example.json +25 -0
- package/skills/engineering/ensure-coverage/references/depth/grading.md +35 -0
- package/skills/engineering/ensure-coverage/references/depth/mock-policy.md +87 -0
- package/skills/engineering/ensure-coverage/references/depth/test-smells.md +23 -0
- package/skills/engineering/ensure-coverage/references/enforcement/ci-contract.md +164 -0
- package/skills/engineering/ensure-coverage/references/enforcement/hooks.md +85 -0
- package/skills/engineering/ensure-coverage/references/examples/coverage-ledger.md +109 -0
- package/skills/engineering/ensure-coverage/references/examples/refund-flow.md +33 -0
- package/skills/engineering/ensure-coverage/references/presentation/axis.md +78 -0
- package/skills/engineering/ensure-coverage/references/presentation/runner-contract.md +74 -0
- package/skills/engineering/ensure-coverage/references/process/audit-mode.md +33 -0
- package/skills/engineering/ensure-coverage/references/process/output-template.md +139 -0
- package/skills/engineering/ensure-coverage/references/process/review-contract-template.md +119 -0
- package/skills/engineering/ensure-coverage/references/process/scope-class.md +178 -0
- package/skills/engineering/ensure-coverage/references/process/test-strategy.md +55 -0
- package/skills/engineering/ensure-coverage/schemas/coverage-config.schema.json +45 -0
- package/skills/engineering/ensure-coverage/schemas/coverage-file.schema.json +93 -0
- package/skills/engineering/ensure-coverage/scripts/adapters/nextjs-inventory.mjs +178 -0
- package/skills/engineering/ensure-coverage/scripts/check-quarantine-expiry.mjs +101 -0
- package/skills/engineering/ensure-coverage/scripts/ci-audit.mjs +358 -0
- package/skills/engineering/ensure-coverage/scripts/coverage-checklist.mjs +494 -0
- package/skills/engineering/ensure-coverage/scripts/coverage-ledger.mjs +663 -0
- package/skills/engineering/ensure-coverage/scripts/design-parity.mjs +591 -0
- package/skills/engineering/ensure-coverage/scripts/evidence-block.mjs +367 -0
- package/skills/engineering/ensure-coverage/scripts/lint-tests.mjs +269 -0
- package/skills/engineering/ensure-coverage/scripts/mock-policy-config.mjs +176 -0
- package/skills/engineering/ensure-coverage/scripts/package-lock.json +76 -0
- package/skills/engineering/ensure-coverage/scripts/package.json +19 -0
- package/skills/engineering/ensure-coverage/scripts/scope-class.mjs +554 -0
- package/skills/engineering/harness-runtime/LICENSE +3 -0
- package/skills/engineering/harness-runtime/SKILL.md +18 -0
- package/skills/engineering/harness-runtime/agents/openai.yaml +6 -0
- package/skills/engineering/harness-runtime/bin/discover-models.mjs +4 -0
- package/skills/engineering/harness-runtime/bin/model-catalog.mjs +4 -0
- package/skills/engineering/harness-runtime/contracts.md +15 -0
- package/skills/engineering/harness-runtime/discover-models.mjs +392 -0
- package/skills/engineering/harness-runtime/fixtures/native-question-schemas.json +33 -0
- package/skills/engineering/harness-runtime/fixtures/question-responses.json +54 -0
- package/skills/engineering/harness-runtime/index.mjs +767 -0
- package/skills/engineering/harness-runtime/model-catalog.mjs +787 -0
- package/skills/engineering/harness-runtime/native-question-contracts.md +37 -0
- package/skills/engineering/harness-runtime/references/model-catalog-seed.json +159 -0
- package/skills/engineering/harness-runtime/references/model-catalog.md +57 -0
- package/skills/engineering/implement-and-pr/LICENSE +3 -0
- package/skills/engineering/implement-and-pr/SKILL.md +176 -0
- package/skills/engineering/implement-and-pr/references/ci-iteration.md +10 -0
- package/skills/engineering/implement-and-pr/references/closeout.md +27 -0
- package/skills/engineering/implement-and-pr/references/contract-complete-fix-rounds.md +34 -0
- package/skills/engineering/implement-and-pr/references/evidence-rules.md +39 -0
- package/skills/engineering/implement-and-pr/references/incremental-plan.md +16 -0
- package/skills/engineering/implement-and-pr/references/self-review.md +23 -0
- package/skills/engineering/implement-and-pr/references/tdd-mode.md +18 -0
- package/skills/engineering/resolve-issues/LICENSE +3 -0
- package/skills/engineering/resolve-issues/SKILL.md +167 -0
- package/skills/engineering/resolve-issues/generated/workflow-repair-policy.json +448 -0
- package/skills/engineering/resolve-issues/references/breaker.md +82 -0
- package/skills/engineering/resolve-issues/references/deliverables.md +27 -0
- package/skills/engineering/resolve-issues/references/delivery.md +108 -0
- package/skills/engineering/resolve-issues/references/evidence-lane.md +21 -0
- package/skills/engineering/resolve-issues/references/exact-head-ci.md +287 -0
- package/skills/engineering/resolve-issues/references/fan-out.md +33 -0
- package/skills/engineering/resolve-issues/references/finalization.md +68 -0
- package/skills/engineering/resolve-issues/references/guarantees.md +10 -0
- package/skills/engineering/resolve-issues/references/high-risk.md +29 -0
- package/skills/engineering/resolve-issues/references/incidents/848/README.md +156 -0
- package/skills/engineering/resolve-issues/references/intake.md +86 -0
- package/skills/engineering/resolve-issues/references/integration-gate.md +53 -0
- package/skills/engineering/resolve-issues/references/interference.md +87 -0
- package/skills/engineering/resolve-issues/references/loop.md +134 -0
- package/skills/engineering/resolve-issues/references/model-catalog.md +9 -0
- package/skills/engineering/resolve-issues/references/postmortem.md +27 -0
- package/skills/engineering/resolve-issues/references/pre-flight-model-slots.md +41 -0
- package/skills/engineering/resolve-issues/references/pre-flight-recording-and-checkout.md +48 -0
- package/skills/engineering/resolve-issues/references/pre-flight.md +41 -0
- package/skills/engineering/resolve-issues/references/regression-checklist.md +26 -0
- package/skills/engineering/resolve-issues/references/run-state.md +288 -0
- package/skills/engineering/resolve-issues/references/sandboxed-testing.md +48 -0
- package/skills/engineering/resolve-issues/references/spawn-contract.md +96 -0
- package/skills/engineering/resolve-issues/references/terminal-evidence-journal.md +40 -0
- package/skills/engineering/resolve-issues/references/why.md +653 -0
- package/skills/engineering/resolve-issues/schemas/fix-round.schema.json +49 -0
- package/skills/engineering/resolve-issues/scripts/combine-and-verify.mjs +721 -0
- package/skills/engineering/resolve-issues/scripts/component-candidate.mjs +962 -0
- package/skills/engineering/resolve-issues/scripts/contract-revision.mjs +220 -0
- package/skills/engineering/resolve-issues/scripts/detect-delivery-mode.mjs +420 -0
- package/skills/engineering/resolve-issues/scripts/detect-target-branch.mjs +256 -0
- package/skills/engineering/resolve-issues/scripts/detect-workspace-mode.mjs +168 -0
- package/skills/engineering/resolve-issues/scripts/discover-models.mjs +9 -0
- package/skills/engineering/resolve-issues/scripts/doctrine.mjs +62 -0
- package/skills/engineering/resolve-issues/scripts/evidence-lifecycle-contract.mjs +191 -0
- package/skills/engineering/resolve-issues/scripts/exact-head-ci.mjs +413 -0
- package/skills/engineering/resolve-issues/scripts/exact-head-github-provider.mjs +332 -0
- package/skills/engineering/resolve-issues/scripts/finalize.mjs +488 -0
- package/skills/engineering/resolve-issues/scripts/fix-rounds.mjs +3307 -0
- package/skills/engineering/resolve-issues/scripts/fixtures/evidence-lifecycle-circular-1001.json +16 -0
- package/skills/engineering/resolve-issues/scripts/fixtures/evidence-lifecycle-valid-sequencing.json +51 -0
- package/skills/engineering/resolve-issues/scripts/fixtures/fmm-express-830-component-candidate.json +17 -0
- package/skills/engineering/resolve-issues/scripts/fixtures/head-check-set-1081.json +166 -0
- package/skills/engineering/resolve-issues/scripts/gate-value-series.mjs +92 -0
- package/skills/engineering/resolve-issues/scripts/guide-index.mjs +73 -0
- package/skills/engineering/resolve-issues/scripts/head-check-set.mjs +159 -0
- package/skills/engineering/resolve-issues/scripts/interference.mjs +427 -0
- package/skills/engineering/resolve-issues/scripts/model-catalog.mjs +9 -0
- package/skills/engineering/resolve-issues/scripts/next-operations.mjs +419 -0
- package/skills/engineering/resolve-issues/scripts/postmortem.mjs +909 -0
- package/skills/engineering/resolve-issues/scripts/preflight-questions.mjs +322 -0
- package/skills/engineering/resolve-issues/scripts/reconcile-contained-unit-prs.mjs +415 -0
- package/skills/engineering/resolve-issues/scripts/release-state-contract.mjs +697 -0
- package/skills/engineering/resolve-issues/scripts/report.mjs +494 -0
- package/skills/engineering/resolve-issues/scripts/required-check-plan.mjs +172 -0
- package/skills/engineering/resolve-issues/scripts/round-metadata.mjs +79 -0
- package/skills/engineering/resolve-issues/scripts/run-state-review6-cases.mjs +334 -0
- package/skills/engineering/resolve-issues/scripts/run-state.mjs +4784 -0
- package/skills/engineering/resolve-issues/scripts/sandbox-selftest.mjs +395 -0
- package/skills/engineering/resolve-issues/scripts/spawn-contract.mjs +290 -0
- package/skills/engineering/resolve-issues/scripts/terminal-dispositions.mjs +170 -0
- package/skills/engineering/resolve-issues/scripts/terminal-evidence-journal.mjs +293 -0
- package/skills/engineering/resolve-issues/scripts/unit-kind.mjs +197 -0
- package/skills/engineering/resolve-issues/scripts/unit-lifecycle.mjs +127 -0
- package/skills/engineering/resolve-issues/scripts/watch-delivery.mjs +893 -0
- package/skills/engineering/resolve-issues/scripts/workspaces.mjs +829 -0
- package/skills/engineering/resolve-issues/workflows/independent-review.workflow.js +290 -0
- package/skills/engineering/resolve-issues/workflows/prior-art-scan.workflow.js +80 -0
- package/skills/engineering/resolve-issues/workflows/workflow-smoke.mjs +102 -0
- package/skills/engineering/resolve-release/LICENSE +3 -0
- package/skills/engineering/resolve-release/SKILL.md +112 -0
- package/skills/engineering/resolve-release/references/assembly.md +137 -0
- package/skills/engineering/resolve-release/references/auto-when-green.md +56 -0
- package/skills/engineering/resolve-release/references/candidate.md +167 -0
- package/skills/engineering/resolve-release/references/exposure.md +178 -0
- package/skills/engineering/resolve-release/references/handoff.md +24 -0
- package/skills/engineering/resolve-release/references/postmortem.md +230 -0
- package/skills/engineering/resolve-release/references/preflight.md +207 -0
- package/skills/engineering/resolve-release/references/principles.md +94 -0
- package/skills/engineering/resolve-release/references/regression-checklist.md +36 -0
- package/skills/engineering/resolve-release/references/related-skills.md +12 -0
- package/skills/engineering/resolve-release/references/routing.md +149 -0
- package/skills/engineering/resolve-release/references/verified-sha-github-flow.md +285 -0
- package/skills/engineering/resolve-release/references/versioning.md +202 -0
- package/skills/engineering/resolve-release/references/why.md +53 -0
- package/skills/engineering/resolve-release/scripts/adapter-completion-artifact.mjs +389 -0
- package/skills/engineering/resolve-release/scripts/build-changes.mjs +209 -0
- package/skills/engineering/resolve-release/scripts/candidate-hygiene.mjs +407 -0
- package/skills/engineering/resolve-release/scripts/candidate-identity.mjs +904 -0
- package/skills/engineering/resolve-release/scripts/candidate-traffic.mjs +81 -0
- package/skills/engineering/resolve-release/scripts/checked-adapter-loader.mjs +612 -0
- package/skills/engineering/resolve-release/scripts/close-attempt.mjs +135 -0
- package/skills/engineering/resolve-release/scripts/closeout-release.mjs +161 -0
- package/skills/engineering/resolve-release/scripts/doctrine.mjs +106 -0
- package/skills/engineering/resolve-release/scripts/durable-processing.mjs +522 -0
- package/skills/engineering/resolve-release/scripts/ensure-target-green.mjs +659 -0
- package/skills/engineering/resolve-release/scripts/evidence-bundle.mjs +1014 -0
- package/skills/engineering/resolve-release/scripts/finalize-release.mjs +526 -0
- package/skills/engineering/resolve-release/scripts/fixtures/durable-processing-adapter.mjs +169 -0
- package/skills/engineering/resolve-release/scripts/green-gate.mjs +599 -0
- package/skills/engineering/resolve-release/scripts/isolated-adapter-evaluator.mjs +752 -0
- package/skills/engineering/resolve-release/scripts/metadata-pr-status.mjs +56 -0
- package/skills/engineering/resolve-release/scripts/metadata-sync.mjs +1538 -0
- package/skills/engineering/resolve-release/scripts/postmortem.mjs +381 -0
- package/skills/engineering/resolve-release/scripts/preflight-probes.mjs +498 -0
- package/skills/engineering/resolve-release/scripts/production-endpoints.mjs +326 -0
- package/skills/engineering/resolve-release/scripts/rc-circuit-breaker.mjs +272 -0
- package/skills/engineering/resolve-release/scripts/report.mjs +417 -0
- package/skills/engineering/resolve-release/scripts/reprobe-credentials.mjs +114 -0
- package/skills/engineering/resolve-release/scripts/revalidate-candidate.mjs +238 -0
- package/skills/engineering/resolve-release/scripts/review-packet.mjs +503 -0
- package/skills/engineering/resolve-release/scripts/rollback-floor.mjs +263 -0
- package/skills/engineering/resolve-release/scripts/version-assert.mjs +339 -0
- package/skills/engineering/resolve-release/scripts/version-postmortem.mjs +485 -0
- package/skills/engineering/resolve-release/scripts/version.mjs +1199 -0
- package/skills/engineering/resolve-release/scripts/watch-candidate-delivery.mjs +449 -0
- package/skills/engineering/resolve-release/vendor/ACORN-LICENSE +21 -0
- package/skills/engineering/resolve-release/vendor/README.md +60 -0
- package/skills/engineering/resolve-release/vendor/acorn.mjs +6233 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/LICENSE +21 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/README.md +341 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/README.template.md +70 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-TAV5CUKK.mjs +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-TAV5CUKK.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-V2S4ZYJR.mjs +7 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-V2S4ZYJR.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.d.mts +2033 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.d.ts +2033 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.js +7 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.js.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.mjs +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-ES6BEMUI.mjs +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-ES6BEMUI.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-asyncify-2EFITU5U.mjs +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-asyncify-2EFITU5U.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/package.json +49 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/LICENSE +21 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/README.md +5 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.d.mts +549 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.d.ts +549 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.js +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.js.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.mjs +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/package.json +36 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/LICENSE +47 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/README.md +82 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.browser.d.ts +11 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.browser.mjs +22 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.cjs +21 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.cloudflare.cjs +21 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.cloudflare.d.ts +11 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.d.ts +11 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.mjs +25 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.wasm +0 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.d.mts +85 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.d.ts +85 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.js +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.js.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.mjs +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.d.mts +20 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.d.ts +20 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.js +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.js.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.mjs +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/package.json +61 -0
- package/skills/engineering/review-pr/LICENSE +3 -0
- package/skills/engineering/review-pr/SKILL.md +123 -0
- package/skills/engineering/review-pr/references/adversarial-reviewer-prompt.md +42 -0
- package/skills/engineering/review-pr/references/code-correctness.md +5 -0
- package/skills/engineering/review-pr/references/contract-freshness.md +9 -0
- package/skills/engineering/review-pr/references/coordination.md +18 -0
- package/skills/engineering/review-pr/references/domain-hazards.md +123 -0
- package/skills/engineering/review-pr/references/finding-themes.md +7 -0
- package/skills/engineering/review-pr/references/github-posting.md +98 -0
- package/skills/engineering/review-pr/references/golden-path-smoke.md +5 -0
- package/skills/engineering/review-pr/references/incremental-output.md +16 -0
- package/skills/engineering/review-pr/references/inputs-and-discovery.md +31 -0
- package/skills/engineering/review-pr/references/output-format.md +99 -0
- package/skills/engineering/review-pr/references/over-mock-screen.md +7 -0
- package/skills/engineering/review-pr/references/promotion-prs.md +16 -0
- package/skills/engineering/review-pr/references/re-review.md +18 -0
- package/skills/engineering/review-pr/references/review-method.md +199 -0
- package/skills/engineering/review-pr/references/review-mode.md +30 -0
- package/skills/engineering/review-pr/references/review-posture.md +53 -0
- package/skills/engineering/review-pr/references/round1-depth.md +62 -0
- package/skills/engineering/review-pr/references/scripts.md +17 -0
- package/skills/engineering/review-pr/references/workflow.md +16 -0
- package/skills/engineering/review-pr/schemas/findings.schema.json +282 -0
- package/skills/engineering/review-pr/scripts/finding-contract.mjs +285 -0
- package/skills/engineering/review-pr/scripts/post-review.mjs +405 -0
- package/skills/engineering/review-pr/scripts/pr-context.mjs +207 -0
- package/skills/engineering/review-pr/scripts/scan-diff.mjs +365 -0
- package/skills/engineering/review-pr/scripts/theme-contract.mjs +57 -0
- package/skills/engineering/smoke/LICENSE +3 -0
- package/skills/engineering/smoke/SKILL.md +131 -0
- package/skills/engineering/smoke/assets/smoke.manifest.example.json +53 -0
- package/skills/engineering/smoke/references/manifest.md +192 -0
- package/skills/engineering/smoke/scripts/smoke.mjs +713 -0
- package/skills/fullstack/better-auth/LICENSE +3 -0
- package/skills/fullstack/better-auth/SKILL.md +601 -0
- package/skills/fullstack/better-auth/references/feishu-api.md +270 -0
- package/skills/fullstack/monorepo/LICENSE +3 -0
- package/skills/fullstack/monorepo/SKILL.md +465 -0
- package/skills/fullstack/nextjs-fullstack/LICENSE +3 -0
- package/skills/fullstack/nextjs-fullstack/SKILL.md +210 -0
- package/skills/fullstack/nextjs-fullstack/conventions.md +318 -0
- package/skills/fullstack/nextjs-fullstack/frontend-conventions.md +61 -0
- package/skills/fullstack/nextjs-fullstack/nextjs16.md +287 -0
- package/skills/fullstack/nextjs-fullstack/server-actions.md +409 -0
- package/skills/fullstack/prisma-setup/LICENSE +3 -0
- package/skills/fullstack/prisma-setup/SKILL.md +180 -0
- package/skills/fullstack/prisma-setup/nextjs.md +258 -0
- package/skills/fullstack/prisma-setup/turborepo.md +301 -0
- package/skills/fullstack/shadcn/LICENSE +3 -0
- package/skills/fullstack/shadcn/SKILL.md +119 -0
- package/skills/fullstack/shadcn/assets/shadcn-small.png +0 -0
- package/skills/fullstack/shadcn/assets/shadcn.png +0 -0
- package/skills/fullstack/shadcn/cli.md +411 -0
- package/skills/fullstack/shadcn/customization.md +224 -0
- package/skills/fullstack/shadcn/evals/evals.json +90 -0
- package/skills/fullstack/shadcn/mcp.md +101 -0
- package/skills/fullstack/shadcn/rules/base-vs-radix.md +323 -0
- package/skills/fullstack/shadcn/rules/component-selection.md +67 -0
- package/skills/fullstack/shadcn/rules/composition.md +195 -0
- package/skills/fullstack/shadcn/rules/data-table.md +201 -0
- package/skills/fullstack/shadcn/rules/forms.md +255 -0
- package/skills/fullstack/shadcn/rules/icons.md +103 -0
- package/skills/fullstack/shadcn/rules/styling.md +167 -0
- package/skills/fullstack/zod-v4/LICENSE +3 -0
- package/skills/fullstack/zod-v4/SKILL.md +287 -0
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
# Next.js + Prisma v7 Bootstrap
|
|
2
|
+
|
|
3
|
+
Complete setup guide for Prisma v7 in a standalone Next.js App Router project.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Setup Workflow
|
|
8
|
+
|
|
9
|
+
### 1. Install Dependencies
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install prisma tsx --save-dev
|
|
13
|
+
npm install @prisma/adapter-pg @prisma/client dotenv
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
### 2. Initialize Prisma
|
|
17
|
+
|
|
18
|
+
**Interactive command - run manually:**
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npx prisma init --db --output ../app/generated/prisma
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
This creates:
|
|
25
|
+
- `prisma/schema.prisma`
|
|
26
|
+
- `prisma.config.ts`
|
|
27
|
+
- `.env` with DATABASE_URL
|
|
28
|
+
|
|
29
|
+
Ensure `.env` uses `postgres://` URL scheme.
|
|
30
|
+
|
|
31
|
+
### 3. Update Schema
|
|
32
|
+
|
|
33
|
+
```prisma
|
|
34
|
+
generator client {
|
|
35
|
+
provider = "prisma-client"
|
|
36
|
+
output = "../app/generated/prisma"
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
datasource db {
|
|
40
|
+
provider = "postgresql"
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
model User {
|
|
44
|
+
id Int @id @default(autoincrement())
|
|
45
|
+
email String @unique
|
|
46
|
+
name String?
|
|
47
|
+
createdAt DateTime @default(now())
|
|
48
|
+
updatedAt DateTime @updatedAt
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 4. Create Prisma Client
|
|
53
|
+
|
|
54
|
+
```typescript
|
|
55
|
+
// lib/prisma.ts
|
|
56
|
+
import { PrismaClient } from "../app/generated/prisma/client"
|
|
57
|
+
import { PrismaPg } from "@prisma/adapter-pg"
|
|
58
|
+
|
|
59
|
+
const adapter = new PrismaPg({
|
|
60
|
+
connectionString: process.env.DATABASE_URL!,
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
const globalForPrisma = global as unknown as { prisma: PrismaClient }
|
|
64
|
+
|
|
65
|
+
const prisma = globalForPrisma.prisma || new PrismaClient({ adapter })
|
|
66
|
+
|
|
67
|
+
if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = prisma
|
|
68
|
+
|
|
69
|
+
export default prisma
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### 5. Add NPM Scripts
|
|
73
|
+
|
|
74
|
+
```json
|
|
75
|
+
{
|
|
76
|
+
"scripts": {
|
|
77
|
+
"dev": "next dev",
|
|
78
|
+
"build": "next build",
|
|
79
|
+
"db:test": "tsx scripts/test-database.ts",
|
|
80
|
+
"db:studio": "prisma studio"
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 6. Create Test Script
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
// scripts/test-database.ts
|
|
89
|
+
import "dotenv/config"
|
|
90
|
+
import prisma from "../lib/prisma"
|
|
91
|
+
|
|
92
|
+
async function testDatabase() {
|
|
93
|
+
console.log("Testing Prisma connection...\n")
|
|
94
|
+
|
|
95
|
+
try {
|
|
96
|
+
console.log("Connected!")
|
|
97
|
+
|
|
98
|
+
const user = await prisma.user.create({
|
|
99
|
+
data: { email: "test@example.com", name: "Test" },
|
|
100
|
+
})
|
|
101
|
+
console.log("Created:", user)
|
|
102
|
+
|
|
103
|
+
const users = await prisma.user.findMany()
|
|
104
|
+
console.log(`Found ${users.length} users`)
|
|
105
|
+
|
|
106
|
+
console.log("\nAll tests passed!")
|
|
107
|
+
} catch (error) {
|
|
108
|
+
console.error("Error:", error)
|
|
109
|
+
process.exit(1)
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
testDatabase()
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### 7. Push Schema & Test
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
npx prisma db push
|
|
120
|
+
npx prisma generate
|
|
121
|
+
npm run db:test
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## API Route Example
|
|
127
|
+
|
|
128
|
+
```typescript
|
|
129
|
+
// app/api/users/route.ts
|
|
130
|
+
import { NextRequest, NextResponse } from "next/server"
|
|
131
|
+
import prisma from "../../../lib/prisma"
|
|
132
|
+
|
|
133
|
+
export async function GET(request: NextRequest) {
|
|
134
|
+
try {
|
|
135
|
+
const users = await prisma.user.findMany()
|
|
136
|
+
return NextResponse.json(users)
|
|
137
|
+
} catch (error) {
|
|
138
|
+
console.error("Error fetching users:", error)
|
|
139
|
+
return NextResponse.json(
|
|
140
|
+
{ error: "Failed to fetch users" },
|
|
141
|
+
{ status: 500 }
|
|
142
|
+
)
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
export async function POST(request: NextRequest) {
|
|
147
|
+
try {
|
|
148
|
+
const body = await request.json()
|
|
149
|
+
const user = await prisma.user.create({
|
|
150
|
+
data: { email: body.email, name: body.name },
|
|
151
|
+
})
|
|
152
|
+
return NextResponse.json(user, { status: 201 })
|
|
153
|
+
} catch (error) {
|
|
154
|
+
console.error("Error creating user:", error)
|
|
155
|
+
return NextResponse.json(
|
|
156
|
+
{ error: "Failed to create user" },
|
|
157
|
+
{ status: 500 }
|
|
158
|
+
)
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Server Component Example
|
|
166
|
+
|
|
167
|
+
```typescript
|
|
168
|
+
// app/page.tsx
|
|
169
|
+
import prisma from "../lib/prisma"
|
|
170
|
+
|
|
171
|
+
export default async function Home() {
|
|
172
|
+
let users = []
|
|
173
|
+
let error = null
|
|
174
|
+
|
|
175
|
+
try {
|
|
176
|
+
users = await prisma.user.findMany({
|
|
177
|
+
orderBy: { createdAt: "desc" },
|
|
178
|
+
})
|
|
179
|
+
} catch (e) {
|
|
180
|
+
console.error("Error:", e)
|
|
181
|
+
error = "Failed to load users"
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
return (
|
|
185
|
+
<main className="p-8">
|
|
186
|
+
<h1>Users</h1>
|
|
187
|
+
{error ? (
|
|
188
|
+
<p className="text-red-500">{error}</p>
|
|
189
|
+
) : users.length === 0 ? (
|
|
190
|
+
<p>No users yet</p>
|
|
191
|
+
) : (
|
|
192
|
+
<ul>
|
|
193
|
+
{users.map((user) => (
|
|
194
|
+
<li key={user.id}>{user.name} ({user.email})</li>
|
|
195
|
+
))}
|
|
196
|
+
</ul>
|
|
197
|
+
)}
|
|
198
|
+
</main>
|
|
199
|
+
)
|
|
200
|
+
}
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## File Structure
|
|
206
|
+
|
|
207
|
+
```
|
|
208
|
+
project/
|
|
209
|
+
├── app/
|
|
210
|
+
│ ├── generated/
|
|
211
|
+
│ │ └── prisma/ # Generated client
|
|
212
|
+
│ ├── api/
|
|
213
|
+
│ │ └── users/
|
|
214
|
+
│ │ └── route.ts
|
|
215
|
+
│ └── page.tsx
|
|
216
|
+
├── lib/
|
|
217
|
+
│ └── prisma.ts # Singleton client
|
|
218
|
+
├── prisma/
|
|
219
|
+
│ ├── schema.prisma
|
|
220
|
+
│ └── migrations/
|
|
221
|
+
├── scripts/
|
|
222
|
+
│ └── test-database.ts
|
|
223
|
+
├── prisma.config.ts
|
|
224
|
+
├── .env
|
|
225
|
+
└── package.json
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## Troubleshooting
|
|
231
|
+
|
|
232
|
+
### "Cannot find module"
|
|
233
|
+
|
|
234
|
+
Check import path includes `/client`:
|
|
235
|
+
```typescript
|
|
236
|
+
// Correct
|
|
237
|
+
import { PrismaClient } from "../app/generated/prisma/client"
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### "DATABASE_URL not found"
|
|
241
|
+
|
|
242
|
+
Ensure `import "dotenv/config"` is at top of:
|
|
243
|
+
- `prisma.config.ts`
|
|
244
|
+
- `scripts/test-database.ts`
|
|
245
|
+
|
|
246
|
+
### "Connection refused"
|
|
247
|
+
|
|
248
|
+
Verify DATABASE_URL uses TCP URL (`postgres://...`), not HTTP URL.
|
|
249
|
+
|
|
250
|
+
### "prisma-client-js deprecated"
|
|
251
|
+
|
|
252
|
+
Update generator:
|
|
253
|
+
```prisma
|
|
254
|
+
generator client {
|
|
255
|
+
provider = "prisma-client" # Not "prisma-client-js"
|
|
256
|
+
output = "../app/generated/prisma"
|
|
257
|
+
}
|
|
258
|
+
```
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
# Turborepo + Prisma v7 Setup
|
|
2
|
+
|
|
3
|
+
Monorepo setup with shared Prisma package across multiple apps.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Monorepo Layout
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
repo/
|
|
11
|
+
├── apps/
|
|
12
|
+
│ ├── web/ # Next.js app
|
|
13
|
+
│ └── admin/ # Another Next app
|
|
14
|
+
├── packages/
|
|
15
|
+
│ ├── db/ # Prisma package
|
|
16
|
+
│ └── ui/ # Shared UI
|
|
17
|
+
├── turbo.json
|
|
18
|
+
├── package.json
|
|
19
|
+
└── .env
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
**Key rule:** Prisma lives in `packages/db`, not inside an app.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Package Structure: packages/db
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
packages/db/
|
|
30
|
+
├── prisma/
|
|
31
|
+
│ ├── schema.prisma
|
|
32
|
+
│ └── migrations/
|
|
33
|
+
├── src/
|
|
34
|
+
│ ├── generated/
|
|
35
|
+
│ │ └── prisma/ # Generated client
|
|
36
|
+
│ ├── client.ts # Singleton
|
|
37
|
+
│ └── index.ts # Exports
|
|
38
|
+
├── scripts/
|
|
39
|
+
│ └── test-database.ts
|
|
40
|
+
├── prisma.config.ts
|
|
41
|
+
└── package.json
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Schema Configuration
|
|
47
|
+
|
|
48
|
+
```prisma
|
|
49
|
+
// packages/db/prisma/schema.prisma
|
|
50
|
+
generator client {
|
|
51
|
+
provider = "prisma-client"
|
|
52
|
+
output = "../src/generated/prisma"
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
datasource db {
|
|
56
|
+
provider = "postgresql"
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
model User {
|
|
60
|
+
id Int @id @default(autoincrement())
|
|
61
|
+
email String @unique
|
|
62
|
+
name String?
|
|
63
|
+
createdAt DateTime @default(now())
|
|
64
|
+
updatedAt DateTime @updatedAt
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Prisma Config
|
|
71
|
+
|
|
72
|
+
```typescript
|
|
73
|
+
// packages/db/prisma.config.ts
|
|
74
|
+
import "dotenv/config"
|
|
75
|
+
import { defineConfig, env } from "prisma/config"
|
|
76
|
+
|
|
77
|
+
export default defineConfig({
|
|
78
|
+
schema: "prisma/schema.prisma",
|
|
79
|
+
migrations: {
|
|
80
|
+
path: "prisma/migrations",
|
|
81
|
+
},
|
|
82
|
+
datasource: {
|
|
83
|
+
url: env("DATABASE_URL"),
|
|
84
|
+
},
|
|
85
|
+
})
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Client Singleton
|
|
91
|
+
|
|
92
|
+
```typescript
|
|
93
|
+
// packages/db/src/client.ts
|
|
94
|
+
import { PrismaClient } from "./generated/prisma/client"
|
|
95
|
+
import { PrismaPg } from "@prisma/adapter-pg"
|
|
96
|
+
|
|
97
|
+
const adapter = new PrismaPg({
|
|
98
|
+
connectionString: process.env.DATABASE_URL!,
|
|
99
|
+
})
|
|
100
|
+
|
|
101
|
+
const globalForPrisma = globalThis as unknown as {
|
|
102
|
+
prisma?: PrismaClient
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export const prisma =
|
|
106
|
+
globalForPrisma.prisma ?? new PrismaClient({ adapter })
|
|
107
|
+
|
|
108
|
+
if (process.env.NODE_ENV !== "production") {
|
|
109
|
+
globalForPrisma.prisma = prisma
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export default prisma
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Package Exports
|
|
118
|
+
|
|
119
|
+
```typescript
|
|
120
|
+
// packages/db/src/index.ts
|
|
121
|
+
export { prisma } from "./client"
|
|
122
|
+
export * from "./generated/prisma"
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
```json
|
|
126
|
+
// packages/db/package.json
|
|
127
|
+
{
|
|
128
|
+
"name": "@repo/db",
|
|
129
|
+
"private": true,
|
|
130
|
+
"main": "src/index.ts",
|
|
131
|
+
"types": "src/index.ts",
|
|
132
|
+
"scripts": {
|
|
133
|
+
"db:generate": "prisma generate",
|
|
134
|
+
"db:push": "prisma db push",
|
|
135
|
+
"db:migrate": "prisma migrate dev",
|
|
136
|
+
"db:studio": "prisma studio",
|
|
137
|
+
"db:test": "tsx scripts/test-database.ts"
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## Turbo Configuration
|
|
145
|
+
|
|
146
|
+
```json
|
|
147
|
+
// turbo.json
|
|
148
|
+
{
|
|
149
|
+
"globalEnv": ["DATABASE_URL"],
|
|
150
|
+
"tasks": {
|
|
151
|
+
"dev": {
|
|
152
|
+
"cache": false,
|
|
153
|
+
"persistent": true,
|
|
154
|
+
"dependsOn": ["^db:generate"]
|
|
155
|
+
},
|
|
156
|
+
"build": {
|
|
157
|
+
"dependsOn": ["^db:generate"],
|
|
158
|
+
"outputs": [".next/**", "dist/**"]
|
|
159
|
+
},
|
|
160
|
+
"db:generate": {
|
|
161
|
+
"cache": false
|
|
162
|
+
},
|
|
163
|
+
"db:migrate": {
|
|
164
|
+
"cache": false
|
|
165
|
+
},
|
|
166
|
+
"db:studio": {
|
|
167
|
+
"cache": false
|
|
168
|
+
},
|
|
169
|
+
"db:test": {
|
|
170
|
+
"cache": false,
|
|
171
|
+
"dependsOn": ["db:generate"]
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## Root Scripts
|
|
180
|
+
|
|
181
|
+
```json
|
|
182
|
+
// package.json (root)
|
|
183
|
+
{
|
|
184
|
+
"scripts": {
|
|
185
|
+
"dev": "turbo dev",
|
|
186
|
+
"build": "turbo build",
|
|
187
|
+
"db:generate": "turbo run db:generate",
|
|
188
|
+
"db:push": "turbo run db:push",
|
|
189
|
+
"db:migrate": "turbo run db:migrate",
|
|
190
|
+
"db:studio": "turbo run db:studio",
|
|
191
|
+
"db:test": "turbo run db:test"
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## Using in Apps
|
|
199
|
+
|
|
200
|
+
### Add Dependency
|
|
201
|
+
|
|
202
|
+
```json
|
|
203
|
+
// apps/web/package.json
|
|
204
|
+
{
|
|
205
|
+
"dependencies": {
|
|
206
|
+
"@repo/db": "*"
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### Import in Server Code
|
|
212
|
+
|
|
213
|
+
```typescript
|
|
214
|
+
// apps/web/app/api/users/route.ts
|
|
215
|
+
import { prisma } from "@repo/db"
|
|
216
|
+
import { NextResponse } from "next/server"
|
|
217
|
+
|
|
218
|
+
export async function GET() {
|
|
219
|
+
try {
|
|
220
|
+
const users = await prisma.user.findMany()
|
|
221
|
+
return NextResponse.json(users)
|
|
222
|
+
} catch (e) {
|
|
223
|
+
console.error(e)
|
|
224
|
+
return NextResponse.json({ error: "Failed" }, { status: 500 })
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## Test Script
|
|
232
|
+
|
|
233
|
+
```typescript
|
|
234
|
+
// packages/db/scripts/test-database.ts
|
|
235
|
+
import "dotenv/config"
|
|
236
|
+
import prisma from "../src/client"
|
|
237
|
+
|
|
238
|
+
async function testDatabase() {
|
|
239
|
+
console.log("Testing connection...\n")
|
|
240
|
+
|
|
241
|
+
try {
|
|
242
|
+
console.log("Connected!")
|
|
243
|
+
|
|
244
|
+
const user = await prisma.user.create({
|
|
245
|
+
data: { email: "demo@example.com", name: "Demo" }
|
|
246
|
+
})
|
|
247
|
+
console.log("Created:", user)
|
|
248
|
+
|
|
249
|
+
const users = await prisma.user.findMany()
|
|
250
|
+
console.log(`Found ${users.length} users`)
|
|
251
|
+
|
|
252
|
+
console.log("\nAll tests passed!")
|
|
253
|
+
} catch (error) {
|
|
254
|
+
console.error("Error:", error)
|
|
255
|
+
process.exit(1)
|
|
256
|
+
} finally {
|
|
257
|
+
await prisma.$disconnect()
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
testDatabase()
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## Setup Workflow
|
|
267
|
+
|
|
268
|
+
1. Create Turborepo or use existing
|
|
269
|
+
2. Add `packages/db`, install Prisma v7 deps
|
|
270
|
+
3. Initialize Prisma in packages/db:
|
|
271
|
+
```bash
|
|
272
|
+
cd packages/db
|
|
273
|
+
npx prisma init
|
|
274
|
+
```
|
|
275
|
+
4. Update `prisma.config.ts` with `import "dotenv/config"`
|
|
276
|
+
5. Update schema with v7 generator + output
|
|
277
|
+
6. Create `src/client.ts` singleton
|
|
278
|
+
7. Wire Turbo tasks in `turbo.json`
|
|
279
|
+
8. Add `.env` at root and/or `packages/db/.env`
|
|
280
|
+
9. Push schema:
|
|
281
|
+
```bash
|
|
282
|
+
npm run db:push
|
|
283
|
+
```
|
|
284
|
+
10. Test:
|
|
285
|
+
```bash
|
|
286
|
+
npm run db:test
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
## Verification Checklist
|
|
292
|
+
|
|
293
|
+
1. `provider = "prisma-client"`?
|
|
294
|
+
2. `output = "../src/generated/prisma"` in packages/db?
|
|
295
|
+
3. All Prisma files in `packages/db`?
|
|
296
|
+
4. Client imports from generated path or `@repo/db`?
|
|
297
|
+
5. `import "dotenv/config"` in prisma.config.ts?
|
|
298
|
+
6. Turbo tasks depend on `db:generate`?
|
|
299
|
+
7. `DATABASE_URL` in `globalEnv`?
|
|
300
|
+
8. All DB ops wrapped in try/catch?
|
|
301
|
+
9. Test script exists in packages/db?
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: shadcn
|
|
3
|
+
description: "Add or debug shadcn/ui in a React/Next.js project: components.json, shadcn init/add, presets, registries, Tailwind styling, base/radix/aria composition, component fixes, and list-index pages — where the default is the DiceUI data table with filter/sort/pagination in the URL via nuqs, not a bare shadcn Table."
|
|
4
|
+
allowed-tools: Bash(npx shadcn@latest *), Bash(pnpm dlx shadcn@latest *), Bash(bunx --bun shadcn@latest *)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# shadcn/ui
|
|
8
|
+
|
|
9
|
+
Components are added as **source code** via the CLI — you edit them like your own files.
|
|
10
|
+
|
|
11
|
+
**This page is an index.** Each rule below is the short form; the linked file carries the reasoning and the Incorrect/Correct pairs. Read the row for your task before acting — the rules are stated flat here and the *why* is what stops you misapplying them.
|
|
12
|
+
|
|
13
|
+
> Run every CLI command with the project's runner: `npx shadcn@latest`, `pnpm dlx shadcn@latest`, or `bunx --bun shadcn@latest`. Pick from the lockfile or `package.json`'s `packageManager` — `shadcn info` does not report it.
|
|
14
|
+
|
|
15
|
+
## Current Project Context
|
|
16
|
+
|
|
17
|
+
```json
|
|
18
|
+
!`npx shadcn@latest info --json`
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Blocks: `project`, `config`, `preset`, `components`, `links`. Names are exact — `config.rsc` not `isRSC`, `project.tailwindCss` not `tailwindCssFile`, `project.importAlias` not `aliasPrefix`, and there is no `packageManager`. Full table: [cli.md](./cli.md#info--project-information).
|
|
22
|
+
|
|
23
|
+
Four fields change what you write: **`config.base`** (`radix` | `base` | `aria` — different APIs), **`config.rsc`** (`"use client"` needed?), **`config.iconLibrary`** (never assume `lucide-react`), **`config.aliases`**/`resolvedPaths` (never hardcode `@/`).
|
|
24
|
+
|
|
25
|
+
## Routing
|
|
26
|
+
|
|
27
|
+
| Task | Read |
|
|
28
|
+
|---|---|
|
|
29
|
+
| Pick a component; the core code patterns | [rules/component-selection.md](./rules/component-selection.md) |
|
|
30
|
+
| Forms — layout, validation, errors, inputs | [rules/forms.md](./rules/forms.md) |
|
|
31
|
+
| Compose — groups, overlays, Card, Tabs, Avatar | [rules/composition.md](./rules/composition.md) |
|
|
32
|
+
| Style — colors, spacing, variants, `cn()`, dark mode | [rules/styling.md](./rules/styling.md) |
|
|
33
|
+
| Icons — `data-icon`, sizing, icons as props | [rules/icons.md](./rules/icons.md) |
|
|
34
|
+
| A list/index page or any data table | [rules/data-table.md](./rules/data-table.md) |
|
|
35
|
+
| `asChild` vs `render`; `base`/`radix`/`aria` splits | [rules/base-vs-radix.md](./rules/base-vs-radix.md) |
|
|
36
|
+
| Any CLI command, flag, preset, registry | [cli.md](./cli.md) |
|
|
37
|
+
| Theming, CSS variables, extending a component | [customization.md](./customization.md) |
|
|
38
|
+
| MCP server | [mcp.md](./mcp.md) |
|
|
39
|
+
|
|
40
|
+
## Principles
|
|
41
|
+
|
|
42
|
+
1. **Use an existing component first** (`npx shadcn@latest search`), and **compose rather than reinvent** — a settings page is Tabs + Card + form controls.
|
|
43
|
+
2. **Built-in variants before custom styles; semantic colors only** — never `bg-blue-500`.
|
|
44
|
+
3. **Read the docs before writing a component** — `npx shadcn@latest docs <component>`, then fetch the URLs. APIs differ per base and shift between releases, so guessing yields code that looks right and isn't.
|
|
45
|
+
|
|
46
|
+
## Critical Rules
|
|
47
|
+
|
|
48
|
+
**Styling** → [styling.md](./rules/styling.md)
|
|
49
|
+
|
|
50
|
+
- `className` for layout only — never component colors or typography, and no manual `dark:` overrides.
|
|
51
|
+
- `gap-*` not `space-x-*`/`space-y-*`; `size-*` when width and height match; `truncate` not the longhand.
|
|
52
|
+
- `cn()` for conditional classes, never template literals. No manual `z-index` on overlays.
|
|
53
|
+
- `Badge` variants are exactly `default`, `secondary`, `destructive`, `outline`, `ghost` — no `success`.
|
|
54
|
+
|
|
55
|
+
**Forms** → [forms.md](./rules/forms.md)
|
|
56
|
+
|
|
57
|
+
- `FieldGroup` + `Field` for layout, never a raw `div`.
|
|
58
|
+
- Errors go in `FieldError`, never `FieldDescription`. Validation is `data-invalid` on `Field` **and** `aria-invalid` on the control; disabled likewise.
|
|
59
|
+
- `InputGroup` takes `InputGroupInput`/`InputGroupTextarea`; buttons inside it use `InputGroupButton` in an `InputGroupAddon`, and a trailing one needs `align="inline-end"`.
|
|
60
|
+
- Option sets (2–7) use `ToggleGroup`; `FieldSet` + `FieldLegend` group related checkboxes/radios.
|
|
61
|
+
|
|
62
|
+
**Composition** → [composition.md](./rules/composition.md)
|
|
63
|
+
|
|
64
|
+
- Items live inside their Group — `SelectItem`→`SelectGroup`, `DropdownMenuItem`→`DropdownMenuGroup`, `CommandItem`→`CommandGroup`.
|
|
65
|
+
- `asChild` (radix) or `render` (base) for custom triggers; check `config.base` → [base-vs-radix.md](./rules/base-vs-radix.md).
|
|
66
|
+
- Dialog/Sheet/Drawer need a Title (`sr-only` if hidden); `TabsTrigger` belongs in `TabsList`; `Avatar` needs `AvatarFallback`.
|
|
67
|
+
- Full Card composition, not everything in `CardContent`. `Button` has no `isPending`/`isLoading` — compose `Spinner` + `data-icon` + `disabled`.
|
|
68
|
+
- Prefer the component over markup: `Alert`, `Empty`, `sonner`'s `toast()`, `Separator`, `Skeleton`, `Badge`.
|
|
69
|
+
|
|
70
|
+
**Icons** → [icons.md](./rules/icons.md)
|
|
71
|
+
|
|
72
|
+
- `data-icon="inline-start"`/`"inline-end"` on icons inside `Button`; pass icons as components (`icon={CheckIcon}`), not string keys.
|
|
73
|
+
- No sizing classes on icons inside components — a `size-*` class *opts out* of the component's sizing rather than matching it.
|
|
74
|
+
|
|
75
|
+
**CLI** → [cli.md](./cli.md)
|
|
76
|
+
|
|
77
|
+
- Never decode or fetch a preset code by hand — `preset decode <code>` shows what it encodes. Swap icon libraries with `migrate icons --from <a> --to <b>`.
|
|
78
|
+
- Never `--overwrite` without explicit approval → [smart merge](./cli.md#smart-merge-from-upstream). Never guess an unnamed registry, and read every file one adds → [third-party registries](./cli.md#working-with-third-party-registries).
|
|
79
|
+
|
|
80
|
+
## Data Tables & List Pages
|
|
81
|
+
|
|
82
|
+
**On a portal list/index page the data table is DiceUI's — the default, not a suggestion.** A bare `Table` there is the choice that needs justifying. Elsewhere: DiceUI once a table needs server-side filter/sort/paginate, plain `Table` when it's display.
|
|
83
|
+
|
|
84
|
+
**List-page state belongs in the URL, via `nuqs`** — not `useState`, and never mirrored into both. `useDataTable` calls `useQueryState` internally, so `nuqs` is a hard dependency and the app must be wrapped once in `NuqsAdapter` or the hook throws.
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
npx shadcn@latest add "https://tablecn.com/r/data-table.json" # .json required; extensionless 404s
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Why URL state is the point, the install traps (undeclared `zod` / `@dnd-kit/*`), the server-side parsing pattern, and the column contract: [rules/data-table.md](./rules/data-table.md). Surrounding state & data-flow conventions: the project's `nextjs-fullstack` skill.
|
|
91
|
+
|
|
92
|
+
## Starting a New Project
|
|
93
|
+
|
|
94
|
+
Canonical config: **Base UI + nova + lucide** — `components.json` ends up with `style: "base-nova"`. Install the whole library up front so feature work never stalls on a missing component.
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
# Single app — same result as `init --defaults`, which resolves to next + base-nova.
|
|
98
|
+
npx shadcn@latest init --template next --base base --preset nova
|
|
99
|
+
# Turborepo workspace.
|
|
100
|
+
npx shadcn@latest init --template next --base base --preset nova --monorepo
|
|
101
|
+
npx shadcn@latest add --all
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Two consequences to carry into everything you write afterwards:
|
|
105
|
+
|
|
106
|
+
- **The base is `base`, so component APIs are Base UI's** — `render` not `asChild`, `multiple` not `type="single"`, a scalar `Slider`, and `Select` needs an `items` prop → [base-vs-radix.md](./rules/base-vs-radix.md). Registry items and most examples online are written for radix; expect to convert.
|
|
107
|
+
- **In a monorepo the UI alias is `@workspace/ui/components`, not `@/components/ui`** — so third-party registry items land with imports that resolve to nothing. Rewrite them against `config.aliases`.
|
|
108
|
+
|
|
109
|
+
`--all` is a setup step, not an update path — what that means when upstream moves: [cli.md](./cli.md#installing-everything-up-front).
|
|
110
|
+
|
|
111
|
+
## Workflow
|
|
112
|
+
|
|
113
|
+
1. Read the injected context; re-run `npx shadcn@latest info` to refresh.
|
|
114
|
+
2. Check `components` (or list `resolvedPaths.ui`) before importing. On a project set up as above everything is already there, so this is usually a one-line confirmation — but don't assume it: older projects and ones initialised elsewhere may have been added to piecemeal, and importing a component that was never added fails at build, not at review.
|
|
115
|
+
3. Find components — `npx shadcn@latest search`.
|
|
116
|
+
4. Read the docs — `npx shadcn@latest docs <component>`, then fetch. `view` browses uninstalled items; `add --diff` previews changes to installed ones.
|
|
117
|
+
5. Install or update — `npx shadcn@latest add`; [smart merge](./cli.md#smart-merge-from-upstream) anything with local edits.
|
|
118
|
+
6. Ask which registry when the user didn't name one, then review every added file → [third-party registries](./cli.md#working-with-third-party-registries).
|
|
119
|
+
7. Switching presets — ask first: **overwrite** / **merge** / **skip**, or `apply --only theme` to re-theme alone → [cli.md](./cli.md#switching-presets).
|
|
Binary file
|
|
Binary file
|