opencode-agent-kit 1.0.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 +796 -0
- package/bin/commands/init.mjs +221 -0
- package/bin/init.mjs +21 -0
- package/package.json +22 -0
- package/template/.opencode/agent-docs/backend/README.md +0 -0
- package/template/.opencode/agent-docs/backend/node/BACKEND_PATTERNS.md +82 -0
- package/template/.opencode/agent-docs/backend/node/BACKEND_QUICK_START.md +49 -0
- package/template/.opencode/agent-docs/frontend/next/README.md +0 -0
- package/template/.opencode/agent-docs/frontend/nuxt/API_PATTERNS.md +807 -0
- package/template/.opencode/agent-docs/frontend/nuxt/CHEATSHEET.md +676 -0
- package/template/.opencode/agent-docs/frontend/nuxt/COMPLETION_REPORT.md +613 -0
- package/template/.opencode/agent-docs/frontend/nuxt/EXAMPLES.md +956 -0
- package/template/.opencode/agent-docs/frontend/nuxt/INDEX.md +596 -0
- package/template/.opencode/agent-docs/frontend/nuxt/MCP_GUIDE.md +881 -0
- package/template/.opencode/agent-docs/frontend/nuxt/MENTOR_CURRICULUM_30_DAYS.md +256 -0
- package/template/.opencode/agent-docs/frontend/nuxt/MENTOR_CURRICULUM_CHECKLIST.md +156 -0
- package/template/.opencode/agent-docs/frontend/nuxt/MENTOR_WEEKLY_ASSIGNMENTS.md +191 -0
- package/template/.opencode/agent-docs/frontend/nuxt/QUICK_START.md +509 -0
- package/template/.opencode/agent-docs/frontend/nuxt/README.md +506 -0
- package/template/.opencode/agent-docs/frontend/nuxt/README_AGENTS.md +140 -0
- package/template/.opencode/agent-docs/frontend/nuxt/README_DOCS.md +65 -0
- package/template/.opencode/agent-docs/frontend/nuxt/SUMMARY.md +474 -0
- package/template/.opencode/agent-docs/frontend/nuxt/TEAM_OPERATING_GUIDE.md +54 -0
- package/template/.opencode/agent-docs/frontend/nuxt/TESTING_GUIDE.md +904 -0
- package/template/.opencode/agent-docs/frontend/nuxt/WORKFLOWS.md +758 -0
- package/template/.opencode/agent-docs/frontend/react/API_PATTERNS.md +187 -0
- package/template/.opencode/agent-docs/frontend/react/CHEATSHEET.md +87 -0
- package/template/.opencode/agent-docs/frontend/react/INDEX.md +45 -0
- package/template/.opencode/agent-docs/frontend/react/QUICK_START.md +43 -0
- package/template/.opencode/agent-docs/frontend/react/README.md +159 -0
- package/template/.opencode/agent-docs/frontend/vue/README.md +0 -0
- package/template/.opencode/agent-docs/mobile/android/README.md +45 -0
- package/template/.opencode/agent-docs/mobile/flutter/README.md +44 -0
- package/template/.opencode/agents/android-developer.md +418 -0
- package/template/.opencode/agents/code-igniter-3-fullstack.md +345 -0
- package/template/.opencode/agents/code-reviewer.md +517 -0
- package/template/.opencode/agents/database-specialist.md +455 -0
- package/template/.opencode/agents/devops-specialist.md +562 -0
- package/template/.opencode/agents/flutter-developer.md +556 -0
- package/template/.opencode/agents/it-leader.md +911 -0
- package/template/.opencode/agents/laravel-advanced.md +691 -0
- package/template/.opencode/agents/node-backend-developer.md +343 -0
- package/template/.opencode/agents/nuxt-frontend-developer-mentor.md +402 -0
- package/template/.opencode/agents/nuxt-frontend-developer.md +1573 -0
- package/template/.opencode/agents/react-frontend-developer.md +1017 -0
- package/template/.opencode/agents/seo-specialist.md +681 -0
- package/template/.opencode/agents/ui-ux-designer.md +783 -0
- package/template/.opencode/commands/android-build/command.md +25 -0
- package/template/.opencode/commands/android-test/command.md +23 -0
- package/template/.opencode/commands/build-fix.md +29 -0
- package/template/.opencode/commands/checkpoint.md +74 -0
- package/template/.opencode/commands/code-review.md +40 -0
- package/template/.opencode/commands/e2e.md +363 -0
- package/template/.opencode/commands/eval.md +120 -0
- package/template/.opencode/commands/evolve.md +193 -0
- package/template/.opencode/commands/flutter-build/command.md +25 -0
- package/template/.opencode/commands/flutter-test/command.md +24 -0
- package/template/.opencode/commands/go-build.md +183 -0
- package/template/.opencode/commands/go-review.md +148 -0
- package/template/.opencode/commands/go-test.md +268 -0
- package/template/.opencode/commands/gpc-release/command.md +30 -0
- package/template/.opencode/commands/instinct-export.md +91 -0
- package/template/.opencode/commands/instinct-import.md +142 -0
- package/template/.opencode/commands/instinct-status.md +86 -0
- package/template/.opencode/commands/learn.md +70 -0
- package/template/.opencode/commands/multi-backend.md +158 -0
- package/template/.opencode/commands/multi-execute.md +310 -0
- package/template/.opencode/commands/multi-frontend.md +158 -0
- package/template/.opencode/commands/multi-plan.md +261 -0
- package/template/.opencode/commands/multi-workflow.md +183 -0
- package/template/.opencode/commands/orchestrate.md +172 -0
- package/template/.opencode/commands/plan.md +113 -0
- package/template/.opencode/commands/pm2.md +271 -0
- package/template/.opencode/commands/python-review.md +297 -0
- package/template/.opencode/commands/refactor-clean.md +28 -0
- package/template/.opencode/commands/sessions.md +305 -0
- package/template/.opencode/commands/setup-pm.md +80 -0
- package/template/.opencode/commands/skill-create.md +174 -0
- package/template/.opencode/commands/tdd.md +326 -0
- package/template/.opencode/commands/test-coverage.md +27 -0
- package/template/.opencode/commands/update-codemaps.md +17 -0
- package/template/.opencode/commands/update-docs.md +31 -0
- package/template/.opencode/commands/verify.md +59 -0
- package/template/.opencode/config.example.json +309 -0
- package/template/.opencode/config.json +341 -0
- package/template/.opencode/contexts/dev.md +20 -0
- package/template/.opencode/contexts/research.md +26 -0
- package/template/.opencode/contexts/review.md +22 -0
- package/template/.opencode/hooks/hooks.json +169 -0
- package/template/.opencode/instructions/INSTRUCTIONS.md +388 -0
- package/template/.opencode/package.json +5 -0
- package/template/.opencode/rules/README.md +82 -0
- package/template/.opencode/rules/android/gradle.md +62 -0
- package/template/.opencode/rules/android/testing.md +27 -0
- package/template/.opencode/rules/common/agents.md +49 -0
- package/template/.opencode/rules/common/coding-style.md +48 -0
- package/template/.opencode/rules/common/git-workflow.md +45 -0
- package/template/.opencode/rules/common/hooks.md +30 -0
- package/template/.opencode/rules/common/patterns.md +31 -0
- package/template/.opencode/rules/common/performance.md +55 -0
- package/template/.opencode/rules/common/security.md +29 -0
- package/template/.opencode/rules/common/testing.md +29 -0
- package/template/.opencode/rules/flutter/state-management.md +57 -0
- package/template/.opencode/rules/flutter/testing.md +42 -0
- package/template/.opencode/rules/golang/coding-style.md +26 -0
- package/template/.opencode/rules/golang/hooks.md +11 -0
- package/template/.opencode/rules/golang/patterns.md +39 -0
- package/template/.opencode/rules/golang/security.md +28 -0
- package/template/.opencode/rules/golang/testing.md +25 -0
- package/template/.opencode/rules/mobile/performance.md +36 -0
- package/template/.opencode/rules/python/coding-style.md +37 -0
- package/template/.opencode/rules/python/hooks.md +14 -0
- package/template/.opencode/rules/python/patterns.md +34 -0
- package/template/.opencode/rules/python/security.md +25 -0
- package/template/.opencode/rules/python/testing.md +33 -0
- package/template/.opencode/rules/typescript/coding-style.md +58 -0
- package/template/.opencode/rules/typescript/hooks.md +15 -0
- package/template/.opencode/rules/typescript/patterns.md +45 -0
- package/template/.opencode/rules/typescript/security.md +21 -0
- package/template/.opencode/rules/typescript/testing.md +11 -0
- package/template/.opencode/skills/api-documentation/SKILL.md +188 -0
- package/template/.opencode/skills/backend-patterns/SKILL.md +587 -0
- package/template/.opencode/skills/building-components/SKILL.md +37 -0
- package/template/.opencode/skills/building-components/references/accessibility.mdx +819 -0
- package/template/.opencode/skills/building-components/references/as-child.mdx +324 -0
- package/template/.opencode/skills/building-components/references/composition.mdx +239 -0
- package/template/.opencode/skills/building-components/references/data-attributes.mdx +413 -0
- package/template/.opencode/skills/building-components/references/definitions.mdx +258 -0
- package/template/.opencode/skills/building-components/references/design-tokens.mdx +57 -0
- package/template/.opencode/skills/building-components/references/docs.mdx +155 -0
- package/template/.opencode/skills/building-components/references/marketplaces.mdx +144 -0
- package/template/.opencode/skills/building-components/references/npm.mdx +166 -0
- package/template/.opencode/skills/building-components/references/polymorphism.mdx +583 -0
- package/template/.opencode/skills/building-components/references/principles.mdx +61 -0
- package/template/.opencode/skills/building-components/references/registry.mdx +169 -0
- package/template/.opencode/skills/building-components/references/state.mdx +99 -0
- package/template/.opencode/skills/building-components/references/styling.mdx +286 -0
- package/template/.opencode/skills/building-components/references/types.mdx +191 -0
- package/template/.opencode/skills/clickhouse-io/SKILL.md +429 -0
- package/template/.opencode/skills/coding-standards/SKILL.md +520 -0
- package/template/.opencode/skills/configure-ecc/SKILL.md +298 -0
- package/template/.opencode/skills/continuous-learning/SKILL.md +110 -0
- package/template/.opencode/skills/continuous-learning/config.json +18 -0
- package/template/.opencode/skills/continuous-learning/evaluate-session.sh +60 -0
- package/template/.opencode/skills/continuous-learning-v2/SKILL.md +284 -0
- package/template/.opencode/skills/continuous-learning-v2/agents/observer.md +137 -0
- package/template/.opencode/skills/continuous-learning-v2/agents/start-observer.sh +134 -0
- package/template/.opencode/skills/continuous-learning-v2/config.json +41 -0
- package/template/.opencode/skills/continuous-learning-v2/hooks/observe.sh +153 -0
- package/template/.opencode/skills/continuous-learning-v2/scripts/instinct-cli.py +489 -0
- package/template/.opencode/skills/continuous-learning-v2/scripts/test_parse_instinct.py +82 -0
- package/template/.opencode/skills/dart-add-unit-test/SKILL.md +122 -0
- package/template/.opencode/skills/dart-build-cli-app/SKILL.md +185 -0
- package/template/.opencode/skills/dart-collect-coverage/SKILL.md +141 -0
- package/template/.opencode/skills/dart-fix-runtime-errors/SKILL.md +166 -0
- package/template/.opencode/skills/dart-generate-test-mocks/SKILL.md +155 -0
- package/template/.opencode/skills/dart-migrate-to-checks-package/SKILL.md +126 -0
- package/template/.opencode/skills/dart-resolve-package-conflicts/SKILL.md +116 -0
- package/template/.opencode/skills/dart-run-static-analysis/SKILL.md +104 -0
- package/template/.opencode/skills/dart-use-pattern-matching/SKILL.md +146 -0
- package/template/.opencode/skills/django-patterns/SKILL.md +733 -0
- package/template/.opencode/skills/django-security/SKILL.md +592 -0
- package/template/.opencode/skills/django-tdd/SKILL.md +728 -0
- package/template/.opencode/skills/django-verification/SKILL.md +460 -0
- package/template/.opencode/skills/eval-harness/SKILL.md +227 -0
- package/template/.opencode/skills/firebase-basics/SKILL.md +103 -0
- package/template/.opencode/skills/firebase-basics/references/additional-skills.md +113 -0
- package/template/.opencode/skills/firebase-basics/references/cli-usage.md +31 -0
- package/template/.opencode/skills/firebase-basics/references/client-library-usage.md +45 -0
- package/template/.opencode/skills/firebase-basics/references/core-concepts.md +61 -0
- package/template/.opencode/skills/firebase-basics/references/iac-usage.md +40 -0
- package/template/.opencode/skills/firebase-basics/references/iam-security.md +74 -0
- package/template/.opencode/skills/firebase-basics/references/mcp-usage.md +63 -0
- package/template/.opencode/skills/flutter/SKILL.md +292 -0
- package/template/.opencode/skills/flutter-add-integration-test/SKILL.md +163 -0
- package/template/.opencode/skills/flutter-add-widget-preview/SKILL.md +145 -0
- package/template/.opencode/skills/flutter-add-widget-test/SKILL.md +154 -0
- package/template/.opencode/skills/flutter-apply-architecture-best-practices/SKILL.md +162 -0
- package/template/.opencode/skills/flutter-build-responsive-layout/SKILL.md +139 -0
- package/template/.opencode/skills/flutter-fix-layout-issues/SKILL.md +130 -0
- package/template/.opencode/skills/flutter-implement-json-serialization/SKILL.md +153 -0
- package/template/.opencode/skills/flutter-setup-declarative-routing/SKILL.md +255 -0
- package/template/.opencode/skills/flutter-setup-localization/SKILL.md +210 -0
- package/template/.opencode/skills/flutter-use-http-package/SKILL.md +174 -0
- package/template/.opencode/skills/frontend-design/SKILL.md +89 -0
- package/template/.opencode/skills/frontend-patterns/SKILL.md +631 -0
- package/template/.opencode/skills/golang-patterns/SKILL.md +673 -0
- package/template/.opencode/skills/golang-testing/SKILL.md +719 -0
- package/template/.opencode/skills/impeccable/SKILL.md +165 -0
- package/template/.opencode/skills/impeccable/agents/impeccable-asset-producer.md +101 -0
- package/template/.opencode/skills/impeccable/reference/adapt.md +190 -0
- package/template/.opencode/skills/impeccable/reference/animate.md +175 -0
- package/template/.opencode/skills/impeccable/reference/audit.md +133 -0
- package/template/.opencode/skills/impeccable/reference/bolder.md +113 -0
- package/template/.opencode/skills/impeccable/reference/brand.md +118 -0
- package/template/.opencode/skills/impeccable/reference/clarify.md +174 -0
- package/template/.opencode/skills/impeccable/reference/codex.md +105 -0
- package/template/.opencode/skills/impeccable/reference/cognitive-load.md +106 -0
- package/template/.opencode/skills/impeccable/reference/color-and-contrast.md +105 -0
- package/template/.opencode/skills/impeccable/reference/colorize.md +154 -0
- package/template/.opencode/skills/impeccable/reference/craft.md +123 -0
- package/template/.opencode/skills/impeccable/reference/critique.md +273 -0
- package/template/.opencode/skills/impeccable/reference/delight.md +302 -0
- package/template/.opencode/skills/impeccable/reference/distill.md +111 -0
- package/template/.opencode/skills/impeccable/reference/document.md +427 -0
- package/template/.opencode/skills/impeccable/reference/extract.md +69 -0
- package/template/.opencode/skills/impeccable/reference/harden.md +347 -0
- package/template/.opencode/skills/impeccable/reference/heuristics-scoring.md +234 -0
- package/template/.opencode/skills/impeccable/reference/interaction-design.md +195 -0
- package/template/.opencode/skills/impeccable/reference/layout.md +141 -0
- package/template/.opencode/skills/impeccable/reference/live.md +622 -0
- package/template/.opencode/skills/impeccable/reference/motion-design.md +109 -0
- package/template/.opencode/skills/impeccable/reference/onboard.md +234 -0
- package/template/.opencode/skills/impeccable/reference/optimize.md +258 -0
- package/template/.opencode/skills/impeccable/reference/overdrive.md +130 -0
- package/template/.opencode/skills/impeccable/reference/personas.md +179 -0
- package/template/.opencode/skills/impeccable/reference/polish.md +242 -0
- package/template/.opencode/skills/impeccable/reference/product.md +62 -0
- package/template/.opencode/skills/impeccable/reference/quieter.md +99 -0
- package/template/.opencode/skills/impeccable/reference/responsive-design.md +114 -0
- package/template/.opencode/skills/impeccable/reference/shape.md +165 -0
- package/template/.opencode/skills/impeccable/reference/spatial-design.md +100 -0
- package/template/.opencode/skills/impeccable/reference/teach.md +156 -0
- package/template/.opencode/skills/impeccable/reference/typeset.md +124 -0
- package/template/.opencode/skills/impeccable/reference/typography.md +159 -0
- package/template/.opencode/skills/impeccable/reference/ux-writing.md +107 -0
- package/template/.opencode/skills/impeccable/scripts/cleanup-deprecated.mjs +284 -0
- package/template/.opencode/skills/impeccable/scripts/command-metadata.json +94 -0
- package/template/.opencode/skills/impeccable/scripts/critique-storage.mjs +242 -0
- package/template/.opencode/skills/impeccable/scripts/design-parser.mjs +820 -0
- package/template/.opencode/skills/impeccable/scripts/detect-csp.mjs +198 -0
- package/template/.opencode/skills/impeccable/scripts/detect.mjs +21 -0
- package/template/.opencode/skills/impeccable/scripts/impeccable-paths.mjs +110 -0
- package/template/.opencode/skills/impeccable/scripts/is-generated.mjs +69 -0
- package/template/.opencode/skills/impeccable/scripts/live-accept.mjs +595 -0
- package/template/.opencode/skills/impeccable/scripts/live-browser-session.js +123 -0
- package/template/.opencode/skills/impeccable/scripts/live-browser.js +4860 -0
- package/template/.opencode/skills/impeccable/scripts/live-complete.mjs +75 -0
- package/template/.opencode/skills/impeccable/scripts/live-completion.mjs +18 -0
- package/template/.opencode/skills/impeccable/scripts/live-inject.mjs +446 -0
- package/template/.opencode/skills/impeccable/scripts/live-poll.mjs +200 -0
- package/template/.opencode/skills/impeccable/scripts/live-resume.mjs +48 -0
- package/template/.opencode/skills/impeccable/scripts/live-server.mjs +838 -0
- package/template/.opencode/skills/impeccable/scripts/live-session-store.mjs +254 -0
- package/template/.opencode/skills/impeccable/scripts/live-status.mjs +47 -0
- package/template/.opencode/skills/impeccable/scripts/live-wrap.mjs +632 -0
- package/template/.opencode/skills/impeccable/scripts/live.mjs +247 -0
- package/template/.opencode/skills/impeccable/scripts/load-context.mjs +141 -0
- package/template/.opencode/skills/impeccable/scripts/modern-screenshot.umd.js +14 -0
- package/template/.opencode/skills/impeccable/scripts/pin.mjs +214 -0
- package/template/.opencode/skills/iterative-retrieval/SKILL.md +202 -0
- package/template/.opencode/skills/java-coding-standards/SKILL.md +138 -0
- package/template/.opencode/skills/jetpack-compose/.skillfish.json +10 -0
- package/template/.opencode/skills/jetpack-compose/SKILL.md +420 -0
- package/template/.opencode/skills/jpa-patterns/SKILL.md +141 -0
- package/template/.opencode/skills/nutrient-document-processing/SKILL.md +165 -0
- package/template/.opencode/skills/nuxt-ui/SKILL.md +334 -0
- package/template/.opencode/skills/nuxt-ui/references/components.md +377 -0
- package/template/.opencode/skills/nuxt-ui/references/composables.md +127 -0
- package/template/.opencode/skills/nuxt-ui/references/layouts/chat.md +266 -0
- package/template/.opencode/skills/nuxt-ui/references/layouts/dashboard.md +220 -0
- package/template/.opencode/skills/nuxt-ui/references/layouts/docs.md +141 -0
- package/template/.opencode/skills/nuxt-ui/references/layouts/editor.md +168 -0
- package/template/.opencode/skills/nuxt-ui/references/layouts/page.md +260 -0
- package/template/.opencode/skills/nuxt-ui/references/theming.md +427 -0
- package/template/.opencode/skills/postgres-patterns/SKILL.md +146 -0
- package/template/.opencode/skills/project-guidelines-example/SKILL.md +345 -0
- package/template/.opencode/skills/python-patterns/SKILL.md +749 -0
- package/template/.opencode/skills/python-testing/SKILL.md +815 -0
- package/template/.opencode/skills/security-review/SKILL.md +494 -0
- package/template/.opencode/skills/security-review/cloud-infrastructure-security.md +361 -0
- package/template/.opencode/skills/shadcn-ui/README.md +248 -0
- package/template/.opencode/skills/shadcn-ui/SKILL.md +326 -0
- package/template/.opencode/skills/shadcn-ui/examples/auth-layout.tsx +177 -0
- package/template/.opencode/skills/shadcn-ui/examples/data-table.tsx +313 -0
- package/template/.opencode/skills/shadcn-ui/examples/form-pattern.tsx +177 -0
- package/template/.opencode/skills/shadcn-ui/resources/component-catalog.md +481 -0
- package/template/.opencode/skills/shadcn-ui/resources/customization-guide.md +516 -0
- package/template/.opencode/skills/shadcn-ui/resources/migration-guide.md +463 -0
- package/template/.opencode/skills/shadcn-ui/resources/setup-guide.md +412 -0
- package/template/.opencode/skills/shadcn-ui/scripts/verify-setup.sh +134 -0
- package/template/.opencode/skills/springboot-patterns/SKILL.md +304 -0
- package/template/.opencode/skills/springboot-security/SKILL.md +119 -0
- package/template/.opencode/skills/springboot-tdd/SKILL.md +157 -0
- package/template/.opencode/skills/springboot-verification/SKILL.md +100 -0
- package/template/.opencode/skills/strategic-compact/SKILL.md +63 -0
- package/template/.opencode/skills/strategic-compact/suggest-compact.sh +52 -0
- package/template/.opencode/skills/tdd-workflow/SKILL.md +409 -0
- package/template/.opencode/skills/vercel-composition-patterns/AGENTS.md +946 -0
- package/template/.opencode/skills/vercel-composition-patterns/SKILL.md +89 -0
- package/template/.opencode/skills/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
- package/template/.opencode/skills/vercel-composition-patterns/rules/architecture-compound-components.md +112 -0
- package/template/.opencode/skills/vercel-composition-patterns/rules/patterns-children-over-render-props.md +87 -0
- package/template/.opencode/skills/vercel-composition-patterns/rules/patterns-explicit-variants.md +100 -0
- package/template/.opencode/skills/vercel-composition-patterns/rules/react19-no-forwardref.md +42 -0
- package/template/.opencode/skills/vercel-composition-patterns/rules/state-context-interface.md +191 -0
- package/template/.opencode/skills/vercel-composition-patterns/rules/state-decouple-implementation.md +113 -0
- package/template/.opencode/skills/vercel-composition-patterns/rules/state-lift-state.md +125 -0
- package/template/.opencode/skills/vercel-react-best-practices/AGENTS.md +2934 -0
- package/template/.opencode/skills/vercel-react-best-practices/SKILL.md +136 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/template/.opencode/skills/verification-loop/SKILL.md +120 -0
- package/template/.opencode/skills/web-design-guidelines/SKILL.md +39 -0
- package/template/AGENTS.md +32 -0
- package/template/opencode.json +354 -0
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { readFileSync, existsSync, copyFileSync, mkdirSync, writeFileSync, readdirSync, statSync } from 'fs';
|
|
2
|
+
import { join, dirname } from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
import { execSync } from 'child_process';
|
|
5
|
+
|
|
6
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
7
|
+
const __dirname = dirname(__filename);
|
|
8
|
+
const PKG_ROOT = join(__dirname, '..', '..');
|
|
9
|
+
const TEMPLATE_DIR = join(PKG_ROOT, 'template');
|
|
10
|
+
|
|
11
|
+
function copyRecursive(src, dest) {
|
|
12
|
+
if (!existsSync(src)) return;
|
|
13
|
+
const entries = readdirSync(src, { withFileTypes: true });
|
|
14
|
+
mkdirSync(dest, { recursive: true });
|
|
15
|
+
for (const entry of entries) {
|
|
16
|
+
if (entry.name === '.DS_Store') continue;
|
|
17
|
+
const srcPath = join(src, entry.name);
|
|
18
|
+
const destPath = join(dest, entry.name);
|
|
19
|
+
if (entry.isDirectory()) {
|
|
20
|
+
copyRecursive(srcPath, destPath);
|
|
21
|
+
} else {
|
|
22
|
+
copyFileSync(srcPath, destPath);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function detectPackageManager(cwd) {
|
|
28
|
+
if (existsSync(join(cwd, 'bun.lock'))) return 'bun';
|
|
29
|
+
if (existsSync(join(cwd, 'pnpm-lock.yaml'))) return 'pnpm';
|
|
30
|
+
if (existsSync(join(cwd, 'yarn.lock'))) return 'yarn';
|
|
31
|
+
return 'npm';
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function mergeJson(target, source, strategy = {}) {
|
|
35
|
+
const merged = JSON.parse(JSON.stringify(target));
|
|
36
|
+
|
|
37
|
+
for (const [key, value] of Object.entries(source)) {
|
|
38
|
+
if (!(key in merged)) {
|
|
39
|
+
merged[key] = JSON.parse(JSON.stringify(value));
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const rule = strategy[key] || 'default';
|
|
44
|
+
|
|
45
|
+
if (rule === 'keep-target') {
|
|
46
|
+
// Keep user's existing value
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (rule === 'source-wins') {
|
|
51
|
+
merged[key] = JSON.parse(JSON.stringify(value));
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (rule === 'merge-agents') {
|
|
56
|
+
merged[key] = merged[key] || {};
|
|
57
|
+
for (const [agentKey, agentVal] of Object.entries(value)) {
|
|
58
|
+
if (!(agentKey in merged[key])) {
|
|
59
|
+
merged[key][agentKey] = JSON.parse(JSON.stringify(agentVal));
|
|
60
|
+
}
|
|
61
|
+
// else: keep user's existing agent (unless --force)
|
|
62
|
+
}
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (rule === 'merge-mcp') {
|
|
67
|
+
merged[key] = merged[key] || {};
|
|
68
|
+
for (const [mcpKey, mcpVal] of Object.entries(value)) {
|
|
69
|
+
if (!(mcpKey in merged[key])) {
|
|
70
|
+
merged[key][mcpKey] = JSON.parse(JSON.stringify(mcpVal));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if (rule === 'merge-instructions') {
|
|
77
|
+
const existing = merged[key] || [];
|
|
78
|
+
const srcArr = Array.isArray(value) ? value : [value];
|
|
79
|
+
for (const item of srcArr) {
|
|
80
|
+
if (!existing.includes(item)) {
|
|
81
|
+
existing.push(item);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
merged[key] = existing;
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if (rule === 'merge-permissions') {
|
|
89
|
+
merged[key] = merged[key] || {};
|
|
90
|
+
for (const [permKey, permVal] of Object.entries(value)) {
|
|
91
|
+
if (!(permKey in merged[key])) {
|
|
92
|
+
merged[key][permKey] = JSON.parse(JSON.stringify(permVal));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// default: source wins for top-level, but merge nested objects
|
|
99
|
+
if (typeof value === 'object' && value !== null && !Array.isArray(value) &&
|
|
100
|
+
typeof merged[key] === 'object' && merged[key] !== null && !Array.isArray(merged[key])) {
|
|
101
|
+
merged[key] = { ...merged[key], ...value };
|
|
102
|
+
} else {
|
|
103
|
+
merged[key] = value;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
return merged;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function mergeOencodeConfig(templateConfigPath, userConfigPath, force) {
|
|
111
|
+
const templateConfig = JSON.parse(readFileSync(templateConfigPath, 'utf-8'));
|
|
112
|
+
const userConfig = existsSync(userConfigPath)
|
|
113
|
+
? JSON.parse(readFileSync(userConfigPath, 'utf-8'))
|
|
114
|
+
: {};
|
|
115
|
+
|
|
116
|
+
const strategy = {
|
|
117
|
+
'$schema': 'source-wins',
|
|
118
|
+
'formatter': 'keep-target',
|
|
119
|
+
'permission': 'keep-target',
|
|
120
|
+
'instructions': 'merge-instructions',
|
|
121
|
+
'mcp': 'merge-mcp',
|
|
122
|
+
'agent': force ? 'source-wins' : 'merge-agents',
|
|
123
|
+
'plugin': 'merge-instructions',
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
const merged = mergeJson(userConfig, templateConfig, strategy);
|
|
127
|
+
return merged;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export async function init(options) {
|
|
131
|
+
const targetDir = options.dir;
|
|
132
|
+
const force = options.force;
|
|
133
|
+
const skipInstall = options.skipInstall;
|
|
134
|
+
|
|
135
|
+
console.log(`\n opencode-agent-kit init`);
|
|
136
|
+
|
|
137
|
+
// 1. Validate target
|
|
138
|
+
if (!existsSync(targetDir)) {
|
|
139
|
+
console.error(` ✗ Target directory does not exist: ${targetDir}`);
|
|
140
|
+
process.exit(1);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// 2. Check if .opencode already exists
|
|
144
|
+
const opencodeDir = join(targetDir, '.opencode');
|
|
145
|
+
const userConfigPath = join(targetDir, 'opencode.json');
|
|
146
|
+
|
|
147
|
+
if (existsSync(opencodeDir) && !force) {
|
|
148
|
+
console.log(` \n ⚠ .opencode/ already exists in ${targetDir}`);
|
|
149
|
+
const rl = await import('readline/promises');
|
|
150
|
+
const readline = rl.createInterface({ input: process.stdin, output: process.stdout });
|
|
151
|
+
const answer = await readline.question(` ? Overwrite existing files? [y/N] `);
|
|
152
|
+
readline.close();
|
|
153
|
+
if (answer.toLowerCase() !== 'y') {
|
|
154
|
+
console.log(` ✗ Aborted.`);
|
|
155
|
+
process.exit(0);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// 3. Validate template exists
|
|
160
|
+
if (!existsSync(TEMPLATE_DIR)) {
|
|
161
|
+
console.error(` ✗ Template directory not found at ${TEMPLATE_DIR}`);
|
|
162
|
+
console.error(` This is a bug. Please reinstall the package.`);
|
|
163
|
+
process.exit(1);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// 4. Copy .opencode/ from template
|
|
167
|
+
console.log(` \n 📁 Copying .opencode/ configuration...`);
|
|
168
|
+
copyRecursive(join(TEMPLATE_DIR, '.opencode'), opencodeDir);
|
|
169
|
+
|
|
170
|
+
// 5. Merge opencode.json
|
|
171
|
+
const templateConfigPath = join(TEMPLATE_DIR, 'opencode.json');
|
|
172
|
+
if (existsSync(templateConfigPath)) {
|
|
173
|
+
console.log(` 📝 Merging opencode.json...`);
|
|
174
|
+
const merged = mergeOencodeConfig(templateConfigPath, userConfigPath, force);
|
|
175
|
+
writeFileSync(userConfigPath, JSON.stringify(merged, null, 2) + '\n', 'utf-8');
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// 6. Handle AGENTS.md (append)
|
|
179
|
+
const templateAgentsPath = join(TEMPLATE_DIR, 'AGENTS.md');
|
|
180
|
+
const userAgentsPath = join(targetDir, 'AGENTS.md');
|
|
181
|
+
if (existsSync(templateAgentsPath)) {
|
|
182
|
+
const templateContent = readFileSync(templateAgentsPath, 'utf-8');
|
|
183
|
+
if (existsSync(userAgentsPath) && !force) {
|
|
184
|
+
const existingContent = readFileSync(userAgentsPath, 'utf-8');
|
|
185
|
+
if (!existingContent.includes('# opencode-agent-kit')) {
|
|
186
|
+
console.log(` 📄 Appending to existing AGENTS.md...`);
|
|
187
|
+
writeFileSync(userAgentsPath, existingContent.trimEnd() + '\n\n' + templateContent, 'utf-8');
|
|
188
|
+
}
|
|
189
|
+
} else {
|
|
190
|
+
console.log(` 📄 Writing AGENTS.md...`);
|
|
191
|
+
writeFileSync(userAgentsPath, templateContent, 'utf-8');
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// 7. Install dependencies
|
|
196
|
+
if (!skipInstall) {
|
|
197
|
+
const pm = detectPackageManager(opencodeDir);
|
|
198
|
+
console.log(` 📦 Installing .opencode/ dependencies with ${pm}...`);
|
|
199
|
+
try {
|
|
200
|
+
execSync(`${pm} install`, { cwd: opencodeDir, stdio: 'pipe' });
|
|
201
|
+
} catch (err) {
|
|
202
|
+
console.error(` ⚠ Dependency install failed: ${err.message}`);
|
|
203
|
+
console.error(` You can run "${pm} install" manually in .opencode/`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// 8. Done
|
|
208
|
+
console.log(`\n ✅ opencode-agent-kit installed!\n`);
|
|
209
|
+
console.log(` Location: ${targetDir}`);
|
|
210
|
+
console.log(` What you got:`);
|
|
211
|
+
console.log(` • opencode.json — 13 agents config with MCP servers`);
|
|
212
|
+
console.log(` • .opencode/agents/ — 14 agent prompt files`);
|
|
213
|
+
console.log(` • .opencode/skills/ — 60+ skill playbooks`);
|
|
214
|
+
console.log(` • .opencode/commands/ — 35+ slash commands`);
|
|
215
|
+
console.log(` • .opencode/rules/ — Scoped coding rules`);
|
|
216
|
+
console.log(` • .opencode/contexts/ — Dev/review/research contexts`);
|
|
217
|
+
console.log(` • .opencode/agent-docs/— Agent documentation`);
|
|
218
|
+
console.log(`\n Next steps:`);
|
|
219
|
+
console.log(` cd ${targetDir}`);
|
|
220
|
+
console.log(` opencode\n`);
|
|
221
|
+
}
|
package/bin/init.mjs
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { Command } from 'commander';
|
|
4
|
+
import { init } from './commands/init.mjs';
|
|
5
|
+
|
|
6
|
+
const program = new Command();
|
|
7
|
+
|
|
8
|
+
program
|
|
9
|
+
.name('opencode-agent-kit')
|
|
10
|
+
.description('Install OpenCode multi-agent toolkit into your project')
|
|
11
|
+
.version('1.0.0');
|
|
12
|
+
|
|
13
|
+
program
|
|
14
|
+
.command('init')
|
|
15
|
+
.description('Initialize .opencode/ configuration in current project')
|
|
16
|
+
.option('-f, --force', 'Overwrite existing files without prompt')
|
|
17
|
+
.option('-d, --dir <path>', 'Target project directory', process.cwd())
|
|
18
|
+
.option('--skip-install', 'Skip npm/bun install step in .opencode/')
|
|
19
|
+
.action(init);
|
|
20
|
+
|
|
21
|
+
program.parse();
|
package/package.json
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "opencode-agent-kit",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Multi-stack OpenCode agent toolkit — 1 orchestrator + 12 specialized subagents for Nuxt, React, Node.js, Laravel, CI3, Android, Flutter, DevOps, SEO, and more",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"opencode-agent-kit": "./bin/init.mjs"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"bin/",
|
|
11
|
+
"template/"
|
|
12
|
+
],
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "https://github.com/defuj/frontend-developer-nuxt"
|
|
17
|
+
},
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"commander": "^13.0.0",
|
|
20
|
+
"fs-extra": "^11.0.0"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Backend Patterns (Enterprise, Portable)
|
|
2
|
+
|
|
3
|
+
Use these patterns as baseline across backend services with Node.js + TypeScript + Express + Prisma.
|
|
4
|
+
|
|
5
|
+
## Standard Module Layout
|
|
6
|
+
|
|
7
|
+
- Controllers: request orchestration and response mapping
|
|
8
|
+
- Routes: endpoint registration and middleware chain
|
|
9
|
+
- DTOs: request validation and response exposure contracts
|
|
10
|
+
- Middlewares: auth, validation, upload, limiter, etc.
|
|
11
|
+
- Utilities/services: reusable domain/business logic
|
|
12
|
+
|
|
13
|
+
## DTO Conventions
|
|
14
|
+
|
|
15
|
+
- Request DTO suffix: `*.dto.ts`
|
|
16
|
+
- Response DTO suffix: `*.response.dto.ts`
|
|
17
|
+
- Explicit field exposure with `@Expose()`
|
|
18
|
+
- Route-level validation middleware uses request DTO class
|
|
19
|
+
- Response serialization maps through response DTO with extraneous field exclusion
|
|
20
|
+
|
|
21
|
+
Example mapping:
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
const result = plainToInstance(ResponseDTO, payload, {
|
|
25
|
+
excludeExtraneousValues: true,
|
|
26
|
+
});
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## API Response Conventions
|
|
30
|
+
|
|
31
|
+
- Use one centralized response helper for success and error envelopes
|
|
32
|
+
- Keep status/message/data structure consistent across endpoints
|
|
33
|
+
- Avoid ad-hoc response shapes in controllers
|
|
34
|
+
|
|
35
|
+
## Error Handling Conventions
|
|
36
|
+
|
|
37
|
+
- Wrap controller logic in try/catch
|
|
38
|
+
- Delegate catch to centralized error handler
|
|
39
|
+
- Provide predictable business error mappings
|
|
40
|
+
- Log unexpected errors once, near boundary layer
|
|
41
|
+
|
|
42
|
+
## Route and Middleware Conventions
|
|
43
|
+
|
|
44
|
+
- Register specific paths before parameterized paths
|
|
45
|
+
- Place auth middleware before validation and handler
|
|
46
|
+
- Keep middleware order deterministic and explicit
|
|
47
|
+
- For multipart endpoints, apply upload middleware before DTO validation when needed
|
|
48
|
+
|
|
49
|
+
## Data Access Conventions
|
|
50
|
+
|
|
51
|
+
- Use transactions for multi-step state mutations
|
|
52
|
+
- Keep write paths idempotent where practical (especially webhook/event handlers)
|
|
53
|
+
- Query only fields/relations needed for output
|
|
54
|
+
- Maintain tenant/ownership scoping where service model requires it
|
|
55
|
+
|
|
56
|
+
## Security Conventions
|
|
57
|
+
|
|
58
|
+
- Validate all external input via DTOs
|
|
59
|
+
- Enforce auth and resource-level authorization consistently
|
|
60
|
+
- Keep error responses safe (no stack traces/internal details)
|
|
61
|
+
- Restrict upload MIME types, size, and destination path
|
|
62
|
+
- Never leak secret values in logs or API responses
|
|
63
|
+
|
|
64
|
+
## Pagination and List Conventions
|
|
65
|
+
|
|
66
|
+
- Normalize paging params and cap upper bounds
|
|
67
|
+
- Apply filters and sorting through deterministic query builder logic
|
|
68
|
+
- Return pagination metadata alongside items
|
|
69
|
+
|
|
70
|
+
## Mutation Conventions
|
|
71
|
+
|
|
72
|
+
- Validate request payload and preconditions first
|
|
73
|
+
- Apply domain mutation in transaction
|
|
74
|
+
- Emit domain/audit log entries for critical operations
|
|
75
|
+
- Return mapped response DTO from committed state
|
|
76
|
+
|
|
77
|
+
## Test and Verification Conventions
|
|
78
|
+
|
|
79
|
+
- Tiny changes: one focused check
|
|
80
|
+
- Small changes: type-check plus one targeted check
|
|
81
|
+
- Medium+ changes: type-check, lint, and relevant tests
|
|
82
|
+
- Contract changes: include endpoint behavior validation
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Backend Agent Quick Start (Enterprise)
|
|
2
|
+
|
|
3
|
+
This guide is portable across services that share the same backend stack style.
|
|
4
|
+
|
|
5
|
+
## Agent Name
|
|
6
|
+
|
|
7
|
+
- `backend`
|
|
8
|
+
|
|
9
|
+
## Activate the Agent
|
|
10
|
+
|
|
11
|
+
```text
|
|
12
|
+
@backend Analyze this backend service and align implementation with existing DTO, route, middleware, and controller patterns.
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## High-Value Prompt Templates
|
|
16
|
+
|
|
17
|
+
```text
|
|
18
|
+
@backend Add endpoint <METHOD> <path> with request/response DTOs, validation middleware, and standardized error handling.
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
```text
|
|
22
|
+
@backend Implement transaction-safe <business operation> with audit logging and predictable response mapping.
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
@backend Review this module for auth boundary, tenant scoping, validation, and API contract consistency.
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
```text
|
|
30
|
+
@backend Refactor this controller to reduce complexity while preserving behavior and response shape.
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## What the agent is optimized for
|
|
34
|
+
|
|
35
|
+
- Node.js + TypeScript + Express + Prisma services
|
|
36
|
+
- DTO-driven validation and response mapping
|
|
37
|
+
- Consistent route/middleware layering
|
|
38
|
+
- Transaction-safe data mutations
|
|
39
|
+
- Security and tenant/ownership boundaries
|
|
40
|
+
|
|
41
|
+
## Recommended verification commands
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npm run type-check
|
|
45
|
+
npm run lint
|
|
46
|
+
npm run test:run
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
If command names differ in a service, use that service's equivalents.
|
|
File without changes
|