codeply-cli 0.1.1 → 0.3.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 (384) hide show
  1. package/THIRD_PARTY_NOTICES.md +63 -0
  2. package/bin/codeply.js +562 -259
  3. package/lib/agent.mjs +1721 -116
  4. package/lib/ai.js +1107 -184
  5. package/lib/apply-limit.js +33 -41
  6. package/lib/apply-patch.js +217 -0
  7. package/lib/arity-table.json +138 -0
  8. package/lib/arity.js +70 -0
  9. package/lib/auth.js +118 -112
  10. package/lib/commands.js +103 -0
  11. package/lib/config.js +392 -98
  12. package/lib/design-library/artifact-template.html +500 -0
  13. package/lib/design-library/assemble-artifact.mjs +21 -0
  14. package/lib/design-library/build.mjs +226 -0
  15. package/lib/design-library/cleanup.mjs +45 -0
  16. package/lib/design-library/index.json +22380 -0
  17. package/lib/design-library/make-table-data.mjs +39 -0
  18. package/lib/design-library/query.mjs +104 -0
  19. package/lib/diagnostics.js +192 -0
  20. package/lib/edit-engine.js +171 -14
  21. package/lib/github-agent.mjs +290 -0
  22. package/lib/history.js +75 -0
  23. package/lib/mcp.js +258 -0
  24. package/lib/native-tools.mjs +189 -0
  25. package/lib/oauth-connectors.js +478 -0
  26. package/lib/permissions.js +109 -0
  27. package/lib/plugins.js +353 -0
  28. package/lib/render-md.mjs +617 -617
  29. package/lib/server.mjs +457 -0
  30. package/lib/session-db.js +220 -0
  31. package/lib/share.js +168 -0
  32. package/lib/skills.js +416 -0
  33. package/lib/snapshot.js +146 -0
  34. package/lib/subagents.js +164 -0
  35. package/lib/terminal-hints.js +154 -0
  36. package/lib/textarea.mjs +258 -258
  37. package/lib/tools.mjs +1709 -73
  38. package/lib/tui.js +7 -7
  39. package/lib/tui.mjs +1086 -899
  40. package/lib/typecheck-worker.js +147 -0
  41. package/lib/web-tools.js +158 -0
  42. package/package.json +5 -3
  43. package/skills/SOURCE.md +58 -0
  44. package/skills/accessibility/SKILL.md +147 -0
  45. package/skills/agent-architecture-audit/SKILL.md +257 -0
  46. package/skills/agent-eval/SKILL.md +147 -0
  47. package/skills/agent-harness-construction/SKILL.md +74 -0
  48. package/skills/agent-introspection-debugging/SKILL.md +154 -0
  49. package/skills/agent-payment-x402/SKILL.md +225 -0
  50. package/skills/agent-self-evaluation/SKILL.md +182 -0
  51. package/skills/agent-self-evaluation/references/evaluation-criteria.md +71 -0
  52. package/skills/agent-self-evaluation/references/hook-integration.md +64 -0
  53. package/skills/agent-sort/SKILL.md +216 -0
  54. package/skills/agentic-engineering/SKILL.md +64 -0
  55. package/skills/agentic-os/SKILL.md +388 -0
  56. package/skills/ai-first-engineering/SKILL.md +52 -0
  57. package/skills/ai-regression-testing/SKILL.md +386 -0
  58. package/skills/android-clean-architecture/SKILL.md +340 -0
  59. package/skills/angular-developer/SKILL.md +155 -0
  60. package/skills/angular-developer/references/angular-animations.md +160 -0
  61. package/skills/angular-developer/references/angular-aria.md +410 -0
  62. package/skills/angular-developer/references/cli.md +86 -0
  63. package/skills/angular-developer/references/component-harnesses.md +59 -0
  64. package/skills/angular-developer/references/component-styling.md +91 -0
  65. package/skills/angular-developer/references/components.md +117 -0
  66. package/skills/angular-developer/references/creating-services.md +97 -0
  67. package/skills/angular-developer/references/data-resolvers.md +69 -0
  68. package/skills/angular-developer/references/define-routes.md +67 -0
  69. package/skills/angular-developer/references/defining-providers.md +72 -0
  70. package/skills/angular-developer/references/di-fundamentals.md +120 -0
  71. package/skills/angular-developer/references/e2e-testing.md +56 -0
  72. package/skills/angular-developer/references/effects.md +83 -0
  73. package/skills/angular-developer/references/hierarchical-injectors.md +43 -0
  74. package/skills/angular-developer/references/host-elements.md +80 -0
  75. package/skills/angular-developer/references/injection-context.md +63 -0
  76. package/skills/angular-developer/references/inputs.md +101 -0
  77. package/skills/angular-developer/references/linked-signal.md +59 -0
  78. package/skills/angular-developer/references/loading-strategies.md +61 -0
  79. package/skills/angular-developer/references/mcp.md +108 -0
  80. package/skills/angular-developer/references/navigate-to-routes.md +69 -0
  81. package/skills/angular-developer/references/outputs.md +86 -0
  82. package/skills/angular-developer/references/reactive-forms.md +122 -0
  83. package/skills/angular-developer/references/rendering-strategies.md +44 -0
  84. package/skills/angular-developer/references/resource.md +77 -0
  85. package/skills/angular-developer/references/route-animations.md +56 -0
  86. package/skills/angular-developer/references/route-guards.md +52 -0
  87. package/skills/angular-developer/references/router-lifecycle.md +45 -0
  88. package/skills/angular-developer/references/router-testing.md +87 -0
  89. package/skills/angular-developer/references/show-routes-with-outlets.md +68 -0
  90. package/skills/angular-developer/references/signal-forms.md +795 -0
  91. package/skills/angular-developer/references/signals-overview.md +94 -0
  92. package/skills/angular-developer/references/tailwind-css.md +69 -0
  93. package/skills/angular-developer/references/template-driven-forms.md +114 -0
  94. package/skills/angular-developer/references/testing-fundamentals.md +65 -0
  95. package/skills/api-connector-builder/SKILL.md +121 -0
  96. package/skills/api-design/SKILL.md +524 -0
  97. package/skills/architecture-decision-records/SKILL.md +180 -0
  98. package/skills/article-writing/SKILL.md +80 -0
  99. package/skills/automation-audit-ops/SKILL.md +143 -0
  100. package/skills/autonomous-agent-harness/SKILL.md +274 -0
  101. package/skills/autonomous-loops/SKILL.md +611 -0
  102. package/skills/backend-patterns/SKILL.md +562 -0
  103. package/skills/benchmark/SKILL.md +95 -0
  104. package/skills/benchmark-methodology/SKILL.md +191 -0
  105. package/skills/benchmark-optimization-loop/SKILL.md +71 -0
  106. package/skills/blender-motion-state-inspection/SKILL.md +165 -0
  107. package/skills/blueprint/SKILL.md +106 -0
  108. package/skills/brand-discovery/SKILL.md +145 -0
  109. package/skills/brand-discovery/references/10_purpose-why.md +40 -0
  110. package/skills/brand-discovery/references/20_positioning.md +44 -0
  111. package/skills/brand-discovery/references/30_audience-niche.md +52 -0
  112. package/skills/brand-discovery/references/40_personality-archetype.md +57 -0
  113. package/skills/brand-discovery/references/50_voice-tone.md +59 -0
  114. package/skills/brand-discovery/references/60_narrative-story.md +50 -0
  115. package/skills/brand-discovery/references/70_founder-tension.md +49 -0
  116. package/skills/brand-discovery/references/90_SYNTHESIS.md +133 -0
  117. package/skills/brand-voice/SKILL.md +98 -0
  118. package/skills/brand-voice/references/voice-profile-schema.md +55 -0
  119. package/skills/browser-qa/SKILL.md +105 -0
  120. package/skills/bun-runtime/SKILL.md +85 -0
  121. package/skills/canary-watch/SKILL.md +108 -0
  122. package/skills/carrier-relationship-management/SKILL.md +212 -0
  123. package/skills/cisco-ios-patterns/SKILL.md +164 -0
  124. package/skills/ck/SKILL.md +148 -0
  125. package/skills/claude-devfleet/SKILL.md +112 -0
  126. package/skills/click-path-audit/SKILL.md +245 -0
  127. package/skills/clickhouse-io/SKILL.md +445 -0
  128. package/skills/code-tour/SKILL.md +254 -0
  129. package/skills/codebase-onboarding/SKILL.md +234 -0
  130. package/skills/codehealth-mcp/SKILL.md +167 -0
  131. package/skills/coding-standards/SKILL.md +551 -0
  132. package/skills/competitive-platform-analysis/SKILL.md +214 -0
  133. package/skills/competitive-report-structure/SKILL.md +162 -0
  134. package/skills/compose-multiplatform-patterns/SKILL.md +300 -0
  135. package/skills/config-gc/SKILL.md +120 -0
  136. package/skills/configure-ecc/SKILL.md +385 -0
  137. package/skills/connections-optimizer/SKILL.md +190 -0
  138. package/skills/content-engine/SKILL.md +132 -0
  139. package/skills/content-hash-cache-pattern/SKILL.md +162 -0
  140. package/skills/context-budget/SKILL.md +136 -0
  141. package/skills/continuous-agent-loop/SKILL.md +46 -0
  142. package/skills/continuous-learning/SKILL.md +132 -0
  143. package/skills/continuous-learning-v2/SKILL.md +361 -0
  144. package/skills/contract-first/SKILL.md +287 -0
  145. package/skills/cost-aware-llm-pipeline/SKILL.md +184 -0
  146. package/skills/cost-tracking/SKILL.md +97 -0
  147. package/skills/council/SKILL.md +204 -0
  148. package/skills/cpp-coding-standards/SKILL.md +724 -0
  149. package/skills/cpp-testing/SKILL.md +325 -0
  150. package/skills/crosspost/SKILL.md +112 -0
  151. package/skills/csharp-testing/SKILL.md +322 -0
  152. package/skills/customer-billing-ops/SKILL.md +141 -0
  153. package/skills/customs-trade-compliance/SKILL.md +263 -0
  154. package/skills/dart-flutter-patterns/SKILL.md +564 -0
  155. package/skills/dashboard-builder/SKILL.md +109 -0
  156. package/skills/data-scraper-agent/SKILL.md +765 -0
  157. package/skills/data-throughput-accelerator/SKILL.md +74 -0
  158. package/skills/database-migrations/SKILL.md +430 -0
  159. package/skills/deep-research/SKILL.md +160 -0
  160. package/skills/defi-amm-security/SKILL.md +167 -0
  161. package/skills/delivery-gate/SKILL.md +126 -0
  162. package/skills/deployment-patterns/SKILL.md +428 -0
  163. package/skills/design-system/SKILL.md +83 -0
  164. package/skills/django-celery/SKILL.md +458 -0
  165. package/skills/django-patterns/SKILL.md +735 -0
  166. package/skills/django-security/SKILL.md +644 -0
  167. package/skills/django-tdd/SKILL.md +730 -0
  168. package/skills/django-verification/SKILL.md +470 -0
  169. package/skills/dmux-workflows/SKILL.md +192 -0
  170. package/skills/docker-patterns/SKILL.md +365 -0
  171. package/skills/documentation-lookup/SKILL.md +91 -0
  172. package/skills/dotnet-patterns/SKILL.md +322 -0
  173. package/skills/dynamic-workflow-mode/SKILL.md +124 -0
  174. package/skills/e2e-testing/SKILL.md +327 -0
  175. package/skills/ecc-guide/SKILL.md +190 -0
  176. package/skills/ecc-recipes/SKILL.md +149 -0
  177. package/skills/ecc-tools-cost-audit/SKILL.md +161 -0
  178. package/skills/email-ops/SKILL.md +122 -0
  179. package/skills/energy-procurement/SKILL.md +228 -0
  180. package/skills/enterprise-agent-ops/SKILL.md +51 -0
  181. package/skills/error-handling/SKILL.md +377 -0
  182. package/skills/eval-harness/SKILL.md +271 -0
  183. package/skills/evm-token-decimals/SKILL.md +131 -0
  184. package/skills/exa-search/SKILL.md +108 -0
  185. package/skills/fal-ai-media/SKILL.md +289 -0
  186. package/skills/fastapi-patterns/SKILL.md +514 -0
  187. package/skills/finance-billing-ops/SKILL.md +128 -0
  188. package/skills/flox-environments/SKILL.md +497 -0
  189. package/skills/flutter-dart-code-review/SKILL.md +436 -0
  190. package/skills/foundation-models-on-device/SKILL.md +243 -0
  191. package/skills/frontend-a11y/SKILL.md +446 -0
  192. package/skills/frontend-design-direction/SKILL.md +93 -0
  193. package/skills/frontend-patterns/SKILL.md +657 -0
  194. package/skills/frontend-slides/SKILL.md +185 -0
  195. package/skills/fsharp-testing/SKILL.md +281 -0
  196. package/skills/gan-style-harness/SKILL.md +279 -0
  197. package/skills/gateguard/SKILL.md +133 -0
  198. package/skills/generating-python-installer/SKILL.md +820 -0
  199. package/skills/git-workflow/SKILL.md +716 -0
  200. package/skills/github-ops/SKILL.md +145 -0
  201. package/skills/golang-patterns/SKILL.md +676 -0
  202. package/skills/golang-testing/SKILL.md +721 -0
  203. package/skills/google-workspace-ops/SKILL.md +96 -0
  204. package/skills/growth-log/SKILL.md +128 -0
  205. package/skills/healthcare-cdss-patterns/SKILL.md +246 -0
  206. package/skills/healthcare-emr-patterns/SKILL.md +160 -0
  207. package/skills/healthcare-eval-harness/SKILL.md +208 -0
  208. package/skills/healthcare-phi-compliance/SKILL.md +146 -0
  209. package/skills/hermes-imports/SKILL.md +89 -0
  210. package/skills/hexagonal-architecture/SKILL.md +277 -0
  211. package/skills/hipaa-compliance/SKILL.md +79 -0
  212. package/skills/homelab-network-readiness/SKILL.md +170 -0
  213. package/skills/homelab-network-setup/SKILL.md +130 -0
  214. package/skills/homelab-pihole-dns/SKILL.md +275 -0
  215. package/skills/homelab-vlan-segmentation/SKILL.md +312 -0
  216. package/skills/homelab-wireguard-vpn/SKILL.md +306 -0
  217. package/skills/hookify-rules/SKILL.md +128 -0
  218. package/skills/inherit-legacy-style/SKILL.md +157 -0
  219. package/skills/intent-driven-development/SKILL.md +360 -0
  220. package/skills/inventory-demand-planning/SKILL.md +247 -0
  221. package/skills/investor-materials/SKILL.md +97 -0
  222. package/skills/investor-outreach/SKILL.md +92 -0
  223. package/skills/ios-icon-gen/SKILL.md +158 -0
  224. package/skills/iterative-retrieval/SKILL.md +212 -0
  225. package/skills/ito-basket-compare/SKILL.md +64 -0
  226. package/skills/ito-compute/SKILL.md +129 -0
  227. package/skills/ito-data-atlas-agent/SKILL.md +64 -0
  228. package/skills/ito-market-intelligence/SKILL.md +61 -0
  229. package/skills/ito-trade-planner/SKILL.md +68 -0
  230. package/skills/java-coding-standards/SKILL.md +384 -0
  231. package/skills/jira-integration/SKILL.md +303 -0
  232. package/skills/jpa-patterns/SKILL.md +152 -0
  233. package/skills/knowledge-ops/SKILL.md +155 -0
  234. package/skills/kotlin-coroutines-flows/SKILL.md +285 -0
  235. package/skills/kotlin-exposed-patterns/SKILL.md +720 -0
  236. package/skills/kotlin-ktor-patterns/SKILL.md +690 -0
  237. package/skills/kotlin-patterns/SKILL.md +712 -0
  238. package/skills/kotlin-testing/SKILL.md +825 -0
  239. package/skills/kubernetes-patterns/SKILL.md +756 -0
  240. package/skills/laravel-patterns/SKILL.md +416 -0
  241. package/skills/laravel-plugin-discovery/SKILL.md +230 -0
  242. package/skills/laravel-security/SKILL.md +948 -0
  243. package/skills/laravel-tdd/SKILL.md +675 -0
  244. package/skills/laravel-verification/SKILL.md +180 -0
  245. package/skills/latency-critical-systems/SKILL.md +75 -0
  246. package/skills/lead-intelligence/SKILL.md +322 -0
  247. package/skills/liquid-glass-design/SKILL.md +279 -0
  248. package/skills/llm-trading-agent-security/SKILL.md +147 -0
  249. package/skills/logistics-exception-management/SKILL.md +222 -0
  250. package/skills/loop-design-check/SKILL.md +143 -0
  251. package/skills/mailtrap-email-integration/SKILL.md +77 -0
  252. package/skills/make-interfaces-feel-better/SKILL.md +152 -0
  253. package/skills/manim-video/SKILL.md +90 -0
  254. package/skills/market-research/SKILL.md +76 -0
  255. package/skills/marketing-campaign/SKILL.md +114 -0
  256. package/skills/mcp-server-patterns/SKILL.md +70 -0
  257. package/skills/messages-ops/SKILL.md +105 -0
  258. package/skills/ml-adoption-playbook/SKILL.md +57 -0
  259. package/skills/mle-workflow/SKILL.md +348 -0
  260. package/skills/motion-advanced/SKILL.md +596 -0
  261. package/skills/motion-foundations/SKILL.md +299 -0
  262. package/skills/motion-patterns/SKILL.md +434 -0
  263. package/skills/motion-ui/SKILL.md +576 -0
  264. package/skills/mysql-patterns/SKILL.md +413 -0
  265. package/skills/nanoclaw-repl/SKILL.md +34 -0
  266. package/skills/nestjs-patterns/SKILL.md +231 -0
  267. package/skills/netmiko-ssh-automation/SKILL.md +174 -0
  268. package/skills/network-bgp-diagnostics/SKILL.md +168 -0
  269. package/skills/network-config-validation/SKILL.md +211 -0
  270. package/skills/network-interface-health/SKILL.md +153 -0
  271. package/skills/nextjs-turbopack/SKILL.md +58 -0
  272. package/skills/nodejs-keccak256/SKILL.md +103 -0
  273. package/skills/nutrient-document-processing/SKILL.md +168 -0
  274. package/skills/nuxt4-patterns/SKILL.md +101 -0
  275. package/skills/openclaw-persona-forge/SKILL.md +289 -0
  276. package/skills/openclaw-persona-forge/references/avatar-style.md +124 -0
  277. package/skills/openclaw-persona-forge/references/boundary-rules.md +53 -0
  278. package/skills/openclaw-persona-forge/references/error-handling.md +53 -0
  279. package/skills/openclaw-persona-forge/references/identity-tension.md +48 -0
  280. package/skills/openclaw-persona-forge/references/naming-system.md +39 -0
  281. package/skills/openclaw-persona-forge/references/output-template.md +166 -0
  282. package/skills/opensource-pipeline/SKILL.md +256 -0
  283. package/skills/orch-add-feature/SKILL.md +45 -0
  284. package/skills/orch-build-mvp/SKILL.md +49 -0
  285. package/skills/orch-change-feature/SKILL.md +43 -0
  286. package/skills/orch-fix-defect/SKILL.md +43 -0
  287. package/skills/orch-pipeline/SKILL.md +121 -0
  288. package/skills/orch-refine-code/SKILL.md +44 -0
  289. package/skills/parallel-execution-optimizer/SKILL.md +74 -0
  290. package/skills/perl-patterns/SKILL.md +505 -0
  291. package/skills/perl-security/SKILL.md +504 -0
  292. package/skills/perl-testing/SKILL.md +476 -0
  293. package/skills/plan-canvas/SKILL.md +153 -0
  294. package/skills/plan-orchestrate/SKILL.md +263 -0
  295. package/skills/plankton-code-quality/SKILL.md +237 -0
  296. package/skills/postgres-patterns/SKILL.md +148 -0
  297. package/skills/prediction-market-oracle-research/SKILL.md +64 -0
  298. package/skills/prediction-market-risk-review/SKILL.md +61 -0
  299. package/skills/premium-web-design/SKILL.md +154 -0
  300. package/skills/prisma-patterns/SKILL.md +401 -0
  301. package/skills/product-capability/SKILL.md +142 -0
  302. package/skills/product-lens/SKILL.md +93 -0
  303. package/skills/production-audit/SKILL.md +207 -0
  304. package/skills/production-scheduling/SKILL.md +238 -0
  305. package/skills/project-flow-ops/SKILL.md +112 -0
  306. package/skills/prompt-optimizer/SKILL.md +398 -0
  307. package/skills/python-patterns/SKILL.md +751 -0
  308. package/skills/python-testing/SKILL.md +817 -0
  309. package/skills/pytorch-patterns/SKILL.md +397 -0
  310. package/skills/quality-nonconformance/SKILL.md +260 -0
  311. package/skills/quarkus-patterns/SKILL.md +723 -0
  312. package/skills/quarkus-security/SKILL.md +468 -0
  313. package/skills/quarkus-tdd/SKILL.md +812 -0
  314. package/skills/quarkus-verification/SKILL.md +480 -0
  315. package/skills/ralphinho-rfc-pipeline/SKILL.md +68 -0
  316. package/skills/react-native-patterns/SKILL.md +326 -0
  317. package/skills/react-patterns/SKILL.md +342 -0
  318. package/skills/react-performance/SKILL.md +575 -0
  319. package/skills/react-testing/SKILL.md +424 -0
  320. package/skills/recsys-pipeline-architect/SKILL.md +115 -0
  321. package/skills/recursive-decision-ledger/SKILL.md +81 -0
  322. package/skills/redis-patterns/SKILL.md +404 -0
  323. package/skills/regex-vs-llm-structured-text/SKILL.md +221 -0
  324. package/skills/remotion-video-creation/SKILL.md +43 -0
  325. package/skills/repo-scan/SKILL.md +79 -0
  326. package/skills/research-ops/SKILL.md +113 -0
  327. package/skills/returns-reverse-logistics/SKILL.md +240 -0
  328. package/skills/rules-distill/SKILL.md +265 -0
  329. package/skills/rust-patterns/SKILL.md +500 -0
  330. package/skills/rust-testing/SKILL.md +501 -0
  331. package/skills/safety-guard/SKILL.md +76 -0
  332. package/skills/santa-method/SKILL.md +307 -0
  333. package/skills/scientific-db-pubmed-database/SKILL.md +176 -0
  334. package/skills/scientific-db-uspto-database/SKILL.md +178 -0
  335. package/skills/scientific-pkg-gget/SKILL.md +167 -0
  336. package/skills/scientific-thinking-literature-review/SKILL.md +193 -0
  337. package/skills/scientific-thinking-scholar-evaluation/SKILL.md +161 -0
  338. package/skills/search-first/SKILL.md +183 -0
  339. package/skills/security-bounty-hunter/SKILL.md +100 -0
  340. package/skills/security-review/SKILL.md +504 -0
  341. package/skills/security-scan/SKILL.md +166 -0
  342. package/skills/seo/SKILL.md +155 -0
  343. package/skills/skill-comply/SKILL.md +59 -0
  344. package/skills/skill-scout/SKILL.md +141 -0
  345. package/skills/skill-stocktake/SKILL.md +195 -0
  346. package/skills/social-graph-ranker/SKILL.md +155 -0
  347. package/skills/social-publisher/SKILL.md +130 -0
  348. package/skills/springboot-patterns/SKILL.md +315 -0
  349. package/skills/springboot-security/SKILL.md +273 -0
  350. package/skills/springboot-tdd/SKILL.md +159 -0
  351. package/skills/springboot-verification/SKILL.md +232 -0
  352. package/skills/strategic-compact/SKILL.md +142 -0
  353. package/skills/swift-actor-persistence/SKILL.md +144 -0
  354. package/skills/swift-concurrency-6-2/SKILL.md +216 -0
  355. package/skills/swift-protocol-di-testing/SKILL.md +191 -0
  356. package/skills/swiftui-patterns/SKILL.md +259 -0
  357. package/skills/taste/SKILL.md +264 -0
  358. package/skills/taste/references/genre-taxonomy.md +87 -0
  359. package/skills/tdd-workflow/SKILL.md +583 -0
  360. package/skills/team-agent-orchestration/SKILL.md +111 -0
  361. package/skills/team-builder/SKILL.md +169 -0
  362. package/skills/terminal-ops/SKILL.md +110 -0
  363. package/skills/tinystruct-patterns/SKILL.md +279 -0
  364. package/skills/tinystruct-patterns/references/architecture.md +90 -0
  365. package/skills/tinystruct-patterns/references/data-handling.md +60 -0
  366. package/skills/tinystruct-patterns/references/database.md +99 -0
  367. package/skills/tinystruct-patterns/references/routing.md +64 -0
  368. package/skills/tinystruct-patterns/references/system-usage.md +97 -0
  369. package/skills/tinystruct-patterns/references/testing.md +72 -0
  370. package/skills/token-budget-advisor/SKILL.md +134 -0
  371. package/skills/ui-demo/SKILL.md +466 -0
  372. package/skills/ui-to-vue/SKILL.md +135 -0
  373. package/skills/uncloud/SKILL.md +344 -0
  374. package/skills/unified-memory/SKILL.md +170 -0
  375. package/skills/unified-notifications-ops/SKILL.md +188 -0
  376. package/skills/verification-loop/SKILL.md +129 -0
  377. package/skills/video-editing/SKILL.md +311 -0
  378. package/skills/videodb/SKILL.md +375 -0
  379. package/skills/visa-doc-translate/SKILL.md +117 -0
  380. package/skills/vite-patterns/SKILL.md +450 -0
  381. package/skills/vue-patterns/SKILL.md +471 -0
  382. package/skills/windows-desktop-e2e/SKILL.md +888 -0
  383. package/skills/workspace-surface-audit/SKILL.md +126 -0
  384. package/skills/x-api/SKILL.md +235 -0
@@ -0,0 +1,64 @@
1
+ ---
2
+ name: prediction-market-oracle-research
3
+ description: Research prediction markets as data sources or oracle signals for products, agents, dashboards, and corporate decision intelligence. Use for source-grounded analysis of market-implied probabilities, caveats, and integration patterns without investment advice.
4
+ metadata:
5
+ origin: ECC
6
+ ---
7
+
8
+ # Prediction Market Oracle Research
9
+
10
+ Use this skill when prediction markets are being considered as a data source,
11
+ forecasting input, oracle-like signal, or decision-intelligence layer.
12
+
13
+ ## Guardrails
14
+
15
+ - Do not treat market prices as objective truth.
16
+ - Do not provide investment advice or trading recommendations.
17
+ - Separate venue mechanics, liquidity, incentives, and resolution rules from the
18
+ implied signal.
19
+ - Call out manipulation, thin liquidity, stale markets, and ambiguous outcomes.
20
+ - For on-chain or execution-linked systems, run `llm-trading-agent-security`
21
+ before granting any write authority.
22
+
23
+ ## Research Workflow
24
+
25
+ 1. Define the decision the signal is meant to inform.
26
+ 2. Find relevant markets, events, tags, and venues.
27
+ 3. Record market-implied probabilities with timestamps and source links.
28
+ 4. Evaluate signal quality:
29
+ - liquidity
30
+ - spread
31
+ - market age
32
+ - trader/incentive concentration if known
33
+ - resolution authority
34
+ - geography or account restrictions
35
+ 5. Compare against non-market sources such as filings, news, polls, research,
36
+ customer data, or internal KPIs.
37
+ 6. Recommend whether the signal is usable, weak, or unsuitable for the stated
38
+ decision.
39
+
40
+ ## Integration Patterns
41
+
42
+ - Research assistant: source-grounded context for a human analyst.
43
+ - Dashboard signal: market-implied probability alongside internal metrics.
44
+ - Agent memory input: a time-stamped signal that can be retrieved later.
45
+ - Alerting input: notify when probabilities, spreads, or liquidity cross a
46
+ threshold.
47
+ - Scenario planning: compare multiple event outcomes without automating trades.
48
+
49
+ ## Output Contract
50
+
51
+ Use:
52
+
53
+ 1. decision context
54
+ 2. market sources
55
+ 3. signal quality
56
+ 4. comparison sources
57
+ 5. integration recommendation
58
+ 6. caveats
59
+
60
+ End with:
61
+
62
+ ```text
63
+ Prediction-market signals are informational inputs, not investment advice.
64
+ ```
@@ -0,0 +1,61 @@
1
+ ---
2
+ name: prediction-market-risk-review
3
+ description: Review prediction-market, basket, oracle, and trading-agent workflows for compliance, safety, data-quality, privacy, and execution risk. Use before any workflow handles venue auth, user portfolio data, API keys, or trade planning.
4
+ metadata:
5
+ origin: ECC
6
+ ---
7
+
8
+ # Prediction Market Risk Review
9
+
10
+ Use this skill before a prediction-market workflow touches user financial
11
+ context, venue authentication, portfolio data, automation, or execution-capable
12
+ tools.
13
+
14
+ ## Review Gates
15
+
16
+ ### Advice Boundary
17
+
18
+ - Confirm the output is informational.
19
+ - Remove buy/sell/hold/size recommendations.
20
+ - Keep manual user decision points explicit.
21
+
22
+ ### Venue And Regulatory Boundary
23
+
24
+ - Identify venue terms, geography restrictions, account limits, and API rules.
25
+ - Flag betting, derivatives, securities, or commodities ambiguity for legal
26
+ review when relevant.
27
+ - Do not bypass venue restrictions or rate limits.
28
+
29
+ ### Data Quality
30
+
31
+ - Check market liquidity, spread, resolution rules, stale prices, and source
32
+ timestamps.
33
+ - Separate public venue data from Itô gated data.
34
+ - Do not mix public and private sources without labels.
35
+
36
+ ### Security
37
+
38
+ - Do not request or store private keys, seed phrases, or passwords.
39
+ - Keep `ITO_API_KEY` and venue API keys out of logs and docs.
40
+ - Use read-only scopes by default.
41
+ - Require circuit breakers, spend limits, dry runs, and human approval before
42
+ any private implementation adds execution.
43
+
44
+ ### Privacy
45
+
46
+ - Minimize user portfolio, financial, and knowledge-base data.
47
+ - Redact private sources in public artifacts.
48
+ - Preserve only the fields needed for the review.
49
+
50
+ ## Output Contract
51
+
52
+ Return:
53
+
54
+ 1. scope reviewed
55
+ 2. pass/warn/fail findings
56
+ 3. blocked actions
57
+ 4. required mitigations
58
+ 5. safe next step
59
+
60
+ If any execution-capable step is requested, require a separate implementation
61
+ plan and explicit user approval.
@@ -0,0 +1,154 @@
1
+ ---
2
+ name: premium-web-design
3
+ description: Codeply's default visual bar for any website, landing page, or UI it generates — vanilla HTML/CSS/JS techniques (type, color, depth, scroll-triggered motion, subtle 3D) that make even a trivial brief (a tea shop, a local plumber, a one-page portfolio) read as an expensive, art-directed build instead of a templated AI scaffold. Use for every "build me a website / page / landing site" request, no matter how small the business sounds — small brief is not license for a flat result.
4
+ metadata:
5
+ origin: codeply
6
+ ---
7
+
8
+ # Premium Web Design
9
+
10
+ The gap between "a website" and "a website that looks like it cost $10k" is not
11
+ more content. It is five things done deliberately instead of by default: type,
12
+ color, depth, motion, and restraint. This skill is the checklist that turns a
13
+ plain-HTML brief — a tea shop, a barber, a two-person agency — into something
14
+ that reads as art-directed. Apply it **even when the user's request is one
15
+ sentence and sounds trivial.** The size of the brief is not license for a flat
16
+ result; a tea shop site gets the same craft pass as a SaaS landing page.
17
+
18
+ ## When to Use
19
+
20
+ Any time you are about to write or restyle HTML/CSS for a page a human will
21
+ look at: landing pages, marketing sites, portfolios, small-business sites,
22
+ dashboards, docs, artifacts. If the deliverable renders in a browser and has
23
+ no explicit "keep it minimal/utilitarian" instruction from the user, this
24
+ skill applies by default — do not wait to be asked for "premium" or
25
+ "animated."
26
+
27
+ ## The Five Levers
28
+
29
+ ### 1. Type — pick a pairing, not a default
30
+
31
+ Never ship `system-ui` / Arial as the whole identity. Pick ONE deliberate
32
+ pairing and commit:
33
+ - Editorial: a serif display (Fraunces, Playfair Display, Instrument Serif) +
34
+ a clean grotesk body (Inter, General Sans, Geist).
35
+ - Technical/modern: one variable grotesk (Inter, Geist, Söhne-alike) at two
36
+ weights, huge size contrast between hero and body.
37
+ - Warm/local business (cafés, shops, studios): a humanist serif or friendly
38
+ display headline + a quiet sans body — avoid corporate SaaS grotesk here,
39
+ it reads generic for a tea shop.
40
+
41
+ Rules: headline sizes should feel oversized relative to instinct (clamp with
42
+ `clamp(2.5rem, 6vw, 5.5rem)`), line-height tight on display type (1.0–1.1),
43
+ loose on body (1.5–1.7), and letter-spacing slightly negative on large type
44
+ (`-0.02em` to `-0.04em`). Import via `@font-face`/Google Fonts `<link>` —
45
+ never leave it at the browser default.
46
+
47
+ ### 2. Color — a system, not a palette guess
48
+
49
+ Ban: purple-to-blue gradient hero, pure `#000`/`#fff` with a single accent
50
+ blue, "AI slop" default (indigo #6366f1 / violet #8b5cf6 on white cards).
51
+ Instead build a small token system from the domain:
52
+ - 1 base neutral (often warm, not pure gray — `#f7f4ee`, `#111014`)
53
+ - 1 ink color for text (rarely pure black — try a near-black with a hue lean)
54
+ - 1–2 brand colors pulled from the actual subject (a tea shop: terracotta,
55
+ moss, cream, not tech-blue)
56
+ - 1 accent used sparingly (links, one CTA, one highlight) — not on every card
57
+
58
+ Define them as CSS custom properties on `:root` and reuse everywhere; that
59
+ alone makes a page look designed instead of assembled.
60
+
61
+ ### 3. Depth — layered, not flat-card-grid
62
+
63
+ Avoid the default "grid of identical white cards with a drop-shadow" — it is
64
+ the single most recognizable AI-generated-site tell. Instead:
65
+ - Vary section backgrounds (alternate base/ink/tinted sections) so the page
66
+ has rhythm when you scroll, not one long white column.
67
+ - Use large background shapes, subtle grain/noise texture, or a soft radial
68
+ glow behind hero content instead of a flat solid fill.
69
+ - Layer real photography or generated imagery behind translucent panels
70
+ (`backdrop-filter: blur(16px)`, semi-opaque background) for a glass feel
71
+ where it fits the brand — skip it for utilitarian dashboards.
72
+ - Give the hero one asymmetric or oversized element (an oversized product
73
+ shot bleeding off-canvas, an angled image, a big pull-quote) instead of
74
+ centered text + centered image every time.
75
+
76
+ **Imagery must be on-topic, not just present.** A hero image is worse than no
77
+ image if it's unrelated to the subject — a beach photo on a tea brand's
78
+ "Our Heritage" section reads as more broken than a placeholder color block,
79
+ because it actively contradicts the copy next to it. When fetching stock
80
+ imagery with `fetch_image`, use a keyword-searchable source
81
+ (`https://loremflickr.com/<w>/<h>/<keyword1>,<keyword2>`) and pick keywords
82
+ per-section from that section's actual subject — never a fully-random source
83
+ like picsum.photos on a themed site. A tea shop's hero gets `tea,leaves` or
84
+ `teapot,ceremony`, a product card for oolong gets `oolong,tea`, not one
85
+ generic keyword reused everywhere or no keyword at all. If no source can be
86
+ made reliably on-topic for a given spot (an odd or very specific subject),
87
+ prefer a solid-color/gradient placeholder panel over a wrong photo, and say
88
+ so to the user.
89
+
90
+ ### 4. Motion — scroll-triggered, physical, restrained
91
+
92
+ A static page reads cheap even with good type/color. Add motion with plain
93
+ CSS/JS (no framework required):
94
+
95
+ ```css
96
+ .reveal { opacity: 0; transform: translateY(24px); transition: opacity .7s cubic-bezier(.16,1,.3,1), transform .7s cubic-bezier(.16,1,.3,1); }
97
+ .reveal.is-visible { opacity: 1; transform: translateY(0); }
98
+ @media (prefers-reduced-motion: reduce) { .reveal { transition: none; opacity: 1; transform: none; } }
99
+ ```
100
+
101
+ ```js
102
+ const io = new IntersectionObserver((entries) => {
103
+ for (const e of entries) if (e.isIntersecting) e.target.classList.add('is-visible');
104
+ }, { threshold: 0.15 });
105
+ document.querySelectorAll('.reveal').forEach((el) => io.observe(el));
106
+ ```
107
+
108
+ Layer in: a subtle parallax on the hero image (`transform: translateY()`
109
+ tied to scroll position, small range like 20–40px), a hover tilt on cards
110
+ (`transform: perspective(800px) rotateX() rotateY()` from pointer position,
111
+ a cheap but convincing "3D" feel), and a smooth `scroll-behavior: smooth` for
112
+ anchor nav. Stagger reveal delays across siblings (`transition-delay` +
113
+ `nth-child`) instead of everything fading in at once — staggering is what
114
+ makes a section feel choreographed rather than triggered.
115
+
116
+ Always respect `prefers-reduced-motion`. Keep transitions 200–700ms;
117
+ snappy for hover/press, slower for scroll reveals.
118
+
119
+ ### 5. Restraint — the difference between premium and busy
120
+
121
+ - One hero move, one card-hover move, one scroll-reveal pattern — reused
122
+ consistently, not five different animation styles competing.
123
+ `frontend-design-direction` has the anti-pattern list (no cards-in-cards,
124
+ no gradient blobs, no vague hero copy) — use_skill it too on larger builds.
125
+ - Whitespace is a design choice, not leftover space: generous section
126
+ padding (`clamp(4rem, 10vw, 8rem)` vertical), generous gaps in grids.
127
+ Cramped sections are the second most common AI-slop tell after flat cards.
128
+ - Real, specific copy beats generic copy: name the actual product (single-
129
+ origin oolong, not "our amazing products"), and if there's no CMS/content
130
+ yet, write copy that sounds like this specific business, not a template.
131
+
132
+ ## Quick Pre-Ship Checklist
133
+
134
+ - Is there a real font pairing, or did I leave system defaults?
135
+ - Is the palette pulled from the subject, or is it default-AI indigo/violet?
136
+ - Does the hero have one asymmetric/oversized visual idea, or is everything
137
+ centered and evenly sized?
138
+ - Does anything move on scroll or hover, or is the page fully static?
139
+ - Are sections visually differentiated (background/rhythm), or one flat
140
+ white column of same-size cards?
141
+ - Would this specific business (a tea shop, not "a company") recognize
142
+ itself in the copy and color choices?
143
+
144
+ If any answer is "no," the build is not done — go back and apply the lever
145
+ before calling it finished.
146
+
147
+ ## Related Skills
148
+
149
+ - `frontend-design-direction` — direction-setting discipline (purpose,
150
+ audience, tone, anti-patterns) for larger or more product-y builds.
151
+ - `motion-ui`, `motion-foundations`, `motion-patterns` — deeper motion system
152
+ for React/Next.js projects specifically (this skill's motion section is the
153
+ framework-free equivalent for plain HTML/CSS/JS builds).
154
+ - `frontend-a11y` — accessibility pass once the visual direction is set.
@@ -0,0 +1,401 @@
1
+ ---
2
+ name: prisma-patterns
3
+ description: Prisma ORM patterns for TypeScript backends — schema design, query optimization, transactions, pagination, and critical traps like updateMany returning count not records, $transaction timeouts, migrate dev resetting the DB, @updatedAt skipped on bulk writes, and serverless connection exhaustion.
4
+ metadata:
5
+ origin: ECC
6
+ ---
7
+
8
+ # Prisma Patterns
9
+
10
+ Production patterns and non-obvious traps for Prisma ORM in TypeScript backends.
11
+
12
+ > **Check your version before applying patterns.** The Prisma API surface has evolved across major releases:
13
+ >
14
+ > ```bash
15
+ > npx prisma --version
16
+ > ```
17
+ >
18
+ > Notable API differences across versions:
19
+ > - `relationJoins` can load relations via JOIN rather than separate queries, but may cause row explosion on large 1:N relations or deep `include` — benchmark both approaches
20
+ > - `omit` field modifier and `prisma.$extends` Client Extensions API were added
21
+ > - **Newer installs**: the package may be named `prisma` instead of `@prisma/client`; `PrismaClient` may require a driver adapter (e.g. `@prisma/adapter-pg`); `datasource.url` may live in `prisma.config.ts` instead of `schema.prisma`
22
+ > - CLI commands (`migrate dev`, `migrate deploy`, `generate`) are unchanged across versions
23
+
24
+ ## When to Activate
25
+
26
+ - Designing or modifying Prisma schema models and relations
27
+ - Writing queries, transactions, or pagination logic
28
+ - Using `updateMany`, `deleteMany`, or any bulk operation
29
+ - Running or planning database migrations
30
+ - Deploying to serverless environments (Vercel, Lambda, Cloudflare Workers)
31
+ - Implementing soft delete or multi-tenant row filtering
32
+
33
+ ## Core Concepts
34
+
35
+ ### ID Strategy
36
+
37
+ | Strategy | Use When | Avoid When |
38
+ |---|---|---|
39
+ | `@default(cuid())` | Default choice — URL-safe, sortable, no collisions | Sequential IDs needed for external systems |
40
+ | `@default(uuid())` | Interoperability with non-Prisma systems required | High-write tables (random UUIDs fragment B-tree indexes) |
41
+ | `@default(autoincrement())` | Internal join tables, audit logs | Public-facing IDs (exposes record count) |
42
+
43
+ ### Schema Defaults
44
+
45
+ ```prisma
46
+ model User {
47
+ id String @id @default(cuid())
48
+ email String @unique // @unique already creates an index — no @@index needed
49
+ name String
50
+ role Role @default(USER)
51
+ posts Post[]
52
+ createdAt DateTime @default(now())
53
+ updatedAt DateTime @updatedAt
54
+ deletedAt DateTime?
55
+
56
+ @@index([createdAt])
57
+ @@index([deletedAt, createdAt]) // composite for soft-delete + sort queries
58
+ }
59
+ ```
60
+
61
+ - Add `@@index` on every foreign key and column used in `WHERE` or `ORDER BY`.
62
+ - Declare `deletedAt DateTime?` upfront when soft delete is a foreseeable requirement — adding it later requires a migration on a live table.
63
+ - `updatedAt @updatedAt` is set automatically by Prisma on `update` and `upsert` only (see Anti-Patterns for bulk update trap).
64
+
65
+ ### `include` vs `select`
66
+
67
+ | | `include` | `select` |
68
+ |---|---|---|
69
+ | Returns | All scalar fields + specified relations | Only specified fields |
70
+ | Use when | You need most fields plus a relation | Hot paths, large tables, avoiding over-fetch |
71
+ | Performance | May over-fetch on wide tables | Minimal payload, faster on large datasets |
72
+ | Prisma 5 note | Uses JOIN by default (`relationJoins`) | Same |
73
+
74
+ ```ts
75
+ // include — all columns + relation
76
+ const user = await prisma.user.findUnique({
77
+ where: { id },
78
+ include: { posts: { select: { id: true, title: true } } },
79
+ });
80
+
81
+ // select — explicit allowlist
82
+ const user = await prisma.user.findUnique({
83
+ where: { id },
84
+ select: { id: true, email: true, name: true },
85
+ });
86
+ ```
87
+
88
+ Never return raw Prisma entities from API responses — map to response DTOs to control exposed fields:
89
+
90
+ ```ts
91
+ // BAD: leaks passwordHash, deletedAt, internal fields
92
+ return await prisma.user.findUniqueOrThrow({ where: { id } });
93
+
94
+ // GOOD: explicit DTO mapping
95
+ const user = await prisma.user.findUniqueOrThrow({ where: { id } });
96
+ return { id: user.id, name: user.name, email: user.email };
97
+ ```
98
+
99
+ ### Transaction Form Selection
100
+
101
+ | Situation | Use |
102
+ |---|---|
103
+ | Independent operations, no inter-dependency | Array form |
104
+ | Later step depends on earlier result | Interactive form |
105
+ | External calls (email, HTTP) involved | Outside transaction entirely |
106
+
107
+ ```ts
108
+ // Array form — batched in one round trip
109
+ const [user, post] = await prisma.$transaction([
110
+ prisma.user.update({ where: { id }, data: { name } }),
111
+ prisma.post.create({ data: { title, authorId: id } }),
112
+ ]);
113
+
114
+ // Interactive form — use tx client only, never the outer prisma client
115
+ const post = await prisma.$transaction(async (tx) => {
116
+ const user = await tx.user.findUniqueOrThrow({ where: { id } });
117
+ if (user.role !== 'ADMIN') throw new Error('Forbidden');
118
+ return tx.post.create({ data: { title, authorId: user.id } });
119
+ });
120
+ ```
121
+
122
+ ### PrismaClient Singleton
123
+
124
+ Each `PrismaClient` instance opens its own connection pool. Instantiate once.
125
+
126
+ ```ts
127
+ // lib/prisma.ts
128
+
129
+ // Option A — adapter-based initialization (required by newer Prisma installs)
130
+ import { PrismaClient } from '@prisma/client'; // or the generated client path for your setup
131
+ import { PrismaPg } from '@prisma/adapter-pg';
132
+
133
+ function createPrismaClient() {
134
+ const adapter = new PrismaPg({
135
+ connectionString: process.env.DATABASE_URL!,
136
+ });
137
+ return new PrismaClient({
138
+ adapter,
139
+ log: process.env.NODE_ENV === 'development' ? ['query', 'error'] : ['error'],
140
+ });
141
+ }
142
+
143
+ const globalForPrisma = globalThis as unknown as { prisma?: PrismaClient };
144
+
145
+ export const prisma = globalForPrisma.prisma ?? createPrismaClient();
146
+
147
+ if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma;
148
+
149
+ // Option B — direct initialization (older installs, no adapter needed)
150
+ // import { PrismaClient } from '@prisma/client';
151
+ // export const prisma = globalForPrisma.prisma ?? new PrismaClient({ ... });
152
+ ```
153
+
154
+ Use Option A if your Prisma install requires an `adapter` argument in the `PrismaClient` constructor.
155
+ Use Option B if `new PrismaClient()` works without arguments. Let the compiler tell you which is correct.
156
+
157
+ The `globalThis` pattern prevents duplicate instances during hot reload (Next.js, nodemon, ts-node-dev).
158
+
159
+ ### N+1 Problem
160
+
161
+ Loading relations inside a loop issues one query per row.
162
+
163
+ ```ts
164
+ // BAD: N+1 — one extra query per user
165
+ const users = await prisma.user.findMany();
166
+ for (const user of users) {
167
+ const posts = await prisma.post.findMany({ where: { authorId: user.id } });
168
+ }
169
+
170
+ // GOOD: single query
171
+ const users = await prisma.user.findMany({ include: { posts: true } });
172
+ ```
173
+
174
+ With Prisma 5+ `relationJoins`, the `include` form uses a single JOIN. On large 1:N sets this may increase result set size — benchmark both approaches if the relation can return many rows per parent.
175
+
176
+ ## Code Examples
177
+
178
+ ### Cursor Pagination (preferred for feeds and large datasets)
179
+
180
+ ```ts
181
+ async function getPosts(cursor?: string, limit = 20) {
182
+ const items = await prisma.post.findMany({
183
+ where: { published: true },
184
+ orderBy: [
185
+ { createdAt: 'desc' },
186
+ { id: 'desc' }, // secondary sort prevents unstable pagination on duplicate timestamps
187
+ ],
188
+ take: limit + 1,
189
+ ...(cursor && { cursor: { id: cursor }, skip: 1 }),
190
+ });
191
+
192
+ const hasNextPage = items.length > limit;
193
+ if (hasNextPage) items.pop();
194
+
195
+ return { items, nextCursor: hasNextPage ? items[items.length - 1].id : null };
196
+ }
197
+ ```
198
+
199
+ Fetch `limit + 1` and pop — canonical way to detect `hasNextPage` without an extra count query. Always include a unique field (e.g. `id`) as a secondary `orderBy` to prevent unstable pagination when multiple rows share the same timestamp. Use offset pagination only when users need to jump to arbitrary pages (admin tables).
200
+
201
+ ### Soft Delete
202
+
203
+ ```ts
204
+ // Always filter explicitly — do not rely on middleware (hides behavior, hard to debug)
205
+ const activeUsers = await prisma.user.findMany({ where: { deletedAt: null } });
206
+
207
+ await prisma.user.update({ where: { id }, data: { deletedAt: new Date() } });
208
+ await prisma.user.update({ where: { id }, data: { deletedAt: null } }); // restore
209
+ ```
210
+
211
+ ### Error Handling
212
+
213
+ ```ts
214
+ import { Prisma } from '@prisma/client'; // or the generated client path for your setup
215
+
216
+ try {
217
+ await prisma.user.create({ data: { email } });
218
+ } catch (e) {
219
+ if (e instanceof Prisma.PrismaClientKnownRequestError) {
220
+ if (e.code === 'P2002') throw new ConflictError('Email already exists');
221
+ if (e.code === 'P2025') throw new NotFoundError('Record not found');
222
+ if (e.code === 'P2003') throw new BadRequestError('Referenced record does not exist');
223
+ }
224
+ throw e;
225
+ }
226
+ ```
227
+
228
+ Common codes: `P2002` unique violation · `P2025` not found · `P2003` foreign key violation.
229
+
230
+ Catch at the service boundary and translate to domain errors. Never expose raw Prisma messages to API consumers.
231
+
232
+ ### Connection Pool — Serverless
233
+
234
+ Embed connection params directly in `DATABASE_URL` — string concatenation breaks if the URL already has query parameters (e.g. `?schema=public`):
235
+
236
+ ```bash
237
+ # .env — preferred: embed params in the URL
238
+ DATABASE_URL="postgresql://user:pass@host/db?connection_limit=1&pool_timeout=20"
239
+
240
+ # With an external pooler (PgBouncer, Supabase pooler)
241
+ DATABASE_URL="postgresql://user:pass@host/db?pgbouncer=true&connection_limit=1"
242
+ ```
243
+
244
+ ```ts
245
+ // Vercel, AWS Lambda, and similar serverless runtimes:
246
+ // cap pool to 1 per instance; connection_limit and pool_timeout controlled via DATABASE_URL
247
+
248
+ // Adapter-based setup (if your Prisma install requires an adapter):
249
+ import { PrismaClient } from '@prisma/client';
250
+ import { PrismaPg } from '@prisma/adapter-pg';
251
+
252
+ const prisma = new PrismaClient({
253
+ adapter: new PrismaPg({ connectionString: process.env.DATABASE_URL }),
254
+ });
255
+
256
+ // Direct setup (if your Prisma install does not require an adapter):
257
+ // const prisma = new PrismaClient();
258
+ ```
259
+
260
+ ## Anti-Patterns
261
+
262
+ ### `updateMany` returns a count, not records
263
+
264
+ ```ts
265
+ // BAD: result is { count: 2 } — users[0] is undefined
266
+ const users = await prisma.user.updateMany({ where: { role: 'GUEST' }, data: { role: 'USER' } });
267
+
268
+ // GOOD: capture IDs first, then update, then fetch only the affected rows
269
+ const targets = await prisma.user.findMany({
270
+ where: { role: 'GUEST' },
271
+ select: { id: true },
272
+ });
273
+ const ids = targets.map((u) => u.id);
274
+ await prisma.user.updateMany({ where: { id: { in: ids } }, data: { role: 'USER' } });
275
+ const updated = await prisma.user.findMany({ where: { id: { in: ids } } });
276
+ ```
277
+
278
+ Same applies to `deleteMany` — returns `{ count: n }`, never the deleted rows.
279
+
280
+ ### `$transaction` interactive form times out after 5 seconds
281
+
282
+ ```ts
283
+ // BAD: external call inside transaction exceeds 5s default → "Transaction already closed"
284
+ await prisma.$transaction(async (tx) => {
285
+ const user = await tx.user.findUniqueOrThrow({ where: { id } });
286
+ await sendWelcomeEmail(user.email); // external call
287
+ await tx.user.update({ where: { id }, data: { emailSent: true } });
288
+ });
289
+
290
+ // GOOD: external calls outside the transaction
291
+ const user = await prisma.user.findUniqueOrThrow({ where: { id } });
292
+ await sendWelcomeEmail(user.email);
293
+ await prisma.user.update({ where: { id }, data: { emailSent: true } });
294
+
295
+ // Only raise timeout when bulk processing genuinely needs it
296
+ await prisma.$transaction(async (tx) => { ... }, { timeout: 30_000 });
297
+ ```
298
+
299
+ ### `migrate dev` can reset the database
300
+
301
+ `migrate dev` detects schema drift and may prompt to reset the DB, dropping all data.
302
+
303
+ ```bash
304
+ # NEVER on shared dev, staging, or production
305
+ npx prisma migrate dev --name add_column
306
+
307
+ # Safe everywhere except local solo dev
308
+ npx prisma migrate deploy
309
+
310
+ # Check drift without applying
311
+ npx prisma migrate diff \
312
+ --from-migrations ./prisma/migrations \
313
+ --to-schema-datamodel ./prisma/schema.prisma \
314
+ --shadow-database-url "$SHADOW_DATABASE_URL"
315
+ ```
316
+
317
+ ### Manually editing a migration file breaks future deploys
318
+
319
+ Prisma checksums every migration file. Editing after apply causes `P3006 checksum mismatch` on every environment where the original already ran. Create a new migration instead.
320
+
321
+ ### Breaking schema changes require multi-step migration
322
+
323
+ Adding `NOT NULL` to an existing column or renaming a column in one migration will lock the table or drop data. Use expand-and-contract:
324
+
325
+ ```bash
326
+ # Step 1: create migration locally, then deploy
327
+ npx prisma migrate dev --name add_new_column # local only
328
+ npx prisma migrate deploy # staging / production
329
+ ```
330
+
331
+ ```ts
332
+ // Step 2: backfill data (run in a script or migration job, not in the shell)
333
+ await prisma.user.updateMany({ data: { newColumn: derivedValue } });
334
+ ```
335
+
336
+ ```bash
337
+ # Step 3: create the NOT NULL constraint migration locally, then deploy
338
+ npx prisma migrate dev --name make_new_column_required # local only
339
+ npx prisma migrate deploy # staging / production
340
+ ```
341
+
342
+ ### `@updatedAt` does not fire on `updateMany`
343
+
344
+ `@updatedAt` is set automatically only on `update` and `upsert`. Bulk writes leave it stale.
345
+
346
+ ```ts
347
+ // BAD: updatedAt stays at its old value
348
+ await prisma.post.updateMany({ where: { authorId }, data: { published: true } });
349
+
350
+ // GOOD
351
+ await prisma.post.updateMany({
352
+ where: { authorId },
353
+ data: { published: true, updatedAt: new Date() },
354
+ });
355
+ ```
356
+
357
+ ### Soft delete + `findUniqueOrThrow` leaks deleted records
358
+
359
+ `findUniqueOrThrow` throws `P2025` only when the row does not exist in the DB. Soft-deleted rows still exist and are returned without error.
360
+
361
+ `findUniqueOrThrow` requires a unique constraint field in `where` — adding `deletedAt: null` alongside `id` breaks the type because `{ id, deletedAt }` is not a compound unique constraint. Use `findFirstOrThrow` instead.
362
+
363
+ ```ts
364
+ // BAD: returns soft-deleted user
365
+ const user = await prisma.user.findUniqueOrThrow({ where: { id } });
366
+
367
+ // BAD: Prisma type error — { id, deletedAt } is not a unique constraint
368
+ const user = await prisma.user.findUniqueOrThrow({ where: { id, deletedAt: null } });
369
+
370
+ // GOOD: findFirstOrThrow supports arbitrary where conditions
371
+ const user = await prisma.user.findFirstOrThrow({ where: { id, deletedAt: null } });
372
+ ```
373
+
374
+ ### `deleteMany` without `where` deletes every row
375
+
376
+ ```ts
377
+ // BAD: silently wipes the table
378
+ await prisma.post.deleteMany();
379
+
380
+ // GOOD
381
+ await prisma.post.deleteMany({ where: { authorId: userId } });
382
+ ```
383
+
384
+ ## Best Practices
385
+
386
+ | Rule | Reason |
387
+ |---|---|
388
+ | `migrate deploy` in CI/CD, `migrate dev` only locally | `migrate dev` can reset the DB on drift |
389
+ | Map entities to response DTOs | Prevents leaking internal fields |
390
+ | Catch `PrismaClientKnownRequestError` at service boundary | Translate to domain errors |
391
+ | Prefer `*OrThrow` methods over manual null checks | Throws P2025 automatically; use `findFirstOrThrow` when filtering non-unique fields |
392
+ | `connection_limit=1` + external pooler in serverless | Prevents connection exhaustion |
393
+ | Always provide `where` on `deleteMany` | Prevents accidental table wipe |
394
+ | Set `updatedAt: new Date()` manually in `updateMany` | `@updatedAt` skips bulk writes |
395
+
396
+ ## Related Skills
397
+
398
+ - `nestjs-patterns` — NestJS service layer that integrates Prisma
399
+ - `postgres-patterns` — PostgreSQL-level indexing and connection tuning
400
+ - `database-migrations` — multi-step migration planning for production
401
+ - `backend-patterns` — general API and service layer design