@jahia/agentic 0.4.0 → 0.4.1

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 (373) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/claude/.claude/rules/jahia.md +1 -37
  3. package/dist/claude/.claude/skills/jahia-cnd-author/SKILL.md +94 -0
  4. package/dist/claude/.claude/skills/jahia-cnd-author/references/cnd-area-types.md +55 -0
  5. package/dist/claude/.claude/skills/jahia-cnd-author/references/cnd-authoring-experience.md +92 -0
  6. package/dist/claude/.claude/skills/jahia-cnd-author/references/cnd-jahia-mixins.md +510 -0
  7. package/dist/claude/.claude/skills/jahia-cnd-author/references/cnd-modeling-decisions.md +87 -0
  8. package/dist/{opencode/.opencode/agents → claude/.claude/skills/jahia-cnd-author/references}/cnd-numbers-dates.md +32 -1
  9. package/dist/{opencode/.opencode/agents → claude/.claude/skills/jahia-cnd-author/references}/cnd-string-selectors.md +49 -10
  10. package/dist/claude/.claude/skills/jahia-cnd-author/references/cnd-syntax.md +119 -0
  11. package/dist/claude/.claude/skills/jahia-cnd-author/references/types-ts-mapping.md +73 -0
  12. package/dist/claude/.claude/skills/jahia-dev-accessibility/SKILL.md +5 -265
  13. package/dist/claude/.claude/skills/jahia-dev-build-component/SKILL.md +13 -8
  14. package/dist/claude/CLAUDE.md +2 -38
  15. package/dist/codex/.agents/skills/jahia-cnd-author/SKILL.md +94 -0
  16. package/dist/codex/.agents/skills/jahia-cnd-author/references/cnd-area-types.md +55 -0
  17. package/dist/codex/.agents/skills/jahia-cnd-author/references/cnd-authoring-experience.md +92 -0
  18. package/dist/codex/.agents/skills/jahia-cnd-author/references/cnd-jahia-mixins.md +510 -0
  19. package/dist/codex/.agents/skills/jahia-cnd-author/references/cnd-modeling-decisions.md +87 -0
  20. package/dist/{claude/.claude/agents → codex/.agents/skills/jahia-cnd-author/references}/cnd-numbers-dates.md +32 -1
  21. package/dist/{cursor/.cursor/agents → codex/.agents/skills/jahia-cnd-author/references}/cnd-string-selectors.md +49 -10
  22. package/dist/codex/.agents/skills/jahia-cnd-author/references/cnd-syntax.md +119 -0
  23. package/dist/codex/.agents/skills/jahia-cnd-author/references/types-ts-mapping.md +73 -0
  24. package/dist/codex/.agents/skills/jahia-dev-accessibility/SKILL.md +5 -265
  25. package/dist/codex/.agents/skills/jahia-dev-build-component/SKILL.md +13 -8
  26. package/dist/codex/AGENTS.md +2 -38
  27. package/dist/copilot/.agents/skills/jahia-cnd-author/SKILL.md +94 -0
  28. package/dist/copilot/.agents/skills/jahia-cnd-author/references/cnd-area-types.md +55 -0
  29. package/dist/copilot/.agents/skills/jahia-cnd-author/references/cnd-authoring-experience.md +92 -0
  30. package/dist/copilot/.agents/skills/jahia-cnd-author/references/cnd-jahia-mixins.md +510 -0
  31. package/dist/copilot/.agents/skills/jahia-cnd-author/references/cnd-modeling-decisions.md +87 -0
  32. package/dist/{cursor/.cursor/agents → copilot/.agents/skills/jahia-cnd-author/references}/cnd-numbers-dates.md +32 -1
  33. package/dist/{claude/.claude/agents → copilot/.agents/skills/jahia-cnd-author/references}/cnd-string-selectors.md +49 -10
  34. package/dist/copilot/.agents/skills/jahia-cnd-author/references/cnd-syntax.md +119 -0
  35. package/dist/copilot/.agents/skills/jahia-cnd-author/references/types-ts-mapping.md +73 -0
  36. package/dist/copilot/.agents/skills/jahia-dev-accessibility/SKILL.md +5 -265
  37. package/dist/copilot/.agents/skills/jahia-dev-build-component/SKILL.md +13 -8
  38. package/dist/copilot/AGENTS.md +2 -38
  39. package/dist/cursor/.agents/skills/jahia-cnd-author/SKILL.md +94 -0
  40. package/dist/cursor/.agents/skills/jahia-cnd-author/references/cnd-area-types.md +55 -0
  41. package/dist/cursor/.agents/skills/jahia-cnd-author/references/cnd-authoring-experience.md +92 -0
  42. package/dist/cursor/.agents/skills/jahia-cnd-author/references/cnd-child-nodes.md +74 -0
  43. package/dist/cursor/.agents/skills/jahia-cnd-author/references/cnd-jahia-mixins.md +510 -0
  44. package/dist/cursor/.agents/skills/jahia-cnd-author/references/cnd-modeling-decisions.md +87 -0
  45. package/dist/cursor/.agents/skills/jahia-cnd-author/references/cnd-numbers-dates.md +92 -0
  46. package/dist/cursor/.agents/skills/jahia-cnd-author/references/cnd-string-selectors.md +133 -0
  47. package/dist/cursor/.agents/skills/jahia-cnd-author/references/cnd-syntax.md +119 -0
  48. package/dist/cursor/.agents/skills/jahia-cnd-author/references/types-ts-mapping.md +73 -0
  49. package/dist/cursor/.agents/skills/jahia-dev-accessibility/SKILL.md +5 -265
  50. package/dist/cursor/.agents/skills/jahia-dev-build-component/SKILL.md +13 -8
  51. package/dist/cursor/.cursor/rules/jahia.mdc +1 -37
  52. package/dist/gemini/.agents/skills/jahia-cnd-author/SKILL.md +94 -0
  53. package/dist/gemini/.agents/skills/jahia-cnd-author/references/cnd-area-types.md +55 -0
  54. package/dist/gemini/.agents/skills/jahia-cnd-author/references/cnd-authoring-experience.md +92 -0
  55. package/dist/gemini/.agents/skills/jahia-cnd-author/references/cnd-child-nodes.md +74 -0
  56. package/dist/gemini/.agents/skills/jahia-cnd-author/references/cnd-jahia-mixins.md +510 -0
  57. package/dist/gemini/.agents/skills/jahia-cnd-author/references/cnd-modeling-decisions.md +87 -0
  58. package/dist/gemini/.agents/skills/jahia-cnd-author/references/cnd-numbers-dates.md +92 -0
  59. package/dist/gemini/.agents/skills/jahia-cnd-author/references/cnd-string-selectors.md +133 -0
  60. package/dist/gemini/.agents/skills/jahia-cnd-author/references/cnd-syntax.md +119 -0
  61. package/dist/gemini/.agents/skills/jahia-cnd-author/references/types-ts-mapping.md +73 -0
  62. package/dist/gemini/.agents/skills/jahia-dev-accessibility/SKILL.md +5 -265
  63. package/dist/gemini/.agents/skills/jahia-dev-build-component/SKILL.md +13 -8
  64. package/dist/gemini/AGENTS.md +2 -38
  65. package/dist/opencode/.agents/skills/jahia-cnd-author/SKILL.md +94 -0
  66. package/dist/opencode/.agents/skills/jahia-cnd-author/references/cnd-area-types.md +55 -0
  67. package/dist/opencode/.agents/skills/jahia-cnd-author/references/cnd-authoring-experience.md +92 -0
  68. package/dist/opencode/.agents/skills/jahia-cnd-author/references/cnd-child-nodes.md +74 -0
  69. package/dist/opencode/.agents/skills/jahia-cnd-author/references/cnd-jahia-mixins.md +510 -0
  70. package/dist/opencode/.agents/skills/jahia-cnd-author/references/cnd-modeling-decisions.md +87 -0
  71. package/dist/opencode/.agents/skills/jahia-cnd-author/references/cnd-numbers-dates.md +92 -0
  72. package/dist/opencode/.agents/skills/jahia-cnd-author/references/cnd-string-selectors.md +133 -0
  73. package/dist/opencode/.agents/skills/jahia-cnd-author/references/cnd-syntax.md +119 -0
  74. package/dist/opencode/.agents/skills/jahia-cnd-author/references/types-ts-mapping.md +73 -0
  75. package/dist/opencode/.agents/skills/jahia-dev-accessibility/SKILL.md +5 -265
  76. package/dist/opencode/.agents/skills/jahia-dev-build-component/SKILL.md +13 -8
  77. package/dist/opencode/AGENTS.md +2 -38
  78. package/dist/windsurf/.windsurf/rules/jahia.md +1 -37
  79. package/dist/windsurf/.windsurf/skills/jahia-cnd-author/SKILL.md +94 -0
  80. package/dist/windsurf/.windsurf/skills/jahia-cnd-author/references/cnd-area-types.md +55 -0
  81. package/dist/windsurf/.windsurf/skills/jahia-cnd-author/references/cnd-authoring-experience.md +92 -0
  82. package/dist/windsurf/.windsurf/skills/jahia-cnd-author/references/cnd-child-nodes.md +74 -0
  83. package/dist/windsurf/.windsurf/skills/jahia-cnd-author/references/cnd-jahia-mixins.md +510 -0
  84. package/dist/windsurf/.windsurf/skills/jahia-cnd-author/references/cnd-modeling-decisions.md +87 -0
  85. package/dist/windsurf/.windsurf/skills/jahia-cnd-author/references/cnd-numbers-dates.md +92 -0
  86. package/dist/windsurf/.windsurf/skills/jahia-cnd-author/references/cnd-string-selectors.md +133 -0
  87. package/dist/windsurf/.windsurf/skills/jahia-cnd-author/references/cnd-syntax.md +119 -0
  88. package/dist/windsurf/.windsurf/skills/jahia-cnd-author/references/types-ts-mapping.md +73 -0
  89. package/dist/windsurf/.windsurf/skills/jahia-dev-accessibility/SKILL.md +5 -265
  90. package/dist/windsurf/.windsurf/skills/jahia-dev-build-component/SKILL.md +13 -8
  91. package/dist/windsurf/AGENTS.md +2 -38
  92. package/package.json +1 -1
  93. package/dist/claude/.claude/agents/cnd-jahia-mixins.md +0 -113
  94. package/dist/claude/.claude/agents/jahia-cnd-author.md +0 -130
  95. package/dist/claude/.claude/agents/jahia-dev-worker.md +0 -264
  96. package/dist/claude/.claude/agents/jahia-reviewer.md +0 -105
  97. package/dist/claude/.claude/skills/jahia/SKILL.md +0 -148
  98. package/dist/claude/.claude/skills/jahia-content/SKILL.md +0 -157
  99. package/dist/claude/.claude/skills/jahia-content-create-content/SKILL.md +0 -359
  100. package/dist/claude/.claude/skills/jahia-content-explore-structure/SKILL.md +0 -255
  101. package/dist/claude/.claude/skills/jahia-content-media-upload/SKILL.md +0 -197
  102. package/dist/claude/.claude/skills/jahia-content-move-content/SKILL.md +0 -231
  103. package/dist/claude/.claude/skills/jahia-content-organize/SKILL.md +0 -209
  104. package/dist/claude/.claude/skills/jahia-content-publish/SKILL.md +0 -181
  105. package/dist/claude/.claude/skills/jahia-content-query-content/SKILL.md +0 -174
  106. package/dist/claude/.claude/skills/jahia-content-translate-content/SKILL.md +0 -226
  107. package/dist/claude/.claude/skills/jahia-dev/SKILL.md +0 -124
  108. package/dist/claude/.claude/skills/jahia-dev-apis/SKILL.md +0 -52
  109. package/dist/claude/.claude/skills/jahia-dev-apis/references/authentication.md +0 -484
  110. package/dist/claude/.claude/skills/jahia-dev-apis/references/graphql.md +0 -657
  111. package/dist/claude/.claude/skills/jahia-dev-apis/references/jcr-api.md +0 -465
  112. package/dist/claude/.claude/skills/jahia-dev-apis/references/security.md +0 -541
  113. package/dist/claude/.claude/skills/jahia-dev-cypress/SKILL.md +0 -265
  114. package/dist/claude/.claude/skills/jahia-dev-define-content-type/SKILL.md +0 -93
  115. package/dist/claude/.claude/skills/jahia-dev-define-content-type/references/modeling-decisions.md +0 -52
  116. package/dist/claude/.claude/skills/jahia-dev-java/SKILL.md +0 -110
  117. package/dist/claude/.claude/skills/jahia-dev-java/references/backend.md +0 -331
  118. package/dist/claude/.claude/skills/jahia-dev-java/references/content-types.md +0 -273
  119. package/dist/claude/.claude/skills/jahia-dev-java/references/modules.md +0 -218
  120. package/dist/claude/.claude/skills/jahia-dev-java/references/osgi.md +0 -208
  121. package/dist/claude/.claude/skills/jahia-dev-java/references/rendering.md +0 -191
  122. package/dist/claude/.claude/skills/jahia-dev-java/references/ui-extensions.md +0 -344
  123. package/dist/claude/.claude/skills/jahia-dev-osgi-module/SKILL.md +0 -297
  124. package/dist/claude/.claude/skills/jahia-dev-ui-extension/SKILL.md +0 -559
  125. package/dist/claude/.claude/skills/jahia-java-concurrency/SKILL.md +0 -308
  126. package/dist/claude/.claude/skills/jahia-java-jcr/SKILL.md +0 -153
  127. package/dist/claude/.claude/skills/jahia-java-osgi/SKILL.md +0 -134
  128. package/dist/claude/.claude/skills/jahia-java-persistence/SKILL.md +0 -177
  129. package/dist/claude/.claude/skills/jahia-java-security/SKILL.md +0 -84
  130. package/dist/claude/.claude/skills/jahia-orchestrate/SKILL.md +0 -148
  131. package/dist/claude/.claude/skills/jahia-orchestrate/scripts/verify-pages.mjs +0 -59
  132. package/dist/claude/.claude/skills/jahia-review-java/SKILL.md +0 -131
  133. package/dist/claude/.claude/skills/jahia-review-java/references/code-review-output.md +0 -121
  134. package/dist/codex/.agents/skills/jahia/SKILL.md +0 -148
  135. package/dist/codex/.agents/skills/jahia-content/SKILL.md +0 -157
  136. package/dist/codex/.agents/skills/jahia-content-create-content/SKILL.md +0 -359
  137. package/dist/codex/.agents/skills/jahia-content-explore-structure/SKILL.md +0 -255
  138. package/dist/codex/.agents/skills/jahia-content-media-upload/SKILL.md +0 -197
  139. package/dist/codex/.agents/skills/jahia-content-move-content/SKILL.md +0 -231
  140. package/dist/codex/.agents/skills/jahia-content-organize/SKILL.md +0 -209
  141. package/dist/codex/.agents/skills/jahia-content-publish/SKILL.md +0 -181
  142. package/dist/codex/.agents/skills/jahia-content-query-content/SKILL.md +0 -174
  143. package/dist/codex/.agents/skills/jahia-content-translate-content/SKILL.md +0 -226
  144. package/dist/codex/.agents/skills/jahia-dev/SKILL.md +0 -124
  145. package/dist/codex/.agents/skills/jahia-dev-apis/SKILL.md +0 -52
  146. package/dist/codex/.agents/skills/jahia-dev-apis/references/authentication.md +0 -484
  147. package/dist/codex/.agents/skills/jahia-dev-apis/references/graphql.md +0 -657
  148. package/dist/codex/.agents/skills/jahia-dev-apis/references/jcr-api.md +0 -465
  149. package/dist/codex/.agents/skills/jahia-dev-apis/references/security.md +0 -541
  150. package/dist/codex/.agents/skills/jahia-dev-cypress/SKILL.md +0 -265
  151. package/dist/codex/.agents/skills/jahia-dev-define-content-type/SKILL.md +0 -93
  152. package/dist/codex/.agents/skills/jahia-dev-define-content-type/references/modeling-decisions.md +0 -52
  153. package/dist/codex/.agents/skills/jahia-dev-java/SKILL.md +0 -110
  154. package/dist/codex/.agents/skills/jahia-dev-java/references/backend.md +0 -331
  155. package/dist/codex/.agents/skills/jahia-dev-java/references/content-types.md +0 -273
  156. package/dist/codex/.agents/skills/jahia-dev-java/references/modules.md +0 -218
  157. package/dist/codex/.agents/skills/jahia-dev-java/references/osgi.md +0 -208
  158. package/dist/codex/.agents/skills/jahia-dev-java/references/rendering.md +0 -191
  159. package/dist/codex/.agents/skills/jahia-dev-java/references/ui-extensions.md +0 -344
  160. package/dist/codex/.agents/skills/jahia-dev-osgi-module/SKILL.md +0 -297
  161. package/dist/codex/.agents/skills/jahia-dev-ui-extension/SKILL.md +0 -559
  162. package/dist/codex/.agents/skills/jahia-java-concurrency/SKILL.md +0 -308
  163. package/dist/codex/.agents/skills/jahia-java-jcr/SKILL.md +0 -153
  164. package/dist/codex/.agents/skills/jahia-java-osgi/SKILL.md +0 -134
  165. package/dist/codex/.agents/skills/jahia-java-persistence/SKILL.md +0 -177
  166. package/dist/codex/.agents/skills/jahia-java-security/SKILL.md +0 -84
  167. package/dist/codex/.agents/skills/jahia-orchestrate/SKILL.md +0 -148
  168. package/dist/codex/.agents/skills/jahia-orchestrate/scripts/verify-pages.mjs +0 -59
  169. package/dist/codex/.agents/skills/jahia-review-java/SKILL.md +0 -131
  170. package/dist/codex/.agents/skills/jahia-review-java/references/code-review-output.md +0 -121
  171. package/dist/codex/.codex/agents/cnd-child-nodes.toml +0 -3
  172. package/dist/codex/.codex/agents/cnd-jahia-mixins.toml +0 -3
  173. package/dist/codex/.codex/agents/cnd-numbers-dates.toml +0 -3
  174. package/dist/codex/.codex/agents/cnd-string-selectors.toml +0 -3
  175. package/dist/codex/.codex/agents/jahia-cnd-author.toml +0 -3
  176. package/dist/codex/.codex/agents/jahia-dev-worker.toml +0 -3
  177. package/dist/codex/.codex/agents/jahia-reviewer.toml +0 -3
  178. package/dist/copilot/.agents/skills/jahia/SKILL.md +0 -148
  179. package/dist/copilot/.agents/skills/jahia-content/SKILL.md +0 -157
  180. package/dist/copilot/.agents/skills/jahia-content-create-content/SKILL.md +0 -359
  181. package/dist/copilot/.agents/skills/jahia-content-explore-structure/SKILL.md +0 -255
  182. package/dist/copilot/.agents/skills/jahia-content-media-upload/SKILL.md +0 -197
  183. package/dist/copilot/.agents/skills/jahia-content-move-content/SKILL.md +0 -231
  184. package/dist/copilot/.agents/skills/jahia-content-organize/SKILL.md +0 -209
  185. package/dist/copilot/.agents/skills/jahia-content-publish/SKILL.md +0 -181
  186. package/dist/copilot/.agents/skills/jahia-content-query-content/SKILL.md +0 -174
  187. package/dist/copilot/.agents/skills/jahia-content-translate-content/SKILL.md +0 -226
  188. package/dist/copilot/.agents/skills/jahia-dev/SKILL.md +0 -124
  189. package/dist/copilot/.agents/skills/jahia-dev-apis/SKILL.md +0 -52
  190. package/dist/copilot/.agents/skills/jahia-dev-apis/references/authentication.md +0 -484
  191. package/dist/copilot/.agents/skills/jahia-dev-apis/references/graphql.md +0 -657
  192. package/dist/copilot/.agents/skills/jahia-dev-apis/references/jcr-api.md +0 -465
  193. package/dist/copilot/.agents/skills/jahia-dev-apis/references/security.md +0 -541
  194. package/dist/copilot/.agents/skills/jahia-dev-cypress/SKILL.md +0 -265
  195. package/dist/copilot/.agents/skills/jahia-dev-define-content-type/SKILL.md +0 -93
  196. package/dist/copilot/.agents/skills/jahia-dev-define-content-type/references/modeling-decisions.md +0 -52
  197. package/dist/copilot/.agents/skills/jahia-dev-java/SKILL.md +0 -110
  198. package/dist/copilot/.agents/skills/jahia-dev-java/references/backend.md +0 -331
  199. package/dist/copilot/.agents/skills/jahia-dev-java/references/content-types.md +0 -273
  200. package/dist/copilot/.agents/skills/jahia-dev-java/references/modules.md +0 -218
  201. package/dist/copilot/.agents/skills/jahia-dev-java/references/osgi.md +0 -208
  202. package/dist/copilot/.agents/skills/jahia-dev-java/references/rendering.md +0 -191
  203. package/dist/copilot/.agents/skills/jahia-dev-java/references/ui-extensions.md +0 -344
  204. package/dist/copilot/.agents/skills/jahia-dev-osgi-module/SKILL.md +0 -297
  205. package/dist/copilot/.agents/skills/jahia-dev-ui-extension/SKILL.md +0 -559
  206. package/dist/copilot/.agents/skills/jahia-java-concurrency/SKILL.md +0 -308
  207. package/dist/copilot/.agents/skills/jahia-java-jcr/SKILL.md +0 -153
  208. package/dist/copilot/.agents/skills/jahia-java-osgi/SKILL.md +0 -134
  209. package/dist/copilot/.agents/skills/jahia-java-persistence/SKILL.md +0 -177
  210. package/dist/copilot/.agents/skills/jahia-java-security/SKILL.md +0 -84
  211. package/dist/copilot/.agents/skills/jahia-orchestrate/SKILL.md +0 -148
  212. package/dist/copilot/.agents/skills/jahia-orchestrate/scripts/verify-pages.mjs +0 -59
  213. package/dist/copilot/.agents/skills/jahia-review-java/SKILL.md +0 -131
  214. package/dist/copilot/.agents/skills/jahia-review-java/references/code-review-output.md +0 -121
  215. package/dist/cursor/.agents/skills/jahia/SKILL.md +0 -148
  216. package/dist/cursor/.agents/skills/jahia-content/SKILL.md +0 -157
  217. package/dist/cursor/.agents/skills/jahia-content-create-content/SKILL.md +0 -359
  218. package/dist/cursor/.agents/skills/jahia-content-explore-structure/SKILL.md +0 -255
  219. package/dist/cursor/.agents/skills/jahia-content-media-upload/SKILL.md +0 -197
  220. package/dist/cursor/.agents/skills/jahia-content-move-content/SKILL.md +0 -231
  221. package/dist/cursor/.agents/skills/jahia-content-organize/SKILL.md +0 -209
  222. package/dist/cursor/.agents/skills/jahia-content-publish/SKILL.md +0 -181
  223. package/dist/cursor/.agents/skills/jahia-content-query-content/SKILL.md +0 -174
  224. package/dist/cursor/.agents/skills/jahia-content-translate-content/SKILL.md +0 -226
  225. package/dist/cursor/.agents/skills/jahia-dev/SKILL.md +0 -124
  226. package/dist/cursor/.agents/skills/jahia-dev-apis/SKILL.md +0 -52
  227. package/dist/cursor/.agents/skills/jahia-dev-apis/references/authentication.md +0 -484
  228. package/dist/cursor/.agents/skills/jahia-dev-apis/references/graphql.md +0 -657
  229. package/dist/cursor/.agents/skills/jahia-dev-apis/references/jcr-api.md +0 -465
  230. package/dist/cursor/.agents/skills/jahia-dev-apis/references/security.md +0 -541
  231. package/dist/cursor/.agents/skills/jahia-dev-cypress/SKILL.md +0 -265
  232. package/dist/cursor/.agents/skills/jahia-dev-define-content-type/SKILL.md +0 -93
  233. package/dist/cursor/.agents/skills/jahia-dev-define-content-type/references/modeling-decisions.md +0 -52
  234. package/dist/cursor/.agents/skills/jahia-dev-java/SKILL.md +0 -110
  235. package/dist/cursor/.agents/skills/jahia-dev-java/references/backend.md +0 -331
  236. package/dist/cursor/.agents/skills/jahia-dev-java/references/content-types.md +0 -273
  237. package/dist/cursor/.agents/skills/jahia-dev-java/references/modules.md +0 -218
  238. package/dist/cursor/.agents/skills/jahia-dev-java/references/osgi.md +0 -208
  239. package/dist/cursor/.agents/skills/jahia-dev-java/references/rendering.md +0 -191
  240. package/dist/cursor/.agents/skills/jahia-dev-java/references/ui-extensions.md +0 -344
  241. package/dist/cursor/.agents/skills/jahia-dev-osgi-module/SKILL.md +0 -297
  242. package/dist/cursor/.agents/skills/jahia-dev-ui-extension/SKILL.md +0 -559
  243. package/dist/cursor/.agents/skills/jahia-java-concurrency/SKILL.md +0 -308
  244. package/dist/cursor/.agents/skills/jahia-java-jcr/SKILL.md +0 -153
  245. package/dist/cursor/.agents/skills/jahia-java-osgi/SKILL.md +0 -134
  246. package/dist/cursor/.agents/skills/jahia-java-persistence/SKILL.md +0 -177
  247. package/dist/cursor/.agents/skills/jahia-java-security/SKILL.md +0 -84
  248. package/dist/cursor/.agents/skills/jahia-orchestrate/SKILL.md +0 -148
  249. package/dist/cursor/.agents/skills/jahia-orchestrate/scripts/verify-pages.mjs +0 -59
  250. package/dist/cursor/.agents/skills/jahia-review-java/SKILL.md +0 -131
  251. package/dist/cursor/.agents/skills/jahia-review-java/references/code-review-output.md +0 -121
  252. package/dist/cursor/.cursor/agents/cnd-jahia-mixins.md +0 -113
  253. package/dist/cursor/.cursor/agents/jahia-cnd-author.md +0 -130
  254. package/dist/cursor/.cursor/agents/jahia-dev-worker.md +0 -264
  255. package/dist/cursor/.cursor/agents/jahia-reviewer.md +0 -105
  256. package/dist/gemini/.agents/skills/jahia/SKILL.md +0 -148
  257. package/dist/gemini/.agents/skills/jahia-content/SKILL.md +0 -157
  258. package/dist/gemini/.agents/skills/jahia-content-create-content/SKILL.md +0 -359
  259. package/dist/gemini/.agents/skills/jahia-content-explore-structure/SKILL.md +0 -255
  260. package/dist/gemini/.agents/skills/jahia-content-media-upload/SKILL.md +0 -197
  261. package/dist/gemini/.agents/skills/jahia-content-move-content/SKILL.md +0 -231
  262. package/dist/gemini/.agents/skills/jahia-content-organize/SKILL.md +0 -209
  263. package/dist/gemini/.agents/skills/jahia-content-publish/SKILL.md +0 -181
  264. package/dist/gemini/.agents/skills/jahia-content-query-content/SKILL.md +0 -174
  265. package/dist/gemini/.agents/skills/jahia-content-translate-content/SKILL.md +0 -226
  266. package/dist/gemini/.agents/skills/jahia-dev/SKILL.md +0 -124
  267. package/dist/gemini/.agents/skills/jahia-dev-apis/SKILL.md +0 -52
  268. package/dist/gemini/.agents/skills/jahia-dev-apis/references/authentication.md +0 -484
  269. package/dist/gemini/.agents/skills/jahia-dev-apis/references/graphql.md +0 -657
  270. package/dist/gemini/.agents/skills/jahia-dev-apis/references/jcr-api.md +0 -465
  271. package/dist/gemini/.agents/skills/jahia-dev-apis/references/security.md +0 -541
  272. package/dist/gemini/.agents/skills/jahia-dev-cypress/SKILL.md +0 -265
  273. package/dist/gemini/.agents/skills/jahia-dev-define-content-type/SKILL.md +0 -93
  274. package/dist/gemini/.agents/skills/jahia-dev-define-content-type/references/modeling-decisions.md +0 -52
  275. package/dist/gemini/.agents/skills/jahia-dev-java/SKILL.md +0 -110
  276. package/dist/gemini/.agents/skills/jahia-dev-java/references/backend.md +0 -331
  277. package/dist/gemini/.agents/skills/jahia-dev-java/references/content-types.md +0 -273
  278. package/dist/gemini/.agents/skills/jahia-dev-java/references/modules.md +0 -218
  279. package/dist/gemini/.agents/skills/jahia-dev-java/references/osgi.md +0 -208
  280. package/dist/gemini/.agents/skills/jahia-dev-java/references/rendering.md +0 -191
  281. package/dist/gemini/.agents/skills/jahia-dev-java/references/ui-extensions.md +0 -344
  282. package/dist/gemini/.agents/skills/jahia-dev-osgi-module/SKILL.md +0 -297
  283. package/dist/gemini/.agents/skills/jahia-dev-ui-extension/SKILL.md +0 -559
  284. package/dist/gemini/.agents/skills/jahia-java-concurrency/SKILL.md +0 -308
  285. package/dist/gemini/.agents/skills/jahia-java-jcr/SKILL.md +0 -153
  286. package/dist/gemini/.agents/skills/jahia-java-osgi/SKILL.md +0 -134
  287. package/dist/gemini/.agents/skills/jahia-java-persistence/SKILL.md +0 -177
  288. package/dist/gemini/.agents/skills/jahia-java-security/SKILL.md +0 -84
  289. package/dist/gemini/.agents/skills/jahia-orchestrate/SKILL.md +0 -148
  290. package/dist/gemini/.agents/skills/jahia-orchestrate/scripts/verify-pages.mjs +0 -59
  291. package/dist/gemini/.agents/skills/jahia-review-java/SKILL.md +0 -131
  292. package/dist/gemini/.agents/skills/jahia-review-java/references/code-review-output.md +0 -121
  293. package/dist/opencode/.agents/skills/jahia/SKILL.md +0 -148
  294. package/dist/opencode/.agents/skills/jahia-content/SKILL.md +0 -157
  295. package/dist/opencode/.agents/skills/jahia-content-create-content/SKILL.md +0 -359
  296. package/dist/opencode/.agents/skills/jahia-content-explore-structure/SKILL.md +0 -255
  297. package/dist/opencode/.agents/skills/jahia-content-media-upload/SKILL.md +0 -197
  298. package/dist/opencode/.agents/skills/jahia-content-move-content/SKILL.md +0 -231
  299. package/dist/opencode/.agents/skills/jahia-content-organize/SKILL.md +0 -209
  300. package/dist/opencode/.agents/skills/jahia-content-publish/SKILL.md +0 -181
  301. package/dist/opencode/.agents/skills/jahia-content-query-content/SKILL.md +0 -174
  302. package/dist/opencode/.agents/skills/jahia-content-translate-content/SKILL.md +0 -226
  303. package/dist/opencode/.agents/skills/jahia-dev/SKILL.md +0 -124
  304. package/dist/opencode/.agents/skills/jahia-dev-apis/SKILL.md +0 -52
  305. package/dist/opencode/.agents/skills/jahia-dev-apis/references/authentication.md +0 -484
  306. package/dist/opencode/.agents/skills/jahia-dev-apis/references/graphql.md +0 -657
  307. package/dist/opencode/.agents/skills/jahia-dev-apis/references/jcr-api.md +0 -465
  308. package/dist/opencode/.agents/skills/jahia-dev-apis/references/security.md +0 -541
  309. package/dist/opencode/.agents/skills/jahia-dev-cypress/SKILL.md +0 -265
  310. package/dist/opencode/.agents/skills/jahia-dev-define-content-type/SKILL.md +0 -93
  311. package/dist/opencode/.agents/skills/jahia-dev-define-content-type/references/modeling-decisions.md +0 -52
  312. package/dist/opencode/.agents/skills/jahia-dev-java/SKILL.md +0 -110
  313. package/dist/opencode/.agents/skills/jahia-dev-java/references/backend.md +0 -331
  314. package/dist/opencode/.agents/skills/jahia-dev-java/references/content-types.md +0 -273
  315. package/dist/opencode/.agents/skills/jahia-dev-java/references/modules.md +0 -218
  316. package/dist/opencode/.agents/skills/jahia-dev-java/references/osgi.md +0 -208
  317. package/dist/opencode/.agents/skills/jahia-dev-java/references/rendering.md +0 -191
  318. package/dist/opencode/.agents/skills/jahia-dev-java/references/ui-extensions.md +0 -344
  319. package/dist/opencode/.agents/skills/jahia-dev-osgi-module/SKILL.md +0 -297
  320. package/dist/opencode/.agents/skills/jahia-dev-ui-extension/SKILL.md +0 -559
  321. package/dist/opencode/.agents/skills/jahia-java-concurrency/SKILL.md +0 -308
  322. package/dist/opencode/.agents/skills/jahia-java-jcr/SKILL.md +0 -153
  323. package/dist/opencode/.agents/skills/jahia-java-osgi/SKILL.md +0 -134
  324. package/dist/opencode/.agents/skills/jahia-java-persistence/SKILL.md +0 -177
  325. package/dist/opencode/.agents/skills/jahia-java-security/SKILL.md +0 -84
  326. package/dist/opencode/.agents/skills/jahia-orchestrate/SKILL.md +0 -148
  327. package/dist/opencode/.agents/skills/jahia-orchestrate/scripts/verify-pages.mjs +0 -59
  328. package/dist/opencode/.agents/skills/jahia-review-java/SKILL.md +0 -131
  329. package/dist/opencode/.agents/skills/jahia-review-java/references/code-review-output.md +0 -121
  330. package/dist/opencode/.opencode/agents/cnd-jahia-mixins.md +0 -113
  331. package/dist/opencode/.opencode/agents/jahia-cnd-author.md +0 -130
  332. package/dist/opencode/.opencode/agents/jahia-dev-worker.md +0 -264
  333. package/dist/opencode/.opencode/agents/jahia-reviewer.md +0 -105
  334. package/dist/windsurf/.windsurf/skills/jahia/SKILL.md +0 -148
  335. package/dist/windsurf/.windsurf/skills/jahia-content/SKILL.md +0 -157
  336. package/dist/windsurf/.windsurf/skills/jahia-content-create-content/SKILL.md +0 -359
  337. package/dist/windsurf/.windsurf/skills/jahia-content-explore-structure/SKILL.md +0 -255
  338. package/dist/windsurf/.windsurf/skills/jahia-content-media-upload/SKILL.md +0 -197
  339. package/dist/windsurf/.windsurf/skills/jahia-content-move-content/SKILL.md +0 -231
  340. package/dist/windsurf/.windsurf/skills/jahia-content-organize/SKILL.md +0 -209
  341. package/dist/windsurf/.windsurf/skills/jahia-content-publish/SKILL.md +0 -181
  342. package/dist/windsurf/.windsurf/skills/jahia-content-query-content/SKILL.md +0 -174
  343. package/dist/windsurf/.windsurf/skills/jahia-content-translate-content/SKILL.md +0 -226
  344. package/dist/windsurf/.windsurf/skills/jahia-dev/SKILL.md +0 -124
  345. package/dist/windsurf/.windsurf/skills/jahia-dev-apis/SKILL.md +0 -52
  346. package/dist/windsurf/.windsurf/skills/jahia-dev-apis/references/authentication.md +0 -484
  347. package/dist/windsurf/.windsurf/skills/jahia-dev-apis/references/graphql.md +0 -657
  348. package/dist/windsurf/.windsurf/skills/jahia-dev-apis/references/jcr-api.md +0 -465
  349. package/dist/windsurf/.windsurf/skills/jahia-dev-apis/references/security.md +0 -541
  350. package/dist/windsurf/.windsurf/skills/jahia-dev-cypress/SKILL.md +0 -265
  351. package/dist/windsurf/.windsurf/skills/jahia-dev-define-content-type/SKILL.md +0 -93
  352. package/dist/windsurf/.windsurf/skills/jahia-dev-define-content-type/references/modeling-decisions.md +0 -52
  353. package/dist/windsurf/.windsurf/skills/jahia-dev-java/SKILL.md +0 -110
  354. package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/backend.md +0 -331
  355. package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/content-types.md +0 -273
  356. package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/modules.md +0 -218
  357. package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/osgi.md +0 -208
  358. package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/rendering.md +0 -191
  359. package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/ui-extensions.md +0 -344
  360. package/dist/windsurf/.windsurf/skills/jahia-dev-osgi-module/SKILL.md +0 -297
  361. package/dist/windsurf/.windsurf/skills/jahia-dev-ui-extension/SKILL.md +0 -559
  362. package/dist/windsurf/.windsurf/skills/jahia-java-concurrency/SKILL.md +0 -308
  363. package/dist/windsurf/.windsurf/skills/jahia-java-jcr/SKILL.md +0 -153
  364. package/dist/windsurf/.windsurf/skills/jahia-java-osgi/SKILL.md +0 -134
  365. package/dist/windsurf/.windsurf/skills/jahia-java-persistence/SKILL.md +0 -177
  366. package/dist/windsurf/.windsurf/skills/jahia-java-security/SKILL.md +0 -84
  367. package/dist/windsurf/.windsurf/skills/jahia-orchestrate/SKILL.md +0 -148
  368. package/dist/windsurf/.windsurf/skills/jahia-orchestrate/scripts/verify-pages.mjs +0 -59
  369. package/dist/windsurf/.windsurf/skills/jahia-review-java/SKILL.md +0 -131
  370. package/dist/windsurf/.windsurf/skills/jahia-review-java/references/code-review-output.md +0 -121
  371. /package/dist/claude/.claude/{agents → skills/jahia-cnd-author/references}/cnd-child-nodes.md +0 -0
  372. /package/dist/{cursor/.cursor/agents → codex/.agents/skills/jahia-cnd-author/references}/cnd-child-nodes.md +0 -0
  373. /package/dist/{opencode/.opencode/agents → copilot/.agents/skills/jahia-cnd-author/references}/cnd-child-nodes.md +0 -0
@@ -1,559 +0,0 @@
1
- ---
2
- name: jahia-dev-ui-extension
3
- description: Conventions and patterns for building Jahia OSGi UI extensions — modules that extend the jcontent back-office (actions, panels, dialogs) using React 18, Webpack/Module Federation, and the @jahia/ui-extender registry. Distinct from JS template sets (React 19, Vite).
4
- ---
5
-
6
- # SKILL — Jahia OSGi UI Extension
7
-
8
- ## When this skill applies
9
-
10
- You are extending the **jcontent back-office** — adding toolbar actions, admin panels, dialogs, or sidebar panels that editors see inside jcontent / Page Builder. This is **not** about rendering the public-facing site (that is the JS template set track).
11
-
12
- Key indicators:
13
- - `@jahia/ui-extender` in `package.json`
14
- - `@jahia/webpack-config` / `webpack.config.js` (not Vite)
15
- - Output to `src/main/resources/javascript/apps/`
16
- - React 18, not React 19
17
-
18
- ---
19
-
20
- ## React version distinction — critical
21
-
22
- | Module type | React version | Build tool | Library |
23
- |---|---|---|---|
24
- | **JS template set** (public site) | React **19** | Vite | `@jahia/javascript-modules-library` |
25
- | **OSGi UI extension** (back-office) | React **18** | Webpack + Module Federation | `@jahia/ui-extender` |
26
-
27
- Never mix them. A UI extension that imports React 19 APIs will silently break in jcontent. A template set that uses `@jahia/ui-extender` won't work in the page renderer.
28
-
29
- ---
30
-
31
- ## Scaffold a new UI extension module
32
-
33
- Use archetype **4** (`jahia-reactjs-admin-module-archetype`) which scaffolds the Webpack/Module Federation wiring automatically.
34
-
35
- ```bash
36
- mvn archetype:generate -Dfilter=org.jahia.archetypes:
37
- ```
38
-
39
- At the prompts:
40
- 1. Enter `4` → `jahia-reactjs-admin-module-archetype` (Jahia DXP >= 8)
41
- 2. Enter the latest version
42
- 3. Fill in the properties, then confirm with `Y`
43
-
44
- | Property | Example | Notes |
45
- |---|---|---|
46
- | `artifactId` | `my-ui-extension` | Maven artifact ID and folder name |
47
- | `moduleName` | `My UI Extension` | Human-readable name shown in Jahia UI |
48
- | `groupId` | `org.example.modules` | Java package root |
49
- | `jahiaVersion` | `8.2.0.0` | **Always `8.2.0.0`** — the archetype default is outdated |
50
- | `version` | `1.0.0-SNAPSHOT` | Module version |
51
- | `package` | `org.example.modules` | Java package |
52
-
53
- > ⚠️ After generation, update `react` and `react-dom` in `package.json` to `^18.3.1`. The archetype may scaffold an older React 18 minor — always pin to the latest React 18.x.
54
-
55
- Build to verify:
56
-
57
- ```bash
58
- cd <artifactId>
59
- mvn clean install # runs yarn build:production via frontend-maven-plugin
60
- ```
61
-
62
- ---
63
-
64
- ## Module structure
65
-
66
- ```
67
- <module>/
68
- ├── pom.xml # Maven OSGi bundle
69
- ├── package.json # Webpack/JS config
70
- ├── webpack.config.js
71
- ├── babel.config.js
72
- ├── src/
73
- │ ├── javascript/ # React / JS sources
74
- │ │ ├── index.js # Entry point — registers jahiaApp-init callback
75
- │ │ ├── init.js # Async init — loads i18n, calls register functions
76
- │ │ ├── <Feature>/
77
- │ │ │ ├── <Feature>.jsx # React component
78
- │ │ │ ├── register<Feature>.js # registry.add() call
79
- │ │ │ ├── dialogManager.js # Portal pattern (if feature has a dialog)
80
- │ │ │ └── gql/
81
- │ │ │ └── <Feature>.mutations.js # Apollo mutations
82
- │ │ └── AdminPanel/ # Optional admin panel
83
- │ │ ├── AdminPanel.jsx
84
- │ │ └── AdminPanel.routes.jsx
85
- │ └── main/
86
- │ ├── java/org/jahia/<org>/<module>/
87
- │ │ ├── actions/ # Java Actions (@Component service = Action.class)
88
- │ │ └── services/ # OSGi services (@Component)
89
- │ └── resources/
90
- │ ├── META-INF/configurations/ # OSGi .cfg files
91
- │ └── javascript/
92
- │ ├── apps/ # Webpack output (do not edit)
93
- │ └── locales/ # i18n JSON files
94
- │ ├── en.json
95
- │ └── fr.json
96
- ```
97
-
98
- ---
99
-
100
- ## Build stack
101
-
102
- ### package.json key fields
103
-
104
- ```json
105
- {
106
- "jahia": {
107
- "remotes": {
108
- "jahia": "javascript/apps/remoteEntry.js"
109
- }
110
- },
111
- "dependencies": {
112
- "react": "^18.3.1",
113
- "react-dom": "^18.3.1",
114
- "@jahia/ui-extender": "^1.x",
115
- "@jahia/moonstone": "^2.x",
116
- "@jahia/data-helper": "^1.x",
117
- "@apollo/client": "^3.x"
118
- },
119
- "devDependencies": {
120
- "@jahia/webpack-config": "^1.x"
121
- }
122
- }
123
- ```
124
-
125
- ### webpack.config.js
126
-
127
- ```javascript
128
- const { getModuleFederationConfig } = require('@jahia/webpack-config');
129
- const packageJson = require('./package.json');
130
- const ModuleFederationPlugin = require('webpack/lib/container/ModuleFederationPlugin');
131
-
132
- module.exports = (env, argv) => ({
133
- entry: { main: './src/javascript/index' },
134
- output: {
135
- path: path.join(__dirname, 'src/main/resources/javascript/apps/'),
136
- publicPath: 'auto',
137
- filename: 'jahia.bundle.js',
138
- chunkFilename: '[name].jahia.[chunkhash:6].js',
139
- },
140
- module: {
141
- rules: [
142
- { test: /\.(js|jsx)$/, use: 'babel-loader', exclude: /node_modules/ },
143
- { test: /\.module\.css$/, use: ['style-loader', { loader: 'css-loader', options: { modules: true } }] },
144
- { test: /\.css$/, exclude: /\.module\.css$/, use: ['style-loader', 'css-loader'] },
145
- ],
146
- },
147
- plugins: [
148
- new ModuleFederationPlugin(getModuleFederationConfig(packageJson)),
149
- ],
150
- });
151
- ```
152
-
153
- `@jahia/webpack-config/getModuleFederationConfig` reads the `jahia.remotes` field from `package.json` and configures shared dependencies (React, MUI, Apollo) as singletons — this is what prevents version conflicts with jcontent's own React 18 instance.
154
-
155
- ### Maven — frontend-maven-plugin
156
-
157
- ```xml
158
- <plugin>
159
- <groupId>com.github.eirslett</groupId>
160
- <artifactId>frontend-maven-plugin</artifactId>
161
- <executions>
162
- <execution>
163
- <id>install-node-and-yarn</id>
164
- <goals><goal>install-node-and-yarn</goal></goals>
165
- <configuration>
166
- <nodeVersion>v20.x.x</nodeVersion>
167
- <yarnVersion>v1.22.x</yarnVersion>
168
- </configuration>
169
- </execution>
170
- <execution>
171
- <id>yarn-install</id>
172
- <goals><goal>yarn</goal></goals>
173
- </execution>
174
- <execution>
175
- <id>yarn-build</id>
176
- <goals><goal>yarn</goal></goals>
177
- <configuration>
178
- <arguments>build:production</arguments>
179
- </configuration>
180
- </execution>
181
- </executions>
182
- </plugin>
183
- ```
184
-
185
- Build scripts in `package.json`:
186
- - `build`: `yarn lint && webpack` (dev — fast, no minification)
187
- - `build:production`: `webpack --mode=production` (for Maven/CI)
188
- - `dev`: `webpack --watch` (interactive dev only — never run from an agent)
189
-
190
- ### Deploy
191
-
192
- ```bash
193
- # Always use this for agentic builds
194
- mvn clean install -pl .
195
-
196
- # Or if a deployer script is configured:
197
- yarn build && mvn install -DskipTests
198
- ```
199
-
200
- ---
201
-
202
- ## Registering UI extensions (JavaScript side)
203
-
204
- ### Entry point pattern
205
-
206
- ```javascript
207
- // src/javascript/index.js
208
- import { registry } from '@jahia/ui-extender';
209
-
210
- export default function () {
211
- registry.add('callback', 'my-module', {
212
- targets: ['jahiaApp-init:50'], // runs early in jcontent lifecycle
213
- callback: async () => {
214
- const { default: register } = await import('./init');
215
- register();
216
- }
217
- });
218
- }
219
- ```
220
-
221
- ```javascript
222
- // src/javascript/init.js
223
- import i18next from 'i18next';
224
- import { registerMyAction } from './MyAction';
225
-
226
- export default async function () {
227
- await i18next.loadNamespaces('my-module'); // load translations before registering UI
228
- registerMyAction();
229
- }
230
- ```
231
-
232
- The `jahiaApp-init:N` priority controls load order. Use 50 for normal modules; use lower numbers only if another module must see your registry entries at init time.
233
-
234
- > **SelectorType registration** uses the same `registry.add` mechanism — `registry.add('selectorType', 'MyKey', { cmp, dataType, adaptValue, initValue })` — wired to a CND property via a JSON fieldset override in `settings/content-editor-forms/fieldsets/`.
235
-
236
- ### Action registration
237
-
238
- ```javascript
239
- // src/javascript/MyAction/registerMyAction.js
240
- import React from 'react';
241
- import { registry } from '@jahia/ui-extender';
242
- import { Download } from '@jahia/moonstone';
243
- import { MyAction } from './MyAction';
244
-
245
- export const registerMyAction = () => {
246
- registry.addOrReplace('action', 'myActionName', {
247
- targets: ['contentActions:900'], // toolbar position (higher number = lower priority)
248
- buttonIcon: <Download />,
249
- buttonLabel: 'my-module:action.myAction.label',
250
- showOnNodeTypes: ['jnt:page'], // visibility filter
251
- component: MyAction,
252
- });
253
- };
254
- ```
255
-
256
- Common targets:
257
- - `contentActions:N` — jcontent content toolbar
258
- - `headerPrimaryActions:N` — jcontent header
259
- - `publishMenu:N` — publish menu
260
- - `contextualMenu:N` — right-click menu
261
-
262
- ### Action component pattern
263
-
264
- ```jsx
265
- // src/javascript/MyAction/MyAction.jsx
266
- import React from 'react';
267
- import { Language } from '@jahia/moonstone';
268
- import { useNodeChecks } from '@jahia/data-helper';
269
-
270
- export const MyAction = ({ path, render: Render, ...otherProps }) => {
271
- const { checksResult } = useNodeChecks({ path, Language }, {
272
- showOnNodeTypes: ['jnt:page'],
273
- hideOnNodeTypes: ['jmix:someExcludedMixin'],
274
- hideForPaths: ['^/sites/((?!/).)+/SomeFolder/?$'], // regex supported
275
- requiredPermission: ['myPermission'], // always an array
276
- requireModuleInstalledOnSite: ['my-module'],
277
- });
278
-
279
- if (Render && checksResult) {
280
- return <Render {...otherProps} onClick={handleClick} />;
281
- }
282
-
283
- return null;
284
- };
285
- ```
286
-
287
- `useNodeChecks` returns `checksResult: true` only when all declared conditions pass. When `false`, the action is hidden from the UI.
288
-
289
- > ⚠️ **Always include `requireModuleInstalledOnSite`** — without it, the action appears on every Jahia site regardless of whether the module is installed there. This is the primary guard that scopes a UI extension to sites where it is relevant.
290
-
291
- ### `useNodeChecks` — full options
292
-
293
- All options are optional. An action is visible only when all provided conditions pass.
294
-
295
- ```jsx
296
- const { checksResult } = useNodeChecks({ path, Language }, {
297
- showOnNodeTypes: ['jnt:page', 'jnt:file'],
298
- hideOnNodeTypes: ['jmix:externalLink'],
299
- requiredPermission: ['jcr:write'], // always use arrays
300
- requiredSitePermission: 'adminTemplates',
301
- requireModuleInstalledOnSite: ['my-module'], // always include — scopes to active sites
302
- showForPaths: ['/sites/mySite/home'],
303
- hideForPaths: ['^/sites/((?!/).)+/Drafts/?$'], // regex supported
304
- hideOnExternal: true,
305
- });
306
- ```
307
-
308
- ---
309
-
310
- ## Dialog pattern
311
-
312
- When an action opens a dialog, use a portal manager — the dialog must be rendered outside the jcontent component tree to avoid focus-trap and z-index issues.
313
-
314
- ```javascript
315
- // dialogManager.js
316
- import React from 'react';
317
- import ReactDOM from 'react-dom/client';
318
- import { ApolloProvider } from '@apollo/client';
319
- import { I18nextProvider } from 'react-i18next';
320
- import i18next from 'i18next';
321
- import { MyDialog } from './MyDialog';
322
-
323
- class DialogManager {
324
- _init() {
325
- if (!this.root) {
326
- const container = document.createElement('div');
327
- container.id = 'my-module-dialog-root';
328
- document.body.appendChild(container);
329
- this.root = ReactDOM.createRoot(container);
330
- }
331
- }
332
-
333
- open({ path, language, apolloClient }) {
334
- this._init();
335
- this.root.render(
336
- <ApolloProvider client={apolloClient}>
337
- <I18nextProvider i18n={i18next}>
338
- <MyDialog path={path} language={language} onClose={() => this.close()} />
339
- </I18nextProvider>
340
- </ApolloProvider>
341
- );
342
- }
343
-
344
- close() {
345
- this.root?.render(null);
346
- }
347
- }
348
-
349
- export default new DialogManager();
350
- ```
351
-
352
- > ⚠️ **Always use `<Dialog disableEnforceFocus>`** when rendering in a portal. Without it, MUI's FocusTrap fights with jcontent's own focus management and causes an infinite loop.
353
-
354
- ```jsx
355
- // MyDialog.jsx
356
- import { Dialog, DialogTitle, DialogContent, DialogActions, Button } from '@mui/material';
357
-
358
- export const MyDialog = ({ path, language, onClose }) => (
359
- <Dialog open fullWidth maxWidth="sm" disableEnforceFocus onClose={onClose}>
360
- <DialogTitle>...</DialogTitle>
361
- <DialogContent>...</DialogContent>
362
- <DialogActions>
363
- <Button onClick={onClose}>Cancel</Button>
364
- <Button variant="contained" onClick={handleAction}>Confirm</Button>
365
- </DialogActions>
366
- </Dialog>
367
- );
368
- ```
369
-
370
- ---
371
-
372
- ## Runtime APIs (window.jahia.*)
373
-
374
- These are injected by jcontent at runtime. Always check for existence before calling.
375
-
376
- ```javascript
377
- // Toast notification
378
- if (window.jahia?.toastDispatcher) {
379
- window.jahia.toastDispatcher.add({
380
- message: t('myMessage'),
381
- variant: 'success' // 'success' | 'error' | 'warning' | 'info'
382
- });
383
- }
384
-
385
- // JCR node/folder picker
386
- if (window.CE_API?.openPicker) {
387
- window.CE_API.openPicker({
388
- type: 'folder', // 'folder' | 'image' | 'file' | 'page' | 'content'
389
- isMultiple: false,
390
- site: window.contextJsParameters?.siteKey,
391
- lang: window.contextJsParameters?.uilang,
392
- initialSelectedItem: [],
393
- setValue: ([selected]) => {
394
- if (selected?.path) setPath(selected.path);
395
- }
396
- });
397
- }
398
-
399
- // Runtime context
400
- const { siteKey, uilang, currentUser } = window.contextJsParameters ?? {};
401
- ```
402
-
403
- ---
404
-
405
- ## i18n conventions
406
-
407
- Locale files live at `src/main/resources/javascript/locales/<lang>.json`. The top-level key is the module namespace. Always load the namespace before registering UI:
408
-
409
- ```json
410
- {
411
- "my-module": { "label": "My Module" },
412
- "action": { "myAction": { "label": "Do Something" } },
413
- "dialog": {
414
- "title": "...",
415
- "button": { "cancel": "Cancel", "confirm": "Confirm" }
416
- }
417
- }
418
- ```
419
-
420
- Use `useTranslation('my-module')` in components.
421
-
422
- ---
423
-
424
- ## Java Action pattern
425
-
426
- ```java
427
- @Component(service = Action.class)
428
- public class MyAction extends Action {
429
-
430
- @Override
431
- public String getName() {
432
- return "myActionName"; // matches CSRF whitelist key
433
- }
434
-
435
- @Override
436
- public ActionResult doExecute(
437
- HttpServletRequest request,
438
- RenderContext renderContext,
439
- Resource resource,
440
- JCRSessionWrapper session,
441
- Map<String, List<String>> parameters,
442
- URLResolver urlResolver) throws Exception {
443
-
444
- String param = readParameter(parameters, "paramName", null);
445
-
446
- // Return binary response
447
- HttpServletResponse response = renderContext.getResponse();
448
- response.setStatus(HttpServletResponse.SC_OK);
449
- response.setContentType("application/pdf");
450
- response.getOutputStream().write(bytes);
451
- return ActionResult.OK;
452
-
453
- // OR return JSON:
454
- // JSONObject result = new JSONObject();
455
- // result.put("key", "value");
456
- // return new ActionResult(HttpServletResponse.SC_OK, null, result);
457
- }
458
- }
459
- ```
460
-
461
- Action endpoint URL: `POST /cms/render/default/{language}{nodePath}.{actionName}.do`
462
-
463
- ### CSRF guard configuration
464
-
465
- ```properties
466
- # src/main/resources/META-INF/configurations/org.jahia.modules.jahiacsrfguard-<moduleName>.cfg
467
- whitelist = *.myActionName.do
468
- ```
469
-
470
- ---
471
-
472
- ## RenderContext setup
473
-
474
- When an Action needs to render a page to HTML, the `RenderContext` fields must be set in this exact order:
475
-
476
- ```java
477
- Resource htmlResource = new Resource(node, "html", null, Resource.CONFIGURATION_PAGE);
478
- RenderContext ctx = new RenderContext(request, response, renderContext.getUser());
479
- ctx.setSite(renderContext.getSite()); // 1. site first
480
- ctx.setWorkspace("live"); // 2. then workspace
481
- ctx.setServletPath("/live"); // 3. then servlet path (must match workspace)
482
- ctx.setMainResource(htmlResource); // 4. main resource last
483
- String html = renderService.render(htmlResource, ctx);
484
- ```
485
-
486
- > ⚠️ Order matters. Setting workspace before site or mainResource before workspace causes silent rendering errors.
487
-
488
- ---
489
-
490
- ## Embedding third-party libraries in the bundle
491
-
492
- When a library is not provided by Jahia at runtime:
493
-
494
- ```xml
495
- <dependency>
496
- <groupId>org.jsoup</groupId>
497
- <artifactId>jsoup</artifactId>
498
- <version>1.17.2</version>
499
- </dependency>
500
-
501
- <plugin>
502
- <groupId>org.apache.felix</groupId>
503
- <artifactId>maven-bundle-plugin</artifactId>
504
- <configuration>
505
- <instructions>
506
- <Embed-Dependency>jsoup;inline=false</Embed-Dependency>
507
- <DynamicImport-Package>*</DynamicImport-Package>
508
- </instructions>
509
- </configuration>
510
- </plugin>
511
- ```
512
-
513
- For libraries using the Java `ServiceLoader` SPI, instantiate their classes directly using the **bundle's own classloader** — not via global registries that become stale after bundle refresh.
514
-
515
- Switch the Thread Context ClassLoader (TCCL) for any library that uses `Thread.currentThread().getContextClassLoader()` internally:
516
-
517
- ```java
518
- ClassLoader original = Thread.currentThread().getContextClassLoader();
519
- Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
520
- try {
521
- // ... call to embedded library
522
- } finally {
523
- Thread.currentThread().setContextClassLoader(original);
524
- }
525
- ```
526
-
527
- ---
528
-
529
- ## Validation checklist
530
-
531
- ### JavaScript side
532
- - [ ] `package.json` lists React 18, not 19
533
- - [ ] `@jahia/webpack-config` used for Module Federation
534
- - [ ] Entry point registers at `jahiaApp-init:N` via `registry.add('callback', ...)`
535
- - [ ] i18n namespace loaded (awaited) before registering UI
536
- - [ ] Action component uses `useNodeChecks` for visibility
537
- - [ ] `requireModuleInstalledOnSite` included in all `useNodeChecks` calls
538
- - [ ] Dialog rendered via portal manager (outside jcontent tree)
539
- - [ ] `<Dialog disableEnforceFocus>` on all MUI dialogs in portals
540
- - [ ] `window.jahia.*` APIs guarded with optional chaining (`?.`)
541
- - [ ] Webpack output goes to `src/main/resources/javascript/apps/`
542
-
543
- ### Java side
544
- - [ ] Action class: `@Component(service = Action.class)`, `getName()` matches CSRF whitelist key
545
- - [ ] CSRF Guard config file present and correctly named
546
- - [ ] RenderContext set in order: site → workspace → servletPath → mainResource
547
- - [ ] All JCR access runs as the calling user (no system session escalation)
548
- - [ ] OSGi config `.cfg` file present for every configurable service
549
- - [ ] `Embed-Dependency` declared in BND config for every embedded lib
550
-
551
- ---
552
-
553
- ## References
554
-
555
- - jcontent UI extension API: https://academy.jahia.com/documentation/developer/jahia/8
556
- - @jahia/ui-extender: https://github.com/Jahia/ui-extender
557
- - @jahia/moonstone component library: https://moonstone.jahia.com
558
- - @jahia/data-helper: https://github.com/Jahia/data-helper
559
- - Module Federation docs: https://webpack.js.org/concepts/module-federation/