@nextsparkjs/ai-workflow 0.1.0-beta.100

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 (272) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +115 -0
  3. package/claude/_docs/workflows-optimizations.md +359 -0
  4. package/claude/agents/api-tester.md +634 -0
  5. package/claude/agents/architecture-supervisor.md +1351 -0
  6. package/claude/agents/backend-developer.md +997 -0
  7. package/claude/agents/backend-validator.md +417 -0
  8. package/claude/agents/bdd-docs-writer.md +737 -0
  9. package/claude/agents/block-developer.md +677 -0
  10. package/claude/agents/code-reviewer.md +1432 -0
  11. package/claude/agents/db-developer.md +721 -0
  12. package/claude/agents/db-validator.md +407 -0
  13. package/claude/agents/demo-video-generator.md +493 -0
  14. package/claude/agents/documentation-writer.md +1268 -0
  15. package/claude/agents/frontend-developer.md +1234 -0
  16. package/claude/agents/frontend-validator.md +777 -0
  17. package/claude/agents/functional-validator.md +630 -0
  18. package/claude/agents/mock-analyst.md +387 -0
  19. package/claude/agents/product-manager.md +963 -0
  20. package/claude/agents/qa-automation.md +1762 -0
  21. package/claude/agents/release-manager.md +634 -0
  22. package/claude/agents/selectors-translator.md +262 -0
  23. package/claude/agents/unit-test-writer.md +785 -0
  24. package/claude/agents/visual-comparator.md +329 -0
  25. package/claude/agents/workflow-maintainer.md +352 -0
  26. package/claude/commands/do/README.md +88 -0
  27. package/claude/commands/do/create-api.md +64 -0
  28. package/claude/commands/do/create-entity.md +66 -0
  29. package/claude/commands/do/create-migration.md +64 -0
  30. package/claude/commands/do/create-plugin.md +56 -0
  31. package/claude/commands/do/create-theme.md +70 -0
  32. package/claude/commands/do/mock-data.md +67 -0
  33. package/claude/commands/do/reset-db.md +71 -0
  34. package/claude/commands/do/setup-scheduled-action.md +75 -0
  35. package/claude/commands/do/sync-code-review.md +117 -0
  36. package/claude/commands/do/update-selectors.md +112 -0
  37. package/claude/commands/do/use-skills.md +90 -0
  38. package/claude/commands/do/validate-blocks.md +69 -0
  39. package/claude/commands/how-to/README.md +261 -0
  40. package/claude/commands/how-to/add-metadata.md +692 -0
  41. package/claude/commands/how-to/add-taxonomies.md +806 -0
  42. package/claude/commands/how-to/add-translations.md +571 -0
  43. package/claude/commands/how-to/create-api.md +577 -0
  44. package/claude/commands/how-to/create-block.md +575 -0
  45. package/claude/commands/how-to/create-child-entities.md +771 -0
  46. package/claude/commands/how-to/create-entity.md +597 -0
  47. package/claude/commands/how-to/create-migrations.md +605 -0
  48. package/claude/commands/how-to/create-plugin.md +654 -0
  49. package/claude/commands/how-to/customize-app.md +481 -0
  50. package/claude/commands/how-to/customize-dashboard.md +553 -0
  51. package/claude/commands/how-to/customize-theme.md +438 -0
  52. package/claude/commands/how-to/define-features-flows.md +632 -0
  53. package/claude/commands/how-to/deploy.md +507 -0
  54. package/claude/commands/how-to/handle-file-uploads.md +746 -0
  55. package/claude/commands/how-to/implement-search.md +1001 -0
  56. package/claude/commands/how-to/install-plugins.md +352 -0
  57. package/claude/commands/how-to/manage-test-coverage.md +984 -0
  58. package/claude/commands/how-to/run-tests.md +400 -0
  59. package/claude/commands/how-to/set-app-languages.md +601 -0
  60. package/claude/commands/how-to/set-plans-and-permissions.md +575 -0
  61. package/claude/commands/how-to/set-scheduled-actions.md +527 -0
  62. package/claude/commands/how-to/set-user-roles-and-permissions.md +550 -0
  63. package/claude/commands/how-to/setup-authentication.md +388 -0
  64. package/claude/commands/how-to/setup-claude-code.md +440 -0
  65. package/claude/commands/how-to/setup-database.md +274 -0
  66. package/claude/commands/how-to/setup-email-providers.md +598 -0
  67. package/claude/commands/how-to/setup-mobile-dev.md +627 -0
  68. package/claude/commands/how-to/start.md +500 -0
  69. package/claude/commands/how-to/use-devtools.md +639 -0
  70. package/claude/commands/how-to/use-superadmin.md +622 -0
  71. package/claude/commands/session/README.md +193 -0
  72. package/claude/commands/session/block-create.md +190 -0
  73. package/claude/commands/session/block-list.md +203 -0
  74. package/claude/commands/session/block-update.md +192 -0
  75. package/claude/commands/session/block-validate.md +218 -0
  76. package/claude/commands/session/changelog.md +115 -0
  77. package/claude/commands/session/close.md +225 -0
  78. package/claude/commands/session/commit.md +174 -0
  79. package/claude/commands/session/db-entity.md +206 -0
  80. package/claude/commands/session/db-fix.md +212 -0
  81. package/claude/commands/session/db-sample.md +206 -0
  82. package/claude/commands/session/demo.md +178 -0
  83. package/claude/commands/session/doc-bdd.md +207 -0
  84. package/claude/commands/session/doc-feature.md +218 -0
  85. package/claude/commands/session/doc-read.md +225 -0
  86. package/claude/commands/session/execute.md +204 -0
  87. package/claude/commands/session/explain.md +202 -0
  88. package/claude/commands/session/fix-bug.md +210 -0
  89. package/claude/commands/session/fix-build.md +182 -0
  90. package/claude/commands/session/fix-test.md +189 -0
  91. package/claude/commands/session/pending.md +232 -0
  92. package/claude/commands/session/refine.md +188 -0
  93. package/claude/commands/session/resume.md +192 -0
  94. package/claude/commands/session/review.md +192 -0
  95. package/claude/commands/session/scope-change.md +181 -0
  96. package/claude/commands/session/start-blocks.md +347 -0
  97. package/claude/commands/session/start.md +604 -0
  98. package/claude/commands/session/status.md +169 -0
  99. package/claude/commands/session/test-fix.md +221 -0
  100. package/claude/commands/session/test-run.md +203 -0
  101. package/claude/commands/session/test-write.md +242 -0
  102. package/claude/commands/session/validate.md +162 -0
  103. package/claude/config/context.json +40 -0
  104. package/claude/config/github.json +69 -0
  105. package/claude/config/github.schema.json +106 -0
  106. package/claude/config/team.json +46 -0
  107. package/claude/config/team.schema.json +106 -0
  108. package/claude/config/workspace.json +43 -0
  109. package/claude/config/workspace.schema.json +75 -0
  110. package/claude/skills/README.md +228 -0
  111. package/claude/skills/accessibility/SKILL.md +573 -0
  112. package/claude/skills/api-bypass-layers/SKILL.md +550 -0
  113. package/claude/skills/asana-integration/SKILL.md +499 -0
  114. package/claude/skills/better-auth/SKILL.md +666 -0
  115. package/claude/skills/billing-subscriptions/SKILL.md +660 -0
  116. package/claude/skills/block-decision-matrix/SKILL.md +359 -0
  117. package/claude/skills/clickup-integration/SKILL.md +434 -0
  118. package/claude/skills/core-theme-responsibilities/SKILL.md +485 -0
  119. package/claude/skills/create-plugin/SKILL.md +425 -0
  120. package/claude/skills/create-theme/SKILL.md +331 -0
  121. package/claude/skills/cypress-api/SKILL.md +511 -0
  122. package/claude/skills/cypress-api/scripts/generate-api-controller.py +329 -0
  123. package/claude/skills/cypress-api/scripts/generate-api-test.py +930 -0
  124. package/claude/skills/cypress-e2e/SKILL.md +526 -0
  125. package/claude/skills/cypress-e2e/scripts/extract-selectors.py +383 -0
  126. package/claude/skills/cypress-e2e/scripts/generate-uat-test.py +788 -0
  127. package/claude/skills/cypress-selectors/SKILL.md +309 -0
  128. package/claude/skills/cypress-selectors/scripts/extract-missing.py +243 -0
  129. package/claude/skills/cypress-selectors/scripts/generate-block-selectors.py +283 -0
  130. package/claude/skills/cypress-selectors/scripts/validate-selectors.py +145 -0
  131. package/claude/skills/database-migrations/SKILL.md +335 -0
  132. package/claude/skills/database-migrations/scripts/generate-sample-data.py +284 -0
  133. package/claude/skills/database-migrations/scripts/validate-migration.py +323 -0
  134. package/claude/skills/design-system/SKILL.md +682 -0
  135. package/claude/skills/documentation/SKILL.md +540 -0
  136. package/claude/skills/entity-api/SKILL.md +482 -0
  137. package/claude/skills/entity-system/SKILL.md +635 -0
  138. package/claude/skills/entity-system/scripts/generate-child-migration.py +298 -0
  139. package/claude/skills/entity-system/scripts/generate-metas-migration.py +233 -0
  140. package/claude/skills/entity-system/scripts/generate-migration.py +382 -0
  141. package/claude/skills/entity-system/scripts/generate-sample-data.py +418 -0
  142. package/claude/skills/entity-system/scripts/scaffold-entity.py +661 -0
  143. package/claude/skills/github/SKILL.md +467 -0
  144. package/claude/skills/i18n-nextintl/SKILL.md +302 -0
  145. package/claude/skills/i18n-nextintl/scripts/add-translation.py +243 -0
  146. package/claude/skills/i18n-nextintl/scripts/extract-hardcoded.py +246 -0
  147. package/claude/skills/i18n-nextintl/scripts/validate-translations.py +260 -0
  148. package/claude/skills/impact-analysis/SKILL.md +203 -0
  149. package/claude/skills/jest-unit/SKILL.md +306 -0
  150. package/claude/skills/jest-unit/references/component-testing.md +371 -0
  151. package/claude/skills/jest-unit/references/mocking-patterns.md +380 -0
  152. package/claude/skills/jest-unit/references/service-hook-testing.md +454 -0
  153. package/claude/skills/jira-integration/SKILL.md +539 -0
  154. package/claude/skills/media-library/SKILL.md +743 -0
  155. package/claude/skills/mock-analysis/SKILL.md +276 -0
  156. package/claude/skills/monorepo-architecture/SKILL.md +162 -0
  157. package/claude/skills/nextjs-api-development/SKILL.md +364 -0
  158. package/claude/skills/nextjs-api-development/scripts/generate-crud-tests.py +456 -0
  159. package/claude/skills/nextjs-api-development/scripts/scaffold-endpoint.py +481 -0
  160. package/claude/skills/nextjs-api-development/scripts/validate-api.py +283 -0
  161. package/claude/skills/notion-integration/SKILL.md +641 -0
  162. package/claude/skills/npm-development-workflow/SKILL.md +480 -0
  163. package/claude/skills/page-builder-blocks/SKILL.md +530 -0
  164. package/claude/skills/page-builder-blocks/scripts/scaffold-block.py +444 -0
  165. package/claude/skills/permissions-system/SKILL.md +619 -0
  166. package/claude/skills/plugins/SKILL.md +340 -0
  167. package/claude/skills/plugins/references/plugin-templates.md +414 -0
  168. package/claude/skills/plugins/references/plugin-testing.md +353 -0
  169. package/claude/skills/plugins/references/plugin-types.md +198 -0
  170. package/claude/skills/plugins/scripts/scaffold-plugin.py +443 -0
  171. package/claude/skills/pom-patterns/SKILL.md +452 -0
  172. package/claude/skills/pom-patterns/scripts/generate-pom.py +392 -0
  173. package/claude/skills/rate-limiting/SKILL.md +342 -0
  174. package/claude/skills/react-best-practices/AGENTS.md +2410 -0
  175. package/claude/skills/react-best-practices/README.md +123 -0
  176. package/claude/skills/react-best-practices/SKILL.md +125 -0
  177. package/claude/skills/react-best-practices/metadata.json +15 -0
  178. package/claude/skills/react-best-practices/rules/_sections.md +46 -0
  179. package/claude/skills/react-best-practices/rules/_template.md +28 -0
  180. package/claude/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  181. package/claude/skills/react-best-practices/rules/advanced-use-latest.md +49 -0
  182. package/claude/skills/react-best-practices/rules/async-api-routes.md +38 -0
  183. package/claude/skills/react-best-practices/rules/async-defer-await.md +80 -0
  184. package/claude/skills/react-best-practices/rules/async-dependencies.md +36 -0
  185. package/claude/skills/react-best-practices/rules/async-parallel.md +28 -0
  186. package/claude/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  187. package/claude/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  188. package/claude/skills/react-best-practices/rules/bundle-conditional.md +31 -0
  189. package/claude/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  190. package/claude/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  191. package/claude/skills/react-best-practices/rules/bundle-preload.md +50 -0
  192. package/claude/skills/react-best-practices/rules/client-event-listeners.md +74 -0
  193. package/claude/skills/react-best-practices/rules/client-localstorage-schema.md +71 -0
  194. package/claude/skills/react-best-practices/rules/client-passive-event-listeners.md +48 -0
  195. package/claude/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
  196. package/claude/skills/react-best-practices/rules/js-batch-dom-css.md +82 -0
  197. package/claude/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
  198. package/claude/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
  199. package/claude/skills/react-best-practices/rules/js-cache-storage.md +70 -0
  200. package/claude/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
  201. package/claude/skills/react-best-practices/rules/js-early-exit.md +50 -0
  202. package/claude/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
  203. package/claude/skills/react-best-practices/rules/js-index-maps.md +37 -0
  204. package/claude/skills/react-best-practices/rules/js-length-check-first.md +49 -0
  205. package/claude/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
  206. package/claude/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
  207. package/claude/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  208. package/claude/skills/react-best-practices/rules/rendering-activity.md +26 -0
  209. package/claude/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  210. package/claude/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
  211. package/claude/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
  212. package/claude/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  213. package/claude/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  214. package/claude/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
  215. package/claude/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
  216. package/claude/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
  217. package/claude/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
  218. package/claude/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  219. package/claude/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  220. package/claude/skills/react-best-practices/rules/rerender-memo.md +44 -0
  221. package/claude/skills/react-best-practices/rules/rerender-transitions.md +40 -0
  222. package/claude/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
  223. package/claude/skills/react-best-practices/rules/server-cache-lru.md +41 -0
  224. package/claude/skills/react-best-practices/rules/server-cache-react.md +76 -0
  225. package/claude/skills/react-best-practices/rules/server-parallel-fetching.md +83 -0
  226. package/claude/skills/react-best-practices/rules/server-serialization.md +38 -0
  227. package/claude/skills/react-patterns/SKILL.md +688 -0
  228. package/claude/skills/registry-system/SKILL.md +331 -0
  229. package/claude/skills/scheduled-actions/SKILL.md +671 -0
  230. package/claude/skills/scope-enforcement/SKILL.md +542 -0
  231. package/claude/skills/scope-enforcement/scripts/validate-scope.py +357 -0
  232. package/claude/skills/server-actions/SKILL.md +493 -0
  233. package/claude/skills/service-layer/SKILL.md +587 -0
  234. package/claude/skills/session-management/SKILL.md +266 -0
  235. package/claude/skills/session-management/scripts/create-session.py +166 -0
  236. package/claude/skills/session-management/scripts/iteration-close.sh +105 -0
  237. package/claude/skills/session-management/scripts/iteration-init.sh +180 -0
  238. package/claude/skills/session-management/scripts/session-archive.sh +87 -0
  239. package/claude/skills/session-management/scripts/session-close.sh +133 -0
  240. package/claude/skills/session-management/scripts/session-init.sh +225 -0
  241. package/claude/skills/session-management/scripts/session-list.sh +163 -0
  242. package/claude/skills/session-management/scripts/split-plan.sh +116 -0
  243. package/claude/skills/shadcn-components/SKILL.md +586 -0
  244. package/claude/skills/shadcn-theming/SKILL.md +446 -0
  245. package/claude/skills/suspense-loading/SKILL.md +280 -0
  246. package/claude/skills/tailwind-theming/SKILL.md +507 -0
  247. package/claude/skills/tanstack-query/SKILL.md +608 -0
  248. package/claude/skills/test-coverage/SKILL.md +239 -0
  249. package/claude/skills/web-design-guidelines/SKILL.md +39 -0
  250. package/claude/skills/zod-validation/SKILL.md +537 -0
  251. package/claude/templates/blocks/progress.md +86 -0
  252. package/claude/templates/iteration/changes.md +61 -0
  253. package/claude/templates/iteration/progress.md +55 -0
  254. package/claude/templates/log.md +31 -0
  255. package/claude/templates/story/context.md +77 -0
  256. package/claude/templates/story/pendings.md +37 -0
  257. package/claude/templates/story/plan.md +299 -0
  258. package/claude/templates/story/requirements.md +109 -0
  259. package/claude/templates/story/scope.json +10 -0
  260. package/claude/templates/story/tests.md +91 -0
  261. package/claude/templates/task/progress.md +58 -0
  262. package/claude/templates/task/requirements.md +54 -0
  263. package/claude/workflows/README.md +154 -0
  264. package/claude/workflows/blocks.md +614 -0
  265. package/claude/workflows/story.md +1207 -0
  266. package/claude/workflows/task.md +927 -0
  267. package/claude/workflows/tweak.md +527 -0
  268. package/cursor/.gitkeep +0 -0
  269. package/package.json +35 -0
  270. package/scripts/postinstall.mjs +198 -0
  271. package/scripts/setup.mjs +282 -0
  272. package/scripts/sync.mjs +209 -0
@@ -0,0 +1,340 @@
1
+ ---
2
+ name: plugins
3
+ description: |
4
+ Plugin development system for this Next.js application.
5
+ Covers plugin structure, configuration, lifecycle hooks, registry integration, environment variables, and testing patterns.
6
+ CRITICAL: Includes MANDATORY dependency management rules for NPM distribution.
7
+ Use this skill when creating, modifying, or validating plugins.
8
+ allowed-tools: Read, Glob, Grep, Bash
9
+ version: 2.1.0
10
+ ---
11
+
12
+ # Plugins Skill
13
+
14
+ Patterns for developing plugins in this Next.js application.
15
+
16
+ ## Architecture Overview
17
+
18
+ ### Model B Distribution: Plugin Locations
19
+
20
+ | Context | Plugin Location | Reason |
21
+ |---------|-----------------|--------|
22
+ | **Monorepo** (development) | `plugins/<plugin-name>/` | Workspace package |
23
+ | **Consumer project** | `contents/plugins/<plugin-name>/` | Copied by CLI (not node_modules) |
24
+
25
+ > **CRITICAL**: NPM packages are for DISTRIBUTION. In consumer projects, code is COPIED to `/contents/plugins/`, NOT kept in `node_modules`.
26
+
27
+ ```
28
+ Plugin Structure (Monorepo):
29
+ plugins/
30
+ └── [plugin-name]/
31
+ ├── package.json # REQUIRED: peerDependencies
32
+ ├── plugin.config.ts # Plugin configuration (REQUIRED)
33
+ ├── README.md # Documentation (REQUIRED)
34
+ ├── .env.example # Environment template (REQUIRED)
35
+ ├── types/ # TypeScript definitions
36
+ ├── lib/ # Core logic
37
+ ├── hooks/ # React hooks
38
+ ├── components/ # React components
39
+ ├── providers/ # Context providers
40
+ ├── api/ # API endpoints
41
+ ├── entities/ # Plugin entities (optional)
42
+ └── docs/ # Documentation
43
+
44
+ Plugin Types: utility | service | configuration
45
+ → See references/plugin-types.md for detailed structures
46
+ ```
47
+
48
+ ---
49
+
50
+ ## MANDATORY: NPM Distribution & Dependency Management
51
+
52
+ ### Fundamental Principle
53
+
54
+ > **If `@nextsparkjs/core` has a dependency, plugins MUST declare it as `peerDependency`, NEVER as `dependency`.**
55
+
56
+ ### Why It's MANDATORY
57
+
58
+ ```
59
+ ❌ WRONG - Duplicate dependencies (FORBIDDEN):
60
+ ┌─────────────────────────────────────────────────┐
61
+ │ node_modules/ │
62
+ │ ├── @nextsparkjs/core/ │
63
+ │ │ └── node_modules/zod@4.1.5 ← Instance 1 │
64
+ │ ├── @nextsparkjs/plugin-ai/ │
65
+ │ │ └── node_modules/zod@4.1.5 ← Instance 2 │
66
+ │ └── @nextsparkjs/plugin-langchain/ │
67
+ │ └── node_modules/zod@3.23.0 ← Instance 3! │
68
+ └─────────────────────────────────────────────────┘
69
+ Result: Type conflicts, instanceof errors, bloated bundle
70
+
71
+ ✅ CORRECT - Single instance (MANDATORY):
72
+ ┌─────────────────────────────────────────────────┐
73
+ │ node_modules/ │
74
+ │ ├── zod@4.1.5 ← ONE single instance (hoisted) │
75
+ │ ├── @nextsparkjs/core/ (provides zod) │
76
+ │ ├── @nextsparkjs/plugin-ai/ (uses host's zod) │
77
+ │ └── @nextsparkjs/plugin-langchain/ (uses zod) │
78
+ └─────────────────────────────────────────────────┘
79
+ Result: No conflicts, optimized bundle
80
+ ```
81
+
82
+ ### Dependency Classification
83
+
84
+ | Category | Type | Examples |
85
+ |----------|------|----------|
86
+ | **Singleton libraries** | `peerDependencies` | zod, react, react-dom, next |
87
+ | **Shared with core** | `peerDependencies` | @tanstack/react-query, lucide-react |
88
+ | **Plugin-exclusive** | `dependencies` | @ai-sdk/*, @langchain/* |
89
+
90
+ ### Dependencies Core Provides (NEVER duplicate)
91
+
92
+ ```json
93
+ {
94
+ "zod": "^4.1.5",
95
+ "@tanstack/react-query": "^5.85.0",
96
+ "lucide-react": "^0.539.0",
97
+ "class-variance-authority": "^0.7.1",
98
+ "clsx": "^2.1.1",
99
+ "tailwind-merge": "^3.3.1",
100
+ "date-fns": "^4.1.0",
101
+ "react-hook-form": "^7.62.0",
102
+ "sonner": "^2.0.7",
103
+ "next-intl": "^4.3.4",
104
+ "better-auth": "^1.3.5"
105
+ }
106
+ ```
107
+
108
+ ### MANDATORY package.json Template
109
+
110
+ ```json
111
+ {
112
+ "name": "@nextsparkjs/plugin-NAME",
113
+ "version": "1.0.0",
114
+ "private": false,
115
+ "main": "./plugin.config.ts",
116
+ "dependencies": {
117
+ "@ai-sdk/anthropic": "^2.0.17" // ✅ Only THIS plugin uses it
118
+ },
119
+ "peerDependencies": {
120
+ "@nextsparkjs/core": "workspace:*",
121
+ "next": "^15.0.0",
122
+ "react": "^19.0.0",
123
+ "zod": "^4.0.0"
124
+ }
125
+ }
126
+ ```
127
+
128
+ ---
129
+
130
+ ## When to Use This Skill
131
+
132
+ - Creating new plugins
133
+ - Understanding plugin structure
134
+ - Implementing plugin lifecycle hooks
135
+ - Configuring plugin environment variables
136
+ - Integrating plugins with the registry
137
+
138
+ ---
139
+
140
+ ## Plugin Configuration (REQUIRED)
141
+
142
+ Every plugin MUST have a `plugin.config.ts` file:
143
+
144
+ ```typescript
145
+ import { z } from 'zod'
146
+ import type { PluginConfig } from '@/core/types/plugin'
147
+
148
+ const MyPluginConfigSchema = z.object({
149
+ apiKey: z.string().min(1),
150
+ timeout: z.number().min(1000).default(5000),
151
+ debugMode: z.boolean().default(false)
152
+ })
153
+
154
+ export const myPluginConfig: PluginConfig = {
155
+ name: 'my-plugin',
156
+ version: '1.0.0',
157
+ displayName: 'My Custom Plugin',
158
+ description: 'Clear description of plugin functionality',
159
+ enabled: true,
160
+ dependencies: [],
161
+
162
+ components: { MyComponent: undefined },
163
+ services: { useMyService: undefined },
164
+
165
+ hooks: {
166
+ async onLoad() { console.log('[My Plugin] Loading...') },
167
+ async onActivate() { console.log('[My Plugin] Activated') },
168
+ async onDeactivate() { console.log('[My Plugin] Deactivated') },
169
+ async onUnload() { console.log('[My Plugin] Unloaded') }
170
+ }
171
+ }
172
+
173
+ export default myPluginConfig
174
+ ```
175
+
176
+ ---
177
+
178
+ ## Environment Variables Pattern
179
+
180
+ ### ⭐ Centralized Plugin Env Loader (RECOMMENDED)
181
+
182
+ Use the core's centralized env-loader for automatic plugin `.env` loading:
183
+
184
+ ```typescript
185
+ // contents/plugins/my-plugin/lib/plugin-env.ts
186
+ import { getPluginEnv } from '@nextsparkjs/core/lib/plugins/env-loader'
187
+
188
+ const env = getPluginEnv('my-plugin')
189
+ const apiKey = env.MY_PLUGIN_API_KEY
190
+ const enabled = env.MY_PLUGIN_ENABLED === 'true'
191
+ ```
192
+
193
+ ### Priority System
194
+
195
+ 1. **Plugin `.env`** (`contents/plugins/my-plugin/.env`) - Highest priority
196
+ 2. **Root `.env`** (project root) - Fallback
197
+ 3. **Built-in defaults** - Lowest priority
198
+
199
+ ### Namespace-Based Architecture
200
+
201
+ **SHARED Variables (root `.env`):**
202
+ - `DATABASE_URL`, `BETTER_AUTH_SECRET`
203
+ - `ANTHROPIC_API_KEY`, `OPENAI_API_KEY` (can be shared across plugins)
204
+
205
+ **PLUGIN Variables (plugin `.env` with prefix):**
206
+ - All plugin-specific variables MUST use `MY_PLUGIN_*` namespace
207
+
208
+ ```bash
209
+ # contents/plugins/my-plugin/.env.example
210
+ # Plugin-specific configuration
211
+ MY_PLUGIN_ENABLED=true
212
+ MY_PLUGIN_DEBUG=false
213
+ MY_PLUGIN_API_KEY=your-api-key-here
214
+ MY_PLUGIN_TIMEOUT=5000
215
+ ```
216
+
217
+ ### Required Files
218
+
219
+ | File | Purpose |
220
+ |------|---------|
221
+ | `.env.example` | Template with all variables documented |
222
+ | `lib/plugin-env.ts` | Type-safe wrapper using core's env-loader |
223
+
224
+ ---
225
+
226
+ ## Plugin Registry Integration
227
+
228
+ ### Auto-Generated Registry
229
+
230
+ ```typescript
231
+ // core/lib/registries/plugin-registry.ts (AUTO-GENERATED)
232
+ export const PLUGIN_REGISTRY: Record<string, PluginRegistryEntry> = {
233
+ 'my-plugin': {
234
+ name: 'my-plugin',
235
+ config: myPluginConfig,
236
+ hasAPI: true,
237
+ apiPath: '/api/plugin/my-plugin',
238
+ hasComponents: true
239
+ }
240
+ }
241
+ ```
242
+
243
+ ### Rebuild Registry
244
+
245
+ ```bash
246
+ # After creating or modifying plugins
247
+ node core/scripts/build/registry.mjs
248
+ ```
249
+
250
+ ---
251
+
252
+ ## Scripts
253
+
254
+ ### Scaffold New Plugin
255
+
256
+ ```bash
257
+ python .claude/skills/plugins/scripts/scaffold-plugin.py \
258
+ --name "my-plugin" \
259
+ --type "service" \
260
+ --features "components,hooks,api"
261
+ ```
262
+
263
+ ---
264
+
265
+ ## Anti-Patterns
266
+
267
+ ```typescript
268
+ // ❌ NEVER: Put dependencies that core already has
269
+ {
270
+ "dependencies": {
271
+ "zod": "^4.0.0", // ❌ Core has it → peerDependency
272
+ "react": "^19.0.0" // ❌ Core has it → peerDependency
273
+ }
274
+ }
275
+
276
+ // ❌ NEVER: Put global variables in plugin .env
277
+ // USE_LOCAL_AI=true // WRONG - This overrides root .env!
278
+
279
+ // ❌ NEVER: Hardcode configuration
280
+ const config = { apiKey: 'hardcoded-key' }
281
+
282
+ // ❌ NEVER: Skip error handling in handlers
283
+ export async function badProcess(data: any) {
284
+ return await externalAPI(data) // No try/catch
285
+ }
286
+
287
+ // ❌ NEVER: Use any types
288
+ export interface BadInterface { data: any }
289
+ ```
290
+
291
+ ---
292
+
293
+ ## Checklist
294
+
295
+ ### Before Creating (MANDATORY)
296
+
297
+ - [ ] Verify if dependencies are already in core
298
+ - [ ] If in core → declare as `peerDependencies`
299
+ - [ ] If NOT in core → declare as `dependencies`
300
+ - [ ] NEVER duplicate: zod, react, next, @tanstack/*, lucide-react
301
+
302
+ ### During Development
303
+
304
+ - [ ] Plugin name follows kebab-case convention
305
+ - [ ] `plugin.config.ts` with all required fields
306
+ - [ ] `README.md` with usage documentation
307
+ - [ ] `.env.example` with namespaced variables only
308
+ - [ ] `lib/plugin-env.ts` using core's env-loader
309
+ - [ ] Types defined in `types/` directory
310
+ - [ ] All variables use `MY_PLUGIN_*` namespace
311
+ - [ ] Components have `data-cy` selectors
312
+
313
+ ### After Implementation
314
+
315
+ - [ ] Run `node core/scripts/build/registry.mjs`
316
+ - [ ] Unit tests with 90%+ coverage
317
+ - [ ] E2E tests with Page Object Model
318
+ - [ ] Build passes: `pnpm build`
319
+
320
+ ### Validate Dependencies
321
+
322
+ ```bash
323
+ pnpm ls zod # Should show ONE version only
324
+ ```
325
+
326
+ ---
327
+
328
+ ## References
329
+
330
+ - `references/plugin-types.md` - Detailed plugin type structures
331
+ - `references/plugin-templates.md` - Component, hook, API templates
332
+ - `references/plugin-testing.md` - Testing patterns and POMs
333
+
334
+ ## Related Skills
335
+
336
+ - `monorepo-architecture` - Package hierarchy and dependency rules
337
+ - `cypress-selectors` - Selector patterns for plugin components
338
+ - `tanstack-query` - Data fetching in plugin hooks
339
+ - `zod-validation` - Input validation for plugin APIs
340
+ - `registry-system` - Plugin registry integration