@punks/cli 0.1.15 → 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.
Files changed (508) hide show
  1. package/AGENTS.md +10 -0
  2. package/README.md +64 -0
  3. package/dist/data/AGENTS.md +123 -0
  4. package/dist/data/catalog/lint.ts +349 -0
  5. package/dist/data/catalog/packs.ts +44 -0
  6. package/dist/data/catalog/skills.ts +47 -0
  7. package/dist/data/catalog/tools.ts +22 -0
  8. package/dist/data/hooks/format-edited-file.mjs +554 -0
  9. package/dist/data/hooks/format-edited-file.py +157 -0
  10. package/dist/data/hooks/format-edited-file.sh +37 -0
  11. package/dist/data/hooks/require-tests-for-pr.mjs +144 -0
  12. package/dist/data/scripts/sync-subagents.mjs +420 -0
  13. package/dist/data/subagents/manifest.mjs +253 -0
  14. package/dist/index.js +46415 -0
  15. package/dist/skills/agnostic/backend/backend-domain-structure/SKILL.md +50 -0
  16. package/dist/skills/agnostic/backend/backend-domain-structure/agents/openai.yaml +4 -0
  17. package/dist/skills/agnostic/backend/backend-domain-structure/references/layout.md +167 -0
  18. package/dist/skills/agnostic/backend/backend-recoverable-actions/SKILL.md +49 -0
  19. package/dist/skills/agnostic/backend/backend-recoverable-actions/agents/openai.yaml +4 -0
  20. package/dist/skills/agnostic/backend/backend-recoverable-actions/references/strategy-matrix.md +34 -0
  21. package/dist/skills/agnostic/backend/backend-recoverable-actions/references/test-matrix.md +34 -0
  22. package/dist/skills/agnostic/docs/docs-maintenance/SKILL.md +193 -0
  23. package/dist/skills/agnostic/docs/docs-maintenance/agents/openai.yaml +4 -0
  24. package/dist/skills/agnostic/docs/docs-maintenance/references/concept-pages.md +48 -0
  25. package/dist/skills/agnostic/docs/docs-maintenance/references/flow-pages.md +41 -0
  26. package/dist/skills/agnostic/frontend/agent-browser/.clawdhub/origin.json +7 -0
  27. package/dist/skills/agnostic/frontend/agent-browser/SKILL.md +229 -0
  28. package/dist/skills/agnostic/frontend/agent-browser/references/authentication.md +202 -0
  29. package/dist/skills/agnostic/frontend/agent-browser/references/commands.md +259 -0
  30. package/dist/skills/agnostic/frontend/agent-browser/references/proxy-support.md +188 -0
  31. package/dist/skills/agnostic/frontend/agent-browser/references/session-management.md +193 -0
  32. package/dist/skills/agnostic/frontend/agent-browser/references/snapshot-refs.md +194 -0
  33. package/dist/skills/agnostic/frontend/agent-browser/references/video-recording.md +173 -0
  34. package/dist/skills/agnostic/frontend/agent-browser/templates/authenticated-session.sh +97 -0
  35. package/dist/skills/agnostic/frontend/agent-browser/templates/capture-workflow.sh +69 -0
  36. package/dist/skills/agnostic/frontend/agent-browser/templates/form-automation.sh +62 -0
  37. package/dist/skills/agnostic/frontend/design-taste-frontend/SKILL.md +226 -0
  38. package/dist/skills/agnostic/frontend/frontend-domain-structure/SKILL.md +55 -0
  39. package/dist/skills/agnostic/frontend/frontend-domain-structure/agents/openai.yaml +4 -0
  40. package/dist/skills/agnostic/frontend/frontend-domain-structure/references/react/structure.md +102 -0
  41. package/dist/skills/agnostic/frontend/frontend-domain-structure/references/structure.md +257 -0
  42. package/dist/skills/agnostic/frontend/gpt-taste/SKILL.md +74 -0
  43. package/dist/skills/agnostic/frontend/image-taste-frontend/SKILL.md +1102 -0
  44. package/dist/skills/agnostic/frontend/redesign-existing-projects/SKILL.md +178 -0
  45. package/dist/skills/agnostic/planning/create-plan/REFERENCE.md +37 -0
  46. package/dist/skills/agnostic/planning/create-plan/SKILL.md +69 -0
  47. package/dist/skills/agnostic/planning/create-plan/references/backlog-sync.md +44 -0
  48. package/dist/skills/agnostic/planning/create-plan/references/grill-phase.md +86 -0
  49. package/dist/skills/agnostic/planning/create-plan/references/plan-schema.md +66 -0
  50. package/dist/skills/agnostic/planning/create-plan/references/planner-phase.md +39 -0
  51. package/dist/skills/agnostic/planning/create-plan/references/stop-conditions.md +18 -0
  52. package/dist/skills/agnostic/planning/create-plan/references/tdd-phase.md +26 -0
  53. package/dist/skills/agnostic/planning/create-spec/SKILL.md +57 -0
  54. package/dist/skills/agnostic/planning/create-spec/assets/SPEC-TEMPLATE.md +91 -0
  55. package/dist/skills/agnostic/planning/create-spec/references/discovery.md +44 -0
  56. package/dist/skills/agnostic/planning/create-spec/references/folder-naming.md +27 -0
  57. package/dist/skills/agnostic/planning/create-spec/references/handoff.md +47 -0
  58. package/dist/skills/agnostic/planning/create-spec/references/questioning.md +41 -0
  59. package/dist/skills/agnostic/planning/create-spec/references/spec-quality-bar.md +58 -0
  60. package/dist/skills/agnostic/planning/create-spec/references/wiki-bookkeeping.md +26 -0
  61. package/dist/skills/agnostic/planning/grill-me/SKILL.md +28 -0
  62. package/dist/skills/agnostic/planning/implement-spec/SKILL.md +72 -0
  63. package/dist/skills/agnostic/planning/implement-spec/assets/IMPLEMENTATION-NOTES-TEMPLATE.md +47 -0
  64. package/dist/skills/agnostic/planning/implement-spec/references/lifecycle.md +149 -0
  65. package/dist/skills/agnostic/planning/implement-spec/references/parallel-orchestration.md +102 -0
  66. package/dist/skills/agnostic/planning/implement-spec/references/parallel-worker-brief.md +65 -0
  67. package/dist/skills/agnostic/planning/implement-spec/references/parallel.md +56 -0
  68. package/dist/skills/agnostic/planning/implement-spec/references/sequential.md +28 -0
  69. package/dist/skills/agnostic/planning/swarm-planner/SKILL.md +179 -0
  70. package/dist/skills/agnostic/quality/simplify/SKILL.md +14 -0
  71. package/dist/skills/agnostic/quality/tdd/SKILL.md +107 -0
  72. package/dist/skills/agnostic/quality/tdd/deep-modules.md +33 -0
  73. package/dist/skills/agnostic/quality/tdd/interface-design.md +31 -0
  74. package/dist/skills/agnostic/quality/tdd/mocking.md +59 -0
  75. package/dist/skills/agnostic/quality/tdd/refactoring.md +10 -0
  76. package/dist/skills/agnostic/quality/tdd/tests.md +61 -0
  77. package/dist/skills/agnostic/requirements/requirements-grill/SKILL.md +42 -0
  78. package/dist/skills/agnostic/requirements/requirements-grill/references/artifact-output.md +73 -0
  79. package/dist/skills/agnostic/requirements/requirements-grill/references/grilling-flow.md +57 -0
  80. package/dist/skills/agnostic/requirements/requirements-grill/references/wiki-output.md +94 -0
  81. package/dist/skills/agnostic/requirements/write-backlog/EXAMPLES.md +67 -0
  82. package/dist/skills/agnostic/requirements/write-backlog/REFERENCE.md +253 -0
  83. package/dist/skills/agnostic/requirements/write-backlog/SKILL.md +68 -0
  84. package/dist/skills/agnostic/requirements/write-backlog/assets/concepts/backlog-model.md +69 -0
  85. package/dist/skills/agnostic/requirements/write-backlog/assets/concepts/story-shape.md +66 -0
  86. package/dist/skills/agnostic/requirements/write-backlog/assets/providers/azure-devops-create-payload.md +63 -0
  87. package/dist/skills/agnostic/requirements/write-backlog/assets/providers/github-issues-create-payload.md +48 -0
  88. package/dist/skills/agnostic/requirements/write-backlog/assets/providers/linear-create-payload.md +76 -0
  89. package/dist/skills/agnostic/research/improve-codebase-architecture/REFERENCE.md +78 -0
  90. package/dist/skills/agnostic/research/improve-codebase-architecture/SKILL.md +76 -0
  91. package/dist/skills/agnostic/research/parallel-research/SKILL.md +68 -0
  92. package/dist/skills/agnostic/research/parallel-research/agents/openai.yaml +4 -0
  93. package/dist/skills/agnostic/subagents/swarm-planner/SKILL.md +179 -0
  94. package/dist/skills/agnostic/write-a-skill/SKILL.md +117 -0
  95. package/dist/skills/frameworks/better-auth/better-auth-best-practices/SKILL.md +166 -0
  96. package/dist/skills/frameworks/better-auth/better-auth-security-best-practices/SKILL.MD +432 -0
  97. package/dist/skills/frameworks/effect/effect-authoring/SKILL.md +116 -0
  98. package/dist/skills/frameworks/effect/effect-authoring/references/branded-types.md +98 -0
  99. package/dist/skills/frameworks/effect/effect-authoring/references/effect-atom-patterns.md +257 -0
  100. package/dist/skills/frameworks/effect/effect-authoring/references/effect-primitives.md +144 -0
  101. package/dist/skills/frameworks/effect/effect-authoring/references/error-patterns.md +156 -0
  102. package/dist/skills/frameworks/effect/effect-authoring/references/otel-patterns.md +113 -0
  103. package/dist/skills/frameworks/effect/effect-authoring/references/test-patterns.md +146 -0
  104. package/dist/skills/frameworks/effect/effect-backend-structure/SKILL.md +96 -0
  105. package/dist/skills/frameworks/effect/effect-backend-structure/agents/openai.yaml +4 -0
  106. package/dist/skills/frameworks/effect/effect-backend-structure/references/layout.md +68 -0
  107. package/dist/skills/frameworks/effect/effect-best-practices/SKILL.md +517 -0
  108. package/dist/skills/frameworks/effect/effect-best-practices/references/anti-patterns.md +392 -0
  109. package/dist/skills/frameworks/effect/effect-best-practices/references/effect-atom-patterns.md +653 -0
  110. package/dist/skills/frameworks/effect/effect-best-practices/references/error-patterns.md +464 -0
  111. package/dist/skills/frameworks/effect/effect-best-practices/references/language-server.md +287 -0
  112. package/dist/skills/frameworks/effect/effect-best-practices/references/layer-patterns.md +495 -0
  113. package/dist/skills/frameworks/effect/effect-best-practices/references/observability-patterns.md +342 -0
  114. package/dist/skills/frameworks/effect/effect-best-practices/references/rpc-cluster-patterns.md +418 -0
  115. package/dist/skills/frameworks/effect/effect-best-practices/references/schema-patterns.md +353 -0
  116. package/dist/skills/frameworks/effect/effect-best-practices/references/service-patterns.md +299 -0
  117. package/dist/skills/frameworks/effect/effect-recoverable-actions/SKILL.md +65 -0
  118. package/dist/skills/frameworks/effect/effect-recoverable-actions/agents/openai.yaml +4 -0
  119. package/dist/skills/frameworks/effect/effect-recoverable-actions/references/flow-examples.md +154 -0
  120. package/dist/skills/frameworks/effect/effect-recoverable-actions/references/source-backed-primitives.md +104 -0
  121. package/dist/skills/frameworks/effect/effect-recoverable-actions/references/strategy-matrix.md +34 -0
  122. package/dist/skills/frameworks/effect/effect-recoverable-actions/references/test-matrix.md +36 -0
  123. package/dist/skills/frameworks/elysia/elysiajs/SKILL.md +475 -0
  124. package/dist/skills/frameworks/elysia/elysiajs/examples/basic.ts +9 -0
  125. package/dist/skills/frameworks/elysia/elysiajs/examples/body-parser.ts +33 -0
  126. package/dist/skills/frameworks/elysia/elysiajs/examples/complex.ts +112 -0
  127. package/dist/skills/frameworks/elysia/elysiajs/examples/cookie.ts +45 -0
  128. package/dist/skills/frameworks/elysia/elysiajs/examples/error.ts +38 -0
  129. package/dist/skills/frameworks/elysia/elysiajs/examples/file.ts +10 -0
  130. package/dist/skills/frameworks/elysia/elysiajs/examples/guard.ts +34 -0
  131. package/dist/skills/frameworks/elysia/elysiajs/examples/map-response.ts +15 -0
  132. package/dist/skills/frameworks/elysia/elysiajs/examples/redirect.ts +6 -0
  133. package/dist/skills/frameworks/elysia/elysiajs/examples/rename.ts +32 -0
  134. package/dist/skills/frameworks/elysia/elysiajs/examples/schema.ts +61 -0
  135. package/dist/skills/frameworks/elysia/elysiajs/examples/state.ts +6 -0
  136. package/dist/skills/frameworks/elysia/elysiajs/examples/upload-file.ts +20 -0
  137. package/dist/skills/frameworks/elysia/elysiajs/examples/websocket.ts +25 -0
  138. package/dist/skills/frameworks/elysia/elysiajs/integrations/ai-sdk.md +92 -0
  139. package/dist/skills/frameworks/elysia/elysiajs/integrations/astro.md +59 -0
  140. package/dist/skills/frameworks/elysia/elysiajs/integrations/better-auth.md +117 -0
  141. package/dist/skills/frameworks/elysia/elysiajs/integrations/cloudflare-worker.md +95 -0
  142. package/dist/skills/frameworks/elysia/elysiajs/integrations/deno.md +34 -0
  143. package/dist/skills/frameworks/elysia/elysiajs/integrations/drizzle.md +258 -0
  144. package/dist/skills/frameworks/elysia/elysiajs/integrations/expo.md +95 -0
  145. package/dist/skills/frameworks/elysia/elysiajs/integrations/nextjs.md +103 -0
  146. package/dist/skills/frameworks/elysia/elysiajs/integrations/nodejs.md +64 -0
  147. package/dist/skills/frameworks/elysia/elysiajs/integrations/nuxt.md +67 -0
  148. package/dist/skills/frameworks/elysia/elysiajs/integrations/prisma.md +93 -0
  149. package/dist/skills/frameworks/elysia/elysiajs/integrations/react-email.md +134 -0
  150. package/dist/skills/frameworks/elysia/elysiajs/integrations/sveltekit.md +53 -0
  151. package/dist/skills/frameworks/elysia/elysiajs/integrations/tanstack-start.md +87 -0
  152. package/dist/skills/frameworks/elysia/elysiajs/integrations/vercel.md +55 -0
  153. package/dist/skills/frameworks/elysia/elysiajs/patterns/mvc.md +380 -0
  154. package/dist/skills/frameworks/elysia/elysiajs/plugins/bearer.md +30 -0
  155. package/dist/skills/frameworks/elysia/elysiajs/plugins/cors.md +141 -0
  156. package/dist/skills/frameworks/elysia/elysiajs/plugins/cron.md +265 -0
  157. package/dist/skills/frameworks/elysia/elysiajs/plugins/graphql-apollo.md +90 -0
  158. package/dist/skills/frameworks/elysia/elysiajs/plugins/graphql-yoga.md +87 -0
  159. package/dist/skills/frameworks/elysia/elysiajs/plugins/html.md +188 -0
  160. package/dist/skills/frameworks/elysia/elysiajs/plugins/jwt.md +197 -0
  161. package/dist/skills/frameworks/elysia/elysiajs/plugins/openapi.md +246 -0
  162. package/dist/skills/frameworks/elysia/elysiajs/plugins/opentelemetry.md +167 -0
  163. package/dist/skills/frameworks/elysia/elysiajs/plugins/server-timing.md +71 -0
  164. package/dist/skills/frameworks/elysia/elysiajs/plugins/static.md +84 -0
  165. package/dist/skills/frameworks/elysia/elysiajs/references/bun-fullstack-dev-server.md +129 -0
  166. package/dist/skills/frameworks/elysia/elysiajs/references/cookie.md +187 -0
  167. package/dist/skills/frameworks/elysia/elysiajs/references/deployment.md +413 -0
  168. package/dist/skills/frameworks/elysia/elysiajs/references/eden.md +158 -0
  169. package/dist/skills/frameworks/elysia/elysiajs/references/lifecycle.md +198 -0
  170. package/dist/skills/frameworks/elysia/elysiajs/references/macro.md +83 -0
  171. package/dist/skills/frameworks/elysia/elysiajs/references/plugin.md +207 -0
  172. package/dist/skills/frameworks/elysia/elysiajs/references/route.md +331 -0
  173. package/dist/skills/frameworks/elysia/elysiajs/references/testing.md +385 -0
  174. package/dist/skills/frameworks/elysia/elysiajs/references/validation.md +491 -0
  175. package/dist/skills/frameworks/elysia/elysiajs/references/websocket.md +250 -0
  176. package/dist/skills/frameworks/nestjs/nestjs-best-practices/.github/workflows/branch-protection.yml +24 -0
  177. package/dist/skills/frameworks/nestjs/nestjs-best-practices/.github/workflows/deploy.yml +61 -0
  178. package/dist/skills/frameworks/nestjs/nestjs-best-practices/AGENTS.md +5958 -0
  179. package/dist/skills/frameworks/nestjs/nestjs-best-practices/SKILL.md +130 -0
  180. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/api-use-dto-serialization.md +182 -0
  181. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/api-use-interceptors.md +202 -0
  182. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/api-use-pipes.md +205 -0
  183. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/api-versioning.md +191 -0
  184. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/arch-avoid-circular-deps.md +80 -0
  185. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/arch-feature-modules.md +82 -0
  186. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/arch-module-sharing.md +141 -0
  187. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/arch-single-responsibility.md +106 -0
  188. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/arch-use-events.md +108 -0
  189. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/arch-use-repository-pattern.md +97 -0
  190. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/db-avoid-n-plus-one.md +139 -0
  191. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/db-use-migrations.md +129 -0
  192. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/db-use-transactions.md +140 -0
  193. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/devops-graceful-shutdown.md +222 -0
  194. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/devops-use-config-module.md +167 -0
  195. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/devops-use-logging.md +232 -0
  196. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/di-avoid-service-locator.md +104 -0
  197. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/di-interface-segregation.md +165 -0
  198. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/di-liskov-substitution.md +221 -0
  199. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/di-prefer-constructor-injection.md +86 -0
  200. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/di-scope-awareness.md +94 -0
  201. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/di-use-interfaces-tokens.md +101 -0
  202. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/error-handle-async-errors.md +125 -0
  203. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/error-throw-http-exceptions.md +114 -0
  204. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/error-use-exception-filters.md +140 -0
  205. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/micro-use-health-checks.md +226 -0
  206. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/micro-use-patterns.md +167 -0
  207. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/micro-use-queues.md +252 -0
  208. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/perf-async-hooks.md +109 -0
  209. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/perf-lazy-loading.md +121 -0
  210. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/perf-optimize-database.md +131 -0
  211. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/perf-use-caching.md +128 -0
  212. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/security-auth-jwt.md +146 -0
  213. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/security-rate-limiting.md +125 -0
  214. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/security-sanitize-output.md +139 -0
  215. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/security-use-guards.md +135 -0
  216. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/security-validate-all-input.md +150 -0
  217. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/test-e2e-supertest.md +178 -0
  218. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/test-mock-external-services.md +179 -0
  219. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/test-use-testing-module.md +153 -0
  220. package/dist/skills/frameworks/nestjs/nestjs-best-practices/scripts/build-agents.ts +299 -0
  221. package/dist/skills/frameworks/nestjs/nestjs-best-practices/scripts/build.sh +16 -0
  222. package/dist/skills/frameworks/nestjs/nestjs-best-practices/scripts/package-lock.json +237 -0
  223. package/dist/skills/frameworks/nestjs/nestjs-best-practices/scripts/package.json +15 -0
  224. package/dist/skills/frameworks/nestjs/nestjs-expert/SKILL.md +208 -0
  225. package/dist/skills/frameworks/nestjs/nestjs-expert/references/authentication.md +166 -0
  226. package/dist/skills/frameworks/nestjs/nestjs-expert/references/controllers-routing.md +111 -0
  227. package/dist/skills/frameworks/nestjs/nestjs-expert/references/dtos-validation.md +153 -0
  228. package/dist/skills/frameworks/nestjs/nestjs-expert/references/migration-from-express.md +1237 -0
  229. package/dist/skills/frameworks/nestjs/nestjs-expert/references/services-di.md +140 -0
  230. package/dist/skills/frameworks/nestjs/nestjs-expert/references/testing-patterns.md +186 -0
  231. package/dist/skills/frameworks/nextjs/next-best-practices/SKILL.md +153 -0
  232. package/dist/skills/frameworks/nextjs/next-best-practices/async-patterns.md +87 -0
  233. package/dist/skills/frameworks/nextjs/next-best-practices/bundling.md +180 -0
  234. package/dist/skills/frameworks/nextjs/next-best-practices/data-patterns.md +297 -0
  235. package/dist/skills/frameworks/nextjs/next-best-practices/debug-tricks.md +105 -0
  236. package/dist/skills/frameworks/nextjs/next-best-practices/directives.md +73 -0
  237. package/dist/skills/frameworks/nextjs/next-best-practices/error-handling.md +227 -0
  238. package/dist/skills/frameworks/nextjs/next-best-practices/file-conventions.md +140 -0
  239. package/dist/skills/frameworks/nextjs/next-best-practices/font.md +245 -0
  240. package/dist/skills/frameworks/nextjs/next-best-practices/functions.md +108 -0
  241. package/dist/skills/frameworks/nextjs/next-best-practices/hydration-error.md +91 -0
  242. package/dist/skills/frameworks/nextjs/next-best-practices/image.md +173 -0
  243. package/dist/skills/frameworks/nextjs/next-best-practices/metadata.md +301 -0
  244. package/dist/skills/frameworks/nextjs/next-best-practices/parallel-routes.md +287 -0
  245. package/dist/skills/frameworks/nextjs/next-best-practices/route-handlers.md +146 -0
  246. package/dist/skills/frameworks/nextjs/next-best-practices/rsc-boundaries.md +159 -0
  247. package/dist/skills/frameworks/nextjs/next-best-practices/runtime-selection.md +39 -0
  248. package/dist/skills/frameworks/nextjs/next-best-practices/scripts.md +141 -0
  249. package/dist/skills/frameworks/nextjs/next-best-practices/self-hosting.md +371 -0
  250. package/dist/skills/frameworks/nextjs/next-best-practices/suspense-boundaries.md +67 -0
  251. package/dist/skills/frameworks/nextjs/next-cache-components/SKILL.md +360 -0
  252. package/dist/skills/frameworks/react/async-react-patterns/SKILL.md +78 -0
  253. package/dist/skills/frameworks/react/vercel-composition-patterns/AGENTS.md +946 -0
  254. package/dist/skills/frameworks/react/vercel-composition-patterns/SKILL.md +89 -0
  255. package/dist/skills/frameworks/react/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
  256. package/dist/skills/frameworks/react/vercel-composition-patterns/rules/architecture-compound-components.md +112 -0
  257. package/dist/skills/frameworks/react/vercel-composition-patterns/rules/patterns-children-over-render-props.md +87 -0
  258. package/dist/skills/frameworks/react/vercel-composition-patterns/rules/patterns-explicit-variants.md +100 -0
  259. package/dist/skills/frameworks/react/vercel-composition-patterns/rules/react19-no-forwardref.md +42 -0
  260. package/dist/skills/frameworks/react/vercel-composition-patterns/rules/state-context-interface.md +191 -0
  261. package/dist/skills/frameworks/react/vercel-composition-patterns/rules/state-decouple-implementation.md +113 -0
  262. package/dist/skills/frameworks/react/vercel-composition-patterns/rules/state-lift-state.md +125 -0
  263. package/dist/skills/frameworks/react/vercel-react-best-practices/AGENTS.md +3750 -0
  264. package/dist/skills/frameworks/react/vercel-react-best-practices/SKILL.md +148 -0
  265. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/advanced-effect-event-deps.md +56 -0
  266. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  267. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
  268. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
  269. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/async-api-routes.md +38 -0
  270. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
  271. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/async-defer-await.md +82 -0
  272. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/async-dependencies.md +51 -0
  273. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/async-parallel.md +28 -0
  274. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
  275. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/bundle-barrel-imports.md +60 -0
  276. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
  277. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
  278. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  279. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/bundle-preload.md +50 -0
  280. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
  281. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
  282. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
  283. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
  284. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
  285. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
  286. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
  287. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
  288. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
  289. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-early-exit.md +50 -0
  290. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
  291. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
  292. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-index-maps.md +37 -0
  293. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
  294. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
  295. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-request-idle-callback.md +105 -0
  296. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
  297. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  298. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-activity.md +26 -0
  299. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  300. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
  301. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
  302. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  303. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  304. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  305. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
  306. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
  307. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
  308. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  309. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
  310. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
  311. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  312. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
  313. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
  314. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  315. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  316. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-memo.md +44 -0
  317. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  318. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
  319. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  320. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
  321. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
  322. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
  323. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  324. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
  325. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
  326. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
  327. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-cache-react.md +76 -0
  328. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
  329. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-hoist-static-io.md +149 -0
  330. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-no-shared-module-state.md +50 -0
  331. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
  332. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
  333. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-serialization.md +38 -0
  334. package/dist/skills/frameworks/tanstack-query/tanstack-query/.claude-plugin/plugin.json +12 -0
  335. package/dist/skills/frameworks/tanstack-query/tanstack-query/SKILL.md +1058 -0
  336. package/dist/skills/frameworks/tanstack-query/tanstack-query/assets/example-template.txt +14 -0
  337. package/dist/skills/frameworks/tanstack-query/tanstack-query/references/best-practices.md +304 -0
  338. package/dist/skills/frameworks/tanstack-query/tanstack-query/references/common-patterns.md +271 -0
  339. package/dist/skills/frameworks/tanstack-query/tanstack-query/references/example-reference.md +26 -0
  340. package/dist/skills/frameworks/tanstack-query/tanstack-query/references/testing.md +282 -0
  341. package/dist/skills/frameworks/tanstack-query/tanstack-query/references/top-errors.md +332 -0
  342. package/dist/skills/frameworks/tanstack-query/tanstack-query/references/typescript-patterns.md +291 -0
  343. package/dist/skills/frameworks/tanstack-query/tanstack-query/references/v4-to-v5-migration.md +231 -0
  344. package/dist/skills/frameworks/tanstack-query/tanstack-query/rules/tanstack-query.md +126 -0
  345. package/dist/skills/frameworks/tanstack-query/tanstack-query/scripts/example-script.sh +15 -0
  346. package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/custom-hooks-pattern.tsx +281 -0
  347. package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/devtools-setup.tsx +248 -0
  348. package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/error-boundary.tsx +243 -0
  349. package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/package.json +31 -0
  350. package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/provider-setup.tsx +50 -0
  351. package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/query-client-config.ts +72 -0
  352. package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/use-infinite-query.tsx +214 -0
  353. package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/use-mutation-basic.tsx +201 -0
  354. package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/use-mutation-optimistic.tsx +234 -0
  355. package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/use-query-basic.tsx +119 -0
  356. package/dist/skills/frameworks/trpc/tanstack-query/.claude-plugin/plugin.json +12 -0
  357. package/dist/skills/frameworks/trpc/tanstack-query/SKILL.md +1058 -0
  358. package/dist/skills/frameworks/trpc/tanstack-query/assets/example-template.txt +14 -0
  359. package/dist/skills/frameworks/trpc/tanstack-query/references/best-practices.md +304 -0
  360. package/dist/skills/frameworks/trpc/tanstack-query/references/common-patterns.md +271 -0
  361. package/dist/skills/frameworks/trpc/tanstack-query/references/example-reference.md +26 -0
  362. package/dist/skills/frameworks/trpc/tanstack-query/references/testing.md +282 -0
  363. package/dist/skills/frameworks/trpc/tanstack-query/references/top-errors.md +332 -0
  364. package/dist/skills/frameworks/trpc/tanstack-query/references/typescript-patterns.md +291 -0
  365. package/dist/skills/frameworks/trpc/tanstack-query/references/v4-to-v5-migration.md +231 -0
  366. package/dist/skills/frameworks/trpc/tanstack-query/rules/tanstack-query.md +126 -0
  367. package/dist/skills/frameworks/trpc/tanstack-query/scripts/example-script.sh +15 -0
  368. package/dist/skills/frameworks/trpc/tanstack-query/templates/custom-hooks-pattern.tsx +281 -0
  369. package/dist/skills/frameworks/trpc/tanstack-query/templates/devtools-setup.tsx +248 -0
  370. package/dist/skills/frameworks/trpc/tanstack-query/templates/error-boundary.tsx +243 -0
  371. package/dist/skills/frameworks/trpc/tanstack-query/templates/package.json +31 -0
  372. package/dist/skills/frameworks/trpc/tanstack-query/templates/provider-setup.tsx +50 -0
  373. package/dist/skills/frameworks/trpc/tanstack-query/templates/query-client-config.ts +72 -0
  374. package/dist/skills/frameworks/trpc/tanstack-query/templates/use-infinite-query.tsx +214 -0
  375. package/dist/skills/frameworks/trpc/tanstack-query/templates/use-mutation-basic.tsx +201 -0
  376. package/dist/skills/frameworks/trpc/tanstack-query/templates/use-mutation-optimistic.tsx +234 -0
  377. package/dist/skills/frameworks/trpc/tanstack-query/templates/use-query-basic.tsx +119 -0
  378. package/dist/skills/frameworks/turborepo/turborepo/SKILL.md +914 -0
  379. package/dist/skills/frameworks/turborepo/turborepo/command/turborepo.md +70 -0
  380. package/dist/skills/frameworks/turborepo/turborepo/references/best-practices/RULE.md +241 -0
  381. package/dist/skills/frameworks/turborepo/turborepo/references/best-practices/dependencies.md +246 -0
  382. package/dist/skills/frameworks/turborepo/turborepo/references/best-practices/packages.md +335 -0
  383. package/dist/skills/frameworks/turborepo/turborepo/references/best-practices/structure.md +270 -0
  384. package/dist/skills/frameworks/turborepo/turborepo/references/boundaries/RULE.md +126 -0
  385. package/dist/skills/frameworks/turborepo/turborepo/references/caching/RULE.md +107 -0
  386. package/dist/skills/frameworks/turborepo/turborepo/references/caching/gotchas.md +169 -0
  387. package/dist/skills/frameworks/turborepo/turborepo/references/caching/remote-cache.md +127 -0
  388. package/dist/skills/frameworks/turborepo/turborepo/references/ci/RULE.md +79 -0
  389. package/dist/skills/frameworks/turborepo/turborepo/references/ci/github-actions.md +162 -0
  390. package/dist/skills/frameworks/turborepo/turborepo/references/ci/patterns.md +145 -0
  391. package/dist/skills/frameworks/turborepo/turborepo/references/ci/vercel.md +103 -0
  392. package/dist/skills/frameworks/turborepo/turborepo/references/cli/RULE.md +100 -0
  393. package/dist/skills/frameworks/turborepo/turborepo/references/cli/commands.md +297 -0
  394. package/dist/skills/frameworks/turborepo/turborepo/references/configuration/RULE.md +211 -0
  395. package/dist/skills/frameworks/turborepo/turborepo/references/configuration/global-options.md +187 -0
  396. package/dist/skills/frameworks/turborepo/turborepo/references/configuration/gotchas.md +348 -0
  397. package/dist/skills/frameworks/turborepo/turborepo/references/configuration/tasks.md +285 -0
  398. package/dist/skills/frameworks/turborepo/turborepo/references/environment/RULE.md +96 -0
  399. package/dist/skills/frameworks/turborepo/turborepo/references/environment/gotchas.md +141 -0
  400. package/dist/skills/frameworks/turborepo/turborepo/references/environment/modes.md +101 -0
  401. package/dist/skills/frameworks/turborepo/turborepo/references/filtering/RULE.md +148 -0
  402. package/dist/skills/frameworks/turborepo/turborepo/references/filtering/patterns.md +152 -0
  403. package/dist/skills/frameworks/turborepo/turborepo/references/watch/RULE.md +99 -0
  404. package/dist/tsconfig.tsbuildinfo +1 -0
  405. package/docs/README.md +20 -0
  406. package/docs/reference/dp-requirements.md +210 -0
  407. package/docs/runbooks/dp-cli-scaffolding.md +187 -0
  408. package/package.json +24 -51
  409. package/.eslintignore +0 -4
  410. package/.eslintrc +0 -127
  411. package/.prettierignore +0 -4
  412. package/.prettierrc +0 -7
  413. package/bin/abstractions/builder.d.ts +0 -4
  414. package/bin/abstractions/builder.js +0 -7
  415. package/bin/builders/dotnet/base.d.ts +0 -18
  416. package/bin/builders/dotnet/base.js +0 -47
  417. package/bin/builders/dotnet/entity-configuration/index.d.ts +0 -8
  418. package/bin/builders/dotnet/entity-configuration/index.js +0 -29
  419. package/bin/builders/dotnet/entity-converter/index.d.ts +0 -8
  420. package/bin/builders/dotnet/entity-converter/index.js +0 -29
  421. package/bin/builders/dotnet/entity-model-create/index.d.ts +0 -8
  422. package/bin/builders/dotnet/entity-model-create/index.js +0 -29
  423. package/bin/builders/dotnet/entity-model-dto/index.d.ts +0 -8
  424. package/bin/builders/dotnet/entity-model-dto/index.js +0 -29
  425. package/bin/builders/dotnet/entity-model-list-item-dto/index.d.ts +0 -8
  426. package/bin/builders/dotnet/entity-model-list-item-dto/index.js +0 -29
  427. package/bin/builders/dotnet/entity-model-update/index.d.ts +0 -8
  428. package/bin/builders/dotnet/entity-model-update/index.js +0 -29
  429. package/bin/builders/dotnet/entity-search-parameters/index.d.ts +0 -8
  430. package/bin/builders/dotnet/entity-search-parameters/index.js +0 -29
  431. package/bin/builders/dotnet/entity-search-query-builder/index.d.ts +0 -8
  432. package/bin/builders/dotnet/entity-search-query-builder/index.js +0 -29
  433. package/bin/builders/dotnet/firestore-connector/index.d.ts +0 -8
  434. package/bin/builders/dotnet/firestore-connector/index.js +0 -29
  435. package/bin/builders/dotnet/firestore-mapper/index.d.ts +0 -8
  436. package/bin/builders/dotnet/firestore-mapper/index.js +0 -29
  437. package/bin/builders/dotnet/types.d.ts +0 -10
  438. package/bin/builders/dotnet/types.js +0 -3
  439. package/bin/commands/entity-add/__test__/dotnet/common.d.ts +0 -2
  440. package/bin/commands/entity-add/__test__/dotnet/common.js +0 -11
  441. package/bin/commands/entity-add/__test__/dotnet/render.configuration.spec.d.ts +0 -1
  442. package/bin/commands/entity-add/__test__/dotnet/render.configuration.spec.js +0 -22
  443. package/bin/commands/entity-add/__test__/dotnet/render.converter.spec.d.ts +0 -1
  444. package/bin/commands/entity-add/__test__/dotnet/render.converter.spec.js +0 -22
  445. package/bin/commands/entity-add/__test__/dotnet/render.firestore-connector.spec.d.ts +0 -1
  446. package/bin/commands/entity-add/__test__/dotnet/render.firestore-connector.spec.js +0 -22
  447. package/bin/commands/entity-add/__test__/dotnet/render.firestore-mapper.spec.d.ts +0 -1
  448. package/bin/commands/entity-add/__test__/dotnet/render.firestore-mapper.spec.js +0 -22
  449. package/bin/commands/entity-add/__test__/dotnet/render.model-create.spec.d.ts +0 -1
  450. package/bin/commands/entity-add/__test__/dotnet/render.model-create.spec.js +0 -22
  451. package/bin/commands/entity-add/__test__/dotnet/render.model-dto.spec.d.ts +0 -1
  452. package/bin/commands/entity-add/__test__/dotnet/render.model-dto.spec.js +0 -22
  453. package/bin/commands/entity-add/__test__/dotnet/render.model-list-item-dto.spec.d.ts +0 -1
  454. package/bin/commands/entity-add/__test__/dotnet/render.model-list-item-dto.spec.js +0 -22
  455. package/bin/commands/entity-add/__test__/dotnet/render.model-update.spec.d.ts +0 -1
  456. package/bin/commands/entity-add/__test__/dotnet/render.model-update.spec.js +0 -22
  457. package/bin/commands/entity-add/__test__/dotnet/render.search-parameters.spec.d.ts +0 -1
  458. package/bin/commands/entity-add/__test__/dotnet/render.search-parameters.spec.js +0 -22
  459. package/bin/commands/entity-add/__test__/dotnet/render.search-query.spec.d.ts +0 -1
  460. package/bin/commands/entity-add/__test__/dotnet/render.search-query.spec.js +0 -22
  461. package/bin/commands/entity-add/index.d.ts +0 -26
  462. package/bin/commands/entity-add/index.js +0 -44
  463. package/bin/logging/index.d.ts +0 -8
  464. package/bin/logging/index.js +0 -28
  465. package/bin/providers/rendering/base.d.ts +0 -3
  466. package/bin/providers/rendering/base.js +0 -7
  467. package/bin/providers/rendering/factory.d.ts +0 -5
  468. package/bin/providers/rendering/factory.js +0 -16
  469. package/bin/providers/rendering/handlebars.d.ts +0 -4
  470. package/bin/providers/rendering/handlebars.js +0 -16
  471. package/bin/renderer/index.d.ts +0 -6
  472. package/bin/renderer/index.js +0 -27
  473. package/bin/run.d.ts +0 -2
  474. package/bin/run.js +0 -70
  475. package/bin/services/folders.d.ts +0 -1
  476. package/bin/services/folders.js +0 -31
  477. package/bin/types/commands.d.ts +0 -5
  478. package/bin/types/commands.js +0 -3
  479. package/bin/utils/collections.d.ts +0 -1
  480. package/bin/utils/collections.js +0 -6
  481. package/bin/utils/files.d.ts +0 -3
  482. package/bin/utils/files.js +0 -19
  483. package/bin/utils/strings.d.ts +0 -4
  484. package/bin/utils/strings.js +0 -22
  485. package/bin/utils/text.d.ts +0 -1
  486. package/bin/utils/text.js +0 -8
  487. package/em-cli +0 -0
  488. package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.configuration.spec.ts.snap +0 -49
  489. package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.converter.spec.ts.snap +0 -53
  490. package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.firestore-connector.spec.ts.snap +0 -20
  491. package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.firestore-mapper.spec.ts.snap +0 -29
  492. package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.model-create.spec.ts.snap +0 -10
  493. package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.model-dto.spec.ts.snap +0 -9
  494. package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.model-list-item-dto.spec.ts.snap +0 -11
  495. package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.model-update.spec.ts.snap +0 -11
  496. package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.search-parameters.spec.ts.snap +0 -29
  497. package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.search-query.spec.ts.snap +0 -42
  498. package/templates/dotnet/NewEntity/Configuration/<PluralizedEntity>Configuration.cs.template +0 -48
  499. package/templates/dotnet/NewEntity/Connectors/<PluralizedEntity>FirestoreConnector.cs.template +0 -15
  500. package/templates/dotnet/NewEntity/Converters/<PluralizedEntity>Converter.cs.template +0 -48
  501. package/templates/dotnet/NewEntity/Mappers/<PluralizedEntity>FirestoreMapper.cs.template +0 -25
  502. package/templates/dotnet/NewEntity/Models/<Entity>CreateInput.cs.template +0 -6
  503. package/templates/dotnet/NewEntity/Models/<Entity>Dto.cs.template +0 -5
  504. package/templates/dotnet/NewEntity/Models/<Entity>ListItemDto.cs.template +0 -6
  505. package/templates/dotnet/NewEntity/Models/<Entity>UpdateInput.cs.template +0 -6
  506. package/templates/dotnet/NewEntity/Search/<PluralizedEntity>QueryBuilder.cs.template +0 -38
  507. package/templates/dotnet/NewEntity/Search/<PluralizedEntity>SearchParameters.cs.template +0 -24
  508. package/tsconfig.json +0 -25
package/AGENTS.md ADDED
@@ -0,0 +1,10 @@
1
+ ## CLI Guidance
2
+
3
+ Primary skills here: `effect-authoring`, `simplify`.
4
+
5
+ This repo owns the `punks` CLI surface, repo detection flow, and scaffold-spec orchestration. Keep prompt/spec resolution logic in this repository; do not leak consumer-repo business logic into the CLI itself.
6
+ If you need Effect details, search:
7
+
8
+ - `opensrc/repos/github.com/Effect-TS/effect/packages/effect`
9
+
10
+ If work here changes operator workflow, setup, or AI scaffolding behavior, update `docs/README.md` and the relevant runbook in the same task.
package/README.md ADDED
@@ -0,0 +1,64 @@
1
+ # DevPunks CLI
2
+
3
+ `punks` scaffolds the AI operating context for each project phase, from requirements and backlog prep to the repo-aware setup pass.
4
+ This repo now carries the canonical scaffold content base under `src/data` plus a local `skills/` copy sourced from the public [wearedevpunks/skills](https://github.com/wearedevpunks/skills) repo.
5
+ The CLI runtime stays private; `skills/` is the public, shareable skill surface refreshed through a local shallow-clone cache.
6
+
7
+ ## Commands
8
+
9
+ - `punks`
10
+ show the command guide
11
+ - `punks scaffold`
12
+ show the scaffold lifecycle index
13
+ - `punks scaffold init`
14
+ scaffold the requirements-stage discovery skill and seed the wiki tree
15
+ - `punks scaffold backlog`
16
+ print the backlog-stage operator prompt; no backlog-stage packs are scaffolded today
17
+ - `punks scaffold setup`
18
+ detect the target repo, confirm pack selection, and write repo-aware scaffold output
19
+
20
+ ## Usage
21
+
22
+ ```bash
23
+ punks scaffold
24
+ punks scaffold init
25
+ punks scaffold backlog
26
+ punks scaffold setup
27
+ punks scaffold setup -i /path/to/repo
28
+ punks scaffold setup -i /path/to/repo -o /path/to/output
29
+ bun run sync:skills
30
+ ```
31
+
32
+ `bun run sync:skills` updates a local cache clone of `wearedevpunks/skills` and then replaces only `skills/`, overwriting any local changes there.
33
+
34
+ `punks scaffold init` copies `.agents/skills/grill-me`, seeds a dedicated wiki tree at `apps/wiki` for monorepos or `wiki` for single-repo layouts, and then prints the fixed operator prompt for the requirements gate.
35
+
36
+ `punks scaffold backlog` does not currently copy any stage-specific packs. It prints the fixed operator prompt for the backlog gate so the lifecycle stays explicit.
37
+
38
+ `punks scaffold setup` scans the target repo from `cwd` or `-i`, writes scaffold output into the scan root or `-o`, copies the selected skills from the bundled `skills/` catalog, resolves pack-owned lint assets into `.devpunks/specs/lint/`, and ensures required global tool prerequisites for those skills.
39
+
40
+ The lint scaffold is intentionally agent-facing rather than repo-mutating:
41
+
42
+ - selected lint assets are emitted under `.devpunks/specs/lint/`
43
+ - each asset carries Oxlint rule payload plus placement guidance
44
+ - if the target repo has no root Oxlint config yet, scaffold also emits a starter `.devpunks/specs/lint/oxlint-starter.json`
45
+ - the follow-up agent fits those assets into the repo's real lint topology instead of `punks` editing `.oxlintrc.json` directly
46
+
47
+ Current scaffold-managed global tools:
48
+
49
+ - `agent-browser`
50
+ - `opensrc`
51
+
52
+ ## Development
53
+
54
+ ```bash
55
+ bun install
56
+ bun run build
57
+ bun run test
58
+ bun run check-types
59
+ ```
60
+
61
+ ## Docs
62
+
63
+ - [Scaffolding runbook](./docs/runbooks/punks-cli-scaffolding.md)
64
+ - [Example: cicilca-doc-portal](./examples/cicilca-doc-portal/README.md)
@@ -0,0 +1,123 @@
1
+ # AGENTS.md
2
+
3
+ Behavioral guidelines to reduce common LLM coding mistakes. Merge with project-specific instructions as needed.
4
+
5
+ **Tradeoff:** These guidelines bias toward caution over speed. For trivial tasks, use judgment.
6
+
7
+ ## Philosophy
8
+
9
+ This codebase will outlive you. Every shortcut becomes someone else's burden. Every hack compounds into technical debt that slows the team down.
10
+
11
+ You are not writing code, you are shaping the future of the project. The patterns established will be copied, the corners cut will be cut again.
12
+
13
+ Fight entropy, leave the codebase better than when you found it.
14
+
15
+ ## Writing style
16
+
17
+ - When generating tokens be extremely concise. Sacrifice grammar for the sake of concision.
18
+ - Be detailed about concepts, reasoning, assumptions, tradeoffs, and questions; keep wording terse.
19
+
20
+ ## 1. Think Before Coding
21
+
22
+ **Don't assume. Don't hide confusion. Surface tradeoffs.**
23
+
24
+ Before implementing:
25
+
26
+ - State your assumptions explicitly. If uncertain, ask.
27
+ - If multiple interpretations exist, present them. Don't pick silently.
28
+ - If a simpler approach exists, say so. Push back when warranted.
29
+ - If something is unclear, stop. Name what's confusing. Ask.
30
+
31
+ ## 2. Simplicity First
32
+
33
+ **Minimum code that solves the problem. Nothing speculative.**
34
+
35
+ - No features beyond what was asked.
36
+ - No abstractions for single-use code.
37
+ - No "flexibility" or "configurability" that wasn't requested.
38
+ - No error handling for impossible scenarios.
39
+ - If you write 200 lines and it could be 50, rewrite it.
40
+
41
+ Ask yourself: "Would a senior engineer say this is overcomplicated?" If yes, simplify.
42
+
43
+ ## 3. Surgical Changes
44
+
45
+ **Touch only what you must. Clean up only your own mess.**
46
+
47
+ When editing existing code:
48
+
49
+ - Don't "improve" adjacent code, comments, or formatting by default.
50
+ - Don't refactor things that aren't broken by default.
51
+ - Match existing style, even if you'd do it differently.
52
+ - If you notice unrelated dead code, mention it. Don't delete it by default.
53
+ - If adjacent code materially affects correctness, clarity, maintainability, or the requested change, changing it is allowed. Fight entropy, do not preserve harmful local minima.
54
+
55
+ When your changes create orphans:
56
+
57
+ - Remove imports, variables, functions, and code paths that YOUR changes made unused.
58
+ - Don't remove pre-existing dead code unless asked.
59
+
60
+ The test: Every changed line should trace directly to the user's request or to necessary entropy-reducing support for that request.
61
+
62
+ ## 4. Goal-Driven Execution
63
+
64
+ **Define success criteria. Loop until verified.**
65
+
66
+ Transform tasks into verifiable goals:
67
+
68
+ - "Add validation" -> "Write tests for invalid inputs, then make them pass"
69
+ - "Fix the bug" -> "Write a test that reproduces it, then make it pass"
70
+ - "Refactor X" -> "Ensure tests pass before and after"
71
+
72
+ For multi-step tasks, state a brief plan:
73
+
74
+ ```text
75
+ 1. [Step] -> verify: [check]
76
+ 2. [Step] -> verify: [check]
77
+ 3. [Step] -> verify: [check]
78
+ ```
79
+
80
+ Strong success criteria let you loop independently. Weak criteria ("make it work") require constant clarification.
81
+
82
+ ## Plan mode
83
+
84
+ - Plans must be self-contained. Embed all gathered knowledge and context directly in the plan file: relevant code paths, existing patterns, constraints, assumptions, and design reasoning. The executor should be able to implement from the plan alone, doing only optional supplementary research.
85
+ - Be very detailed and explain deeply concepts and reasoning behind design choices.
86
+ - Always emphasize the initial situation, issue, and solution.
87
+ - For complex tasks, break plans into phases with built-in validation gates. Define expected outcomes, assertions, or checks per phase so the executor can self-verify correctness before moving on with no human checkpoint needed.
88
+ - At the end of the plan list unresolved questions if any.
89
+
90
+ ## Dependency source inspection
91
+
92
+ - Prefer web search and official docs first when inspecting external libraries or packages.
93
+ - If web results are unsuccessful, stale, or not detailed enough for implementation, fetch source locally.
94
+ - For npm packages, use `opensrc path <package>` to get the absolute path to cached source code, fetching on cache miss.
95
+ - For non-npm packages, clone the upstream `owner/repo` git source directly with `opensrc path <owner>/<repo>`.
96
+
97
+ ## Subagents
98
+
99
+ In readonly scenarios ONLY spawn subagents aggressively for parallelization opportunities outside code writing. Examples: research, auditing, docs updating, investigating multiple hypotheses, exploring unrelated areas. Fan out whenever possible, synthesize findings before acting.
100
+
101
+ ## Harness Skill Layout
102
+
103
+ - Keep `.agents/skills/` as the main project-local skill directory.
104
+ - Keep `.claude/skills` as a symlink to `.agents/skills` for Claude compatibility.
105
+ - Do not create `.codex/skills`, `.cursor/skills`, or `.opencode/skills`; Codex, Cursor, and OpenCode should read from `.agents/skills`.
106
+
107
+ ## Notes — Cross-session Memory
108
+
109
+ Notebook at `.agents/notes/`. Shared memory across sessions. Never ask permission.
110
+
111
+ **On session start:** Read `.agents/notes/index.md` (create if missing).
112
+ **Write notes for:**
113
+
114
+ - Non-obvious behaviors, gotchas, edge cases
115
+ - Hard-won insights that took investigation
116
+ - Project conventions and architectural decisions
117
+ - Setup and config quirks
118
+ **Don't note:** File locations, basic structure, session summaries, trivial facts.
119
+ **Guidelines:** Store in `.agents/notes/`, keep `index.md` lean with one line per note, update existing notes before creating new ones, include why not just what, prune aggressively.
120
+
121
+ ---
122
+
123
+ **These guidelines are working if:** fewer unnecessary changes in diffs, fewer rewrites due to overcomplication, clarifying questions come before implementation rather than after mistakes, and the codebase trends toward lower entropy over time.
@@ -0,0 +1,349 @@
1
+ export type LintAssetId =
2
+ | "effect-no-barrel-imports"
3
+ | "next-core"
4
+ | "react-core"
5
+ | "react-hooks"
6
+ | "react-you-might-not-need-an-effect"
7
+ | "tanstack-query-core"
8
+ | "vitest-core";
9
+
10
+ export interface LintJsPluginDefinition {
11
+ readonly name: string;
12
+ readonly specifier: string;
13
+ }
14
+
15
+ export interface LintPlacementDefinition {
16
+ readonly recommendedConfigFile: string;
17
+ readonly recommendedFiles: ReadonlyArray<string>;
18
+ readonly recommendedWorkspaces: ReadonlyArray<string>;
19
+ readonly placementNotes: string;
20
+ }
21
+
22
+ export interface LintAssetDefinition {
23
+ readonly id: LintAssetId;
24
+ readonly description: string;
25
+ readonly plugins: ReadonlyArray<string>;
26
+ readonly jsPlugins: ReadonlyArray<LintJsPluginDefinition>;
27
+ readonly settings: Record<string, unknown>;
28
+ readonly rules: Record<string, unknown>;
29
+ readonly requiredDevDependencies: ReadonlyArray<string>;
30
+ readonly placement: LintPlacementDefinition;
31
+ }
32
+
33
+ const sharedReactPlacement = {
34
+ recommendedConfigFile: ".oxlintrc.json",
35
+ recommendedFiles: [
36
+ "apps/web/**/*.{js,jsx,ts,tsx}",
37
+ "packages/ui/**/*.{js,jsx,ts,tsx}",
38
+ ],
39
+ recommendedWorkspaces: ["apps/web", "packages/ui"],
40
+ placementNotes:
41
+ "Add as an override for React-rendered code. Keep the same scope for shared UI packages unless the target repo clearly splits product UI into other workspaces.",
42
+ } as const satisfies LintPlacementDefinition;
43
+
44
+ const webOnlyPlacement = {
45
+ recommendedConfigFile: ".oxlintrc.json",
46
+ recommendedFiles: ["apps/web/**/*.{js,jsx,ts,tsx}"],
47
+ recommendedWorkspaces: ["apps/web"],
48
+ placementNotes:
49
+ "Place this in the Next.js app override. If the repo uses a different frontend app path, retarget the file globs to that workspace before composing the final Oxlint config.",
50
+ } as const satisfies LintPlacementDefinition;
51
+
52
+ const effectPlacement = {
53
+ recommendedConfigFile: ".oxlintrc.json",
54
+ recommendedFiles: [
55
+ "apps/server/**/*.{js,jsx,ts,tsx}",
56
+ "packages/api/**/*.{js,jsx,ts,tsx}",
57
+ "packages/db/**/*.{js,jsx,ts,tsx}",
58
+ ],
59
+ recommendedWorkspaces: ["apps/server", "packages/api", "packages/db"],
60
+ placementNotes:
61
+ "Apply this only where Effect code lives. If the target repo renames or splits backend workspaces, move the override with those code paths instead of broadening it repo-wide.",
62
+ } as const satisfies LintPlacementDefinition;
63
+
64
+ const vitestPlacement = {
65
+ recommendedConfigFile: ".oxlintrc.json",
66
+ recommendedFiles: [
67
+ "apps/web/**/*.{test,spec}.{js,jsx,ts,tsx}",
68
+ "apps/web/src/test/**/*.{js,jsx,ts,tsx}",
69
+ "packages/api/**/*.{test,spec}.{js,jsx,ts,tsx}",
70
+ ],
71
+ recommendedWorkspaces: ["apps/web", "packages/api"],
72
+ placementNotes:
73
+ "Attach this to test-only globs. Expand or narrow the file patterns to match the repo's actual Vitest test layout instead of treating it as a global default.",
74
+ } as const satisfies LintPlacementDefinition;
75
+
76
+ export const lintCatalog = [
77
+ {
78
+ id: "react-core",
79
+ description: "Core React rules for rendered app and shared UI code.",
80
+ plugins: ["unicorn", "typescript", "oxc", "react"],
81
+ jsPlugins: [],
82
+ settings: {},
83
+ rules: {
84
+ "react/rules-of-hooks": "error",
85
+ "react/exhaustive-deps": "error",
86
+ "react/forward-ref-uses-ref": "error",
87
+ "react/jsx-key": "error",
88
+ "react/jsx-no-comment-textnodes": "error",
89
+ "react/jsx-no-duplicate-props": "error",
90
+ "react/jsx-no-target-blank": "error",
91
+ "react/jsx-no-undef": "error",
92
+ "react/jsx-no-useless-fragment": "error",
93
+ "react/no-children-prop": "error",
94
+ "react/no-danger-with-children": "error",
95
+ "react/no-direct-mutation-state": "error",
96
+ "react/no-find-dom-node": "error",
97
+ "react/no-render-return-value": "error",
98
+ "react/no-string-refs": "error",
99
+ "react/no-this-in-sfc": "error",
100
+ "react/no-unknown-property": "error",
101
+ "react/no-unescaped-entities": "error",
102
+ "react/no-unsafe": "error",
103
+ "react/void-dom-elements-no-children": "error",
104
+ },
105
+ requiredDevDependencies: [],
106
+ placement: sharedReactPlacement,
107
+ },
108
+ {
109
+ id: "react-hooks",
110
+ description: "React Hooks lint rules via the JS plugin bridge for Oxlint.",
111
+ plugins: [],
112
+ jsPlugins: [
113
+ {
114
+ name: "react-hooks-js",
115
+ specifier: "eslint-plugin-react-hooks",
116
+ },
117
+ ],
118
+ settings: {},
119
+ rules: {
120
+ "react-hooks-js/component-hook-factories": "error",
121
+ "react-hooks-js/config": "error",
122
+ "react-hooks-js/error-boundaries": "error",
123
+ "react-hooks-js/gating": "error",
124
+ "react-hooks-js/globals": "error",
125
+ "react-hooks-js/immutability": "error",
126
+ "react-hooks-js/incompatible-library": "error",
127
+ "react-hooks-js/preserve-manual-memoization": "error",
128
+ "react-hooks-js/purity": "error",
129
+ "react-hooks-js/refs": "error",
130
+ "react-hooks-js/set-state-in-effect": "error",
131
+ "react-hooks-js/set-state-in-render": "error",
132
+ "react-hooks-js/static-components": "error",
133
+ "react-hooks-js/unsupported-syntax": "error",
134
+ "react-hooks-js/use-memo": "error",
135
+ },
136
+ requiredDevDependencies: ["eslint-plugin-react-hooks"],
137
+ placement: sharedReactPlacement,
138
+ },
139
+ {
140
+ id: "react-you-might-not-need-an-effect",
141
+ description: "Guidance rules that push React code away from unnecessary effects.",
142
+ plugins: [],
143
+ jsPlugins: [
144
+ {
145
+ name: "react-you-might-not-need-an-effect-js",
146
+ specifier: "eslint-plugin-react-you-might-not-need-an-effect",
147
+ },
148
+ ],
149
+ settings: {},
150
+ rules: {
151
+ "react-you-might-not-need-an-effect-js/no-adjust-state-on-prop-change":
152
+ "error",
153
+ "react-you-might-not-need-an-effect-js/no-chain-state-updates": "error",
154
+ "react-you-might-not-need-an-effect-js/no-derived-state": "error",
155
+ "react-you-might-not-need-an-effect-js/no-empty-effect": "error",
156
+ "react-you-might-not-need-an-effect-js/no-event-handler": "error",
157
+ "react-you-might-not-need-an-effect-js/no-initialize-state": "error",
158
+ "react-you-might-not-need-an-effect-js/no-pass-data-to-parent": "error",
159
+ "react-you-might-not-need-an-effect-js/no-pass-live-state-to-parent":
160
+ "error",
161
+ "react-you-might-not-need-an-effect-js/no-reset-all-state-on-prop-change":
162
+ "error",
163
+ },
164
+ requiredDevDependencies: [
165
+ "eslint-plugin-react-you-might-not-need-an-effect",
166
+ ],
167
+ placement: sharedReactPlacement,
168
+ },
169
+ {
170
+ id: "next-core",
171
+ description: "Next.js correctness rules for the main web application.",
172
+ plugins: ["nextjs"],
173
+ jsPlugins: [],
174
+ settings: {},
175
+ rules: {
176
+ "nextjs/inline-script-id": "error",
177
+ "nextjs/next-script-for-ga": "error",
178
+ "nextjs/no-assign-module-variable": "error",
179
+ "nextjs/no-async-client-component": "error",
180
+ "nextjs/no-before-interactive-script-outside-document": "error",
181
+ "nextjs/no-css-tags": "error",
182
+ "nextjs/no-document-import-in-page": "error",
183
+ "nextjs/no-duplicate-head": "error",
184
+ "nextjs/no-head-element": "error",
185
+ "nextjs/no-head-import-in-document": "error",
186
+ "nextjs/no-html-link-for-pages": "error",
187
+ "nextjs/no-img-element": "error",
188
+ "nextjs/no-page-custom-font": "error",
189
+ "nextjs/no-script-component-in-head": "error",
190
+ "nextjs/no-styled-jsx-in-document": "error",
191
+ "nextjs/no-sync-scripts": "error",
192
+ "nextjs/no-title-in-document-head": "error",
193
+ "nextjs/no-typos": "error",
194
+ "nextjs/no-unwanted-polyfillio": "error",
195
+ },
196
+ requiredDevDependencies: [],
197
+ placement: {
198
+ ...webOnlyPlacement,
199
+ placementNotes:
200
+ "Place this beside the React app override and set `settings.next.rootDir` to the repo's actual Next workspace roots if the final config needs that plugin setting.",
201
+ },
202
+ },
203
+ {
204
+ id: "tanstack-query-core",
205
+ description: "TanStack Query rules via the Oxlint JS plugin bridge.",
206
+ plugins: [],
207
+ jsPlugins: [
208
+ {
209
+ name: "tanstack-query-js",
210
+ specifier: "@tanstack/eslint-plugin-query",
211
+ },
212
+ ],
213
+ settings: {},
214
+ rules: {
215
+ "tanstack-query-js/exhaustive-deps": "error",
216
+ "tanstack-query-js/infinite-query-property-order": "error",
217
+ "tanstack-query-js/mutation-property-order": "error",
218
+ "tanstack-query-js/no-rest-destructuring": "warn",
219
+ "tanstack-query-js/no-unstable-deps": "error",
220
+ "tanstack-query-js/no-void-query-fn": "error",
221
+ "tanstack-query-js/stable-query-client": "error",
222
+ },
223
+ requiredDevDependencies: ["@tanstack/eslint-plugin-query"],
224
+ placement: {
225
+ ...webOnlyPlacement,
226
+ placementNotes:
227
+ "Scope this to client code that owns TanStack Query usage. Keep it out of server-only or shared non-query packages unless those paths actually create queries or mutations.",
228
+ },
229
+ },
230
+ {
231
+ id: "effect-no-barrel-imports",
232
+ description: "Effect architectural rule that blocks barrel-package imports.",
233
+ plugins: [],
234
+ jsPlugins: [
235
+ {
236
+ name: "effect-js",
237
+ specifier: "@effect/eslint-plugin",
238
+ },
239
+ ],
240
+ settings: {},
241
+ rules: {
242
+ "effect-js/no-import-from-barrel-package": [
243
+ "error",
244
+ {
245
+ packageNames: ["effect"],
246
+ },
247
+ ],
248
+ },
249
+ requiredDevDependencies: ["@effect/eslint-plugin"],
250
+ placement: effectPlacement,
251
+ },
252
+ {
253
+ id: "vitest-core",
254
+ description: "Vitest-focused test rules for repo-owned test globs.",
255
+ plugins: ["vitest"],
256
+ jsPlugins: [],
257
+ settings: {
258
+ vitest: {
259
+ typecheck: false,
260
+ },
261
+ },
262
+ rules: {
263
+ "vitest/consistent-each-for": "warn",
264
+ "vitest/no-conditional-tests": "error",
265
+ "vitest/no-import-node-test": "error",
266
+ "vitest/warn-todo": "warn",
267
+ },
268
+ requiredDevDependencies: [],
269
+ placement: vitestPlacement,
270
+ },
271
+ ] as const satisfies ReadonlyArray<LintAssetDefinition>;
272
+
273
+ const stableJson = (value: unknown): string => JSON.stringify(value);
274
+
275
+ const placementKeyOf = (placement: LintPlacementDefinition): string =>
276
+ [
277
+ placement.recommendedConfigFile,
278
+ ...placement.recommendedFiles,
279
+ ].join("::");
280
+
281
+ export const validateLintCatalog = (
282
+ catalog: ReadonlyArray<LintAssetDefinition>,
283
+ ): ReadonlyArray<LintAssetDefinition> => {
284
+ const seenIds = new Set<string>();
285
+ const seenRules = new Map<string, { readonly assetId: string; readonly value: string }>();
286
+ const seenSettings = new Map<
287
+ string,
288
+ { readonly assetId: string; readonly value: string }
289
+ >();
290
+ const seenJsPlugins = new Map<
291
+ string,
292
+ { readonly assetId: string; readonly specifier: string }
293
+ >();
294
+
295
+ for (const asset of catalog) {
296
+ if (seenIds.has(asset.id)) {
297
+ throw new Error(`Duplicate lint asset id: ${asset.id}`);
298
+ }
299
+ seenIds.add(asset.id);
300
+
301
+ const placementKey = placementKeyOf(asset.placement);
302
+
303
+ for (const [ruleName, ruleValue] of Object.entries(asset.rules)) {
304
+ const key = `${placementKey}::rule::${ruleName}`;
305
+ const value = stableJson(ruleValue);
306
+ const previous = seenRules.get(key);
307
+ if (previous !== undefined && previous.value !== value) {
308
+ throw new Error(
309
+ `Conflicting lint rule \`${ruleName}\` for placement \`${placementKey}\`: ${previous.assetId} vs ${asset.id}`,
310
+ );
311
+ }
312
+ if (previous === undefined) {
313
+ seenRules.set(key, { assetId: asset.id, value });
314
+ }
315
+ }
316
+
317
+ for (const [settingName, settingValue] of Object.entries(asset.settings)) {
318
+ const key = `${placementKey}::setting::${settingName}`;
319
+ const value = stableJson(settingValue);
320
+ const previous = seenSettings.get(key);
321
+ if (previous !== undefined && previous.value !== value) {
322
+ throw new Error(
323
+ `Conflicting lint setting \`${settingName}\` for placement \`${placementKey}\`: ${previous.assetId} vs ${asset.id}`,
324
+ );
325
+ }
326
+ if (previous === undefined) {
327
+ seenSettings.set(key, { assetId: asset.id, value });
328
+ }
329
+ }
330
+
331
+ for (const plugin of asset.jsPlugins) {
332
+ const key = `${placementKey}::js-plugin::${plugin.name}`;
333
+ const previous = seenJsPlugins.get(key);
334
+ if (previous !== undefined && previous.specifier !== plugin.specifier) {
335
+ throw new Error(
336
+ `Conflicting JS plugin alias \`${plugin.name}\` for placement \`${placementKey}\`: ${previous.assetId} vs ${asset.id}`,
337
+ );
338
+ }
339
+ if (previous === undefined) {
340
+ seenJsPlugins.set(key, {
341
+ assetId: asset.id,
342
+ specifier: plugin.specifier,
343
+ });
344
+ }
345
+ }
346
+ }
347
+
348
+ return catalog;
349
+ };
@@ -0,0 +1,44 @@
1
+ import type { PackCategory, PackId } from "../../core/models";
2
+ import type { LintAssetId } from "./lint";
3
+ import type { SkillId } from "./skills";
4
+
5
+ export type PackHookId = "format-edited-file" | "require-tests-for-pr";
6
+ export type PackPromptSurfaceId =
7
+ | "shared-agents"
8
+ | "root-prompt-spec"
9
+ | "docs-prompt-spec"
10
+ | "workspace-prompt-spec"
11
+ | "subagent-manifest";
12
+
13
+ export interface PackCatalogEntry {
14
+ readonly id: PackId;
15
+ readonly category: Exclude<PackCategory, "optional">;
16
+ readonly triggerPackages: ReadonlyArray<string>;
17
+ readonly description: string;
18
+ readonly skills: ReadonlyArray<SkillId>;
19
+ readonly lintAssets: ReadonlyArray<LintAssetId>;
20
+ readonly hooks: ReadonlyArray<PackHookId>;
21
+ readonly promptSurfaces: ReadonlyArray<PackPromptSurfaceId>;
22
+ readonly promptDetails: ReadonlyArray<string>;
23
+ }
24
+
25
+ export const packCatalog = [
26
+ { id: "backend", category: "surface", triggerPackages: [], description: "Backend pack: domain structure and recoverable actions.", skills: ["backend-domain-structure", "backend-recoverable-actions"], lintAssets: [], hooks: [], promptSurfaces: ["shared-agents", "root-prompt-spec", "workspace-prompt-spec"], promptDetails: ["shared backend domain baseline", "workspace backend action/recovery guidance"] },
27
+ { id: "better-auth", category: "detected", triggerPackages: ["better-auth"], description: "Better Auth guidance pack.", skills: ["better-auth-best-practices"], lintAssets: [], hooks: [], promptSurfaces: ["shared-agents", "root-prompt-spec", "workspace-prompt-spec"], promptDetails: ["shared auth guardrails", "workspace auth boundaries"] },
28
+ { id: "docs", category: "default", triggerPackages: [], description: "Default docs pack: docs-maintenance.", skills: ["docs-maintenance"], lintAssets: [], hooks: [], promptSurfaces: ["shared-agents", "root-prompt-spec", "docs-prompt-spec"], promptDetails: ["shared docs baseline", "docs scope spec"] },
29
+ { id: "drizzle", category: "detected", triggerPackages: ["drizzle-kit", "drizzle-orm"], description: "Drizzle guidance pack.", skills: ["effect-backend-structure", "effect-recoverable-actions"], lintAssets: [], hooks: [], promptSurfaces: ["shared-agents", "root-prompt-spec", "workspace-prompt-spec"], promptDetails: ["shared data-layer baseline", "workspace db flow rules"] },
30
+ { id: "effect", category: "detected", triggerPackages: ["effect", "@effect/"], description: "Effect guidance pack family.", skills: ["effect-authoring", "effect-best-practices", "effect-backend-structure", "effect-recoverable-actions"], lintAssets: ["effect-no-barrel-imports"], hooks: [], promptSurfaces: ["shared-agents", "root-prompt-spec", "workspace-prompt-spec"], promptDetails: ["shared effect authoring baseline", "workspace service/layer rules"] },
31
+ { id: "elysia", category: "detected", triggerPackages: ["elysia"], description: "Elysia guidance pack.", skills: ["elysiajs"], lintAssets: [], hooks: [], promptSurfaces: ["shared-agents", "root-prompt-spec", "workspace-prompt-spec"], promptDetails: ["shared api-server baseline", "workspace route/plugin rules"] },
32
+ { id: "frontend", category: "surface", triggerPackages: [], description: "Frontend pack: agent-browser, design taste, and frontend domain structure.", skills: ["agent-browser", "design-taste-frontend", "frontend-domain-structure"], lintAssets: [], hooks: [], promptSurfaces: ["shared-agents", "root-prompt-spec", "workspace-prompt-spec"], promptDetails: ["shared product-ui baseline", "workspace UX/browser guidance", "workspace frontend domain boundaries"] },
33
+ { id: "nextjs", category: "detected", triggerPackages: ["next"], description: "Next.js guidance pack.", skills: ["next-best-practices", "next-cache-components"], lintAssets: ["next-core"], hooks: [], promptSurfaces: ["shared-agents", "root-prompt-spec", "workspace-prompt-spec"], promptDetails: ["shared app-router baseline", "workspace next rendering rules"] },
34
+ { id: "planning", category: "default", triggerPackages: [], description: "Default planning pack: grill-me, create-spec, create-plan, implement-spec.", skills: ["grill-me", "create-spec", "create-plan", "implement-spec"], lintAssets: [], hooks: [], promptSurfaces: ["shared-agents", "root-prompt-spec", "workspace-prompt-spec"], promptDetails: ["shared planning baseline", "workspace plan/spec execution rules"] },
35
+ { id: "quality", category: "default", triggerPackages: [], description: "Default quality pack: tdd, simplify.", skills: ["tdd", "simplify"], lintAssets: ["vitest-core"], hooks: [], promptSurfaces: ["shared-agents", "root-prompt-spec", "workspace-prompt-spec"], promptDetails: ["shared change-quality baseline", "workspace test/refactor expectations"] },
36
+ { id: "react", category: "detected", triggerPackages: ["react", "react-dom"], description: "React guidance pack.", skills: ["async-react-patterns", "vercel-composition-patterns", "vercel-react-best-practices"], lintAssets: ["react-core", "react-hooks", "react-you-might-not-need-an-effect"], hooks: [], promptSurfaces: ["shared-agents", "root-prompt-spec", "workspace-prompt-spec"], promptDetails: ["shared react structure baseline", "workspace react composition rules"] },
37
+ { id: "research", category: "default", triggerPackages: [], description: "Default research pack: parallel-research.", skills: ["parallel-research"], lintAssets: [], hooks: [], promptSurfaces: ["shared-agents", "root-prompt-spec", "workspace-prompt-spec"], promptDetails: ["shared investigation baseline", "workspace research handoff rules"] },
38
+ { id: "requirements", category: "default", triggerPackages: [], description: "Default requirements pack: requirements-grill, write-backlog.", skills: ["requirements-grill", "write-backlog"], lintAssets: [], hooks: [], promptSurfaces: ["shared-agents", "root-prompt-spec", "workspace-prompt-spec"], promptDetails: ["shared requirements baseline", "workspace backlog shaping rules"] },
39
+ { id: "subagents", category: "default", triggerPackages: [], description: "Default subagents pack: swarm-planner.", skills: ["swarm-planner"], lintAssets: [], hooks: [], promptSurfaces: ["shared-agents", "root-prompt-spec", "workspace-prompt-spec", "subagent-manifest"], promptDetails: ["shared delegation baseline", "workspace ownership handoffs", "subagent manifest scaffold"] },
40
+ { id: "tanstack-query", category: "detected", triggerPackages: ["@tanstack/react-query"], description: "TanStack Query guidance pack.", skills: ["tanstack-query"], lintAssets: ["tanstack-query-core"], hooks: [], promptSurfaces: ["shared-agents", "root-prompt-spec", "workspace-prompt-spec"], promptDetails: ["shared tanstack query baseline", "workspace server-state rules"] },
41
+ { id: "trpc", category: "detected", triggerPackages: ["@trpc/"], description: "tRPC guidance pack.", skills: [], lintAssets: [], hooks: [], promptSurfaces: ["shared-agents", "root-prompt-spec", "workspace-prompt-spec"], promptDetails: ["shared contract-first baseline", "workspace client/server boundaries"] },
42
+ { id: "turborepo", category: "detected", triggerPackages: ["turbo"], description: "Turborepo guidance pack.", skills: ["turborepo"], lintAssets: [], hooks: [], promptSurfaces: ["shared-agents", "root-prompt-spec", "workspace-prompt-spec"], promptDetails: ["shared monorepo baseline", "workspace task boundary rules"] },
43
+ { id: "typescript", category: "language", triggerPackages: ["typescript"], description: "Shared JavaScript / TypeScript language pack for hook and language-level scaffold assets.", skills: [], lintAssets: [], hooks: ["format-edited-file", "require-tests-for-pr"], promptSurfaces: [], promptDetails: [] },
44
+ ] as const satisfies ReadonlyArray<PackCatalogEntry>;
@@ -0,0 +1,47 @@
1
+ import type { ToolId } from "./tools";
2
+
3
+ export type SkillTier = "agnostic" | "language" | "framework";
4
+
5
+ export interface SkillCatalogEntry {
6
+ readonly id: string;
7
+ readonly sourceDirectory: string;
8
+ readonly tier: SkillTier;
9
+ readonly language: string | null;
10
+ readonly framework: string | null;
11
+ readonly requiresTools: ReadonlyArray<ToolId>;
12
+ }
13
+
14
+ export const skillCatalog = [
15
+ { id: "agent-browser", sourceDirectory: "skills/agnostic/frontend/agent-browser", tier: "framework", language: null, framework: "browser-automation", requiresTools: ["agent-browser"] },
16
+ { id: "backend-domain-structure", sourceDirectory: "skills/agnostic/backend/backend-domain-structure", tier: "agnostic", language: null, framework: null, requiresTools: [] },
17
+ { id: "backend-recoverable-actions", sourceDirectory: "skills/agnostic/backend/backend-recoverable-actions", tier: "agnostic", language: null, framework: null, requiresTools: [] },
18
+ { id: "better-auth-best-practices", sourceDirectory: "skills/frameworks/better-auth/better-auth-best-practices", tier: "framework", language: "typescript", framework: "better-auth", requiresTools: [] },
19
+ { id: "create-plan", sourceDirectory: "skills/agnostic/planning/create-plan", tier: "agnostic", language: null, framework: null, requiresTools: [] },
20
+ { id: "create-spec", sourceDirectory: "skills/agnostic/planning/create-spec", tier: "agnostic", language: null, framework: null, requiresTools: [] },
21
+ { id: "docs-maintenance", sourceDirectory: "skills/agnostic/docs/docs-maintenance", tier: "agnostic", language: null, framework: null, requiresTools: [] },
22
+ { id: "effect-authoring", sourceDirectory: "skills/frameworks/effect/effect-authoring", tier: "framework", language: "typescript", framework: "effect", requiresTools: ["opensrc"] },
23
+ { id: "effect-backend-structure", sourceDirectory: "skills/frameworks/effect/effect-backend-structure", tier: "framework", language: "typescript", framework: "effect", requiresTools: ["opensrc"] },
24
+ { id: "effect-best-practices", sourceDirectory: "skills/frameworks/effect/effect-best-practices", tier: "framework", language: "typescript", framework: "effect", requiresTools: [] },
25
+ { id: "effect-recoverable-actions", sourceDirectory: "skills/frameworks/effect/effect-recoverable-actions", tier: "framework", language: "typescript", framework: "effect", requiresTools: ["opensrc"] },
26
+ { id: "elysiajs", sourceDirectory: "skills/frameworks/elysia/elysiajs", tier: "framework", language: "typescript", framework: "elysiajs", requiresTools: [] },
27
+ { id: "design-taste-frontend", sourceDirectory: "skills/agnostic/frontend/design-taste-frontend", tier: "agnostic", language: null, framework: null, requiresTools: [] },
28
+ { id: "frontend-domain-structure", sourceDirectory: "skills/agnostic/frontend/frontend-domain-structure", tier: "agnostic", language: null, framework: null, requiresTools: [] },
29
+ { id: "grill-me", sourceDirectory: "skills/agnostic/planning/grill-me", tier: "agnostic", language: null, framework: null, requiresTools: [] },
30
+ { id: "improve-codebase-architecture", sourceDirectory: "skills/agnostic/research/improve-codebase-architecture", tier: "agnostic", language: null, framework: null, requiresTools: [] },
31
+ { id: "implement-spec", sourceDirectory: "skills/agnostic/planning/implement-spec", tier: "agnostic", language: null, framework: null, requiresTools: [] },
32
+ { id: "next-best-practices", sourceDirectory: "skills/frameworks/nextjs/next-best-practices", tier: "framework", language: "typescript", framework: "nextjs", requiresTools: [] },
33
+ { id: "next-cache-components", sourceDirectory: "skills/frameworks/nextjs/next-cache-components", tier: "framework", language: "typescript", framework: "nextjs", requiresTools: [] },
34
+ { id: "parallel-research", sourceDirectory: "skills/agnostic/research/parallel-research", tier: "agnostic", language: null, framework: null, requiresTools: [] },
35
+ { id: "async-react-patterns", sourceDirectory: "skills/frameworks/react/async-react-patterns", tier: "framework", language: "typescript", framework: "react", requiresTools: [] },
36
+ { id: "requirements-grill", sourceDirectory: "skills/agnostic/requirements/requirements-grill", tier: "agnostic", language: null, framework: null, requiresTools: [] },
37
+ { id: "simplify", sourceDirectory: "skills/agnostic/quality/simplify", tier: "agnostic", language: null, framework: null, requiresTools: [] },
38
+ { id: "swarm-planner", sourceDirectory: "skills/agnostic/subagents/swarm-planner", tier: "agnostic", language: null, framework: null, requiresTools: [] },
39
+ { id: "tanstack-query", sourceDirectory: "skills/frameworks/tanstack-query/tanstack-query", tier: "framework", language: "typescript", framework: "tanstack-query", requiresTools: ["opensrc"] },
40
+ { id: "tdd", sourceDirectory: "skills/agnostic/quality/tdd", tier: "agnostic", language: null, framework: null, requiresTools: [] },
41
+ { id: "turborepo", sourceDirectory: "skills/frameworks/turborepo/turborepo", tier: "framework", language: null, framework: "turborepo", requiresTools: [] },
42
+ { id: "vercel-composition-patterns", sourceDirectory: "skills/frameworks/react/vercel-composition-patterns", tier: "framework", language: "typescript", framework: "react", requiresTools: [] },
43
+ { id: "vercel-react-best-practices", sourceDirectory: "skills/frameworks/react/vercel-react-best-practices", tier: "framework", language: "typescript", framework: "react", requiresTools: [] },
44
+ { id: "write-backlog", sourceDirectory: "skills/agnostic/requirements/write-backlog", tier: "agnostic", language: null, framework: null, requiresTools: [] },
45
+ ] as const satisfies ReadonlyArray<SkillCatalogEntry>;
46
+
47
+ export type SkillId = (typeof skillCatalog)[number]["id"];