shmakk 1.1.0 → 1.2.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/README.md +16 -1
- package/package.json +6 -3
- package/scripts/import-skills.js +536 -0
- package/scripts/install-skills.js +64 -0
- package/skills/ai-elements.md +482 -0
- package/skills/architecture.md +151 -0
- package/skills/backend-adapter-aws-lambda.md +204 -0
- package/skills/backend-adapter-express.md +177 -0
- package/skills/backend-adapter-fastify.md +222 -0
- package/skills/backend-adapter-fetch.md +200 -0
- package/skills/backend-api-docs.md +22 -0
- package/skills/backend-aspire.md +232 -0
- package/skills/backend-aspnet-core.md +62 -0
- package/skills/backend-build-chatgpt-app.md +321 -0
- package/skills/backend-build-mcp-app.md +393 -0
- package/skills/backend-build-mcp-server.md +222 -0
- package/skills/backend-build-mcpb.md +200 -0
- package/skills/backend-building-ai-agent-on-cloudflare.md +401 -0
- package/skills/backend-caching.md +206 -0
- package/skills/backend-chatgpt-app-submission.md +157 -0
- package/skills/backend-chatgpt-apps.md +321 -0
- package/skills/backend-client-setup.md +318 -0
- package/skills/backend-containerize-aspnet-framework.md +455 -0
- package/skills/backend-create-spring-boot-java-project.md +164 -0
- package/skills/backend-create-spring-boot-kotlin-project.md +148 -0
- package/skills/backend-csharp-async.md +50 -0
- package/skills/backend-csharp-docs.md +63 -0
- package/skills/backend-csharp-mcp-server-generator.md +60 -0
- package/skills/backend-dotenv.md +201 -0
- package/skills/backend-dotenvx.md +119 -0
- package/skills/backend-env-vars.md +259 -0
- package/skills/backend-error-handling.md +254 -0
- package/skills/backend-fastapi.md +437 -0
- package/skills/backend-go-mcp-server-generator.md +335 -0
- package/skills/backend-java-mcp-server-generator.md +757 -0
- package/skills/backend-kotlin-mcp-server-generator.md +450 -0
- package/skills/backend-middlewares.md +243 -0
- package/skills/backend-multi-stage-dockerfile.md +47 -0
- package/skills/backend-nestjs.md +192 -0
- package/skills/backend-next-forge.md +375 -0
- package/skills/backend-nextjs.md +746 -0
- package/skills/backend-openapi-to-application-code.md +113 -0
- package/skills/backend-php-mcp-server-generator.md +523 -0
- package/skills/backend-python-mcp-server-generator.md +106 -0
- package/skills/backend-routing-middleware.md +251 -0
- package/skills/backend-ruby-mcp-server-generator.md +661 -0
- package/skills/backend-rust-mcp-server-generator.md +578 -0
- package/skills/backend-semantic-kernel.md +57 -0
- package/skills/backend-server-setup.md +379 -0
- package/skills/backend-server-side-calls.md +250 -0
- package/skills/backend-subscriptions.md +407 -0
- package/skills/backend-swift-mcp-server-generator.md +670 -0
- package/skills/backend-trpc-router.md +152 -0
- package/skills/backend-typescript-mcp-server-generator.md +91 -0
- package/skills/backend-validators.md +229 -0
- package/skills/backend.md +76 -0
- package/skills/backup.md +165 -0
- package/skills/budget.md +140 -0
- package/skills/business-gtm-0-to-1-launch.md +322 -0
- package/skills/business-gtm-operating-cadence.md +421 -0
- package/skills/business-gtm-positioning-strategy.md +439 -0
- package/skills/business-gtm-product-led-growth.md +340 -0
- package/skills/calendar.md +95 -0
- package/skills/code-review.md +130 -0
- package/skills/compliance.md +168 -0
- package/skills/contracts.md +130 -0
- package/skills/daily-job-run.md +46 -0
- package/skills/daily-webdesign.md +187 -0
- package/skills/database-bigquery-pipeline-audit.md +130 -0
- package/skills/database-cosmosdb-datamodeling.md +1046 -0
- package/skills/database-durable-objects.md +187 -0
- package/skills/database-ef-core.md +76 -0
- package/skills/database-fabric-lakehouse.md +107 -0
- package/skills/database-neon-postgres-egress-optimizer.md +213 -0
- package/skills/database-neon-postgres.md +218 -0
- package/skills/database-postgresql-code-review.md +213 -0
- package/skills/database-postgresql-optimization.md +405 -0
- package/skills/database-sql-code-review.md +302 -0
- package/skills/database-sql-optimization.md +297 -0
- package/skills/dependency-audit.md +165 -0
- package/skills/design-kami-landing.md +234 -0
- package/skills/design.md +221 -0
- package/skills/dev-acquire-codebase-knowledge.md +175 -0
- package/skills/dev-add-educational-comments.md +129 -0
- package/skills/dev-add-model-descriptions.md +74 -0
- package/skills/dev-adr-review.md +56 -0
- package/skills/dev-boost-prompt.md +26 -0
- package/skills/dev-build-run-debug.md +130 -0
- package/skills/dev-chunk.md +49 -0
- package/skills/dev-claude-md-improver.md +180 -0
- package/skills/dev-code-exemplars-blueprint-generator.md +127 -0
- package/skills/dev-code-tour.md +434 -0
- package/skills/dev-comment-code-generate-a-tutorial.md +27 -0
- package/skills/dev-commit.md +81 -0
- package/skills/dev-context-map.md +53 -0
- package/skills/dev-conventional-commit.md +73 -0
- package/skills/dev-create-architectural-decision-record.md +98 -0
- package/skills/dev-create-draft-pr.md +17 -0
- package/skills/dev-create-pr.md +17 -0
- package/skills/dev-create-readme.md +22 -0
- package/skills/dev-csharp-mstest.md +479 -0
- package/skills/dev-csharp-nunit.md +72 -0
- package/skills/dev-csharp-tunit.md +101 -0
- package/skills/dev-csharp-xunit.md +69 -0
- package/skills/dev-debug-failing-test.md +90 -0
- package/skills/dev-diff-analyze.md +32 -0
- package/skills/dev-diffs.md +24 -0
- package/skills/dev-dotnet-best-practices.md +86 -0
- package/skills/dev-dotnet-design-pattern-review.md +43 -0
- package/skills/dev-dotnet-timezone.md +110 -0
- package/skills/dev-dotnet-upgrade.md +117 -0
- package/skills/dev-doublecheck.md +278 -0
- package/skills/dev-explain-error.md +15 -0
- package/skills/dev-finding-discovery.md +164 -0
- package/skills/dev-fix-finding.md +111 -0
- package/skills/dev-full-file-edit.md +25 -0
- package/skills/dev-git-commit.md +125 -0
- package/skills/dev-git-flow-branch-creator.md +293 -0
- package/skills/dev-git-workflow.md +46 -0
- package/skills/dev-github-automation.md +64 -0
- package/skills/dev-github-code-review.md +1140 -0
- package/skills/dev-github-issues.md +202 -0
- package/skills/dev-gpt-5-4-prompting.md +55 -0
- package/skills/dev-investigation-mode.md +277 -0
- package/skills/dev-java-add-graalvm-native-image-support.md +450 -0
- package/skills/dev-java-docs.md +24 -0
- package/skills/dev-java-refactoring-extract-method.md +105 -0
- package/skills/dev-java-refactoring-remove-parameter.md +85 -0
- package/skills/dev-merge.md +73 -0
- package/skills/dev-migrate-create.md +36 -0
- package/skills/dev-migrate-validate.md +36 -0
- package/skills/dev-my-issues.md +9 -0
- package/skills/dev-my-pull-requests.md +15 -0
- package/skills/dev-planning-oracle-to-postgres-migration-integration-testing.md +45 -0
- package/skills/dev-playwright-generate-test.md +18 -0
- package/skills/dev-playwright.md +148 -0
- package/skills/dev-prompt-builder.md +142 -0
- package/skills/dev-pytest-coverage.md +29 -0
- package/skills/dev-python-manager-discovery.md +330 -0
- package/skills/dev-python-pypi-package-builder.md +445 -0
- package/skills/dev-readme-blueprint-generator.md +79 -0
- package/skills/dev-refactor-method-complexity-reduce.md +99 -0
- package/skills/dev-refactor-plan.md +66 -0
- package/skills/dev-refactor.md +646 -0
- package/skills/dev-review-and-refactor.md +16 -0
- package/skills/dev-reviewing-oracle-to-postgres-migration.md +68 -0
- package/skills/dev-ruff-recursive-fix.md +201 -0
- package/skills/dev-run-e2e-tests.md +126 -0
- package/skills/dev-run-pre-commit-checks.md +133 -0
- package/skills/dev-run-smoke-tests.md +127 -0
- package/skills/dev-scaffolding-oracle-to-postgres-migration-test-project.md +55 -0
- package/skills/dev-spring-boot-testing.md +190 -0
- package/skills/dev-sync-upstream.md +32 -0
- package/skills/dev-sync.md +74 -0
- package/skills/dev-tdd-workflow.md +23 -0
- package/skills/dev-terraform-azurerm-set-diff-analyzer.md +49 -0
- package/skills/dev-test-driven-development.md +372 -0
- package/skills/dev-test-gaps.md +18 -0
- package/skills/dev-test-triage.md +55 -0
- package/skills/dev-typer.md +267 -0
- package/skills/dev-typescript-setup.md +25 -0
- package/skills/dev-unified-diff-edit.md +16 -0
- package/skills/dev-unit-test-vue-pinia.md +198 -0
- package/skills/dev-using-git-worktrees.md +216 -0
- package/skills/dev-validation.md +99 -0
- package/skills/dev-verification.md +168 -0
- package/skills/dev-webapp-testing.md +134 -0
- package/skills/dev-write-coding-standards-from-file.md +317 -0
- package/skills/dev-write-tests.md +16 -0
- package/skills/devops-appinsights-instrumentation.md +49 -0
- package/skills/devops-az-cost-optimize.md +306 -0
- package/skills/devops-chronicle.md +154 -0
- package/skills/devops-deployments-cicd.md +331 -0
- package/skills/devops-devops-rollout-plan.md +118 -0
- package/skills/devops-geistdocs.md +276 -0
- package/skills/devops-observability.md +774 -0
- package/skills/devops-observe-metrics.md +35 -0
- package/skills/devops-observe-trace.md +30 -0
- package/skills/devops-phoenix-cli.md +163 -0
- package/skills/devops-phoenix-tracing.md +140 -0
- package/skills/devops-publish-to-pages.md +108 -0
- package/skills/devops-telemetry.md +87 -0
- package/skills/devops-update-avm-modules-in-bicep.md +61 -0
- package/skills/devops.md +81 -0
- package/skills/diagrams-canvas.md +204 -0
- package/skills/diagrams-draw-io-diagram-generator.md +463 -0
- package/skills/diagrams-excalidraw-diagram-generator.md +614 -0
- package/skills/diagrams-graphify.md +1277 -0
- package/skills/docs-bear-notes.md +108 -0
- package/skills/docs-create-llms.md +211 -0
- package/skills/docs-doc-gen.md +20 -0
- package/skills/docs-documentation-writer.md +46 -0
- package/skills/docs-llm-config.md +33 -0
- package/skills/docs-mkdocs-translations.md +109 -0
- package/skills/docs-obsidian-vault-maintainer.md +14 -0
- package/skills/docs-obsidian.md +82 -0
- package/skills/docs-prose.md +324 -0
- package/skills/docs-update-llms.md +217 -0
- package/skills/docs-update-markdown-file-index.md +77 -0
- package/skills/docs-wiki-maintainer.md +20 -0
- package/skills/documents.md +120 -0
- package/skills/email.md +113 -0
- package/skills/expenses.md +140 -0
- package/skills/file-ops.md +149 -0
- package/skills/files-convert-plaintext-to-md.md +363 -0
- package/skills/files-doc.md +81 -0
- package/skills/files-docx.md +594 -0
- package/skills/files-markdown-to-html.md +917 -0
- package/skills/files-nano-pdf.md +39 -0
- package/skills/files-pdf.md +315 -0
- package/skills/files-pdftk-server.md +163 -0
- package/skills/files-pptx-html-fidelity-audit.md +255 -0
- package/skills/files-pptx.md +231 -0
- package/skills/files-xlsx.md +301 -0
- package/skills/find-jobs.md +78 -0
- package/skills/format-conversion.md +157 -0
- package/skills/frontend-ai-elements.md +483 -0
- package/skills/frontend-ai-gateway.md +563 -0
- package/skills/frontend-ai-generation-persistence.md +242 -0
- package/skills/frontend-ai-sdk.md +799 -0
- package/skills/frontend-ai-visibility.md +127 -0
- package/skills/frontend-angular-developer.md +130 -0
- package/skills/frontend-aspnet-minimal-api-openapi.md +42 -0
- package/skills/frontend-bencium-innovative-ux-designer.md +719 -0
- package/skills/frontend-chat-sdk.md +666 -0
- package/skills/frontend-chrome-devtools.md +98 -0
- package/skills/frontend-frontend-app-builder.md +186 -0
- package/skills/frontend-frontend-design.md +43 -0
- package/skills/frontend-frontend-testing-debugging.md +143 -0
- package/skills/frontend-gsap-framer-scroll-animation.md +152 -0
- package/skills/frontend-internal-linking.md +109 -0
- package/skills/frontend-json-render.md +335 -0
- package/skills/frontend-keyword-clustering.md +118 -0
- package/skills/frontend-next-intl-add-language.md +20 -0
- package/skills/frontend-on-page-seo.md +112 -0
- package/skills/frontend-premium-frontend-ui.md +114 -0
- package/skills/frontend-react-best-practices.md +143 -0
- package/skills/frontend-schema-markup.md +160 -0
- package/skills/frontend-seo-audit.md +110 -0
- package/skills/frontend-swr.md +215 -0
- package/skills/frontend-technical-seo.md +162 -0
- package/skills/frontend-use-dom.md +418 -0
- package/skills/frontend-web-coder.md +564 -0
- package/skills/frontend-web-design-reviewer.md +369 -0
- package/skills/frontend-web-perf.md +202 -0
- package/skills/frontend.md +125 -0
- package/skills/general-adapter-standalone.md +199 -0
- package/skills/general-auth.md +356 -0
- package/skills/general-containerize-aspnetcore.md +393 -0
- package/skills/general-create-technical-spike.md +231 -0
- package/skills/general-cron-jobs.md +72 -0
- package/skills/general-ddd-aggregate.md +52 -0
- package/skills/general-ddd-context.md +46 -0
- package/skills/general-ddd-validate.md +51 -0
- package/skills/general-dependency-check.md +26 -0
- package/skills/general-email-marketing.md +86 -0
- package/skills/general-healthcheck.md +246 -0
- package/skills/general-import-infrastructure-as-code.md +368 -0
- package/skills/general-init.md +49 -0
- package/skills/general-java-junit.md +64 -0
- package/skills/general-java-springboot.md +66 -0
- package/skills/general-javascript-typescript-jest.md +45 -0
- package/skills/general-kotlin-springboot.md +71 -0
- package/skills/general-make-repo-contribution.md +91 -0
- package/skills/general-market-research.md +78 -0
- package/skills/general-marketplace.md +468 -0
- package/skills/general-model-recommendation.md +673 -0
- package/skills/general-payments.md +352 -0
- package/skills/general-quality-playbook.md +480 -0
- package/skills/general-run-integration-tests.md +113 -0
- package/skills/general-superjson.md +274 -0
- package/skills/general-swiftpm-macos.md +51 -0
- package/skills/general-threat-model.md +61 -0
- package/skills/invoices.md +167 -0
- package/skills/licenses.md +159 -0
- package/skills/logs.md +156 -0
- package/skills/marketing.md +139 -0
- package/skills/media-image-manipulation-image-magick.md +253 -0
- package/skills/media-imagegen.md +357 -0
- package/skills/media-openai-whisper-api.md +63 -0
- package/skills/media-openai-whisper.md +39 -0
- package/skills/media-peekaboo.md +191 -0
- package/skills/media-screenshot.md +268 -0
- package/skills/media-speech.md +145 -0
- package/skills/media-transcribe.md +82 -0
- package/skills/media-video-frames.md +47 -0
- package/skills/mobile-android-emulator-qa.md +81 -0
- package/skills/mobile-android-performance.md +280 -0
- package/skills/mobile-building-mcp-server-on-cloudflare.md +267 -0
- package/skills/mobile-building-native-ui.md +322 -0
- package/skills/mobile-expo-api-routes.md +369 -0
- package/skills/mobile-expo-cicd-workflows.md +92 -0
- package/skills/mobile-expo-deployment.md +191 -0
- package/skills/mobile-expo-dev-client.md +165 -0
- package/skills/mobile-expo-module.md +177 -0
- package/skills/mobile-expo-tailwind-setup.md +481 -0
- package/skills/mobile-expo-ui-jetpack-compose.md +41 -0
- package/skills/mobile-expo-ui-swift-ui.md +40 -0
- package/skills/mobile-ios-app-intents.md +78 -0
- package/skills/mobile-ios-debugger-agent.md +52 -0
- package/skills/mobile-ios-ettrace-performance.md +198 -0
- package/skills/mobile-ios-memgraph-leaks.md +77 -0
- package/skills/mobile-native-data-fetching.md +508 -0
- package/skills/mobile-packaging-notarization.md +48 -0
- package/skills/mobile-react-native-architecture.md +672 -0
- package/skills/mobile-react-native-mobile-design.md +438 -0
- package/skills/mobile-signing-entitlements.md +59 -0
- package/skills/mobile-swiftui-liquid-glass.md +91 -0
- package/skills/mobile-swiftui-patterns.md +210 -0
- package/skills/mobile-swiftui-performance-audit.md +108 -0
- package/skills/mobile-swiftui-ui-patterns.md +97 -0
- package/skills/mobile-swiftui-view-refactor.md +204 -0
- package/skills/mobile-upgrading-expo.md +134 -0
- package/skills/mobile.md +183 -0
- package/skills/notes.md +106 -0
- package/skills/planning-adr-create.md +62 -0
- package/skills/planning-adr-index.md +67 -0
- package/skills/planning-architecture-blueprint-generator.md +323 -0
- package/skills/planning-brainstorming.md +165 -0
- package/skills/planning-breakdown-epic-arch.md +67 -0
- package/skills/planning-breakdown-epic-pm.md +59 -0
- package/skills/planning-breakdown-feature-implementation.md +129 -0
- package/skills/planning-breakdown-feature-prd.md +62 -0
- package/skills/planning-breakdown-plan.md +510 -0
- package/skills/planning-breakdown-test.md +366 -0
- package/skills/planning-cloud-design-patterns.md +63 -0
- package/skills/planning-content-brief.md +128 -0
- package/skills/planning-content-strategy.md +138 -0
- package/skills/planning-content-translation.md +143 -0
- package/skills/planning-create-github-action-workflow-specification.md +277 -0
- package/skills/planning-create-github-issues-feature-from-implementation-plan.md +29 -0
- package/skills/planning-create-github-issues-for-unmet-specification-requirements.md +36 -0
- package/skills/planning-create-github-pull-request-from-specification.md +25 -0
- package/skills/planning-create-implementation-plan.md +158 -0
- package/skills/planning-create-specification.md +128 -0
- package/skills/planning-first-ask.md +31 -0
- package/skills/planning-folder-structure-blueprint-generator.md +406 -0
- package/skills/planning-gen-specs-as-issues.md +166 -0
- package/skills/planning-generate-snapshot.md +144 -0
- package/skills/planning-generate-status-report.md +336 -0
- package/skills/planning-metric-pack-designer.md +27 -0
- package/skills/planning-pm-spec.md +53 -0
- package/skills/planning-prd.md +144 -0
- package/skills/planning-project-assessment.md +182 -0
- package/skills/planning-project-setup-info-local.md +128 -0
- package/skills/planning-project-workflow-analysis-blueprint-generator.md +294 -0
- package/skills/planning-service-oriented-architecture.md +248 -0
- package/skills/planning-spec-to-backlog.md +544 -0
- package/skills/planning-technology-stack-blueprint-generator.md +243 -0
- package/skills/planning-update-implementation-plan.md +158 -0
- package/skills/planning-update-specification.md +128 -0
- package/skills/planning-what-context-needed.md +40 -0
- package/skills/planning-writing-plans.md +153 -0
- package/skills/prepare-application.md +81 -0
- package/skills/productivity-apple-notes.md +78 -0
- package/skills/productivity-apple-reminders.md +119 -0
- package/skills/productivity-capture-tasks-from-meeting-notes.md +680 -0
- package/skills/productivity-daily-prep.md +156 -0
- package/skills/productivity-email-drafter.md +101 -0
- package/skills/productivity-hr-onboarding.md +53 -0
- package/skills/productivity-things-mac.md +87 -0
- package/skills/productivity-update.md +169 -0
- package/skills/reminders.md +109 -0
- package/skills/research-dossier-collect.md +71 -0
- package/skills/research-kg-extract.md +37 -0
- package/skills/research-openai-docs.md +89 -0
- package/skills/research-research-add-items.md +31 -0
- package/skills/research-research-report.md +94 -0
- package/skills/research-research-synthesize.md +63 -0
- package/skills/research-summarize.md +88 -0
- package/skills/research-transformers-js.md +635 -0
- package/skills/research.md +119 -0
- package/skills/security-ai-prompt-engineering-safety-review.md +231 -0
- package/skills/security-attack-path-analysis.md +182 -0
- package/skills/security-gdpr-compliant.md +284 -0
- package/skills/security-mcp-security-audit.md +279 -0
- package/skills/security-pii-detect.md +31 -0
- package/skills/security-secret-scanning.md +243 -0
- package/skills/security-security-best-practices.md +87 -0
- package/skills/security-security-ownership-map.md +207 -0
- package/skills/security-security-review.md +169 -0
- package/skills/security-security-scan.md +138 -0
- package/skills/security-security-threat-model.md +82 -0
- package/skills/security-threat-model-analyst.md +76 -0
- package/skills/sysmon.md +181 -0
- package/skills/system-arch-linux-triage.md +32 -0
- package/skills/system-centos-linux-triage.md +32 -0
- package/skills/system-debian-linux-triage.md +32 -0
- package/skills/system-fedora-linux-triage.md +32 -0
- package/skills/system-geofeed-tuner.md +865 -0
- package/skills/system-iot-anomalies.md +15 -0
- package/skills/system-iot-firmware.md +16 -0
- package/skills/system-iot-fleet.md +14 -0
- package/skills/system-iot-register.md +19 -0
- package/skills/system-iot-witness-verify.md +15 -0
- package/skills/system-tmux.md +171 -0
- package/skills/system-window-management.md +228 -0
- package/skills/task-management.md +90 -0
- package/skills/tasks.md +102 -0
- package/skills/test-coverage.md +188 -0
- package/skills/ux-ui.md +128 -0
- package/skills/web.md +186 -0
- package/skills/workflow-act-on-feedback.md +15 -0
- package/skills/workflow-automate-this.md +245 -0
- package/skills/workflow-autoresearch.md +276 -0
- package/skills/workflow-coding-agent.md +317 -0
- package/skills/workflow-deep-research.md +44 -0
- package/skills/workflow-dispatching-parallel-agents.md +183 -0
- package/skills/workflow-eval-driven-dev.md +148 -0
- package/skills/workflow-executing-plans.md +71 -0
- package/skills/workflow-mentoring-juniors.md +311 -0
- package/skills/workflow-receiving-code-review.md +214 -0
- package/skills/workflow-repo-story-time.md +155 -0
- package/skills/workflow-requesting-code-review.md +104 -0
- package/skills/workflow-session-report.md +43 -0
- package/skills/workflow-structured-autonomy-generate.md +126 -0
- package/skills/workflow-subagent-driven-development.md +280 -0
- package/skills/writing.md +106 -0
- package/src/agent.js +0 -0
- package/src/browser.js +297 -0
- package/src/cli.js +25 -4
- package/src/code-reviewer.js +119 -0
- package/src/completions.js +1 -1
- package/src/control.js +222 -30
- package/src/coordinator.js +303 -0
- package/src/correction.js +29 -8
- package/src/edit-tracker.js +21 -0
- package/src/edit-viewer.js +414 -0
- package/src/endpoints.js +64 -15
- package/src/index.js +45 -11
- package/src/llm.js +86 -2
- package/src/mcp-client.js +416 -0
- package/src/memory.js +182 -0
- package/src/planner.js +216 -0
- package/src/rules.js +90 -0
- package/src/self-commands.js +757 -0
- package/src/services/voice.js +10 -7
- package/src/session-search.js +427 -0
- package/src/session.js +487 -99
- package/src/shmakk-server.js +91 -0
- package/src/skills.js +410 -3
- package/src/subagent.js +4 -1
- package/src/system-prompt.js +13 -5
- package/src/task-file.js +114 -0
- package/src/taskClassifier.js +246 -0
- package/src/team.js +752 -0
- package/src/tools.js +142 -21
- package/src/web.js +35 -5
- package/src/workflows.js +261 -0
- package/src/workspace-index.js +25 -6
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: architecture
|
|
3
|
+
version: 1
|
|
4
|
+
category: planning
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Software Architecture Analysis
|
|
8
|
+
|
|
9
|
+
Analyze project structure, module relationships, dependencies, and architectural patterns.
|
|
10
|
+
|
|
11
|
+
## When to use this skill
|
|
12
|
+
|
|
13
|
+
- User wants to understand how a codebase is organized
|
|
14
|
+
- User wants to find architectural problems (coupling, circular deps, bloated modules)
|
|
15
|
+
- User wants to document or diagram the architecture
|
|
16
|
+
- User wants advice on how to reorganize or improve structure
|
|
17
|
+
- User mentions "architecture", "structure", "dependencies", "modules", "how does this connect"
|
|
18
|
+
|
|
19
|
+
## Procedure
|
|
20
|
+
|
|
21
|
+
### Step 1: Establish the landscape
|
|
22
|
+
|
|
23
|
+
Start by reading the top-level directory and key config files:
|
|
24
|
+
```
|
|
25
|
+
list_dir(".")
|
|
26
|
+
read_file("package.json") # or pyproject.toml, Cargo.toml, go.mod, etc.
|
|
27
|
+
read_file("README.md")
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Identify: language, framework, package manager, entry points.
|
|
31
|
+
|
|
32
|
+
### Step 2: Map the structure
|
|
33
|
+
|
|
34
|
+
List and read each major directory:
|
|
35
|
+
```
|
|
36
|
+
list_dir("src/")
|
|
37
|
+
list_dir("lib/")
|
|
38
|
+
list_dir("app/")
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
For each significant module/file, identify:
|
|
42
|
+
- What it exports (public API)
|
|
43
|
+
- What it imports (dependencies)
|
|
44
|
+
- What it's responsible for (single responsibility or mixed?)
|
|
45
|
+
|
|
46
|
+
### Step 3: Identify imports/dependencies
|
|
47
|
+
|
|
48
|
+
For JS/TS:
|
|
49
|
+
```
|
|
50
|
+
grep -r "^import\|^require" src/ --include="*.js" --include="*.ts" | head -100
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
For Python:
|
|
54
|
+
```
|
|
55
|
+
grep -r "^import\|^from" . --include="*.py" | grep -v __pycache__ | head -100
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
For Go:
|
|
59
|
+
```
|
|
60
|
+
grep -r "\"" --include="*.go" | grep import | head -100
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Step 4: Detect architectural patterns
|
|
64
|
+
|
|
65
|
+
**Identify which pattern is in use:**
|
|
66
|
+
- **Layered (N-tier)**: controllers → services → repositories → database
|
|
67
|
+
- **Feature-based / vertical slices**: feature-a/ (with its own controller, service, model)
|
|
68
|
+
- **Hexagonal / clean architecture**: domain/ + ports/ + adapters/
|
|
69
|
+
- **Event-driven**: events/, handlers/, dispatchers/
|
|
70
|
+
- **Monolith vs. modules vs. microservices**
|
|
71
|
+
|
|
72
|
+
**Signs of architectural problems:**
|
|
73
|
+
- Circular imports/dependencies: A imports B, B imports C, C imports A
|
|
74
|
+
- God files: one file with 1000+ lines doing everything
|
|
75
|
+
- Missing abstraction: business logic mixed into controllers or UI components
|
|
76
|
+
- Tight coupling: deep import chains across layers that shouldn't know about each other
|
|
77
|
+
- Inconsistent patterns: half the codebase using one pattern, half using another
|
|
78
|
+
|
|
79
|
+
### Step 5: Check for circular dependencies
|
|
80
|
+
|
|
81
|
+
For Node.js:
|
|
82
|
+
```
|
|
83
|
+
npx madge --circular src/
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
For Python:
|
|
87
|
+
```
|
|
88
|
+
pip show pydeps && pydeps module_name
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Or manually trace: if module A imports B, search if B (or anything B imports) imports A.
|
|
92
|
+
|
|
93
|
+
### Step 6: Assess module responsibilities
|
|
94
|
+
|
|
95
|
+
For the 5-10 largest files, check if they're doing too much. A module should have one clear answer to: "what is this responsible for?"
|
|
96
|
+
|
|
97
|
+
Signs of violation: a service file that also does HTTP routing, template rendering, and database migrations.
|
|
98
|
+
|
|
99
|
+
## Output format
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
ARCHITECTURE ANALYSIS: my-project
|
|
103
|
+
|
|
104
|
+
OVERVIEW
|
|
105
|
+
Language: TypeScript (Node.js), React frontend
|
|
106
|
+
Pattern: Layered architecture (controllers → services → repositories)
|
|
107
|
+
Entry points: src/index.ts (API server), src/worker.ts (background jobs)
|
|
108
|
+
|
|
109
|
+
STRUCTURE
|
|
110
|
+
src/
|
|
111
|
+
api/ HTTP controllers — good separation
|
|
112
|
+
services/ Business logic — some mixing with persistence (see below)
|
|
113
|
+
db/ Database models and migrations
|
|
114
|
+
utils/ Shared utilities — well-contained
|
|
115
|
+
types/ Type definitions
|
|
116
|
+
|
|
117
|
+
ISSUES
|
|
118
|
+
|
|
119
|
+
⚠️ [HIGH] Circular dependency: auth/service.ts → users/service.ts → auth/middleware.ts → auth/service.ts
|
|
120
|
+
Resolution: Extract shared types to a separate module that neither imports from the other.
|
|
121
|
+
|
|
122
|
+
⚠️ [MEDIUM] src/services/payment.ts is 847 lines and handles: Stripe integration, webhook parsing,
|
|
123
|
+
email notifications, and database writes. Should be split into:
|
|
124
|
+
- payment-gateway.ts (Stripe API)
|
|
125
|
+
- webhook-handler.ts
|
|
126
|
+
- payment-repository.ts
|
|
127
|
+
|
|
128
|
+
ℹ️ [LOW] src/utils/ has grown to 23 files with no internal organization.
|
|
129
|
+
Consider grouping into: utils/string/, utils/date/, utils/crypto/
|
|
130
|
+
|
|
131
|
+
STRENGTHS
|
|
132
|
+
• Clear separation between API and service layers
|
|
133
|
+
• Repository pattern consistently applied for database access
|
|
134
|
+
• Type definitions centralized in types/
|
|
135
|
+
|
|
136
|
+
RECOMMENDATIONS
|
|
137
|
+
1. Break circular dependency in auth (blocks safe refactoring of either module)
|
|
138
|
+
2. Split payment.ts into focused modules
|
|
139
|
+
3. Organize utils/ directory
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
## Pitfalls
|
|
143
|
+
|
|
144
|
+
- Don't redesign the entire architecture based on a read — focus on actual problems
|
|
145
|
+
- Some coupling is intentional — understand the design before calling it wrong
|
|
146
|
+
- Large files aren't always a problem — a well-organized 1000-line file may be fine
|
|
147
|
+
- Framework conventions may explain patterns that look wrong in isolation (e.g. Rails fat models)
|
|
148
|
+
|
|
149
|
+
## Verification
|
|
150
|
+
|
|
151
|
+
After identifying issues: trace at least one import path manually to confirm it's a real circular dependency before reporting it.
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: adapter-aws-lambda
|
|
3
|
+
description: >
|
|
4
|
+
Deploy tRPC on AWS Lambda with awsLambdaRequestHandler() from
|
|
5
|
+
@trpc/server/adapters/aws-lambda for API Gateway v1 (REST, APIGatewayProxyEvent)
|
|
6
|
+
and v2 (HTTP, APIGatewayProxyEventV2), and Lambda Function URLs. Enable response
|
|
7
|
+
streaming with awsLambdaStreamingRequestHandler() wrapped in
|
|
8
|
+
awslambda.streamifyResponse(). CreateAWSLambdaContextOptions provides event and
|
|
9
|
+
context for context creation.
|
|
10
|
+
type: core
|
|
11
|
+
library: trpc
|
|
12
|
+
library_version: '11.15.1'
|
|
13
|
+
requires:
|
|
14
|
+
- server-setup
|
|
15
|
+
sources:
|
|
16
|
+
- www/docs/server/adapters/aws-lambda.md
|
|
17
|
+
- examples/lambda-url/
|
|
18
|
+
- examples/lambda-api-gateway/
|
|
19
|
+
category: backend
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# tRPC — Adapter: AWS Lambda
|
|
23
|
+
|
|
24
|
+
## Setup
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
// server.ts
|
|
28
|
+
import { initTRPC } from '@trpc/server';
|
|
29
|
+
import type { CreateAWSLambdaContextOptions } from '@trpc/server/adapters/aws-lambda';
|
|
30
|
+
import { awsLambdaRequestHandler } from '@trpc/server/adapters/aws-lambda';
|
|
31
|
+
import type { APIGatewayProxyEventV2 } from 'aws-lambda';
|
|
32
|
+
import { z } from 'zod';
|
|
33
|
+
|
|
34
|
+
const t = initTRPC.create();
|
|
35
|
+
|
|
36
|
+
const appRouter = t.router({
|
|
37
|
+
greet: t.procedure
|
|
38
|
+
.input(z.object({ name: z.string() }))
|
|
39
|
+
.query(({ input }) => ({ greeting: `Hello, ${input.name}!` })),
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
export type AppRouter = typeof appRouter;
|
|
43
|
+
|
|
44
|
+
const createContext = ({
|
|
45
|
+
event,
|
|
46
|
+
context,
|
|
47
|
+
}: CreateAWSLambdaContextOptions<APIGatewayProxyEventV2>) => ({
|
|
48
|
+
event,
|
|
49
|
+
lambdaContext: context,
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
export const handler = awsLambdaRequestHandler({
|
|
53
|
+
router: appRouter,
|
|
54
|
+
createContext,
|
|
55
|
+
});
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Core Patterns
|
|
59
|
+
|
|
60
|
+
### API Gateway v1 (REST) handler
|
|
61
|
+
|
|
62
|
+
```ts
|
|
63
|
+
import type { CreateAWSLambdaContextOptions } from '@trpc/server/adapters/aws-lambda';
|
|
64
|
+
import { awsLambdaRequestHandler } from '@trpc/server/adapters/aws-lambda';
|
|
65
|
+
import type { APIGatewayProxyEvent } from 'aws-lambda';
|
|
66
|
+
import { appRouter } from './router';
|
|
67
|
+
|
|
68
|
+
const createContext = ({
|
|
69
|
+
event,
|
|
70
|
+
context,
|
|
71
|
+
}: CreateAWSLambdaContextOptions<APIGatewayProxyEvent>) => ({
|
|
72
|
+
user: event.requestContext.authorizer?.claims,
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
export const handler = awsLambdaRequestHandler({
|
|
76
|
+
router: appRouter,
|
|
77
|
+
createContext,
|
|
78
|
+
});
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Use `APIGatewayProxyEvent` for REST API (v1 payload format) and `APIGatewayProxyEventV2` for HTTP API (v2 payload format).
|
|
82
|
+
|
|
83
|
+
### Response streaming with awsLambdaStreamingRequestHandler
|
|
84
|
+
|
|
85
|
+
```ts
|
|
86
|
+
/// <reference types="aws-lambda" />
|
|
87
|
+
import type { CreateAWSLambdaContextOptions } from '@trpc/server/adapters/aws-lambda';
|
|
88
|
+
import { awsLambdaStreamingRequestHandler } from '@trpc/server/adapters/aws-lambda';
|
|
89
|
+
import type { APIGatewayProxyEventV2 } from 'aws-lambda';
|
|
90
|
+
import { appRouter } from './router';
|
|
91
|
+
|
|
92
|
+
const createContext = ({
|
|
93
|
+
event,
|
|
94
|
+
context,
|
|
95
|
+
}: CreateAWSLambdaContextOptions<APIGatewayProxyEventV2>) => ({});
|
|
96
|
+
|
|
97
|
+
export const handler = awslambda.streamifyResponse(
|
|
98
|
+
awsLambdaStreamingRequestHandler({
|
|
99
|
+
router: appRouter,
|
|
100
|
+
createContext,
|
|
101
|
+
}),
|
|
102
|
+
);
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Response streaming is supported for Lambda Function URLs and API Gateway REST APIs (with `responseTransferMode: STREAM`). The `awslambda` namespace is provided by the Lambda execution environment.
|
|
106
|
+
|
|
107
|
+
### Streaming async generator procedure
|
|
108
|
+
|
|
109
|
+
```ts
|
|
110
|
+
import { initTRPC } from '@trpc/server';
|
|
111
|
+
|
|
112
|
+
const t = initTRPC.create();
|
|
113
|
+
|
|
114
|
+
export const appRouter = t.router({
|
|
115
|
+
countdown: t.procedure.query(async function* () {
|
|
116
|
+
for (let i = 10; i >= 0; i--) {
|
|
117
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
118
|
+
yield i;
|
|
119
|
+
}
|
|
120
|
+
}),
|
|
121
|
+
});
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Pair with `httpBatchStreamLink` on the client for streamed responses.
|
|
125
|
+
|
|
126
|
+
### Limiting batch size with maxBatchSize
|
|
127
|
+
|
|
128
|
+
```ts
|
|
129
|
+
import { awsLambdaRequestHandler } from '@trpc/server/adapters/aws-lambda';
|
|
130
|
+
import { appRouter } from './router';
|
|
131
|
+
|
|
132
|
+
export const handler = awsLambdaRequestHandler({
|
|
133
|
+
router: appRouter,
|
|
134
|
+
createContext,
|
|
135
|
+
maxBatchSize: 10,
|
|
136
|
+
});
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Requests batching more than `maxBatchSize` operations are rejected with a `400 Bad Request` error. Set `maxItems` on your client's `httpBatchLink` to the same value to avoid exceeding the limit.
|
|
140
|
+
|
|
141
|
+
## Common Mistakes
|
|
142
|
+
|
|
143
|
+
### HIGH Using httpBatchLink with per-procedure API Gateway resources
|
|
144
|
+
|
|
145
|
+
Wrong:
|
|
146
|
+
|
|
147
|
+
```ts
|
|
148
|
+
// API Gateway has a separate resource for each procedure
|
|
149
|
+
// e.g., /getUser, /createUser
|
|
150
|
+
// Client uses:
|
|
151
|
+
import { httpBatchLink } from '@trpc/client';
|
|
152
|
+
|
|
153
|
+
httpBatchLink({ url: 'https://api.example.com' });
|
|
154
|
+
// Batch request to /getUser,createUser → 404
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Correct:
|
|
158
|
+
|
|
159
|
+
```ts
|
|
160
|
+
import { httpBatchLink, httpLink } from '@trpc/client';
|
|
161
|
+
|
|
162
|
+
// Option A: Single catch-all resource (e.g., /{proxy+})
|
|
163
|
+
httpBatchLink({ url: 'https://api.example.com' });
|
|
164
|
+
|
|
165
|
+
// Option B: Per-procedure resources with httpLink (no batching)
|
|
166
|
+
httpLink({ url: 'https://api.example.com' });
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
`httpBatchLink` sends multiple procedure names in the URL path (e.g., `getUser,createUser`). If API Gateway routes are per-procedure, the combined path does not match any resource and returns 404. Use a single catch-all resource or switch to `httpLink`.
|
|
170
|
+
|
|
171
|
+
Source: www/docs/server/adapters/aws-lambda.md
|
|
172
|
+
|
|
173
|
+
### HIGH Forgetting streamifyResponse wrapper for streaming
|
|
174
|
+
|
|
175
|
+
Wrong:
|
|
176
|
+
|
|
177
|
+
```ts
|
|
178
|
+
export const handler = awsLambdaStreamingRequestHandler({
|
|
179
|
+
router: appRouter,
|
|
180
|
+
createContext,
|
|
181
|
+
});
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Correct:
|
|
185
|
+
|
|
186
|
+
```ts
|
|
187
|
+
export const handler = awslambda.streamifyResponse(
|
|
188
|
+
awsLambdaStreamingRequestHandler({
|
|
189
|
+
router: appRouter,
|
|
190
|
+
createContext,
|
|
191
|
+
}),
|
|
192
|
+
);
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
`awsLambdaStreamingRequestHandler` requires wrapping with `awslambda.streamifyResponse()` to enable Lambda response streaming. Without it, Lambda treats the handler as a standard buffered response.
|
|
196
|
+
|
|
197
|
+
Source: www/docs/server/adapters/aws-lambda.md
|
|
198
|
+
|
|
199
|
+
## See Also
|
|
200
|
+
|
|
201
|
+
- **server-setup** -- `initTRPC.create()`, router/procedure definition, context
|
|
202
|
+
- **adapter-fetch** -- alternative for edge/serverless runtimes using Fetch API
|
|
203
|
+
- **links** -- `httpBatchLink` vs `httpLink` for API Gateway routing considerations
|
|
204
|
+
- AWS Lambda docs: https://docs.aws.amazon.com/lambda/latest/dg/welcome.html
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: adapter-express
|
|
3
|
+
description: >
|
|
4
|
+
Mount tRPC as Express middleware with createExpressMiddleware() from
|
|
5
|
+
@trpc/server/adapters/express. Access Express req/res in createContext via
|
|
6
|
+
CreateExpressContextOptions. Mount at a path prefix like app.use('/trpc', ...).
|
|
7
|
+
Avoid global express.json() conflicting with tRPC body parsing for FormData.
|
|
8
|
+
type: core
|
|
9
|
+
library: trpc
|
|
10
|
+
library_version: '11.15.1'
|
|
11
|
+
requires:
|
|
12
|
+
- server-setup
|
|
13
|
+
sources:
|
|
14
|
+
- www/docs/server/adapters/express.md
|
|
15
|
+
- examples/express-server/src/server.ts
|
|
16
|
+
category: backend
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# tRPC — Adapter: Express
|
|
20
|
+
|
|
21
|
+
## Setup
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
// server.ts
|
|
25
|
+
import { initTRPC } from '@trpc/server';
|
|
26
|
+
import * as trpcExpress from '@trpc/server/adapters/express';
|
|
27
|
+
import express from 'express';
|
|
28
|
+
import { z } from 'zod';
|
|
29
|
+
|
|
30
|
+
const createContext = ({
|
|
31
|
+
req,
|
|
32
|
+
res,
|
|
33
|
+
}: trpcExpress.CreateExpressContextOptions) => {
|
|
34
|
+
return { req, res };
|
|
35
|
+
};
|
|
36
|
+
type Context = Awaited<ReturnType<typeof createContext>>;
|
|
37
|
+
|
|
38
|
+
const t = initTRPC.context<Context>().create();
|
|
39
|
+
|
|
40
|
+
const appRouter = t.router({
|
|
41
|
+
greet: t.procedure
|
|
42
|
+
.input(z.object({ name: z.string() }))
|
|
43
|
+
.query(({ input }) => ({ greeting: `Hello, ${input.name}!` })),
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
export type AppRouter = typeof appRouter;
|
|
47
|
+
|
|
48
|
+
const app = express();
|
|
49
|
+
|
|
50
|
+
app.use(
|
|
51
|
+
'/trpc',
|
|
52
|
+
trpcExpress.createExpressMiddleware({
|
|
53
|
+
router: appRouter,
|
|
54
|
+
createContext,
|
|
55
|
+
}),
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
app.listen(4000, () => {
|
|
59
|
+
console.log('Listening on http://localhost:4000');
|
|
60
|
+
});
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Core Patterns
|
|
64
|
+
|
|
65
|
+
### Accessing Express req/res in context
|
|
66
|
+
|
|
67
|
+
```ts
|
|
68
|
+
import * as trpcExpress from '@trpc/server/adapters/express';
|
|
69
|
+
|
|
70
|
+
const createContext = ({
|
|
71
|
+
req,
|
|
72
|
+
res,
|
|
73
|
+
}: trpcExpress.CreateExpressContextOptions) => {
|
|
74
|
+
const token = req.headers.authorization?.split(' ')[1];
|
|
75
|
+
return { token, res };
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
type Context = Awaited<ReturnType<typeof createContext>>;
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
`CreateExpressContextOptions` provides typed access to the Express `req` (IncomingMessage) and `res` (ServerResponse).
|
|
82
|
+
|
|
83
|
+
### Adding tRPC alongside existing Express routes
|
|
84
|
+
|
|
85
|
+
```ts
|
|
86
|
+
import * as trpcExpress from '@trpc/server/adapters/express';
|
|
87
|
+
import cors from 'cors';
|
|
88
|
+
import express from 'express';
|
|
89
|
+
import { createContext } from './context';
|
|
90
|
+
import { appRouter } from './router';
|
|
91
|
+
|
|
92
|
+
const app = express();
|
|
93
|
+
|
|
94
|
+
app.use(cors());
|
|
95
|
+
|
|
96
|
+
app.get('/health', (_req, res) => {
|
|
97
|
+
res.json({ status: 'ok' });
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
app.use(
|
|
101
|
+
'/trpc',
|
|
102
|
+
trpcExpress.createExpressMiddleware({
|
|
103
|
+
router: appRouter,
|
|
104
|
+
createContext,
|
|
105
|
+
}),
|
|
106
|
+
);
|
|
107
|
+
|
|
108
|
+
app.listen(4000);
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Limiting batch size with maxBatchSize
|
|
112
|
+
|
|
113
|
+
```ts
|
|
114
|
+
import * as trpcExpress from '@trpc/server/adapters/express';
|
|
115
|
+
import express from 'express';
|
|
116
|
+
import { createContext } from './context';
|
|
117
|
+
import { appRouter } from './router';
|
|
118
|
+
|
|
119
|
+
const app = express();
|
|
120
|
+
|
|
121
|
+
app.use(
|
|
122
|
+
'/trpc',
|
|
123
|
+
trpcExpress.createExpressMiddleware({
|
|
124
|
+
router: appRouter,
|
|
125
|
+
createContext,
|
|
126
|
+
maxBatchSize: 10,
|
|
127
|
+
}),
|
|
128
|
+
);
|
|
129
|
+
|
|
130
|
+
app.listen(4000);
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Requests batching more than `maxBatchSize` operations are rejected with a `400 Bad Request` error. Set `maxItems` on your client's `httpBatchLink` to the same value to avoid exceeding the limit.
|
|
134
|
+
|
|
135
|
+
## Common Mistakes
|
|
136
|
+
|
|
137
|
+
### HIGH Global express.json() consuming tRPC request body
|
|
138
|
+
|
|
139
|
+
Wrong:
|
|
140
|
+
|
|
141
|
+
```ts
|
|
142
|
+
const app = express();
|
|
143
|
+
app.use(express.json()); // global body parser
|
|
144
|
+
app.use(
|
|
145
|
+
'/trpc',
|
|
146
|
+
trpcExpress.createExpressMiddleware({
|
|
147
|
+
router: appRouter,
|
|
148
|
+
createContext,
|
|
149
|
+
}),
|
|
150
|
+
);
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Correct:
|
|
154
|
+
|
|
155
|
+
```ts
|
|
156
|
+
const app = express();
|
|
157
|
+
// Only apply body parser to non-tRPC routes
|
|
158
|
+
app.use('/api', express.json());
|
|
159
|
+
app.use(
|
|
160
|
+
'/trpc',
|
|
161
|
+
trpcExpress.createExpressMiddleware({
|
|
162
|
+
router: appRouter,
|
|
163
|
+
createContext,
|
|
164
|
+
}),
|
|
165
|
+
);
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
If `express.json()` is applied globally before the tRPC middleware, it consumes and parses the request body. tRPC then receives an already-parsed body, which breaks FormData and binary content type handling.
|
|
169
|
+
|
|
170
|
+
Source: www/docs/server/non-json-content-types.md
|
|
171
|
+
|
|
172
|
+
## See Also
|
|
173
|
+
|
|
174
|
+
- **server-setup** -- `initTRPC.create()`, router/procedure definition, context
|
|
175
|
+
- **adapter-standalone** -- simpler adapter when Express middleware ecosystem is not needed
|
|
176
|
+
- **auth** -- extracting JWT from `req.headers.authorization` in context
|
|
177
|
+
- Express docs: https://expressjs.com/en/guide/using-middleware.html
|