@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,425 @@
1
+ ---
2
+ name: create-plugin
3
+ description: |
4
+ Guide for creating new plugins from preset template.
5
+ CRITICAL: Includes MANDATORY dependency management and Model B distribution rules.
6
+ allowed-tools: Bash, Read, Write, Edit, Glob, Grep
7
+ version: "2.0"
8
+ ---
9
+
10
+ # Create Plugin Skill
11
+
12
+ Complete guide for scaffolding and configuring new plugins from the preset template.
13
+
14
+ ---
15
+
16
+ ## ⚠️ MANDATORY: Model B Distribution
17
+
18
+ > **Los paquetes NPM son para DISTRIBUCIÓN. En proyectos de usuario, el código se COPIA a `/contents/plugins/`.**
19
+
20
+ ### Estructura según contexto:
21
+
22
+ | Contexto | Plugin Location |
23
+ |----------|-----------------|
24
+ | **Monorepo** (desarrollo) | `plugins/<plugin-name>/` |
25
+ | **Proyecto usuario** | `contents/plugins/<plugin-name>/` (copiado por CLI) |
26
+
27
+ ---
28
+
29
+ ## ⚠️ MANDATORY: package.json Template
30
+
31
+ Cada plugin DEBE tener un `package.json` con esta estructura:
32
+
33
+ ```json
34
+ {
35
+ "name": "@nextsparkjs/plugin-NOMBRE",
36
+ "version": "1.0.0",
37
+ "private": false,
38
+ "main": "./plugin.config.ts",
39
+ "requiredPlugins": [],
40
+ "dependencies": {
41
+ // SOLO dependencias EXCLUSIVAS de este plugin que NO están en core
42
+ },
43
+ "peerDependencies": {
44
+ "@nextsparkjs/core": "workspace:*",
45
+ "next": "^15.0.0",
46
+ "react": "^19.0.0",
47
+ "react-dom": "^19.0.0",
48
+ "zod": "^4.0.0"
49
+ }
50
+ }
51
+ ```
52
+
53
+ **REGLA CRÍTICA**: Si core tiene una dependencia, el plugin DEBE declararla como `peerDependency`, NUNCA como `dependency`.
54
+
55
+ ---
56
+
57
+ ## Prerequisites
58
+
59
+ - **Command:** `pnpm create:plugin <plugin-name>`
60
+ - **Preset Location:** `core/templates/contents/plugins/starter/`
61
+ - **Output Location (monorepo):** `plugins/<plugin-name>/`
62
+ - **Output Location (user project):** `contents/plugins/<plugin-name>/`
63
+
64
+ ---
65
+
66
+ ## Step 1: Gather Requirements
67
+
68
+ Before creating ANY plugin, collect:
69
+
70
+ ```markdown
71
+ Required Information:
72
+ 1. Plugin name (lowercase, hyphenated slug)
73
+ 2. Display name (human-readable)
74
+ 3. Description (purpose of the plugin)
75
+ 4. Author (team or individual)
76
+ 5. Complexity level (utility | service | full)
77
+ 6. Primary functionality (what problem does it solve?)
78
+ 7. Has entities? (yes/no)
79
+ ```
80
+
81
+ ### Complexity Levels
82
+
83
+ | Level | Includes | Use When |
84
+ |-------|----------|----------|
85
+ | `utility` | lib/core.ts, types | Simple helper functions, utilities |
86
+ | `service` | API + components + hooks | Most plugins - external API integration |
87
+ | `full` | Entities + migrations + everything | Complex plugins with own database tables |
88
+
89
+ ---
90
+
91
+ ## Step 2: Create Plugin from Preset
92
+
93
+ ### Basic Usage
94
+
95
+ ```bash
96
+ pnpm create:plugin <plugin-name>
97
+ ```
98
+
99
+ ### With Options
100
+
101
+ ```bash
102
+ pnpm create:plugin <plugin-name> \
103
+ --description "Plugin description" \
104
+ --author "Author Name" \
105
+ --display-name "Display Name" \
106
+ --complexity service
107
+ ```
108
+
109
+ ### Example
110
+
111
+ ```bash
112
+ pnpm create:plugin analytics \
113
+ --description "User analytics and metrics tracking" \
114
+ --author "Development Team" \
115
+ --display-name "Analytics" \
116
+ --complexity service
117
+ ```
118
+
119
+ ---
120
+
121
+ ## Step 3: Plugin Structure Created
122
+
123
+ ```
124
+ plugins/<plugin-name>/ # Monorepo location
125
+ ├── plugin.config.ts # Plugin configuration
126
+ ├── README.md # Plugin documentation
127
+ ├── .env.example # Environment variables template
128
+ ├── api/
129
+ │ └── example/route.ts # Example API endpoint
130
+ ├── lib/
131
+ │ ├── core.ts # Core plugin logic
132
+ │ ├── types.ts # TypeScript types
133
+ │ └── plugin-env.ts # Env loader wrapper (REQUIRED)
134
+ ├── components/
135
+ │ └── ExampleWidget.tsx # Example UI component
136
+ ├── hooks/
137
+ │ └── usePlugin.ts # Custom React hook
138
+ ├── entities/ # (if complexity: full)
139
+ │ └── [entity]/ # Each entity has 4 required files
140
+ │ ├── [entity].config.ts
141
+ │ ├── [entity].fields.ts
142
+ │ ├── [entity].types.ts
143
+ │ ├── [entity].service.ts
144
+ │ └── messages/
145
+ ├── migrations/ # (if complexity: full)
146
+ │ └── README.md
147
+ ├── messages/
148
+ │ ├── en.json # English translations
149
+ │ └── es.json # Spanish translations
150
+ └── tests/
151
+ └── plugin.test.ts # Unit tests
152
+ ```
153
+
154
+ ---
155
+
156
+ ## Step 4: Customize Configuration
157
+
158
+ ### 4.1 plugin.config.ts - Plugin Identity
159
+
160
+ ```typescript
161
+ import type { PluginConfig } from '@/core/types/plugins'
162
+ import { exampleFunction } from './lib/core'
163
+
164
+ export const myPluginConfig: PluginConfig = {
165
+ name: 'my-plugin',
166
+ displayName: 'My Plugin',
167
+ version: '1.0.0',
168
+ description: 'Plugin description',
169
+ enabled: true,
170
+
171
+ // Dependencies on other plugins
172
+ dependencies: [], // e.g., ['auth', 'analytics']
173
+
174
+ // Exported API
175
+ api: {
176
+ exampleFunction,
177
+ },
178
+
179
+ // Lifecycle hooks
180
+ hooks: {
181
+ onLoad: async () => {
182
+ console.log('[My Plugin] Loading...')
183
+ },
184
+ onActivate: async () => {
185
+ console.log('[My Plugin] Activated')
186
+ },
187
+ onDeactivate: async () => {
188
+ console.log('[My Plugin] Deactivated')
189
+ },
190
+ onUnload: async () => {
191
+ console.log('[My Plugin] Unloaded')
192
+ },
193
+ },
194
+ }
195
+ ```
196
+
197
+ ### 4.2 lib/types.ts - TypeScript Definitions
198
+
199
+ ```typescript
200
+ export interface MyPluginConfig {
201
+ apiKey?: string
202
+ baseUrl?: string
203
+ debug?: boolean
204
+ }
205
+
206
+ export interface MyPluginResult {
207
+ success: boolean
208
+ data?: unknown
209
+ message: string
210
+ timestamp: number
211
+ }
212
+ ```
213
+
214
+ ### 4.3 .env.example - Environment Variables
215
+
216
+ ```bash
217
+ # ============================================
218
+ # MY PLUGIN CONFIGURATION
219
+ # ============================================
220
+ # Copy this file to .env
221
+ # Priority: Plugin .env > Root .env > Defaults
222
+
223
+ # Required for production
224
+ MY_PLUGIN_API_KEY=your-api-key-here
225
+
226
+ # Optional configuration
227
+ MY_PLUGIN_BASE_URL=https://api.example.com
228
+ MY_PLUGIN_DEBUG=false
229
+ MY_PLUGIN_ENABLED=true
230
+ ```
231
+
232
+ ### 4.4 lib/plugin-env.ts - Centralized Env Loader (REQUIRED)
233
+
234
+ Every plugin MUST use the core's centralized env-loader:
235
+
236
+ ```typescript
237
+ // plugins/my-plugin/lib/plugin-env.ts
238
+ import { getPluginEnv } from '@nextsparkjs/core/lib/plugins/env-loader'
239
+
240
+ interface MyPluginEnvConfig {
241
+ MY_PLUGIN_API_KEY?: string
242
+ MY_PLUGIN_BASE_URL?: string
243
+ MY_PLUGIN_DEBUG?: string
244
+ MY_PLUGIN_ENABLED?: string
245
+ }
246
+
247
+ class PluginEnvironment {
248
+ private static instance: PluginEnvironment
249
+ private config: MyPluginEnvConfig = {}
250
+ private loaded = false
251
+
252
+ private constructor() {
253
+ this.loadEnvironment()
254
+ }
255
+
256
+ public static getInstance(): PluginEnvironment {
257
+ if (!PluginEnvironment.instance) {
258
+ PluginEnvironment.instance = new PluginEnvironment()
259
+ }
260
+ return PluginEnvironment.instance
261
+ }
262
+
263
+ private loadEnvironment(): void {
264
+ if (this.loaded) return
265
+
266
+ const env = getPluginEnv('my-plugin')
267
+ this.config = {
268
+ MY_PLUGIN_API_KEY: env.MY_PLUGIN_API_KEY,
269
+ MY_PLUGIN_BASE_URL: env.MY_PLUGIN_BASE_URL || 'https://api.example.com',
270
+ MY_PLUGIN_DEBUG: env.MY_PLUGIN_DEBUG || 'false',
271
+ MY_PLUGIN_ENABLED: env.MY_PLUGIN_ENABLED || 'true',
272
+ }
273
+ this.loaded = true
274
+ }
275
+
276
+ public getApiKey(): string | undefined {
277
+ return this.config.MY_PLUGIN_API_KEY
278
+ }
279
+
280
+ public getBaseUrl(): string {
281
+ return this.config.MY_PLUGIN_BASE_URL || 'https://api.example.com'
282
+ }
283
+
284
+ public isDebugEnabled(): boolean {
285
+ return this.config.MY_PLUGIN_DEBUG === 'true'
286
+ }
287
+
288
+ public isPluginEnabled(): boolean {
289
+ return this.config.MY_PLUGIN_ENABLED !== 'false'
290
+ }
291
+ }
292
+
293
+ export const pluginEnv = PluginEnvironment.getInstance()
294
+ ```
295
+
296
+ **Benefits:**
297
+ - ✅ Plugin .env takes priority over root .env
298
+ - ✅ Automatic fallback to root .env for shared variables
299
+ - ✅ Type-safe configuration access
300
+ - ✅ Singleton pattern for performance
301
+
302
+ ---
303
+
304
+ ## Step 5: Register Plugin in Sandbox Theme
305
+
306
+ **Critical Step**: Add the plugin to the plugin-sandbox theme for testing.
307
+
308
+ ```typescript
309
+ // contents/themes/plugin-sandbox/config/theme.config.ts
310
+ export const pluginSandboxThemeConfig: ThemeConfig = {
311
+ plugins: [
312
+ 'my-plugin', // <-- Add your new plugin here
313
+ ],
314
+ }
315
+ ```
316
+
317
+ Then rebuild the registry:
318
+
319
+ ```bash
320
+ node core/scripts/build/registry.mjs
321
+ ```
322
+
323
+ ---
324
+
325
+ ## Step 6: Verify Plugin Setup
326
+
327
+ ```bash
328
+ # 1. Verify plugin structure
329
+ ls -la plugins/<plugin-name>/
330
+
331
+ # 2. Verify package.json has correct peerDependencies
332
+ cat plugins/<plugin-name>/package.json
333
+
334
+ # 3. Build registry to include new plugin
335
+ node core/scripts/build/registry.mjs
336
+
337
+ # 4. Verify plugin appears in registry
338
+ grep "<plugin-name>" core/lib/registries/plugin-registry.ts
339
+
340
+ # 5. Verify no duplicate dependencies
341
+ pnpm ls zod # Should show ONE version
342
+
343
+ # 6. Verify no TypeScript errors
344
+ pnpm tsc --noEmit
345
+
346
+ # 7. Test plugin activation (optional)
347
+ # Set NEXT_PUBLIC_ACTIVE_THEME=plugin-sandbox in .env.local
348
+ # Run: pnpm dev
349
+ ```
350
+
351
+ ---
352
+
353
+ ## Entity Structure (for full complexity plugins)
354
+
355
+ Each entity requires 4 files:
356
+
357
+ | File | Purpose |
358
+ |------|---------|
359
+ | `[entity].config.ts` | Entity configuration |
360
+ | `[entity].fields.ts` | Field definitions |
361
+ | `[entity].types.ts` | TypeScript types |
362
+ | `[entity].service.ts` | Data access service |
363
+
364
+ **Reference:** `core/templates/contents/themes/starter/entities/tasks/`
365
+
366
+ ---
367
+
368
+ ## Verification Checklist
369
+
370
+ ### Antes de crear (OBLIGATORIO):
371
+ - [ ] Verificar si las dependencias que necesito ya están en core
372
+ - [ ] Si están en core → declararlas como `peerDependencies`
373
+ - [ ] Si NO están en core → declararlas como `dependencies`
374
+
375
+ ### Después de crear:
376
+ - [ ] Plugin name follows naming conventions (lowercase, hyphenated)
377
+ - [ ] All preset files created successfully
378
+ - [ ] **package.json** tiene nombre `@nextsparkjs/plugin-<name>`
379
+ - [ ] **package.json** tiene `peerDependencies` correctas (no duplicar core)
380
+ - [ ] plugin.config.ts has correct metadata
381
+ - [ ] lib/types.ts has appropriate interfaces
382
+ - [ ] **lib/plugin-env.ts** uses core's env-loader
383
+ - [ ] .env.example documents all environment variables
384
+ - [ ] Plugin registered in plugin-sandbox theme
385
+ - [ ] Registry rebuilt: `node core/scripts/build/registry.mjs`
386
+ - [ ] Plugin appears in PLUGIN_REGISTRY
387
+ - [ ] No duplicate dependencies: `pnpm ls zod` shows ONE version
388
+ - [ ] No TypeScript errors: `pnpm tsc --noEmit`
389
+
390
+ ---
391
+
392
+ ## Anti-Patterns
393
+
394
+ | Pattern | Why It's Wrong | Correct Approach |
395
+ |---------|----------------|------------------|
396
+ | Manual file creation | Missing files, wrong structure | Use `pnpm create:plugin` |
397
+ | Skipping sandbox registration | Can't test plugin | Add to plugin-sandbox theme |
398
+ | Skipping registry rebuild | Plugin won't be recognized | Run `node core/scripts/build/registry.mjs` |
399
+ | Modifying core files | Architecture violation | Only work in `contents/plugins/` |
400
+
401
+ ---
402
+
403
+ ## Next Steps After Creation
404
+
405
+ After scaffolding the plugin, continue with implementation:
406
+
407
+ 1. **Implement core business logic** in `lib/`
408
+ 2. **Create API endpoints** if needed
409
+ 3. **Build UI components** in `components/`
410
+ 4. **Add entities** if the plugin manages data
411
+ 5. **Run verification checklist** above
412
+
413
+ ### Environment Setup
414
+ ```bash
415
+ NEXT_PUBLIC_ACTIVE_THEME='plugin-sandbox'
416
+ ```
417
+
418
+ ---
419
+
420
+ ## Related Documentation
421
+
422
+ - **`monorepo-architecture` skill** - CRITICAL: Package hierarchy, dependency rules, Model B distribution
423
+ - **`plugins` skill** - Plugin development patterns and dependency management
424
+ - Entity System: `core/docs/04-entities/`
425
+ - Registry System: `core/docs/03-registry-system/`