@jahia/agentic 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (307) hide show
  1. package/README.md +48 -0
  2. package/dist/claude/.claude/rules/jahia.md +76 -0
  3. package/dist/claude/.claude/skills/jahia/SKILL.md +136 -0
  4. package/dist/claude/.claude/skills/jahia-content/SKILL.md +139 -0
  5. package/dist/claude/.claude/skills/jahia-content-create-content/SKILL.md +384 -0
  6. package/dist/claude/.claude/skills/jahia-content-explore-structure/SKILL.md +164 -0
  7. package/dist/claude/.claude/skills/jahia-content-move-content/SKILL.md +236 -0
  8. package/dist/claude/.claude/skills/jahia-content-query-content/SKILL.md +144 -0
  9. package/dist/claude/.claude/skills/jahia-content-translate-content/SKILL.md +297 -0
  10. package/dist/claude/.claude/skills/jahia-dev/SKILL.md +124 -0
  11. package/dist/claude/.claude/skills/jahia-dev-accessibility/SKILL.md +271 -0
  12. package/dist/claude/.claude/skills/jahia-dev-apis/SKILL.md +52 -0
  13. package/dist/claude/.claude/skills/jahia-dev-apis/references/authentication.md +484 -0
  14. package/dist/claude/.claude/skills/jahia-dev-apis/references/graphql.md +657 -0
  15. package/dist/claude/.claude/skills/jahia-dev-apis/references/jcr-api.md +465 -0
  16. package/dist/claude/.claude/skills/jahia-dev-apis/references/security.md +541 -0
  17. package/dist/claude/.claude/skills/jahia-dev-build-component/SKILL.md +140 -0
  18. package/dist/claude/.claude/skills/jahia-dev-create-page-template/SKILL.md +303 -0
  19. package/dist/claude/.claude/skills/jahia-dev-create-template-set/SKILL.md +232 -0
  20. package/dist/claude/.claude/skills/jahia-dev-create-view/SKILL.md +838 -0
  21. package/dist/claude/.claude/skills/jahia-dev-cypress/SKILL.md +445 -0
  22. package/dist/claude/.claude/skills/jahia-dev-debug/SKILL.md +176 -0
  23. package/dist/claude/.claude/skills/jahia-dev-define-content-type/SKILL.md +536 -0
  24. package/dist/claude/.claude/skills/jahia-dev-import-from/SKILL.md +244 -0
  25. package/dist/claude/.claude/skills/jahia-dev-java/SKILL.md +105 -0
  26. package/dist/claude/.claude/skills/jahia-dev-java/references/backend.md +331 -0
  27. package/dist/claude/.claude/skills/jahia-dev-java/references/content-types.md +273 -0
  28. package/dist/claude/.claude/skills/jahia-dev-java/references/modules.md +218 -0
  29. package/dist/claude/.claude/skills/jahia-dev-java/references/osgi.md +208 -0
  30. package/dist/claude/.claude/skills/jahia-dev-java/references/rendering.md +191 -0
  31. package/dist/claude/.claude/skills/jahia-dev-java/references/ui-extensions.md +344 -0
  32. package/dist/claude/.claude/skills/jahia-dev-jexperience/SKILL.md +269 -0
  33. package/dist/claude/.claude/skills/jahia-dev-ops/SKILL.md +50 -0
  34. package/dist/claude/.claude/skills/jahia-dev-ops/references/docker.md +151 -0
  35. package/dist/claude/.claude/skills/jahia-dev-ops/references/monitoring.md +195 -0
  36. package/dist/claude/.claude/skills/jahia-dev-ops/references/provisioning.md +269 -0
  37. package/dist/claude/.claude/skills/jahia-dev-osgi-module/SKILL.md +297 -0
  38. package/dist/claude/.claude/skills/jahia-dev-properties/SKILL.md +147 -0
  39. package/dist/claude/.claude/skills/jahia-dev-properties/references/all-properties.md +231 -0
  40. package/dist/claude/.claude/skills/jahia-dev-query-content/SKILL.md +407 -0
  41. package/dist/claude/.claude/skills/jahia-dev-review/SKILL.md +228 -0
  42. package/dist/claude/.claude/skills/jahia-dev-screenshot/SKILL.md +177 -0
  43. package/dist/claude/.claude/skills/jahia-dev-start-local/SKILL.md +129 -0
  44. package/dist/claude/.claude/skills/jahia-dev-ui-extension/SKILL.md +559 -0
  45. package/dist/claude/CLAUDE.md +90 -0
  46. package/dist/codex/.agents/skills/jahia/SKILL.md +136 -0
  47. package/dist/codex/.agents/skills/jahia-content/SKILL.md +139 -0
  48. package/dist/codex/.agents/skills/jahia-content-create-content/SKILL.md +384 -0
  49. package/dist/codex/.agents/skills/jahia-content-explore-structure/SKILL.md +164 -0
  50. package/dist/codex/.agents/skills/jahia-content-move-content/SKILL.md +236 -0
  51. package/dist/codex/.agents/skills/jahia-content-query-content/SKILL.md +144 -0
  52. package/dist/codex/.agents/skills/jahia-content-translate-content/SKILL.md +297 -0
  53. package/dist/codex/.agents/skills/jahia-dev/SKILL.md +124 -0
  54. package/dist/codex/.agents/skills/jahia-dev-accessibility/SKILL.md +271 -0
  55. package/dist/codex/.agents/skills/jahia-dev-apis/SKILL.md +52 -0
  56. package/dist/codex/.agents/skills/jahia-dev-apis/references/authentication.md +484 -0
  57. package/dist/codex/.agents/skills/jahia-dev-apis/references/graphql.md +657 -0
  58. package/dist/codex/.agents/skills/jahia-dev-apis/references/jcr-api.md +465 -0
  59. package/dist/codex/.agents/skills/jahia-dev-apis/references/security.md +541 -0
  60. package/dist/codex/.agents/skills/jahia-dev-build-component/SKILL.md +140 -0
  61. package/dist/codex/.agents/skills/jahia-dev-create-page-template/SKILL.md +303 -0
  62. package/dist/codex/.agents/skills/jahia-dev-create-template-set/SKILL.md +232 -0
  63. package/dist/codex/.agents/skills/jahia-dev-create-view/SKILL.md +838 -0
  64. package/dist/codex/.agents/skills/jahia-dev-cypress/SKILL.md +445 -0
  65. package/dist/codex/.agents/skills/jahia-dev-debug/SKILL.md +176 -0
  66. package/dist/codex/.agents/skills/jahia-dev-define-content-type/SKILL.md +536 -0
  67. package/dist/codex/.agents/skills/jahia-dev-import-from/SKILL.md +244 -0
  68. package/dist/codex/.agents/skills/jahia-dev-java/SKILL.md +105 -0
  69. package/dist/codex/.agents/skills/jahia-dev-java/references/backend.md +331 -0
  70. package/dist/codex/.agents/skills/jahia-dev-java/references/content-types.md +273 -0
  71. package/dist/codex/.agents/skills/jahia-dev-java/references/modules.md +218 -0
  72. package/dist/codex/.agents/skills/jahia-dev-java/references/osgi.md +208 -0
  73. package/dist/codex/.agents/skills/jahia-dev-java/references/rendering.md +191 -0
  74. package/dist/codex/.agents/skills/jahia-dev-java/references/ui-extensions.md +344 -0
  75. package/dist/codex/.agents/skills/jahia-dev-jexperience/SKILL.md +269 -0
  76. package/dist/codex/.agents/skills/jahia-dev-ops/SKILL.md +50 -0
  77. package/dist/codex/.agents/skills/jahia-dev-ops/references/docker.md +151 -0
  78. package/dist/codex/.agents/skills/jahia-dev-ops/references/monitoring.md +195 -0
  79. package/dist/codex/.agents/skills/jahia-dev-ops/references/provisioning.md +269 -0
  80. package/dist/codex/.agents/skills/jahia-dev-osgi-module/SKILL.md +297 -0
  81. package/dist/codex/.agents/skills/jahia-dev-properties/SKILL.md +147 -0
  82. package/dist/codex/.agents/skills/jahia-dev-properties/references/all-properties.md +231 -0
  83. package/dist/codex/.agents/skills/jahia-dev-query-content/SKILL.md +407 -0
  84. package/dist/codex/.agents/skills/jahia-dev-review/SKILL.md +228 -0
  85. package/dist/codex/.agents/skills/jahia-dev-screenshot/SKILL.md +177 -0
  86. package/dist/codex/.agents/skills/jahia-dev-start-local/SKILL.md +129 -0
  87. package/dist/codex/.agents/skills/jahia-dev-ui-extension/SKILL.md +559 -0
  88. package/dist/codex/AGENTS.md +89 -0
  89. package/dist/copilot/.agents/skills/jahia/SKILL.md +136 -0
  90. package/dist/copilot/.agents/skills/jahia-content/SKILL.md +139 -0
  91. package/dist/copilot/.agents/skills/jahia-content-create-content/SKILL.md +384 -0
  92. package/dist/copilot/.agents/skills/jahia-content-explore-structure/SKILL.md +164 -0
  93. package/dist/copilot/.agents/skills/jahia-content-move-content/SKILL.md +236 -0
  94. package/dist/copilot/.agents/skills/jahia-content-query-content/SKILL.md +144 -0
  95. package/dist/copilot/.agents/skills/jahia-content-translate-content/SKILL.md +297 -0
  96. package/dist/copilot/.agents/skills/jahia-dev/SKILL.md +124 -0
  97. package/dist/copilot/.agents/skills/jahia-dev-accessibility/SKILL.md +271 -0
  98. package/dist/copilot/.agents/skills/jahia-dev-apis/SKILL.md +52 -0
  99. package/dist/copilot/.agents/skills/jahia-dev-apis/references/authentication.md +484 -0
  100. package/dist/copilot/.agents/skills/jahia-dev-apis/references/graphql.md +657 -0
  101. package/dist/copilot/.agents/skills/jahia-dev-apis/references/jcr-api.md +465 -0
  102. package/dist/copilot/.agents/skills/jahia-dev-apis/references/security.md +541 -0
  103. package/dist/copilot/.agents/skills/jahia-dev-build-component/SKILL.md +140 -0
  104. package/dist/copilot/.agents/skills/jahia-dev-create-page-template/SKILL.md +303 -0
  105. package/dist/copilot/.agents/skills/jahia-dev-create-template-set/SKILL.md +232 -0
  106. package/dist/copilot/.agents/skills/jahia-dev-create-view/SKILL.md +838 -0
  107. package/dist/copilot/.agents/skills/jahia-dev-cypress/SKILL.md +445 -0
  108. package/dist/copilot/.agents/skills/jahia-dev-debug/SKILL.md +176 -0
  109. package/dist/copilot/.agents/skills/jahia-dev-define-content-type/SKILL.md +536 -0
  110. package/dist/copilot/.agents/skills/jahia-dev-import-from/SKILL.md +244 -0
  111. package/dist/copilot/.agents/skills/jahia-dev-java/SKILL.md +105 -0
  112. package/dist/copilot/.agents/skills/jahia-dev-java/references/backend.md +331 -0
  113. package/dist/copilot/.agents/skills/jahia-dev-java/references/content-types.md +273 -0
  114. package/dist/copilot/.agents/skills/jahia-dev-java/references/modules.md +218 -0
  115. package/dist/copilot/.agents/skills/jahia-dev-java/references/osgi.md +208 -0
  116. package/dist/copilot/.agents/skills/jahia-dev-java/references/rendering.md +191 -0
  117. package/dist/copilot/.agents/skills/jahia-dev-java/references/ui-extensions.md +344 -0
  118. package/dist/copilot/.agents/skills/jahia-dev-jexperience/SKILL.md +269 -0
  119. package/dist/copilot/.agents/skills/jahia-dev-ops/SKILL.md +50 -0
  120. package/dist/copilot/.agents/skills/jahia-dev-ops/references/docker.md +151 -0
  121. package/dist/copilot/.agents/skills/jahia-dev-ops/references/monitoring.md +195 -0
  122. package/dist/copilot/.agents/skills/jahia-dev-ops/references/provisioning.md +269 -0
  123. package/dist/copilot/.agents/skills/jahia-dev-osgi-module/SKILL.md +297 -0
  124. package/dist/copilot/.agents/skills/jahia-dev-properties/SKILL.md +147 -0
  125. package/dist/copilot/.agents/skills/jahia-dev-properties/references/all-properties.md +231 -0
  126. package/dist/copilot/.agents/skills/jahia-dev-query-content/SKILL.md +407 -0
  127. package/dist/copilot/.agents/skills/jahia-dev-review/SKILL.md +228 -0
  128. package/dist/copilot/.agents/skills/jahia-dev-screenshot/SKILL.md +177 -0
  129. package/dist/copilot/.agents/skills/jahia-dev-start-local/SKILL.md +129 -0
  130. package/dist/copilot/.agents/skills/jahia-dev-ui-extension/SKILL.md +559 -0
  131. package/dist/copilot/AGENTS.md +89 -0
  132. package/dist/cursor/.agents/skills/jahia/SKILL.md +136 -0
  133. package/dist/cursor/.agents/skills/jahia-content/SKILL.md +139 -0
  134. package/dist/cursor/.agents/skills/jahia-content-create-content/SKILL.md +384 -0
  135. package/dist/cursor/.agents/skills/jahia-content-explore-structure/SKILL.md +164 -0
  136. package/dist/cursor/.agents/skills/jahia-content-move-content/SKILL.md +236 -0
  137. package/dist/cursor/.agents/skills/jahia-content-query-content/SKILL.md +144 -0
  138. package/dist/cursor/.agents/skills/jahia-content-translate-content/SKILL.md +297 -0
  139. package/dist/cursor/.agents/skills/jahia-dev/SKILL.md +124 -0
  140. package/dist/cursor/.agents/skills/jahia-dev-accessibility/SKILL.md +271 -0
  141. package/dist/cursor/.agents/skills/jahia-dev-apis/SKILL.md +52 -0
  142. package/dist/cursor/.agents/skills/jahia-dev-apis/references/authentication.md +484 -0
  143. package/dist/cursor/.agents/skills/jahia-dev-apis/references/graphql.md +657 -0
  144. package/dist/cursor/.agents/skills/jahia-dev-apis/references/jcr-api.md +465 -0
  145. package/dist/cursor/.agents/skills/jahia-dev-apis/references/security.md +541 -0
  146. package/dist/cursor/.agents/skills/jahia-dev-build-component/SKILL.md +140 -0
  147. package/dist/cursor/.agents/skills/jahia-dev-create-page-template/SKILL.md +303 -0
  148. package/dist/cursor/.agents/skills/jahia-dev-create-template-set/SKILL.md +232 -0
  149. package/dist/cursor/.agents/skills/jahia-dev-create-view/SKILL.md +838 -0
  150. package/dist/cursor/.agents/skills/jahia-dev-cypress/SKILL.md +445 -0
  151. package/dist/cursor/.agents/skills/jahia-dev-debug/SKILL.md +176 -0
  152. package/dist/cursor/.agents/skills/jahia-dev-define-content-type/SKILL.md +536 -0
  153. package/dist/cursor/.agents/skills/jahia-dev-import-from/SKILL.md +244 -0
  154. package/dist/cursor/.agents/skills/jahia-dev-java/SKILL.md +105 -0
  155. package/dist/cursor/.agents/skills/jahia-dev-java/references/backend.md +331 -0
  156. package/dist/cursor/.agents/skills/jahia-dev-java/references/content-types.md +273 -0
  157. package/dist/cursor/.agents/skills/jahia-dev-java/references/modules.md +218 -0
  158. package/dist/cursor/.agents/skills/jahia-dev-java/references/osgi.md +208 -0
  159. package/dist/cursor/.agents/skills/jahia-dev-java/references/rendering.md +191 -0
  160. package/dist/cursor/.agents/skills/jahia-dev-java/references/ui-extensions.md +344 -0
  161. package/dist/cursor/.agents/skills/jahia-dev-jexperience/SKILL.md +269 -0
  162. package/dist/cursor/.agents/skills/jahia-dev-ops/SKILL.md +50 -0
  163. package/dist/cursor/.agents/skills/jahia-dev-ops/references/docker.md +151 -0
  164. package/dist/cursor/.agents/skills/jahia-dev-ops/references/monitoring.md +195 -0
  165. package/dist/cursor/.agents/skills/jahia-dev-ops/references/provisioning.md +269 -0
  166. package/dist/cursor/.agents/skills/jahia-dev-osgi-module/SKILL.md +297 -0
  167. package/dist/cursor/.agents/skills/jahia-dev-properties/SKILL.md +147 -0
  168. package/dist/cursor/.agents/skills/jahia-dev-properties/references/all-properties.md +231 -0
  169. package/dist/cursor/.agents/skills/jahia-dev-query-content/SKILL.md +407 -0
  170. package/dist/cursor/.agents/skills/jahia-dev-review/SKILL.md +228 -0
  171. package/dist/cursor/.agents/skills/jahia-dev-screenshot/SKILL.md +177 -0
  172. package/dist/cursor/.agents/skills/jahia-dev-start-local/SKILL.md +129 -0
  173. package/dist/cursor/.agents/skills/jahia-dev-ui-extension/SKILL.md +559 -0
  174. package/dist/cursor/.cursor/rules/jahia.mdc +80 -0
  175. package/dist/gemini/.agents/skills/jahia/SKILL.md +136 -0
  176. package/dist/gemini/.agents/skills/jahia-content/SKILL.md +139 -0
  177. package/dist/gemini/.agents/skills/jahia-content-create-content/SKILL.md +384 -0
  178. package/dist/gemini/.agents/skills/jahia-content-explore-structure/SKILL.md +164 -0
  179. package/dist/gemini/.agents/skills/jahia-content-move-content/SKILL.md +236 -0
  180. package/dist/gemini/.agents/skills/jahia-content-query-content/SKILL.md +144 -0
  181. package/dist/gemini/.agents/skills/jahia-content-translate-content/SKILL.md +297 -0
  182. package/dist/gemini/.agents/skills/jahia-dev/SKILL.md +124 -0
  183. package/dist/gemini/.agents/skills/jahia-dev-accessibility/SKILL.md +271 -0
  184. package/dist/gemini/.agents/skills/jahia-dev-apis/SKILL.md +52 -0
  185. package/dist/gemini/.agents/skills/jahia-dev-apis/references/authentication.md +484 -0
  186. package/dist/gemini/.agents/skills/jahia-dev-apis/references/graphql.md +657 -0
  187. package/dist/gemini/.agents/skills/jahia-dev-apis/references/jcr-api.md +465 -0
  188. package/dist/gemini/.agents/skills/jahia-dev-apis/references/security.md +541 -0
  189. package/dist/gemini/.agents/skills/jahia-dev-build-component/SKILL.md +140 -0
  190. package/dist/gemini/.agents/skills/jahia-dev-create-page-template/SKILL.md +303 -0
  191. package/dist/gemini/.agents/skills/jahia-dev-create-template-set/SKILL.md +232 -0
  192. package/dist/gemini/.agents/skills/jahia-dev-create-view/SKILL.md +838 -0
  193. package/dist/gemini/.agents/skills/jahia-dev-cypress/SKILL.md +445 -0
  194. package/dist/gemini/.agents/skills/jahia-dev-debug/SKILL.md +176 -0
  195. package/dist/gemini/.agents/skills/jahia-dev-define-content-type/SKILL.md +536 -0
  196. package/dist/gemini/.agents/skills/jahia-dev-import-from/SKILL.md +244 -0
  197. package/dist/gemini/.agents/skills/jahia-dev-java/SKILL.md +105 -0
  198. package/dist/gemini/.agents/skills/jahia-dev-java/references/backend.md +331 -0
  199. package/dist/gemini/.agents/skills/jahia-dev-java/references/content-types.md +273 -0
  200. package/dist/gemini/.agents/skills/jahia-dev-java/references/modules.md +218 -0
  201. package/dist/gemini/.agents/skills/jahia-dev-java/references/osgi.md +208 -0
  202. package/dist/gemini/.agents/skills/jahia-dev-java/references/rendering.md +191 -0
  203. package/dist/gemini/.agents/skills/jahia-dev-java/references/ui-extensions.md +344 -0
  204. package/dist/gemini/.agents/skills/jahia-dev-jexperience/SKILL.md +269 -0
  205. package/dist/gemini/.agents/skills/jahia-dev-ops/SKILL.md +50 -0
  206. package/dist/gemini/.agents/skills/jahia-dev-ops/references/docker.md +151 -0
  207. package/dist/gemini/.agents/skills/jahia-dev-ops/references/monitoring.md +195 -0
  208. package/dist/gemini/.agents/skills/jahia-dev-ops/references/provisioning.md +269 -0
  209. package/dist/gemini/.agents/skills/jahia-dev-osgi-module/SKILL.md +297 -0
  210. package/dist/gemini/.agents/skills/jahia-dev-properties/SKILL.md +147 -0
  211. package/dist/gemini/.agents/skills/jahia-dev-properties/references/all-properties.md +231 -0
  212. package/dist/gemini/.agents/skills/jahia-dev-query-content/SKILL.md +407 -0
  213. package/dist/gemini/.agents/skills/jahia-dev-review/SKILL.md +228 -0
  214. package/dist/gemini/.agents/skills/jahia-dev-screenshot/SKILL.md +177 -0
  215. package/dist/gemini/.agents/skills/jahia-dev-start-local/SKILL.md +129 -0
  216. package/dist/gemini/.agents/skills/jahia-dev-ui-extension/SKILL.md +559 -0
  217. package/dist/gemini/AGENTS.md +89 -0
  218. package/dist/gemini/GEMINI.md +6 -0
  219. package/dist/index.js +975 -0
  220. package/dist/opencode/.agents/skills/jahia/SKILL.md +136 -0
  221. package/dist/opencode/.agents/skills/jahia-content/SKILL.md +139 -0
  222. package/dist/opencode/.agents/skills/jahia-content-create-content/SKILL.md +384 -0
  223. package/dist/opencode/.agents/skills/jahia-content-explore-structure/SKILL.md +164 -0
  224. package/dist/opencode/.agents/skills/jahia-content-move-content/SKILL.md +236 -0
  225. package/dist/opencode/.agents/skills/jahia-content-query-content/SKILL.md +144 -0
  226. package/dist/opencode/.agents/skills/jahia-content-translate-content/SKILL.md +297 -0
  227. package/dist/opencode/.agents/skills/jahia-dev/SKILL.md +124 -0
  228. package/dist/opencode/.agents/skills/jahia-dev-accessibility/SKILL.md +271 -0
  229. package/dist/opencode/.agents/skills/jahia-dev-apis/SKILL.md +52 -0
  230. package/dist/opencode/.agents/skills/jahia-dev-apis/references/authentication.md +484 -0
  231. package/dist/opencode/.agents/skills/jahia-dev-apis/references/graphql.md +657 -0
  232. package/dist/opencode/.agents/skills/jahia-dev-apis/references/jcr-api.md +465 -0
  233. package/dist/opencode/.agents/skills/jahia-dev-apis/references/security.md +541 -0
  234. package/dist/opencode/.agents/skills/jahia-dev-build-component/SKILL.md +140 -0
  235. package/dist/opencode/.agents/skills/jahia-dev-create-page-template/SKILL.md +303 -0
  236. package/dist/opencode/.agents/skills/jahia-dev-create-template-set/SKILL.md +232 -0
  237. package/dist/opencode/.agents/skills/jahia-dev-create-view/SKILL.md +838 -0
  238. package/dist/opencode/.agents/skills/jahia-dev-cypress/SKILL.md +445 -0
  239. package/dist/opencode/.agents/skills/jahia-dev-debug/SKILL.md +176 -0
  240. package/dist/opencode/.agents/skills/jahia-dev-define-content-type/SKILL.md +536 -0
  241. package/dist/opencode/.agents/skills/jahia-dev-import-from/SKILL.md +244 -0
  242. package/dist/opencode/.agents/skills/jahia-dev-java/SKILL.md +105 -0
  243. package/dist/opencode/.agents/skills/jahia-dev-java/references/backend.md +331 -0
  244. package/dist/opencode/.agents/skills/jahia-dev-java/references/content-types.md +273 -0
  245. package/dist/opencode/.agents/skills/jahia-dev-java/references/modules.md +218 -0
  246. package/dist/opencode/.agents/skills/jahia-dev-java/references/osgi.md +208 -0
  247. package/dist/opencode/.agents/skills/jahia-dev-java/references/rendering.md +191 -0
  248. package/dist/opencode/.agents/skills/jahia-dev-java/references/ui-extensions.md +344 -0
  249. package/dist/opencode/.agents/skills/jahia-dev-jexperience/SKILL.md +269 -0
  250. package/dist/opencode/.agents/skills/jahia-dev-ops/SKILL.md +50 -0
  251. package/dist/opencode/.agents/skills/jahia-dev-ops/references/docker.md +151 -0
  252. package/dist/opencode/.agents/skills/jahia-dev-ops/references/monitoring.md +195 -0
  253. package/dist/opencode/.agents/skills/jahia-dev-ops/references/provisioning.md +269 -0
  254. package/dist/opencode/.agents/skills/jahia-dev-osgi-module/SKILL.md +297 -0
  255. package/dist/opencode/.agents/skills/jahia-dev-properties/SKILL.md +147 -0
  256. package/dist/opencode/.agents/skills/jahia-dev-properties/references/all-properties.md +231 -0
  257. package/dist/opencode/.agents/skills/jahia-dev-query-content/SKILL.md +407 -0
  258. package/dist/opencode/.agents/skills/jahia-dev-review/SKILL.md +228 -0
  259. package/dist/opencode/.agents/skills/jahia-dev-screenshot/SKILL.md +177 -0
  260. package/dist/opencode/.agents/skills/jahia-dev-start-local/SKILL.md +129 -0
  261. package/dist/opencode/.agents/skills/jahia-dev-ui-extension/SKILL.md +559 -0
  262. package/dist/opencode/AGENTS.md +89 -0
  263. package/dist/windsurf/.windsurf/rules/jahia.md +80 -0
  264. package/dist/windsurf/.windsurf/skills/jahia/SKILL.md +136 -0
  265. package/dist/windsurf/.windsurf/skills/jahia-content/SKILL.md +139 -0
  266. package/dist/windsurf/.windsurf/skills/jahia-content-create-content/SKILL.md +384 -0
  267. package/dist/windsurf/.windsurf/skills/jahia-content-explore-structure/SKILL.md +164 -0
  268. package/dist/windsurf/.windsurf/skills/jahia-content-move-content/SKILL.md +236 -0
  269. package/dist/windsurf/.windsurf/skills/jahia-content-query-content/SKILL.md +144 -0
  270. package/dist/windsurf/.windsurf/skills/jahia-content-translate-content/SKILL.md +297 -0
  271. package/dist/windsurf/.windsurf/skills/jahia-dev/SKILL.md +124 -0
  272. package/dist/windsurf/.windsurf/skills/jahia-dev-accessibility/SKILL.md +271 -0
  273. package/dist/windsurf/.windsurf/skills/jahia-dev-apis/SKILL.md +52 -0
  274. package/dist/windsurf/.windsurf/skills/jahia-dev-apis/references/authentication.md +484 -0
  275. package/dist/windsurf/.windsurf/skills/jahia-dev-apis/references/graphql.md +657 -0
  276. package/dist/windsurf/.windsurf/skills/jahia-dev-apis/references/jcr-api.md +465 -0
  277. package/dist/windsurf/.windsurf/skills/jahia-dev-apis/references/security.md +541 -0
  278. package/dist/windsurf/.windsurf/skills/jahia-dev-build-component/SKILL.md +140 -0
  279. package/dist/windsurf/.windsurf/skills/jahia-dev-create-page-template/SKILL.md +303 -0
  280. package/dist/windsurf/.windsurf/skills/jahia-dev-create-template-set/SKILL.md +232 -0
  281. package/dist/windsurf/.windsurf/skills/jahia-dev-create-view/SKILL.md +838 -0
  282. package/dist/windsurf/.windsurf/skills/jahia-dev-cypress/SKILL.md +445 -0
  283. package/dist/windsurf/.windsurf/skills/jahia-dev-debug/SKILL.md +176 -0
  284. package/dist/windsurf/.windsurf/skills/jahia-dev-define-content-type/SKILL.md +536 -0
  285. package/dist/windsurf/.windsurf/skills/jahia-dev-import-from/SKILL.md +244 -0
  286. package/dist/windsurf/.windsurf/skills/jahia-dev-java/SKILL.md +105 -0
  287. package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/backend.md +331 -0
  288. package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/content-types.md +273 -0
  289. package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/modules.md +218 -0
  290. package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/osgi.md +208 -0
  291. package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/rendering.md +191 -0
  292. package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/ui-extensions.md +344 -0
  293. package/dist/windsurf/.windsurf/skills/jahia-dev-jexperience/SKILL.md +269 -0
  294. package/dist/windsurf/.windsurf/skills/jahia-dev-ops/SKILL.md +50 -0
  295. package/dist/windsurf/.windsurf/skills/jahia-dev-ops/references/docker.md +151 -0
  296. package/dist/windsurf/.windsurf/skills/jahia-dev-ops/references/monitoring.md +195 -0
  297. package/dist/windsurf/.windsurf/skills/jahia-dev-ops/references/provisioning.md +269 -0
  298. package/dist/windsurf/.windsurf/skills/jahia-dev-osgi-module/SKILL.md +297 -0
  299. package/dist/windsurf/.windsurf/skills/jahia-dev-properties/SKILL.md +147 -0
  300. package/dist/windsurf/.windsurf/skills/jahia-dev-properties/references/all-properties.md +231 -0
  301. package/dist/windsurf/.windsurf/skills/jahia-dev-query-content/SKILL.md +407 -0
  302. package/dist/windsurf/.windsurf/skills/jahia-dev-review/SKILL.md +228 -0
  303. package/dist/windsurf/.windsurf/skills/jahia-dev-screenshot/SKILL.md +177 -0
  304. package/dist/windsurf/.windsurf/skills/jahia-dev-start-local/SKILL.md +129 -0
  305. package/dist/windsurf/.windsurf/skills/jahia-dev-ui-extension/SKILL.md +559 -0
  306. package/dist/windsurf/AGENTS.md +89 -0
  307. package/package.json +28 -0
@@ -0,0 +1,559 @@
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/
@@ -0,0 +1,80 @@
1
+ ---
2
+ description: Instructions for AI agents helping develop Jahia JavaScript modules — React-based template sets for Jahia 8+.
3
+ ---
4
+
5
+ # Jahia JavaScript Module Development
6
+
7
+ ## Context
8
+
9
+ You are helping develop a **Jahia JavaScript Module** — a React-based template set for Jahia 8+. The module renders content from Jahia's JCR (Java Content Repository) using server-side React components (`.server.tsx`) and optional client-side islands (`.client.tsx`). Content is modelled in CND files, managed via Page Builder or jContent, and queried with JCR-SQL2 or GraphQL.
10
+
11
+ ## Agent Principles
12
+
13
+ 1. **Always invoke a skill before any Jahia task** — skills are the canonical source of patterns, gotchas, and API syntax. Never operate from memory alone.
14
+ 2. **Never use `yarn dev` from an agent** — it is an interactive file watcher for human developers only. Always deploy with `yarn build && yarn jahia-deploy` (one-shot, non-interactive).
15
+ 3. **Never hardcode URLs** — all navigable links must come from contributed content (JCR nodes, `j:linkType`, `buildNodeUrl`). This is a CMS: content owns the URLs.
16
+ 4. **Never use `j:linkType: "external"` for internal pages** — use `"internal"` + `j:linknode`. External URLs break on environment changes, language switches, and vanity URL rewrites.
17
+ 5. **Always verify before creating** — check that content types are deployed, site keys are correct, and area structures exist before attempting GraphQL mutations.
18
+ 6. **All props are optional at runtime** — even mandatory CND fields. Always guard against `undefined` in views.
19
+ 7. **Always include `-H "Origin: http://localhost:8080"` in every GraphQL curl** — omitting it returns `Permission denied` even with correct credentials.
20
+ 8. **Accessibility is mandatory** — every component must pass WCAG 2.1 AA. After building any component or completing a task, invoke `/jahia-dev-accessibility` to run an axe-core audit and fix all `critical` and `serious` violations before declaring work done.
21
+
22
+ ## Skill Map
23
+
24
+ Start with `/jahia` if unsure where to begin.
25
+
26
+ ### Development
27
+
28
+ | Skill | Purpose |
29
+ |-------|---------|
30
+ | `/jahia-dev` | Entry point — detect project state, guide to next step |
31
+ | `/jahia-dev-create-template-set` | Scaffold a new Jahia JS module |
32
+ | `/jahia-dev-start-local` | Start Jahia locally (Docker or bare metal) |
33
+ | `/jahia-dev-build-component` | Build a complete component (CND + view) — start here |
34
+ | `/jahia-dev-define-content-type` | Define a CND content type + types.ts |
35
+ | `/jahia-dev-create-view` | Implement a React view (.server.tsx + CSS Module) |
36
+ | `/jahia-dev-create-page-template` | Create a page template with Areas |
37
+ | `/jahia-dev-query-content` | Write JCR-SQL2 queries and useJCRQuery |
38
+ | `/jahia-dev-review` | Code review: 8 critical checks, 9 warnings, 11 suggestions |
39
+ | `/jahia-dev-accessibility` | Audit live pages with axe-core, fix WCAG 2.1 AA violations |
40
+ | `/jahia-dev-screenshot` | Screenshot reference + local render for visual comparison |
41
+ | `/jahia-dev-debug` | Debug build/deploy/runtime errors end-to-end |
42
+
43
+ ### Content Management
44
+
45
+ | Skill | Purpose |
46
+ |-------|---------|
47
+ | `/jahia-content` | Entry point — detect site state, route to content operations |
48
+ | `/jahia-content-explore-structure` | Map content types, properties, enums on an unknown site |
49
+ | `/jahia-content-query-content` | List and inspect content via GraphQL |
50
+ | `/jahia-content-create-content` | Create nodes, folders, articles, bulk-populate |
51
+ | `/jahia-content-move-content` | Restructure the content tree |
52
+ | `/jahia-content-translate-content` | Translate existing nodes to a new language and publish |
53
+
54
+ ## Canonical References
55
+
56
+ Always fetch these when uncertain about version-sensitive topics:
57
+
58
+ | Topic | URL |
59
+ |-------|-----|
60
+ | Getting started / dev environment | https://academy.jahia.com/tutorials-get-started/front-end-developer/setting-up-your-dev-environment |
61
+ | Hero section tutorial | https://academy.jahia.com/tutorials-get-started/front-end-developer/making-a-hero-section |
62
+ | Blog / content listing | https://academy.jahia.com/tutorials-get-started/front-end-developer/making-a-blog |
63
+ | Page templates | https://academy.jahia.com/tutorials-get-started/front-end-developer/the-about-us-page |
64
+ | i18n (CND attribute, useTranslation, language switcher) | https://academy.jahia.com/documentation/jahia-cms/jahia-8-2/developer/javascript-module-development/preparing-for-internationalization-i18n |
65
+ | GraphQL API | https://academy.jahia.com/documentation/developer/jahia/8/api-documentation/graphql-api |
66
+ | Native Jahia mixins & node types | https://github.com/Jahia/jahia/tree/master/war/src/main/webapp/WEB-INF/etc/repository/nodetypes |
67
+ | JavaScript modules monorepo | https://github.com/Jahia/javascript-modules |
68
+ | Developer training | https://github.com/Jahia/developer-training/blob/main/js-training/slides.md |
69
+ | Integration best practices | https://github.com/Jahia/gautier-braindump/blob/main/articles/integration-best-practices/README.md |
70
+
71
+ ## Local Development URLs
72
+
73
+ When Jahia is running at `http://localhost:8080` (default credentials: `root` / `root1234`):
74
+
75
+ - **Login**: http://localhost:8080/cms/login
76
+ - **Page Builder**: http://localhost:8080/jahia/page-builder
77
+ - **jContent**: http://localhost:8080/jahia/jcontent
78
+ - **GraphQL playground**: http://localhost:8080/modules/graphql
79
+ - **JCR browser**: http://localhost:8080/modules/tools/jcrBrowser.jsp
80
+ - **Definitions browser**: http://localhost:8080/modules/tools/definitionsBrowser.jsp